{"id":24169,"library":"openskill","title":"openskill.py","description":"Multiplayer rating system implementing the Weng-Lin models (Plackett-Luce, Bradley-Terry, Thurstone-Mosteller). Pure Python, no dependencies. Version 6.2.0 requires Python ~=3.10. Active development with regular releases.","status":"active","version":"6.2.0","language":"python","source_language":"en","source_url":"https://github.com/vivekjoshy/openskill.py","tags":["rating","skill","multiplayer","weng-lin","Elo"],"install":[{"cmd":"pip install openskill","lang":"bash","label":"Install openskill"}],"dependencies":[],"imports":[{"note":"Wildcard imports are discouraged; import the module and use its functions.","wrong":"from openskill import *","symbol":"openskill","correct":"import openskill"},{"note":"","wrong":"","symbol":"rate","correct":"openskill.rate(t1, t2)"}],"quickstart":{"code":"import openskill\n\n# Define two teams with one player each\nteam1 = [openskill.Rating(mu=25, sigma=8.33)]\nteam2 = [openskill.Rating(mu=25, sigma=8.33)]\n\n# Team1 wins (lower rank is better, ranks default to 0,1,...)\nteam1, team2 = openskill.rate([team1, team2], ranks=[0, 1])\n\nprint(team1[0])\nprint(team2[0])\n","lang":"python","description":"Simple example: two players, one match, team1 wins."},"warnings":[{"fix":"Add `limit_sigma=True` to your rating or create Rating objects with `limit_sigma` parameter.","message":"In v6.0.0, the `limit_sigma` parameter is no longer implicitly set; you must pass it explicitly if you want sigma to have a floor.","severity":"breaking","affected_versions":">=6.0.0"},{"fix":"Upgrade to openskill>=6.1.3.","message":"v6.1.3 fixed a critical bug where players could gain infinite rating under certain conditions. Ensure you are on at least 6.1.3.","severity":"breaking","affected_versions":"<6.1.3"},{"fix":"Use Python >=3.10.","message":"Python 3.9 support dropped in v6.0.1. Use Python 3.10+.","severity":"deprecated","affected_versions":">=6.0.1"},{"fix":"Treat tuples as immutable; do not modify original Rating objects after passing to rate.","message":"The `rate` function expects a list of lists (teams) and returns updated teams. Mutating the input objects may lead to unexpected results.","severity":"gotcha","affected_versions":"all"},{"fix":"Use ranks=[0,1] where team1 is better (lower rank) than team2.","message":"Ranks are zero-indexed (lower rank = better). If you pass ranks incorrectly, win/loss direction may invert.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Use `import openskill` then `openskill.rate(...)`.","cause":"Trying to import rate as a top-level function directly, but it's a module function.","error":"ImportError: cannot import name 'rate' from 'openskill'"},{"fix":"Use `openskill.Rating()` (capital R).","cause":"typo: 'Rating' not 'rating'.","error":"AttributeError: module 'openskill' has no attribute 'Rating'"},{"fix":"Ensure each team has at least one Rating object.","cause":"Passing an empty list as a team.","error":"ValueError: A team should have at least one player"},{"fix":"Upgrade to openskill>=6.0.0 or omit the parameter.","cause":"Using a pre-6.0.0 version where limit_sigma wasn't a parameter.","error":"TypeError: __init__() got an unexpected keyword argument 'limit_sigma'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}