diff --git a/benchmark/draw.ipynb b/benchmark/draw.ipynb index 5bf7356..6dc43d3 100644 --- a/benchmark/draw.ipynb +++ b/benchmark/draw.ipynb @@ -341,9 +341,9 @@ "data_directory = Path(working_directory / Path(\"data\"))\n", "data_directory.mkdir(exist_ok=True)\n", "downloader(\n", - " url=\"doi:10.5281/zenodo.10344773/chess.csv\", \n", + " url=\"doi:10.5281/zenodo.10344773/chess.csv\",\n", " output_file=data_directory / \"chess.csv\",\n", - " pooch=None\n", + " pooch=None,\n", ")" ] }, @@ -374,6 +374,7 @@ " BLACK_WINS = 2\n", " STALEMATE = 3\n", "\n", + "\n", "@dataclass(slots=True)\n", "class Player:\n", " name: str\n", @@ -452,8 +453,8 @@ " options=[m.__name__ for m in models],\n", " value=PlackettLuce.__name__,\n", " # rows=10,\n", - " description='Model:',\n", - " disabled=False\n", + " description=\"Model:\",\n", + " disabled=False,\n", ")\n", "display(widget)" ] @@ -693,31 +694,19 @@ "\n", "for match_index, row in train.iterrows():\n", " white_player = Player(name=row[\"white_username\"])\n", - " black_player = Player(name=row[\"black_username\"]) \n", - " players = {\n", - " row[\"white_username\"]: white_player,\n", - " row[\"black_username\"]: black_player\n", - " }\n", - " \n", + " black_player = Player(name=row[\"black_username\"])\n", + " players = {row[\"white_username\"]: white_player, row[\"black_username\"]: black_player}\n", + "\n", " white_result = row[\"white_result\"]\n", " black_result = row[\"black_result\"]\n", - " \n", + "\n", " if white_result == \"win\":\n", - " match = Match(\n", - " result=Result.WHITE_WINS,\n", - " players=players\n", - " )\n", + " match = Match(result=Result.WHITE_WINS, players=players)\n", " elif black_result == \"win\":\n", - " match = Match(\n", - " result=Result.BLACK_WINS,\n", - " players=players\n", - " )\n", + " match = Match(result=Result.BLACK_WINS, players=players)\n", " else:\n", - " match = Match(\n", - " result=Result.STALEMATE,\n", - " players=players\n", - " )\n", - " \n", + " match = Match(result=Result.STALEMATE, players=players)\n", + "\n", " train_matches.append(match)\n", " t.update(1)\n", "\n", @@ -830,20 +819,20 @@ " player_2_rating = openskill_players[player_2]\n", " team_1 = [player_1_rating]\n", " team_2 = [player_2_rating]\n", - " \n", + "\n", " if match.result == Result.WHITE_WINS:\n", " ranks = [1, 2]\n", " elif match.result == Result.BLACK_WINS:\n", " ranks = [2, 1]\n", " else:\n", " ranks = [1, 1]\n", - " \n", + "\n", " rated_teams = model.rate(teams=[team_1, team_2], ranks=ranks)\n", "\n", " for team in rated_teams:\n", " for player in team:\n", " openskill_players[player.name] = player\n", - " \n", + "\n", " t.update(1)\n", "\n", "_ = gc.collect()" @@ -970,32 +959,20 @@ "# Test Data\n", "test_matches: List[Match] = []\n", "\n", - "for match_index, row in test.iterrows():\n", + "for match_index, row in test.iterrows():\n", " white_player = Player(name=row[\"white_username\"])\n", - " black_player = Player(name=row[\"black_username\"]) \n", - " players = {\n", - " row[\"white_username\"]: white_player,\n", - " row[\"black_username\"]: black_player\n", - " }\n", - " \n", + " black_player = Player(name=row[\"black_username\"])\n", + " players = {row[\"white_username\"]: white_player, row[\"black_username\"]: black_player}\n", + "\n", " white_result = row[\"white_result\"]\n", " black_result = row[\"black_result\"]\n", - " \n", + "\n", " if white_result == \"win\":\n", - " match = Match(\n", - " result=Result.WHITE_WINS,\n", - " players=players\n", - " )\n", + " match = Match(result=Result.WHITE_WINS, players=players)\n", " elif black_result == \"win\":\n", - " match = Match(\n", - " result=Result.BLACK_WINS,\n", - " players=players\n", - " )\n", + " match = Match(result=Result.BLACK_WINS, players=players)\n", " else:\n", - " match = Match(\n", - " result=Result.STALEMATE,\n", - " players=players\n", - " )\n", + " match = Match(result=Result.STALEMATE, players=players)\n", "\n", " test_matches.append(match)\n", " t.update(1)" @@ -1063,7 +1040,6 @@ } ], "source": [ - "\n", "# Predict OpenSkill Matches\n", "print(\"Predict Matches in Test Set using OpenSkill:\")\n", "t = tqdm(total=len(test_matches))\n", @@ -1078,24 +1054,24 @@ " draw = True\n", " else:\n", " draw = False\n", - " \n", + "\n", " player_1, player_2 = match.players.keys()\n", - " \n", + "\n", " if player_1 in openskill_players:\n", " player_1_rating = openskill_players[player_1]\n", " else:\n", " player_1_rating = model.rating(name=player_1)\n", - " \n", + "\n", " if player_2 in openskill_players:\n", " player_2_rating = openskill_players[player_2]\n", " else:\n", " player_2_rating = model.rating(name=player_2)\n", - " \n", + "\n", " teams = [[player_1_rating], [player_2_rating]]\n", - " \n", + "\n", " white_win_probability, black_win_probability = model.predict_win(teams)\n", " draw_probability = model.predict_draw(teams)\n", - " \n", + "\n", " if draw_probability > (white_win_probability + black_win_probability):\n", " if draw:\n", " openskill_correct_predictions += 1\n", @@ -1106,7 +1082,7 @@ " openskill_correct_predictions += 1\n", " else:\n", " openskill_incorrect_predictions += 1\n", - " \n", + "\n", " t.update(1)" ] }, @@ -1184,11 +1160,8 @@ "\n", "openskill_accuracy = round(\n", " (\n", - " openskill_correct_predictions\n", - " / (\n", - " openskill_incorrect_predictions\n", - " + openskill_correct_predictions\n", - " )\n", + " openskill_correct_predictions\n", + " / (openskill_incorrect_predictions + openskill_correct_predictions)\n", " )\n", " * 100,\n", " 2,\n", diff --git a/benchmark/rank.ipynb b/benchmark/rank.ipynb index cae9baa..65c04ff 100644 --- a/benchmark/rank.ipynb +++ b/benchmark/rank.ipynb @@ -334,14 +334,14 @@ "data_directory = Path(working_directory / Path(\"data\"))\n", "data_directory.mkdir(exist_ok=True)\n", "downloader(\n", - " url=\"doi:10.5281/zenodo.10342317/train.parquet\", \n", + " url=\"doi:10.5281/zenodo.10342317/train.parquet\",\n", " output_file=data_directory / \"train.parquet\",\n", - " pooch=None\n", + " pooch=None,\n", ")\n", "downloader(\n", - " url=\"doi:10.5281/zenodo.10342317/test.parquet\", \n", - " output_file=data_directory / \"test.parquet\", \n", - " pooch=None\n", + " url=\"doi:10.5281/zenodo.10342317/test.parquet\",\n", + " output_file=data_directory / \"test.parquet\",\n", + " pooch=None,\n", ")" ] }, @@ -473,8 +473,8 @@ " options=[m.__name__ for m in models],\n", " value=PlackettLuce.__name__,\n", " # rows=10,\n", - " description='Model:',\n", - " disabled=False\n", + " description=\"Model:\",\n", + " disabled=False,\n", ")\n", "display(widget)" ] @@ -634,14 +634,14 @@ ], "source": [ "def reduce_memory_usage_pl(df, name):\n", - " \"\"\" \n", + " \"\"\"\n", " Reduce memory usage by polars dataframe {df} with name {name} by changing its data types.\n", - " Original pandas version of this function: \n", + " Original pandas version of this function:\n", " https://www.kaggle.com/code/arjanso/reducing-dataframe-memory-size-by-65\n", " \"\"\"\n", " print(f\"Memory usage of dataframe {name} is {round(df.estimated_size('mb'), 2)} MB\")\n", - " Numeric_Int_types = [pl.Int8,pl.Int16,pl.Int32,pl.Int64]\n", - " Numeric_Float_types = [pl.Float32,pl.Float64] \n", + " Numeric_Int_types = [pl.Int8, pl.Int16, pl.Int32, pl.Int64]\n", + " Numeric_Float_types = [pl.Float32, pl.Float64]\n", " for col in df.columns:\n", " col_type = df[col].dtype\n", " c_min = df[col].min()\n", @@ -664,7 +664,9 @@ " df = df.with_columns(df[col].cast(pl.Categorical))\n", " else:\n", " pass\n", - " print(f\"Memory usage of dataframe {name} became {round(df.estimated_size('mb'), 2)} MB\")\n", + " print(\n", + " f\"Memory usage of dataframe {name} became {round(df.estimated_size('mb'), 2)} MB\"\n", + " )\n", " return df\n", "\n", "\n", @@ -814,23 +816,20 @@ " player = Player(\n", " name=raw_player[\"player_name\"],\n", " kill_ratio=raw_player[\"kill_ratio\"],\n", - " assist_ratio=raw_player[\"assist_ratio\"]\n", + " assist_ratio=raw_player[\"assist_ratio\"],\n", " )\n", "\n", - " match_id = raw_player['match_id']\n", - " team_id = raw_player['team_id']\n", + " match_id = raw_player[\"match_id\"]\n", + " team_id = raw_player[\"team_id\"]\n", " if match_id not in train_matches:\n", " team = Team(\n", " id=raw_player[\"team_id\"],\n", " match_id=raw_player[\"match_id\"],\n", " rank=raw_player[\"team_placement\"],\n", - " players={player.name: player}\n", + " players={player.name: player},\n", " )\n", "\n", - " match = Match(\n", - " id=raw_player[\"match_id\"],\n", - " teams={team.id: team}\n", - " )\n", + " match = Match(id=raw_player[\"match_id\"], teams={team.id: team})\n", " else:\n", " if team_id not in train_matches[match_id].teams:\n", " match = train_matches[match_id]\n", @@ -838,7 +837,7 @@ " id=raw_player[\"team_id\"],\n", " match_id=raw_player[\"match_id\"],\n", " rank=raw_player[\"team_placement\"],\n", - " players={player.name: player}\n", + " players={player.name: player},\n", " )\n", " match.teams[team_id] = team\n", " else:\n", @@ -1131,23 +1130,20 @@ " player = Player(\n", " name=raw_player[\"player_name\"],\n", " kill_ratio=raw_player[\"kill_ratio\"],\n", - " assist_ratio=raw_player[\"assist_ratio\"]\n", + " assist_ratio=raw_player[\"assist_ratio\"],\n", " )\n", "\n", - " match_id = raw_player['match_id']\n", - " team_id = raw_player['team_id']\n", + " match_id = raw_player[\"match_id\"]\n", + " team_id = raw_player[\"team_id\"]\n", " if match_id not in test_matches:\n", " team = Team(\n", " id=raw_player[\"team_id\"],\n", " match_id=raw_player[\"match_id\"],\n", " rank=raw_player[\"team_placement\"],\n", - " players={player.name: player}\n", + " players={player.name: player},\n", " )\n", "\n", - " match = Match(\n", - " id=raw_player[\"match_id\"],\n", - " teams={team.id: team}\n", - " )\n", + " match = Match(id=raw_player[\"match_id\"], teams={team.id: team})\n", " else:\n", " if team_id not in test_matches[match_id].teams:\n", " match = test_matches[match_id]\n", @@ -1155,7 +1151,7 @@ " id=raw_player[\"team_id\"],\n", " match_id=raw_player[\"match_id\"],\n", " rank=raw_player[\"team_placement\"],\n", - " players={player.name: player}\n", + " players={player.name: player},\n", " )\n", " match.teams[team_id] = team\n", " else:\n", @@ -1228,7 +1224,6 @@ } ], "source": [ - "\n", "# Predict OpenSkill Matches\n", "print(\"Predict Matches in Test Set using OpenSkill:\")\n", "t = tqdm(total=len(test_matches))\n", @@ -1358,11 +1353,8 @@ "\n", "openskill_accuracy = round(\n", " (\n", - " openskill_correct_predictions\n", - " / (\n", - " openskill_incorrect_predictions\n", - " + openskill_correct_predictions\n", - " )\n", + " openskill_correct_predictions\n", + " / (openskill_incorrect_predictions + openskill_correct_predictions)\n", " )\n", " * 100,\n", " 2,\n", diff --git a/benchmark/win.ipynb b/benchmark/win.ipynb index bca69bd..f65054a 100644 --- a/benchmark/win.ipynb +++ b/benchmark/win.ipynb @@ -345,9 +345,9 @@ "data_directory = Path(working_directory / Path(\"data\"))\n", "data_directory.mkdir(exist_ok=True)\n", "downloader(\n", - " url=\"doi:10.5281/zenodo.10359600/overwatch.jsonl\", \n", + " url=\"doi:10.5281/zenodo.10359600/overwatch.jsonl\",\n", " output_file=data_directory / \"overwatch.jsonl\",\n", - " pooch=None\n", + " pooch=None,\n", ")" ] }, @@ -418,8 +418,8 @@ " options=[m.__name__ for m in models],\n", " value=PlackettLuce.__name__,\n", " # rows=10,\n", - " description='Model:',\n", - " disabled=False\n", + " description=\"Model:\",\n", + " disabled=False,\n", ")\n", "display(widget)" ] @@ -724,7 +724,7 @@ "\n", " if len(blue_team) < 1 and len(red_team) < 1:\n", " continue\n", - " \n", + "\n", " for player in blue_team:\n", " match_count[player] = match_count.get(player, 0) + 1\n", "\n", @@ -756,12 +756,12 @@ " for player in red_team:\n", " if match_count[player] < MINIMUM_MATCHES:\n", " invalid = True\n", - " \n", + "\n", " if invalid:\n", " continue\n", - " \n", + "\n", " available_matches += 1\n", - " \n", + "\n", " verified_matches.append(match)\n", "\n", "print(f\"Parsed {len(verified_matches)} Training Matches\")\n", @@ -891,7 +891,7 @@ "\n", "# Create a Progress Bar\n", "t = tqdm(total=train_size)\n", - " \n", + "\n", "os_process_time_start = time.time()\n", "\n", "for match in train:\n", @@ -930,7 +930,7 @@ "\n", " openskill_players.update(os_blue_players)\n", " openskill_players.update(os_red_players)\n", - " \n", + "\n", " t.update(1)\n", "\n", "os_process_time_stop = time.time()\n", @@ -1020,7 +1020,7 @@ "\n", "# Create a Progress Bar\n", "t = tqdm(total=train_size)\n", - " \n", + "\n", "ts_process_time_start = time.time()\n", "\n", "# Set backend here to test with scipy.\n", @@ -1038,10 +1038,14 @@ " ts_red_players = {}\n", "\n", " for player in blue_team:\n", - " ts_blue_players[player] = trueskill_players.setdefault(player, trueskill.Rating())\n", + " ts_blue_players[player] = trueskill_players.setdefault(\n", + " player, trueskill.Rating()\n", + " )\n", "\n", " for player in red_team:\n", - " ts_red_players[player] = trueskill_players.setdefault(player, trueskill.Rating())\n", + " ts_red_players[player] = trueskill_players.setdefault(\n", + " player, trueskill.Rating()\n", + " )\n", "\n", " if won:\n", " blue_team_ratings, red_team_ratings = TrueSkill.rate(\n", @@ -1057,7 +1061,7 @@ "\n", " trueskill_players.update(ts_blue_players)\n", " trueskill_players.update(ts_red_players)\n", - " \n", + "\n", " t.update(1)\n", "\n", "ts_process_time_stop = time.time()\n", @@ -1147,12 +1151,12 @@ "\n", "# Create a Progress Bar\n", "t = tqdm(total=test_size)\n", - " \n", + "\n", "for match in test:\n", " teams: dict = match.get(\"teams\")\n", " blue_team: dict = teams.get(\"blue\")\n", " red_team: dict = teams.get(\"red\")\n", - " \n", + "\n", " invalid = False\n", " for player in blue_team:\n", " if player not in openskill_players:\n", @@ -1161,12 +1165,12 @@ " for player in red_team:\n", " if player not in openskill_players:\n", " invalid = True\n", - " \n", + "\n", " t.update(1)\n", - " \n", + "\n", " if invalid:\n", " continue\n", - " \n", + "\n", " verified_test_set.append(match)\n", " valid_matches += 1\n", "\n", @@ -1254,7 +1258,7 @@ "\n", "# Create a Progress Bar\n", "t = tqdm(total=test_size)\n", - " \n", + "\n", "for match in verified_test_set:\n", " result = match.get(\"result\")\n", " won = True if result == \"WIN\" else False\n", @@ -1281,7 +1285,7 @@ " openskill_correct_predictions += 1\n", " else:\n", " openskill_incorrect_predictions += 1\n", - " \n", + "\n", " t.update(1)\n", "\n", "print(f\"Predicted Test Matches\")\n", @@ -1377,7 +1381,7 @@ "\n", "# Create a Progress Bar\n", "t = tqdm(total=test_size)\n", - " \n", + "\n", "for match in verified_test_set:\n", " result = match.get(\"result\")\n", " won = True if result == \"WIN\" else False\n", @@ -1497,11 +1501,8 @@ "\n", "openskill_accuracy = round(\n", " (\n", - " openskill_correct_predictions\n", - " / (\n", - " openskill_incorrect_predictions\n", - " + openskill_correct_predictions\n", - " )\n", + " openskill_correct_predictions\n", + " / (openskill_incorrect_predictions + openskill_correct_predictions)\n", " )\n", " * 100,\n", " 2,\n", @@ -1509,11 +1510,8 @@ "\n", "trueskill_accuracy = round(\n", " (\n", - " trueskill_correct_predictions\n", - " / (\n", - " trueskill_incorrect_predictions\n", - " + trueskill_correct_predictions\n", - " )\n", + " trueskill_correct_predictions\n", + " / (trueskill_incorrect_predictions + trueskill_correct_predictions)\n", " )\n", " * 100,\n", " 2,\n", @@ -1536,9 +1534,7 @@ "table.add_row(\"TrueSkill Duration\", f\"{trueskill_time}\")\n", "speedup = (trueskill_time / openskill_time) * 100\n", "table.add_row(f\"Speedup (%)\", f\"{speedup: .2f}\")\n", - "accuracy_bump = (\n", - " (openskill_accuracy - trueskill_accuracy) / trueskill_accuracy\n", - ") * 100\n", + "accuracy_bump = ((openskill_accuracy - trueskill_accuracy) / trueskill_accuracy) * 100\n", "table.add_row(f\"Accuracy Bump (%)\", f\"{accuracy_bump: .2f}\")\n", "rich.print(table)" ] diff --git a/changes/124.bugfix.rst b/changes/124.bugfix.rst new file mode 100644 index 0000000..b10d938 --- /dev/null +++ b/changes/124.bugfix.rst @@ -0,0 +1 @@ +Resolves incorrect predictions for matches of size greater than 2. diff --git a/docs/source/conf.py b/docs/source/conf.py index ea6dfdb..09024c4 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -4,6 +4,7 @@ For the full list of built-in configuration values, see the documentation: https://www.sphinx-doc.org/en/master/usage/configuration.html """ + from typing import List import openskill diff --git a/openskill/models/common.py b/openskill/models/common.py index 59cdfb3..56a153d 100644 --- a/openskill/models/common.py +++ b/openskill/models/common.py @@ -1,6 +1,7 @@ """ Common functions for all models. """ + from typing import Any, List diff --git a/openskill/models/weng_lin/__init__.py b/openskill/models/weng_lin/__init__.py index b198a1a..4a4b604 100644 --- a/openskill/models/weng_lin/__init__.py +++ b/openskill/models/weng_lin/__init__.py @@ -3,6 +3,7 @@ module. Some convenience and original methods are also provided to make it easier to instantiate and use the models. """ + from typing import List from openskill.models.weng_lin.bradley_terry_full import ( diff --git a/openskill/models/weng_lin/bradley_terry_full.py b/openskill/models/weng_lin/bradley_terry_full.py index f89a120..b9ce2b5 100644 --- a/openskill/models/weng_lin/bradley_terry_full.py +++ b/openskill/models/weng_lin/bradley_terry_full.py @@ -328,9 +328,9 @@ def __init__( self.limit_sigma: bool = limit_sigma # Model Data Container - self.BradleyTerryFullRating: Type[ + self.BradleyTerryFullRating: Type[BradleyTerryFullRating] = ( BradleyTerryFullRating - ] = BradleyTerryFullRating + ) def __repr__(self) -> str: return f"BradleyTerryFull(mu={self.mu}, sigma={self.sigma})" @@ -762,16 +762,15 @@ def predict_win(self, teams: List[List[BradleyTerryFullRating]]) -> List[float]: pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( - (mu_a - mu_b) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + (mu_a - mu_b) / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) @@ -805,20 +804,20 @@ def predict_draw(self, teams: List[List[BradleyTerryFullRating]]) -> float: pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( (draw_margin - mu_a + mu_b) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) - phi_major( (mu_a - mu_b - draw_margin) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) @@ -853,16 +852,16 @@ def predict_rank( pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( (mu_a - mu_b - draw_margin) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) win_probability = [ @@ -902,9 +901,7 @@ def _calculate_team_ratings( result = [] for index, team in enumerate(game): mu_summed = reduce(lambda x, y: x + y, map(lambda p: p.mu, team)) - sigma_squared = reduce( - lambda x, y: x + y, map(lambda p: p.sigma**2, team) - ) + sigma_squared = reduce(lambda x, y: x + y, map(lambda p: p.sigma**2, team)) result.append( BradleyTerryFullTeamRating(mu_summed, sigma_squared, team, rank[index]) ) diff --git a/openskill/models/weng_lin/bradley_terry_part.py b/openskill/models/weng_lin/bradley_terry_part.py index 8d899aa..1092821 100644 --- a/openskill/models/weng_lin/bradley_terry_part.py +++ b/openskill/models/weng_lin/bradley_terry_part.py @@ -333,9 +333,9 @@ def __init__( self.limit_sigma: bool = limit_sigma # Model Data Container - self.BradleyTerryPartRating: Type[ + self.BradleyTerryPartRating: Type[BradleyTerryPartRating] = ( BradleyTerryPartRating - ] = BradleyTerryPartRating + ) def __repr__(self) -> str: return f"BradleyTerryPart(mu={self.mu}, sigma={self.sigma})" @@ -774,16 +774,15 @@ def predict_win(self, teams: List[List[BradleyTerryPartRating]]) -> List[float]: pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( - (mu_a - mu_b) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + (mu_a - mu_b) / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) @@ -817,20 +816,20 @@ def predict_draw(self, teams: List[List[BradleyTerryPartRating]]) -> float: pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( (draw_margin - mu_a + mu_b) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) - phi_major( (mu_a - mu_b - draw_margin) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) @@ -865,16 +864,16 @@ def predict_rank( pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( (mu_a - mu_b - draw_margin) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) win_probability = [ @@ -914,9 +913,7 @@ def _calculate_team_ratings( result = [] for index, team in enumerate(game): mu_summed = reduce(lambda x, y: x + y, map(lambda p: p.mu, team)) - sigma_squared = reduce( - lambda x, y: x + y, map(lambda p: p.sigma**2, team) - ) + sigma_squared = reduce(lambda x, y: x + y, map(lambda p: p.sigma**2, team)) result.append( BradleyTerryPartTeamRating(mu_summed, sigma_squared, team, rank[index]) ) diff --git a/openskill/models/weng_lin/common.py b/openskill/models/weng_lin/common.py index f2b36c0..31a3689 100644 --- a/openskill/models/weng_lin/common.py +++ b/openskill/models/weng_lin/common.py @@ -1,6 +1,7 @@ """ Common functions for the Weng-Lin models. """ + import sys from itertools import zip_longest from statistics import NormalDist diff --git a/openskill/models/weng_lin/plackett_luce.py b/openskill/models/weng_lin/plackett_luce.py index 6ae0973..0c50e2a 100644 --- a/openskill/models/weng_lin/plackett_luce.py +++ b/openskill/models/weng_lin/plackett_luce.py @@ -2,6 +2,7 @@ Specific classes and functions for the Plackett-Luce model. """ + import copy import itertools import math @@ -758,16 +759,15 @@ def predict_win(self, teams: List[List[PlackettLuceRating]]) -> List[float]: pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( - (mu_a - mu_b) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + (mu_a - mu_b) / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) @@ -801,20 +801,20 @@ def predict_draw(self, teams: List[List[PlackettLuceRating]]) -> float: pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( (draw_margin - mu_a + mu_b) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) - phi_major( (mu_a - mu_b - draw_margin) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) @@ -849,16 +849,16 @@ def predict_rank( pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( (mu_a - mu_b - draw_margin) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) win_probability = [ @@ -898,9 +898,7 @@ def _calculate_team_ratings( result = [] for index, team in enumerate(game): mu_summed = reduce(lambda x, y: x + y, map(lambda p: p.mu, team)) - sigma_squared = reduce( - lambda x, y: x + y, map(lambda p: p.sigma**2, team) - ) + sigma_squared = reduce(lambda x, y: x + y, map(lambda p: p.sigma**2, team)) result.append( PlackettLuceTeamRating(mu_summed, sigma_squared, team, rank[index]) ) diff --git a/openskill/models/weng_lin/thurstone_mosteller_full.py b/openskill/models/weng_lin/thurstone_mosteller_full.py index d393d3a..1a7a040 100644 --- a/openskill/models/weng_lin/thurstone_mosteller_full.py +++ b/openskill/models/weng_lin/thurstone_mosteller_full.py @@ -339,9 +339,9 @@ def __init__( self.limit_sigma: bool = limit_sigma # Model Data Container - self.ThurstoneMostellerFullRating: Type[ + self.ThurstoneMostellerFullRating: Type[ThurstoneMostellerFullRating] = ( ThurstoneMostellerFullRating - ] = ThurstoneMostellerFullRating + ) def __repr__(self) -> str: return f"ThurstoneMostellerFull(mu={self.mu}, sigma={self.sigma})" @@ -797,16 +797,15 @@ def predict_win( pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( - (mu_a - mu_b) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + (mu_a - mu_b) / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) @@ -840,20 +839,20 @@ def predict_draw(self, teams: List[List[ThurstoneMostellerFullRating]]) -> float pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( (draw_margin - mu_a + mu_b) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) - phi_major( (mu_a - mu_b - draw_margin) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) @@ -888,16 +887,16 @@ def predict_rank( pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( (mu_a - mu_b - draw_margin) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) win_probability = [ @@ -937,9 +936,7 @@ def _calculate_team_ratings( result = [] for index, team in enumerate(game): mu_summed = reduce(lambda x, y: x + y, map(lambda p: p.mu, team)) - sigma_squared = reduce( - lambda x, y: x + y, map(lambda p: p.sigma**2, team) - ) + sigma_squared = reduce(lambda x, y: x + y, map(lambda p: p.sigma**2, team)) result.append( ThurstoneMostellerFullTeamRating( mu_summed, sigma_squared, team, rank[index] diff --git a/openskill/models/weng_lin/thurstone_mosteller_part.py b/openskill/models/weng_lin/thurstone_mosteller_part.py index a981620..fd72958 100644 --- a/openskill/models/weng_lin/thurstone_mosteller_part.py +++ b/openskill/models/weng_lin/thurstone_mosteller_part.py @@ -341,9 +341,9 @@ def __init__( self.limit_sigma: bool = limit_sigma # Model Data Container - self.ThurstoneMostellerPartRating: Type[ + self.ThurstoneMostellerPartRating: Type[ThurstoneMostellerPartRating] = ( ThurstoneMostellerPartRating - ] = ThurstoneMostellerPartRating + ) def __repr__(self) -> str: return f"ThurstoneMostellerPart(mu={self.mu}, sigma={self.sigma})" @@ -801,16 +801,15 @@ def predict_win( pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( - (mu_a - mu_b) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + (mu_a - mu_b) / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) @@ -844,20 +843,20 @@ def predict_draw(self, teams: List[List[ThurstoneMostellerPartRating]]) -> float pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( (draw_margin - mu_a + mu_b) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) - phi_major( (mu_a - mu_b - draw_margin) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) @@ -892,16 +891,16 @@ def predict_rank( pairwise_probabilities = [] for pair_a, pair_b in itertools.permutations(teams, 2): - pair_a_subset = pair_a[0] - pair_b_subset = pair_b[0] - mu_a = pair_a_subset.mu - sigma_a = pair_a_subset.sigma - mu_b = pair_b_subset.mu - sigma_b = pair_b_subset.sigma + pair_a_subset = self._calculate_team_ratings([pair_a]) + pair_b_subset = self._calculate_team_ratings([pair_b]) + mu_a = pair_a_subset[0].mu + sigma_a = pair_a_subset[0].sigma_squared + mu_b = pair_b_subset[0].mu + sigma_b = pair_b_subset[0].sigma_squared pairwise_probabilities.append( phi_major( (mu_a - mu_b - draw_margin) - / math.sqrt(n * self.beta**2 + sigma_a**2 + sigma_b**2) + / math.sqrt(n * self.beta**2 + sigma_a + sigma_b) ) ) win_probability = [ @@ -941,9 +940,7 @@ def _calculate_team_ratings( result = [] for index, team in enumerate(game): mu_summed = reduce(lambda x, y: x + y, map(lambda p: p.mu, team)) - sigma_squared = reduce( - lambda x, y: x + y, map(lambda p: p.sigma**2, team) - ) + sigma_squared = reduce(lambda x, y: x + y, map(lambda p: p.sigma**2, team)) result.append( ThurstoneMostellerPartTeamRating( mu_summed, sigma_squared, team, rank[index] diff --git a/pdm.lock b/pdm.lock index e30669a..f037f6e 100644 --- a/pdm.lock +++ b/pdm.lock @@ -6,7 +6,7 @@ groups = ["default", "benchmarks", "docs", "release", "tests"] cross_platform = true static_urls = false lock_version = "4.3" -content_hash = "sha256:80718f8d6430ba415e6bd09b4d4b1d26ea09f2e3562f8f69b686b587643036ed" +content_hash = "sha256:1c973224727908c91b9638fbc6ef5f1764bf88475476e7345ef1fa9829ff4153" [[package]] name = "alabaster" @@ -42,6 +42,9 @@ name = "astroid" version = "3.0.2" requires_python = ">=3.8.0" summary = "An abstract syntax tree for Python with inference support." +dependencies = [ + "typing-extensions>=4.0.0; python_version < \"3.11\"", +] files = [ {file = "astroid-3.0.2-py3-none-any.whl", hash = "sha256:d6e62862355f60e716164082d6b4b041d38e2a8cf1c7cd953ded5108bac8ff5c"}, {file = "astroid-3.0.2.tar.gz", hash = "sha256:4a61cf0a59097c7bb52689b0fd63717cd2a8a14dc9f1eee97b82d814881c8c91"}, @@ -106,7 +109,7 @@ files = [ [[package]] name = "black" -version = "23.12.1" +version = "24.1.1" requires_python = ">=3.8" summary = "The uncompromising code formatter." dependencies = [ @@ -119,64 +122,64 @@ dependencies = [ "typing-extensions>=4.0.1; python_version < \"3.11\"", ] files = [ - {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, - {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, - {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, - {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, - {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, - {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, - {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, - {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, - {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, - {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, - {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, - {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, - {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, - {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, - {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, - {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, - {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, - {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, - {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, - {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, - {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, - {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, + {file = "black-24.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c"}, + {file = "black-24.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445"}, + {file = "black-24.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a"}, + {file = "black-24.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4"}, + {file = "black-24.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7"}, + {file = "black-24.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8"}, + {file = "black-24.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161"}, + {file = "black-24.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d"}, + {file = "black-24.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8"}, + {file = "black-24.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e"}, + {file = "black-24.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6"}, + {file = "black-24.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b"}, + {file = "black-24.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62"}, + {file = "black-24.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5"}, + {file = "black-24.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6"}, + {file = "black-24.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717"}, + {file = "black-24.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9"}, + {file = "black-24.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024"}, + {file = "black-24.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2"}, + {file = "black-24.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac"}, + {file = "black-24.1.1-py3-none-any.whl", hash = "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168"}, + {file = "black-24.1.1.tar.gz", hash = "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b"}, ] [[package]] name = "black" -version = "23.12.1" +version = "24.1.1" extras = ["jupyter"] requires_python = ">=3.8" summary = "The uncompromising code formatter." dependencies = [ - "black==23.12.1", + "black==24.1.1", "ipython>=7.8.0", "tokenize-rt>=3.2.0", ] files = [ - {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, - {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, - {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, - {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, - {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, - {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, - {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, - {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, - {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, - {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, - {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, - {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, - {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, - {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, - {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, - {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, - {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, - {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, - {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, - {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, - {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, - {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, + {file = "black-24.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c"}, + {file = "black-24.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445"}, + {file = "black-24.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a"}, + {file = "black-24.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4"}, + {file = "black-24.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7"}, + {file = "black-24.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8"}, + {file = "black-24.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161"}, + {file = "black-24.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d"}, + {file = "black-24.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8"}, + {file = "black-24.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e"}, + {file = "black-24.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6"}, + {file = "black-24.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b"}, + {file = "black-24.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62"}, + {file = "black-24.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5"}, + {file = "black-24.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6"}, + {file = "black-24.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717"}, + {file = "black-24.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9"}, + {file = "black-24.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024"}, + {file = "black-24.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2"}, + {file = "black-24.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac"}, + {file = "black-24.1.1-py3-none-any.whl", hash = "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168"}, + {file = "black-24.1.1.tar.gz", hash = "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b"}, ] [[package]] @@ -195,18 +198,19 @@ files = [ [[package]] name = "build" -version = "0.10.0" +version = "1.0.3" requires_python = ">= 3.7" summary = "A simple, correct Python build frontend" dependencies = [ "colorama; os_name == \"nt\"", + "importlib-metadata>=4.6; python_version < \"3.10\"", "packaging>=19.0", "pyproject-hooks", "tomli>=1.1.0; python_version < \"3.11\"", ] files = [ - {file = "build-0.10.0-py3-none-any.whl", hash = "sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171"}, - {file = "build-0.10.0.tar.gz", hash = "sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269"}, + {file = "build-1.0.3-py3-none-any.whl", hash = "sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f"}, + {file = "build-1.0.3.tar.gz", hash = "sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b"}, ] [[package]] @@ -228,12 +232,12 @@ files = [ [[package]] name = "cachetools" -version = "5.3.1" +version = "5.3.2" requires_python = ">=3.7" summary = "Extensible memoizing collections and decorators" files = [ - {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, - {file = "cachetools-5.3.1.tar.gz", hash = "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"}, + {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, + {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, ] [[package]] @@ -465,127 +469,127 @@ files = [ [[package]] name = "coverage" -version = "7.4.0" +version = "7.4.1" requires_python = ">=3.8" summary = "Code coverage measurement for Python" files = [ - {file = "coverage-7.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36b0ea8ab20d6a7564e89cb6135920bc9188fb5f1f7152e94e8300b7b189441a"}, - {file = "coverage-7.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0676cd0ba581e514b7f726495ea75aba3eb20899d824636c6f59b0ed2f88c471"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ca5c71a5a1765a0f8f88022c52b6b8be740e512980362f7fdbb03725a0d6b9"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7c97726520f784239f6c62506bc70e48d01ae71e9da128259d61ca5e9788516"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:815ac2d0f3398a14286dc2cea223a6f338109f9ecf39a71160cd1628786bc6f5"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:80b5ee39b7f0131ebec7968baa9b2309eddb35b8403d1869e08f024efd883566"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5b2ccb7548a0b65974860a78c9ffe1173cfb5877460e5a229238d985565574ae"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:995ea5c48c4ebfd898eacb098164b3cc826ba273b3049e4a889658548e321b43"}, - {file = "coverage-7.4.0-cp310-cp310-win32.whl", hash = "sha256:79287fd95585ed36e83182794a57a46aeae0b64ca53929d1176db56aacc83451"}, - {file = "coverage-7.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5b14b4f8760006bfdb6e08667af7bc2d8d9bfdb648351915315ea17645347137"}, - {file = "coverage-7.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04387a4a6ecb330c1878907ce0dc04078ea72a869263e53c72a1ba5bbdf380ca"}, - {file = "coverage-7.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea81d8f9691bb53f4fb4db603203029643caffc82bf998ab5b59ca05560f4c06"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74775198b702868ec2d058cb92720a3c5a9177296f75bd97317c787daf711505"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f03940f9973bfaee8cfba70ac991825611b9aac047e5c80d499a44079ec0bc"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485e9f897cf4856a65a57c7f6ea3dc0d4e6c076c87311d4bc003f82cfe199d25"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6ae8c9d301207e6856865867d762a4b6fd379c714fcc0607a84b92ee63feff70"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bf477c355274a72435ceb140dc42de0dc1e1e0bf6e97195be30487d8eaaf1a09"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:83c2dda2666fe32332f8e87481eed056c8b4d163fe18ecc690b02802d36a4d26"}, - {file = "coverage-7.4.0-cp311-cp311-win32.whl", hash = "sha256:697d1317e5290a313ef0d369650cfee1a114abb6021fa239ca12b4849ebbd614"}, - {file = "coverage-7.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:26776ff6c711d9d835557ee453082025d871e30b3fd6c27fcef14733f67f0590"}, - {file = "coverage-7.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:13eaf476ec3e883fe3e5fe3707caeb88268a06284484a3daf8250259ef1ba143"}, - {file = "coverage-7.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846f52f46e212affb5bcf131c952fb4075b55aae6b61adc9856222df89cbe3e2"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26f66da8695719ccf90e794ed567a1549bb2644a706b41e9f6eae6816b398c4a"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:164fdcc3246c69a6526a59b744b62e303039a81e42cfbbdc171c91a8cc2f9446"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:316543f71025a6565677d84bc4df2114e9b6a615aa39fb165d697dba06a54af9"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bb1de682da0b824411e00a0d4da5a784ec6496b6850fdf8c865c1d68c0e318dd"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0e8d06778e8fbffccfe96331a3946237f87b1e1d359d7fbe8b06b96c95a5407a"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a56de34db7b7ff77056a37aedded01b2b98b508227d2d0979d373a9b5d353daa"}, - {file = "coverage-7.4.0-cp312-cp312-win32.whl", hash = "sha256:51456e6fa099a8d9d91497202d9563a320513fcf59f33991b0661a4a6f2ad450"}, - {file = "coverage-7.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:cd3c1e4cb2ff0083758f09be0f77402e1bdf704adb7f89108007300a6da587d0"}, - {file = "coverage-7.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d1bf53c4c8de58d22e0e956a79a5b37f754ed1ffdbf1a260d9dcfa2d8a325e"}, - {file = "coverage-7.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:109f5985182b6b81fe33323ab4707011875198c41964f014579cf82cebf2bb85"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cc9d4bc55de8003663ec94c2f215d12d42ceea128da8f0f4036235a119c88ac"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc6d65b21c219ec2072c1293c505cf36e4e913a3f936d80028993dd73c7906b1"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a10a4920def78bbfff4eff8a05c51be03e42f1c3735be42d851f199144897ba"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b8e99f06160602bc64da35158bb76c73522a4010f0649be44a4e167ff8555952"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7d360587e64d006402b7116623cebf9d48893329ef035278969fa3bbf75b697e"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29f3abe810930311c0b5d1a7140f6395369c3db1be68345638c33eec07535105"}, - {file = "coverage-7.4.0-cp38-cp38-win32.whl", hash = "sha256:5040148f4ec43644702e7b16ca864c5314ccb8ee0751ef617d49aa0e2d6bf4f2"}, - {file = "coverage-7.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:9864463c1c2f9cb3b5db2cf1ff475eed2f0b4285c2aaf4d357b69959941aa555"}, - {file = "coverage-7.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:936d38794044b26c99d3dd004d8af0035ac535b92090f7f2bb5aa9c8e2f5cd42"}, - {file = "coverage-7.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:799c8f873794a08cdf216aa5d0531c6a3747793b70c53f70e98259720a6fe2d7"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7defbb9737274023e2d7af02cac77043c86ce88a907c58f42b580a97d5bcca9"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1526d265743fb49363974b7aa8d5899ff64ee07df47dd8d3e37dcc0818f09ed"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf635a52fc1ea401baf88843ae8708591aa4adff875e5c23220de43b1ccf575c"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:756ded44f47f330666843b5781be126ab57bb57c22adbb07d83f6b519783b870"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0eb3c2f32dabe3a4aaf6441dde94f35687224dfd7eb2a7f47f3fd9428e421058"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bfd5db349d15c08311702611f3dccbef4b4e2ec148fcc636cf8739519b4a5c0f"}, - {file = "coverage-7.4.0-cp39-cp39-win32.whl", hash = "sha256:53d7d9158ee03956e0eadac38dfa1ec8068431ef8058fe6447043db1fb40d932"}, - {file = "coverage-7.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfd2a8b6b0d8e66e944d47cdec2f47c48fef2ba2f2dff5a9a75757f64172857e"}, - {file = "coverage-7.4.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:c530833afc4707fe48524a44844493f36d8727f04dcce91fb978c414a8556cc6"}, - {file = "coverage-7.4.0.tar.gz", hash = "sha256:707c0f58cb1712b8809ece32b68996ee1e609f71bd14615bd8f87a1293cb610e"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"}, + {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"}, + {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"}, + {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"}, + {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"}, + {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"}, + {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"}, + {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"}, + {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"}, + {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"}, + {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"}, + {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"}, + {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"}, ] [[package]] name = "coverage" -version = "7.4.0" +version = "7.4.1" extras = ["toml"] requires_python = ">=3.8" summary = "Code coverage measurement for Python" dependencies = [ - "coverage==7.4.0", + "coverage==7.4.1", "tomli; python_full_version <= \"3.11.0a6\"", ] files = [ - {file = "coverage-7.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36b0ea8ab20d6a7564e89cb6135920bc9188fb5f1f7152e94e8300b7b189441a"}, - {file = "coverage-7.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0676cd0ba581e514b7f726495ea75aba3eb20899d824636c6f59b0ed2f88c471"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ca5c71a5a1765a0f8f88022c52b6b8be740e512980362f7fdbb03725a0d6b9"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7c97726520f784239f6c62506bc70e48d01ae71e9da128259d61ca5e9788516"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:815ac2d0f3398a14286dc2cea223a6f338109f9ecf39a71160cd1628786bc6f5"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:80b5ee39b7f0131ebec7968baa9b2309eddb35b8403d1869e08f024efd883566"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5b2ccb7548a0b65974860a78c9ffe1173cfb5877460e5a229238d985565574ae"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:995ea5c48c4ebfd898eacb098164b3cc826ba273b3049e4a889658548e321b43"}, - {file = "coverage-7.4.0-cp310-cp310-win32.whl", hash = "sha256:79287fd95585ed36e83182794a57a46aeae0b64ca53929d1176db56aacc83451"}, - {file = "coverage-7.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5b14b4f8760006bfdb6e08667af7bc2d8d9bfdb648351915315ea17645347137"}, - {file = "coverage-7.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04387a4a6ecb330c1878907ce0dc04078ea72a869263e53c72a1ba5bbdf380ca"}, - {file = "coverage-7.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea81d8f9691bb53f4fb4db603203029643caffc82bf998ab5b59ca05560f4c06"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74775198b702868ec2d058cb92720a3c5a9177296f75bd97317c787daf711505"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f03940f9973bfaee8cfba70ac991825611b9aac047e5c80d499a44079ec0bc"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485e9f897cf4856a65a57c7f6ea3dc0d4e6c076c87311d4bc003f82cfe199d25"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6ae8c9d301207e6856865867d762a4b6fd379c714fcc0607a84b92ee63feff70"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bf477c355274a72435ceb140dc42de0dc1e1e0bf6e97195be30487d8eaaf1a09"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:83c2dda2666fe32332f8e87481eed056c8b4d163fe18ecc690b02802d36a4d26"}, - {file = "coverage-7.4.0-cp311-cp311-win32.whl", hash = "sha256:697d1317e5290a313ef0d369650cfee1a114abb6021fa239ca12b4849ebbd614"}, - {file = "coverage-7.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:26776ff6c711d9d835557ee453082025d871e30b3fd6c27fcef14733f67f0590"}, - {file = "coverage-7.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:13eaf476ec3e883fe3e5fe3707caeb88268a06284484a3daf8250259ef1ba143"}, - {file = "coverage-7.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846f52f46e212affb5bcf131c952fb4075b55aae6b61adc9856222df89cbe3e2"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26f66da8695719ccf90e794ed567a1549bb2644a706b41e9f6eae6816b398c4a"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:164fdcc3246c69a6526a59b744b62e303039a81e42cfbbdc171c91a8cc2f9446"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:316543f71025a6565677d84bc4df2114e9b6a615aa39fb165d697dba06a54af9"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bb1de682da0b824411e00a0d4da5a784ec6496b6850fdf8c865c1d68c0e318dd"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0e8d06778e8fbffccfe96331a3946237f87b1e1d359d7fbe8b06b96c95a5407a"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a56de34db7b7ff77056a37aedded01b2b98b508227d2d0979d373a9b5d353daa"}, - {file = "coverage-7.4.0-cp312-cp312-win32.whl", hash = "sha256:51456e6fa099a8d9d91497202d9563a320513fcf59f33991b0661a4a6f2ad450"}, - {file = "coverage-7.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:cd3c1e4cb2ff0083758f09be0f77402e1bdf704adb7f89108007300a6da587d0"}, - {file = "coverage-7.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d1bf53c4c8de58d22e0e956a79a5b37f754ed1ffdbf1a260d9dcfa2d8a325e"}, - {file = "coverage-7.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:109f5985182b6b81fe33323ab4707011875198c41964f014579cf82cebf2bb85"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cc9d4bc55de8003663ec94c2f215d12d42ceea128da8f0f4036235a119c88ac"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc6d65b21c219ec2072c1293c505cf36e4e913a3f936d80028993dd73c7906b1"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a10a4920def78bbfff4eff8a05c51be03e42f1c3735be42d851f199144897ba"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b8e99f06160602bc64da35158bb76c73522a4010f0649be44a4e167ff8555952"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7d360587e64d006402b7116623cebf9d48893329ef035278969fa3bbf75b697e"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29f3abe810930311c0b5d1a7140f6395369c3db1be68345638c33eec07535105"}, - {file = "coverage-7.4.0-cp38-cp38-win32.whl", hash = "sha256:5040148f4ec43644702e7b16ca864c5314ccb8ee0751ef617d49aa0e2d6bf4f2"}, - {file = "coverage-7.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:9864463c1c2f9cb3b5db2cf1ff475eed2f0b4285c2aaf4d357b69959941aa555"}, - {file = "coverage-7.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:936d38794044b26c99d3dd004d8af0035ac535b92090f7f2bb5aa9c8e2f5cd42"}, - {file = "coverage-7.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:799c8f873794a08cdf216aa5d0531c6a3747793b70c53f70e98259720a6fe2d7"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7defbb9737274023e2d7af02cac77043c86ce88a907c58f42b580a97d5bcca9"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1526d265743fb49363974b7aa8d5899ff64ee07df47dd8d3e37dcc0818f09ed"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf635a52fc1ea401baf88843ae8708591aa4adff875e5c23220de43b1ccf575c"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:756ded44f47f330666843b5781be126ab57bb57c22adbb07d83f6b519783b870"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0eb3c2f32dabe3a4aaf6441dde94f35687224dfd7eb2a7f47f3fd9428e421058"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bfd5db349d15c08311702611f3dccbef4b4e2ec148fcc636cf8739519b4a5c0f"}, - {file = "coverage-7.4.0-cp39-cp39-win32.whl", hash = "sha256:53d7d9158ee03956e0eadac38dfa1ec8068431ef8058fe6447043db1fb40d932"}, - {file = "coverage-7.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfd2a8b6b0d8e66e944d47cdec2f47c48fef2ba2f2dff5a9a75757f64172857e"}, - {file = "coverage-7.4.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:c530833afc4707fe48524a44844493f36d8727f04dcce91fb978c414a8556cc6"}, - {file = "coverage-7.4.0.tar.gz", hash = "sha256:707c0f58cb1712b8809ece32b68996ee1e609f71bd14615bd8f87a1293cb610e"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"}, + {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"}, + {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"}, + {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"}, + {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"}, + {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"}, + {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"}, + {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"}, + {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"}, + {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"}, + {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"}, + {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"}, + {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"}, ] [[package]] @@ -788,7 +792,7 @@ files = [ [[package]] name = "ipykernel" -version = "6.28.0" +version = "6.29.0" requires_python = ">=3.8" summary = "IPython Kernel for Jupyter" dependencies = [ @@ -807,8 +811,8 @@ dependencies = [ "traitlets>=5.4.0", ] files = [ - {file = "ipykernel-6.28.0-py3-none-any.whl", hash = "sha256:c6e9a9c63a7f4095c0a22a79f765f079f9ec7be4f2430a898ddea889e8665661"}, - {file = "ipykernel-6.28.0.tar.gz", hash = "sha256:69c11403d26de69df02225916f916b37ea4b9af417da0a8c827f84328d88e5f3"}, + {file = "ipykernel-6.29.0-py3-none-any.whl", hash = "sha256:076663ca68492576f051e4af7720d33f34383e655f2be0d544c8b1c9de915b2f"}, + {file = "ipykernel-6.29.0.tar.gz", hash = "sha256:b5dd3013cab7b330df712891c96cd1ab868c27a7159e606f762015e9bf8ceb3f"}, ] [[package]] @@ -1340,12 +1344,12 @@ files = [ [[package]] name = "packaging" -version = "23.1" +version = "23.2" requires_python = ">=3.7" summary = "Core utilities for Python packages" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -1462,12 +1466,12 @@ files = [ [[package]] name = "platformdirs" -version = "3.10.0" -requires_python = ">=3.7" +version = "4.2.0" +requires_python = ">=3.8" summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [[package]] @@ -1482,16 +1486,16 @@ files = [ [[package]] name = "polars" -version = "0.20.3" +version = "0.20.6" requires_python = ">=3.8" summary = "Blazingly fast DataFrame library" files = [ - {file = "polars-0.20.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:ff5ad360f5fab35cbc608eccaea583e387fe4e629f44d4ebfa752dc79502d3f5"}, - {file = "polars-0.20.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6450d62becd40175661c5143c4e967d89e46104771aded951d1f0faadc63709e"}, - {file = "polars-0.20.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c89848562e3176d0e7bc517d1761c6fb5a9fca57ca2950cb58d3d001958dc285"}, - {file = "polars-0.20.3-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:dc685edd2d8742c71ffb238c2c25c17354631ddcfc8e9a105aaf9c228c1a0eb3"}, - {file = "polars-0.20.3-cp38-abi3-win_amd64.whl", hash = "sha256:89e08f669b63017124f1ea197ab4c14730cc5edee32d9bf2bddb2753b2726091"}, - {file = "polars-0.20.3.tar.gz", hash = "sha256:8562bffe602b131036e996e0161d96ea7ba1c004e513e49cbec55debc8b5fada"}, + {file = "polars-0.20.6-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:59845bae0b614b3291baa889cfc2a251e1024129696bb655596f2b5556e9f9a1"}, + {file = "polars-0.20.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:9e86736f68440bf97a9100fa0a79ae7ce616d1af6fd4669fff1345f03aab14c0"}, + {file = "polars-0.20.6-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4f4e3335fdcc863f6aac0616510b1baa5e13d5e818ebbfcb980ad534bd6edc2"}, + {file = "polars-0.20.6-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:7c7b494beea914a54bcae8868dee3988a88ecb48525df948e07aacf2fb83e711"}, + {file = "polars-0.20.6-cp38-abi3-win_amd64.whl", hash = "sha256:a96b157d68697c8d6ef2f7c2cc1734d498c3c6cc0c9c18d4fff7283ccfabdd1d"}, + {file = "polars-0.20.6.tar.gz", hash = "sha256:b53553308bc7e2b4f841b18f1949b61ed7f2cf155c5c64712298efa5af67a997"}, ] [[package]] @@ -2188,15 +2192,15 @@ files = [ [[package]] name = "shibuya" -version = "2024.1.2" +version = "2024.1.17" requires_python = ">=3.7" summary = "A clean, responsive, and customizable Sphinx documentation theme with light/dark mode." dependencies = [ "Sphinx", ] files = [ - {file = "shibuya-2024.1.2-py3-none-any.whl", hash = "sha256:27533d5ed93881c3de3eec9c9f3004fa2fb3120c73869ffc2c719fda65cc78ee"}, - {file = "shibuya-2024.1.2.tar.gz", hash = "sha256:12937ad82c660db660a4ce196bd126630c9bd90d96a8593203eefd2ad255957e"}, + {file = "shibuya-2024.1.17-py3-none-any.whl", hash = "sha256:9ed1b4225b3b8abe9234908f197904158355c92ba24e1e8cd414e73d1a937465"}, + {file = "shibuya-2024.1.17.tar.gz", hash = "sha256:e1c709c343d0fe948d7a1be2a4ec90b48cca12e06464b17654d6c0c94bb0f9f9"}, ] [[package]] @@ -2342,7 +2346,7 @@ files = [ [[package]] name = "sphinxcontrib-bibtex" -version = "2.6.1" +version = "2.6.2" requires_python = ">=3.7" summary = "Sphinx extension for BibTeX style citations." dependencies = [ @@ -2353,8 +2357,8 @@ dependencies = [ "pybtex>=0.24", ] files = [ - {file = "sphinxcontrib-bibtex-2.6.1.tar.gz", hash = "sha256:046b49f070ae5276af34c1b8ddb9bc9562ef6de2f7a52d37a91cb8e53f54b863"}, - {file = "sphinxcontrib_bibtex-2.6.1-py3-none-any.whl", hash = "sha256:094c772098fe6b030cda8618c45722b2957cad0c04f328ba2b154aa08dfe720a"}, + {file = "sphinxcontrib-bibtex-2.6.2.tar.gz", hash = "sha256:f487af694336f28bfb7d6a17070953a7d264bec43000a2379724274f5f8d70ae"}, + {file = "sphinxcontrib_bibtex-2.6.2-py3-none-any.whl", hash = "sha256:10d45ebbb19207c5665396c9446f8012a79b8a538cb729f895b5910ab2d0b2da"}, ] [[package]] @@ -2525,24 +2529,24 @@ files = [ [[package]] name = "tox" -version = "4.11.4" +version = "4.12.1" requires_python = ">=3.8" summary = "tox is a generic virtualenv management and test command line tool" dependencies = [ - "cachetools>=5.3.1", + "cachetools>=5.3.2", "chardet>=5.2", "colorama>=0.4.6", - "filelock>=3.12.3", - "packaging>=23.1", - "platformdirs>=3.10", + "filelock>=3.13.1", + "packaging>=23.2", + "platformdirs>=4.1", "pluggy>=1.3", "pyproject-api>=1.6.1", "tomli>=2.0.1; python_version < \"3.11\"", - "virtualenv>=20.24.3", + "virtualenv>=20.25", ] files = [ - {file = "tox-4.11.4-py3-none-any.whl", hash = "sha256:2adb83d68f27116812b69aa36676a8d6a52249cb0d173649de0e7d0c2e3e7229"}, - {file = "tox-4.11.4.tar.gz", hash = "sha256:73a7240778fabf305aeb05ab8ea26e575e042ab5a18d71d0ed13e343a51d6ce1"}, + {file = "tox-4.12.1-py3-none-any.whl", hash = "sha256:c07ea797880a44f3c4f200ad88ad92b446b83079d4ccef89585df64cc574375c"}, + {file = "tox-4.12.1.tar.gz", hash = "sha256:61aafbeff1bd8a5af84e54ef6e8402f53c6a6066d0782336171ddfbf5362122e"}, ] [[package]] @@ -2633,17 +2637,17 @@ files = [ [[package]] name = "virtualenv" -version = "20.24.3" +version = "20.25.0" requires_python = ">=3.7" summary = "Virtual Python Environment builder" dependencies = [ "distlib<1,>=0.3.7", "filelock<4,>=3.12.2", - "platformdirs<4,>=3.9.1", + "platformdirs<5,>=3.9.1", ] files = [ - {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, - {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"}, + {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, + {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index 597f591..6c9bae1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -101,9 +101,9 @@ tests = [ ] release = [ "twine~=4.0", - "build~=0.10", - "isort~=5.12", - "black[jupyter]~=23.7", + "build~=1.0", + "isort~=5.13", + "black[jupyter]~=24.1", "codecov~=2.1", "towncrier~=23.6", "bump-my-version~=0.9.2", diff --git a/tests/models/data/bradleyterryfull.json b/tests/models/data/bradleyterryfull.json index 8754e40..817f660 100644 --- a/tests/models/data/bradleyterryfull.json +++ b/tests/models/data/bradleyterryfull.json @@ -1,123 +1,123 @@ { "model": { - "mu": 29.36396996731831, - "sigma": 4.171204886973876 + "mu": 17.842929377297303, + "sigma": 1.511049869752525 }, "normal": { "team_1": [ { - "mu": 31.153959099540106, - "sigma": 4.164662443820041 + "mu": 18.177036976922977, + "sigma": 1.512801806019586 } ], "team_2": [ { - "mu": 27.573980835096517, - "sigma": 4.161603879330805 + "mu": 17.508821777671628, + "sigma": 1.5125763309974716 }, { - "mu": 27.573980835096517, - "sigma": 4.161603879330805 + "mu": 17.508821777671628, + "sigma": 1.5125763309974716 } ] }, "ranks": { "team_1": [ { - "mu": 29.287206490045804, - "sigma": 4.164662443820041 + "mu": 17.82192360542754, + "sigma": 1.512801806019586 } ], "team_2": [ { - "mu": 29.44073344459082, - "sigma": 4.161603879330805 + "mu": 17.863935149167066, + "sigma": 1.5125763309974716 }, { - "mu": 29.44073344459082, - "sigma": 4.161603879330805 + "mu": 17.863935149167066, + "sigma": 1.5125763309974716 } ] }, "scores": { "team_1": [ { - "mu": 29.287206490045804, - "sigma": 4.164662443820041 + "mu": 17.82192360542754, + "sigma": 1.512801806019586 } ], "team_2": [ { - "mu": 29.44073344459082, - "sigma": 4.161603879330805 + "mu": 17.863935149167066, + "sigma": 1.5125763309974716 }, { - "mu": 29.44073344459082, - "sigma": 4.161603879330805 + "mu": 17.863935149167066, + "sigma": 1.5125763309974716 } ] }, "limit_sigma": { "team_1": [ { - "mu": 30.98575395732507, - "sigma": 4.164211798652542 + "mu": 18.166071600249957, + "sigma": 1.511049869752525 } ], "team_2": [ { - "mu": 30.91518357463656, - "sigma": 4.151834626521716 + "mu": 18.178227027344036, + "sigma": 1.511049869752525 }, { - "mu": 30.91518357463656, - "sigma": 4.151834626521716 + "mu": 18.178227027344036, + "sigma": 1.511049869752525 } ], "team_3": [ { - "mu": 26.190972369993304, - "sigma": 4.159317810753674 + "mu": 17.18448950429791, + "sigma": 1.511049869752525 }, { - "mu": 26.190972369993304, - "sigma": 4.159317810753674 + "mu": 17.18448950429791, + "sigma": 1.511049869752525 }, { - "mu": 26.190972369993304, - "sigma": 4.159317810753674 + "mu": 17.18448950429791, + "sigma": 1.511049869752525 } ] }, "ties": { "team_1": [ { - "mu": 32.000527612789725, - "sigma": 4.164211798652542 + "mu": 18.348323624601324, + "sigma": 1.5127608868869538 } ], "team_2": [ { - "mu": 27.4709691990532, - "sigma": 4.151834626521716 + "mu": 17.486074000410817, + "sigma": 1.5118317884973382 }, { - "mu": 27.4709691990532, - "sigma": 4.151834626521716 + "mu": 17.486074000410817, + "sigma": 1.5118317884973382 } ], "team_3": [ { - "mu": 28.620413090112006, - "sigma": 4.159317810753674 + "mu": 17.69439050687977, + "sigma": 1.5123636594987848 }, { - "mu": 28.620413090112006, - "sigma": 4.159317810753674 + "mu": 17.69439050687977, + "sigma": 1.5123636594987848 }, { - "mu": 28.620413090112006, - "sigma": 4.159317810753674 + "mu": 17.69439050687977, + "sigma": 1.5123636594987848 } ] } diff --git a/tests/models/data/bradleyterrypart.json b/tests/models/data/bradleyterrypart.json index b3f5fd5..6c2070f 100644 --- a/tests/models/data/bradleyterrypart.json +++ b/tests/models/data/bradleyterrypart.json @@ -1,123 +1,123 @@ { "model": { - "mu": 23.42618920652956, - "sigma": 6.620037113814815 + "mu": 10.26558503511445, + "sigma": 9.328809427064739 }, "normal": { "team_1": [ { - "mu": 26.350714477306713, - "sigma": 6.566437175049652 + "mu": 13.529115856530728, + "sigma": 9.157136493268368 } ], "team_2": [ { - "mu": 20.501663935752408, - "sigma": 6.543886990267017 + "mu": 7.002054213698171, + "sigma": 9.084918843073634 }, { - "mu": 20.501663935752408, - "sigma": 6.543886990267017 + "mu": 7.002054213698171, + "sigma": 9.084918843073634 } ] }, "ranks": { "team_1": [ { - "mu": 22.95093312306163, - "sigma": 6.566437175049652 + "mu": 8.468876664717218, + "sigma": 9.157136493268368 } ], "team_2": [ { - "mu": 23.90144528999749, - "sigma": 6.543886990267017 + "mu": 12.062293405511681, + "sigma": 9.084918843073634 }, { - "mu": 23.90144528999749, - "sigma": 6.543886990267017 + "mu": 12.062293405511681, + "sigma": 9.084918843073634 } ] }, "scores": { "team_1": [ { - "mu": 22.95093312306163, - "sigma": 6.566437175049652 + "mu": 8.468876664717218, + "sigma": 9.157136493268368 } ], "team_2": [ { - "mu": 23.90144528999749, - "sigma": 6.543886990267017 + "mu": 12.062293405511681, + "sigma": 9.084918843073634 }, { - "mu": 23.90144528999749, - "sigma": 6.543886990267017 + "mu": 12.062293405511681, + "sigma": 9.084918843073634 } ] }, "limit_sigma": { "team_1": [ { - "mu": 25.86048074100693, - "sigma": 6.554810683388137 + "mu": 11.763268530665895, + "sigma": 9.057653033492564 } ], "team_2": [ { - "mu": 23.90144528999749, - "sigma": 6.543886990267017 + "mu": 12.062293405511681, + "sigma": 9.084918843073634 }, { - "mu": 23.90144528999749, - "sigma": 6.543886990267017 + "mu": 12.062293405511681, + "sigma": 9.084918843073634 } ], "team_3": [ { - "mu": 20.51664158858426, - "sigma": 6.6005760670808815 + "mu": 6.9711931691657725, + "sigma": 9.15942312468392 }, { - "mu": 20.51664158858426, - "sigma": 6.6005760670808815 + "mu": 6.9711931691657725, + "sigma": 9.15942312468392 }, { - "mu": 20.51664158858426, - "sigma": 6.6005760670808815 + "mu": 6.9711931691657725, + "sigma": 9.15942312468392 } ] }, "ties": { "team_1": [ { - "mu": 24.823573253695134, - "sigma": 6.60903031873173 + "mu": 11.335955554350374, + "sigma": 9.2315523878558 } ], "team_2": [ { - "mu": 22.912026931066997, - "sigma": 6.569326466933734 + "mu": 8.72473165362405, + "sigma": 9.203982072532947 }, { - "mu": 22.912026931066997, - "sigma": 6.569326466933734 + "mu": 8.72473165362405, + "sigma": 9.203982072532947 } ], "team_3": [ { - "mu": 22.54296743482655, - "sigma": 6.537579021716175 + "mu": 10.736067897368924, + "sigma": 9.002955227772386 }, { - "mu": 22.54296743482655, - "sigma": 6.537579021716175 + "mu": 10.736067897368924, + "sigma": 9.002955227772386 }, { - "mu": 22.54296743482655, - "sigma": 6.537579021716175 + "mu": 10.736067897368924, + "sigma": 9.002955227772386 } ] } diff --git a/tests/models/data/plackettluce.json b/tests/models/data/plackettluce.json index 7afd62e..4a61697 100644 --- a/tests/models/data/plackettluce.json +++ b/tests/models/data/plackettluce.json @@ -1,123 +1,123 @@ { "model": { - "mu": 34.769193779029436, - "sigma": 6.201579611813977 + "mu": 31.321989232514305, + "sigma": 11.379964801443018 }, "normal": { "team_1": [ { - "mu": 37.735025845053656, - "sigma": 6.1810840601280885 + "mu": 36.48967347401391, + "sigma": 11.237778601372977 } ], "team_2": [ { - "mu": 31.80336171300522, - "sigma": 6.172341582637791 + "mu": 26.154304991014694, + "sigma": 11.17822477763209 }, { - "mu": 31.80336171300522, - "sigma": 6.172341582637791 + "mu": 26.154304991014694, + "sigma": 11.17822477763209 } ] }, "ranks": { "team_1": [ { - "mu": 34.59552112325378, - "sigma": 6.1810840601280885 + "mu": 30.19454401757094, + "sigma": 11.237778601372977 } ], "team_2": [ { - "mu": 34.94286643480509, - "sigma": 6.172341582637791 + "mu": 32.44943444745767, + "sigma": 11.17822477763209 }, { - "mu": 34.94286643480509, - "sigma": 6.172341582637791 + "mu": 32.44943444745767, + "sigma": 11.17822477763209 } ] }, "scores": { "team_1": [ { - "mu": 34.59552112325378, - "sigma": 6.1810840601280885 + "mu": 30.19454401757094, + "sigma": 11.237778601372977 } ], "team_2": [ { - "mu": 34.94286643480509, - "sigma": 6.172341582637791 + "mu": 32.44943444745767, + "sigma": 11.17822477763209 }, { - "mu": 34.94286643480509, - "sigma": 6.172341582637791 + "mu": 32.44943444745767, + "sigma": 11.17822477763209 } ] }, "limit_sigma": { "team_1": [ { - "mu": 36.98817598826861, - "sigma": 6.197577454406944 + "mu": 35.008962716922355, + "sigma": 11.322612945836939 } ], "team_2": [ { - "mu": 36.802978703338965, - "sigma": 6.18044438287098 + "mu": 34.774820565754936, + "sigma": 11.291328826858104 }, { - "mu": 36.802978703338965, - "sigma": 6.18044438287098 + "mu": 34.774820565754936, + "sigma": 11.291328826858104 } ], "team_3": [ { - "mu": 30.516426645480728, - "sigma": 6.168460776023396 + "mu": 24.182184414865624, + "sigma": 11.192736898569162 }, { - "mu": 30.516426645480728, - "sigma": 6.168460776023396 + "mu": 24.182184414865624, + "sigma": 11.192736898569162 }, { - "mu": 30.516426645480728, - "sigma": 6.168460776023396 + "mu": 24.182184414865624, + "sigma": 11.192736898569162 } ] }, "ties": { "team_1": [ { - "mu": 35.88068061230261, - "sigma": 6.199990584127615 + "mu": 33.21874815457553, + "sigma": 11.354896725884002 } ], "team_2": [ { - "mu": 34.515905909487216, - "sigma": 6.18044438287098 + "mu": 30.27713112192334, + "sigma": 11.291328826858104 }, { - "mu": 34.515905909487216, - "sigma": 6.18044438287098 + "mu": 30.27713112192334, + "sigma": 11.291328826858104 } ], "team_3": [ { - "mu": 33.91099481529849, - "sigma": 6.172659556888684 + "mu": 30.470088421044046, + "sigma": 11.249240904583088 }, { - "mu": 33.91099481529849, - "sigma": 6.172659556888684 + "mu": 30.470088421044046, + "sigma": 11.249240904583088 }, { - "mu": 33.91099481529849, - "sigma": 6.172659556888684 + "mu": 30.470088421044046, + "sigma": 11.249240904583088 } ] } diff --git a/tests/models/data/thurstonemostellerfull.json b/tests/models/data/thurstonemostellerfull.json index db1cd90..a7bffa4 100644 --- a/tests/models/data/thurstonemostellerfull.json +++ b/tests/models/data/thurstonemostellerfull.json @@ -1,123 +1,123 @@ { "model": { - "mu": 45.80576023612373, - "sigma": 10.119814840999156 + "mu": 35.57651902477546, + "sigma": 8.156812640776703 }, "normal": { "team_1": [ { - "mu": 61.32295448667373, - "sigma": 9.334981415942869 + "mu": 47.15222313993581, + "sigma": 7.5795052534375085 } ], "team_2": [ { - "mu": 30.288565985573733, - "sigma": 8.989686764502482 + "mu": 24.0008149096151, + "sigma": 7.326869763507038 }, { - "mu": 30.288565985573733, - "sigma": 8.989686764502482 + "mu": 24.0008149096151, + "sigma": 7.326869763507038 } ] }, "ranks": { "team_1": [ { - "mu": 45.70227321717305, - "sigma": 10.081409510764281 + "mu": 35.458850994184225, + "sigma": 8.117867387952899 } ], "team_2": [ { - "mu": 45.90924725507441, - "sigma": 10.065315692461603 + "mu": 35.69418705536669, + "sigma": 8.10150337728452 }, { - "mu": 45.90924725507441, - "sigma": 10.065315692461603 + "mu": 35.69418705536669, + "sigma": 8.10150337728452 } ] }, "scores": { "team_1": [ { - "mu": 45.70227321717305, - "sigma": 10.081409510764281 + "mu": 35.458850994184225, + "sigma": 8.117867387952899 } ], "team_2": [ { - "mu": 45.90924725507441, - "sigma": 10.065315692461603 + "mu": 35.69418705536669, + "sigma": 8.10150337728452 }, { - "mu": 45.90924725507441, - "sigma": 10.065315692461603 + "mu": 35.69418705536669, + "sigma": 8.10150337728452 } ] }, "limit_sigma": { "team_1": [ { - "mu": 67.8382439021007, - "sigma": 9.527236687971314 + "mu": 52.04189256271772, + "sigma": 7.70002104227257 } ], "team_2": [ { - "mu": 56.14412057619168, - "sigma": 9.536278276265291 + "mu": 43.492001748842696, + "sigma": 7.6990822049176 }, { - "mu": 56.14412057619168, - "sigma": 9.536278276265291 + "mu": 43.492001748842696, + "sigma": 7.6990822049176 } ], "team_3": [ { - "mu": 13.434916230078812, - "sigma": 8.419949795487625 + "mu": 11.195662762765956, + "sigma": 6.87787110012144 }, { - "mu": 13.434916230078812, - "sigma": 8.419949795487625 + "mu": 11.195662762765956, + "sigma": 6.87787110012144 }, { - "mu": 13.434916230078812, - "sigma": 8.419949795487625 + "mu": 11.195662762765956, + "sigma": 6.87787110012144 } ] }, "ties": { "team_1": [ { - "mu": 82.43631534304387, - "sigma": 8.706944769860177 + "mu": 62.88768557900054, + "sigma": 7.108379880506001 } ], "team_2": [ { - "mu": 30.02543143660279, - "sigma": 8.91012758629402 + "mu": 23.745309933957923, + "sigma": 7.256239130199337 }, { - "mu": 30.02543143660279, - "sigma": 8.91012758629402 + "mu": 23.745309933957923, + "sigma": 7.256239130199337 } ], "team_3": [ { - "mu": 24.955533928724524, - "sigma": 9.002643646004634 + "mu": 20.096561561367913, + "sigma": 7.3002414923037975 }, { - "mu": 24.955533928724524, - "sigma": 9.002643646004634 + "mu": 20.096561561367913, + "sigma": 7.3002414923037975 }, { - "mu": 24.955533928724524, - "sigma": 9.002643646004634 + "mu": 20.096561561367913, + "sigma": 7.3002414923037975 } ] } diff --git a/tests/models/data/thurstonemostellerpart.json b/tests/models/data/thurstonemostellerpart.json index ba018fe..3bd9578 100644 --- a/tests/models/data/thurstonemostellerpart.json +++ b/tests/models/data/thurstonemostellerpart.json @@ -1,123 +1,123 @@ { "model": { - "mu": 17.712411553528373, - "sigma": 4.0516555328540695 + "mu": 22.177612349590575, + "sigma": 11.187832724040407 }, "normal": { "team_1": [ { - "mu": 19.05482890639545, - "sigma": 4.035022659165134 + "mu": 25.81146210015194, + "sigma": 11.100692300903118 } ], "team_2": [ { - "mu": 16.369994200661296, - "sigma": 4.027755914554947 + "mu": 18.54376259902921, + "sigma": 11.064266557117664 }, { - "mu": 16.369994200661296, - "sigma": 4.027755914554947 + "mu": 18.54376259902921, + "sigma": 11.064266557117664 } ] }, "ranks": { "team_1": [ { - "mu": 17.44340623089713, - "sigma": 4.044176299828259 + "mu": 20.678709339425158, + "sigma": 11.128957601994994 } ], "team_2": [ { - "mu": 17.981416876159617, - "sigma": 4.04071832425657 + "mu": 23.676515359755992, + "sigma": 11.104349781474195 }, { - "mu": 17.981416876159617, - "sigma": 4.04071832425657 + "mu": 23.676515359755992, + "sigma": 11.104349781474195 } ] }, "scores": { "team_1": [ { - "mu": 17.44340623089713, - "sigma": 4.044176299828259 + "mu": 20.678709339425158, + "sigma": 11.128957601994994 } ], "team_2": [ { - "mu": 17.981416876159617, - "sigma": 4.04071832425657 + "mu": 23.676515359755992, + "sigma": 11.104349781474195 }, { - "mu": 17.981416876159617, - "sigma": 4.04071832425657 + "mu": 23.676515359755992, + "sigma": 11.104349781474195 } ] }, "limit_sigma": { "team_1": [ { - "mu": 19.22084021482846, - "sigma": 4.0295313748931525 + "mu": 24.714188074647936, + "sigma": 11.065525094152306 } ], "team_2": [ { - "mu": 17.981416876159617, - "sigma": 4.04071832425657 + "mu": 23.676515359755992, + "sigma": 11.104349781474195 }, { - "mu": 17.981416876159617, - "sigma": 4.04071832425657 + "mu": 23.676515359755992, + "sigma": 11.104349781474195 } ], "team_3": [ { - "mu": 15.934977569597041, - "sigma": 4.027165419760776 + "mu": 18.142133614367797, + "sigma": 11.078631451385885 }, { - "mu": 15.934977569597041, - "sigma": 4.027165419760776 + "mu": 18.142133614367797, + "sigma": 11.078631451385885 }, { - "mu": 15.934977569597041, - "sigma": 4.027165419760776 + "mu": 18.142133614367797, + "sigma": 11.078631451385885 } ] }, "ties": { "team_1": [ { - "mu": 19.16085795643484, - "sigma": 4.035725121124812 + "mu": 24.77002969633752, + "sigma": 11.108818051494769 } ], "team_2": [ { - "mu": 17.43944206383774, - "sigma": 4.044509996311233 + "mu": 20.850421823779325, + "sigma": 11.144648253090196 }, { - "mu": 17.43944206383774, - "sigma": 4.044509996311233 + "mu": 20.850421823779325, + "sigma": 11.144648253090196 } ], "team_3": [ { - "mu": 16.53693464031254, - "sigma": 4.01351730328268 + "mu": 20.91238552865488, + "sigma": 10.996426052460139 }, { - "mu": 16.53693464031254, - "sigma": 4.01351730328268 + "mu": 20.91238552865488, + "sigma": 10.996426052460139 }, { - "mu": 16.53693464031254, - "sigma": 4.01351730328268 + "mu": 20.91238552865488, + "sigma": 10.996426052460139 } ] } diff --git a/tests/models/generate.py b/tests/models/generate.py index 8e49549..539c806 100644 --- a/tests/models/generate.py +++ b/tests/models/generate.py @@ -1,6 +1,7 @@ """ CLI utility to generate expected test data for the Weng-Lin models. """ + import json import pathlib from statistics import NormalDist diff --git a/tests/models/test_common.py b/tests/models/test_common.py index 706f2ec..8fdb4eb 100644 --- a/tests/models/test_common.py +++ b/tests/models/test_common.py @@ -1,6 +1,7 @@ """ Tests common for all models. """ + from openskill.models import MODELS from openskill.models.common import ( _arg_sort, diff --git a/tests/models/weng_lin/test_bradley_terry_full.py b/tests/models/weng_lin/test_bradley_terry_full.py index ef36015..e289612 100644 --- a/tests/models/weng_lin/test_bradley_terry_full.py +++ b/tests/models/weng_lin/test_bradley_terry_full.py @@ -1,6 +1,7 @@ """ All tests for the BradleyTerryFull model are located here. """ + import json import pathlib from typing import List @@ -477,10 +478,10 @@ def test_predict_draw(): team_2 = [b1, b2] probability = model.predict_draw(teams=[team_1, team_2]) - assert probability == pytest.approx(0.2355271, 0.0001) + assert probability == pytest.approx(0.3839934, 0.0001) probability = model.predict_draw(teams=[team_1, team_2, [a1], [a2], [b1]]) - assert probability == pytest.approx(0.1144874, 0.0001) + assert probability == pytest.approx(0.0535105, 0.0001) probability = model.predict_draw(teams=[[b1], [b1]]) assert probability == pytest.approx(1) diff --git a/tests/models/weng_lin/test_bradley_terry_part.py b/tests/models/weng_lin/test_bradley_terry_part.py index 50c3757..f3b5d4f 100644 --- a/tests/models/weng_lin/test_bradley_terry_part.py +++ b/tests/models/weng_lin/test_bradley_terry_part.py @@ -1,6 +1,7 @@ """ All tests for the BradleyTerryPart model are located here. """ + import json import pathlib from typing import List @@ -480,10 +481,10 @@ def test_predict_draw(): team_2 = [b1, b2] probability = model.predict_draw(teams=[team_1, team_2]) - assert probability == pytest.approx(0.2355271, 0.0001) + assert probability == pytest.approx(0.3839934, 0.0001) probability = model.predict_draw(teams=[team_1, team_2, [a1], [a2], [b1]]) - assert probability == pytest.approx(0.1144874, 0.0001) + assert probability == pytest.approx(0.0535105, 0.0001) probability = model.predict_draw(teams=[[b1], [b1]]) assert probability == pytest.approx(1) diff --git a/tests/models/weng_lin/test_common.py b/tests/models/weng_lin/test_common.py index dffbcc7..49968eb 100644 --- a/tests/models/weng_lin/test_common.py +++ b/tests/models/weng_lin/test_common.py @@ -1,6 +1,7 @@ """ All tests common for Weng-Lin models are located here. """ + import random from typing import Any, List diff --git a/tests/models/weng_lin/test_plackett_luce.py b/tests/models/weng_lin/test_plackett_luce.py index 89666b4..2079add 100644 --- a/tests/models/weng_lin/test_plackett_luce.py +++ b/tests/models/weng_lin/test_plackett_luce.py @@ -1,6 +1,7 @@ """ All tests for the PlackettLuce model are located here. """ + import json import pathlib from typing import List @@ -475,10 +476,10 @@ def test_predict_draw(): team_2 = [b1, b2] probability = model.predict_draw(teams=[team_1, team_2]) - assert probability == pytest.approx(0.2355271, 0.0001) + assert probability == pytest.approx(0.3839934, 0.0001) probability = model.predict_draw(teams=[team_1, team_2, [a1], [a2], [b1]]) - assert probability == pytest.approx(0.1144874, 0.0001) + assert probability == pytest.approx(0.0535105, 0.0001) probability = model.predict_draw(teams=[[b1], [b1]]) assert probability == pytest.approx(1) diff --git a/tests/models/weng_lin/test_thurstone_mosteller_full.py b/tests/models/weng_lin/test_thurstone_mosteller_full.py index 5d91a4f..2435846 100644 --- a/tests/models/weng_lin/test_thurstone_mosteller_full.py +++ b/tests/models/weng_lin/test_thurstone_mosteller_full.py @@ -1,6 +1,7 @@ """ All tests for the ThurstoneMostellerFull model are located here. """ + import json import pathlib from typing import List @@ -484,10 +485,10 @@ def test_predict_draw(): team_2 = [b1, b2] probability = model.predict_draw(teams=[team_1, team_2]) - assert probability == pytest.approx(0.2355271, 0.0001) + assert probability == pytest.approx(0.3839934, 0.0001) probability = model.predict_draw(teams=[team_1, team_2, [a1], [a2], [b1]]) - assert probability == pytest.approx(0.1144874, 0.0001) + assert probability == pytest.approx(0.0535105, 0.0001) probability = model.predict_draw(teams=[[b1], [b1]]) assert probability == pytest.approx(1) diff --git a/tests/models/weng_lin/test_thurstone_mosteller_part.py b/tests/models/weng_lin/test_thurstone_mosteller_part.py index 714c3b8..dd01d86 100644 --- a/tests/models/weng_lin/test_thurstone_mosteller_part.py +++ b/tests/models/weng_lin/test_thurstone_mosteller_part.py @@ -1,6 +1,7 @@ """ All tests for the ThurstoneMostellerPart model are located here. """ + import json import pathlib from typing import List @@ -488,10 +489,10 @@ def test_predict_draw(): team_2 = [b1, b2] probability = model.predict_draw(teams=[team_1, team_2]) - assert probability == pytest.approx(0.2355271, 0.0001) + assert probability == pytest.approx(0.3839934, 0.0001) probability = model.predict_draw(teams=[team_1, team_2, [a1], [a2], [b1]]) - assert probability == pytest.approx(0.1144874, 0.0001) + assert probability == pytest.approx(0.0535105, 0.0001) probability = model.predict_draw(teams=[[b1], [b1]]) assert probability == pytest.approx(1) diff --git a/tox.ini b/tox.ini index 15a6109..5001281 100644 --- a/tox.ini +++ b/tox.ini @@ -38,8 +38,8 @@ commands = [testenv:lint] description = Run Linters deps = - black>=23.3.0 - isort>=5.12.0 + black>=24.1.1 + isort>=5.13.2 commands = isort . --check-only black . --check --verbose