
    !\i;                     4    d Z ddlmZmZ ddlZ G d d      Zy)zElo rating system    )DictOptionalNc                       e Zd ZdZdZdZedededefd       Zeefded	ed
ededef
d       Z	ede
eef   dedededede
eef   fd       Zy)	EloRatingzSimple Elo rating calculator    i  rating_arating_breturnc                 $    ddd|| z
  dz  z  z   z  S )z#Calculate expected score for team A   
   i   )r   r	   s     /app/app/ml/elo.pyexpected_scorezEloRating.expected_score   s#     A8 3s:;;<<    ratingexpectedactualk_factorc                     | |||z
  z  z   S )zUpdate rating based on resultr   )r   r   r   r   s       r   update_ratingzEloRating.update_rating   s     FX$5666r   team_ratingshome_team_idaway_team_id
home_score
away_scorec                 f   | j                  |t        j                        }| j                  |t        j                        }|dz   }t        j                  ||      }d|z
  }	||kD  rd}
d}n||k(  rd}
d}nd}
d}t        j	                  |||
      }t        j	                  ||	|      }|| |<   || |<   | S )z#Calculate new ratings after a matchd   r   g      ?g        g      ?)getr   INITIAL_RATINGr   r   )r   r   r   r   r   home_ratingaway_ratinghome_rating_adjustedhome_expectedaway_expectedhome_actualaway_actualnew_home_ratingnew_away_ratings                 r   calculate_ratingszEloRating.calculate_ratings   s     #&&|Y5M5MN"&&|Y5M5MN  +S0 "001E{SM) 
"KK:%KKKK $11+}kZ#11+}kZ%4\"%4\"r   N)__name__
__module____qualname____doc__K_FACTORr    staticmethodfloatr   r   r   intr*   r   r   r   r   r      s    &HN= =% =E = = 
 #	777 7 	7
 
7 7 $3:&$$ $ 	$
 $ 
c5j	$ $r   r   )r.   typingr   r   mathr   r   r   r   <module>r5      s     ! : :r   