
    Ii
                        S r SSKJr  SSKJr  SSKJr  \(       a  SSKJrJ	r	  SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrg)z
Bot AI for Five Card Draw.
    )annotations)TYPE_CHECKING   )	best_hand   )FiveCardDrawGameFiveCardDrawPlayerc                    U R                   U:w  a  g U R                  S:X  a  [        X5        gU R                  (       d  g [	        X5      $ )Ndraw
draw_cards)current_playerphase_choose_discardsbetting_decide_bet)gameplayers     <c:\Users\dbart\PlayPalace11\server\games\fivecarddraw\bot.py	bot_thinkr      s?    f$zzV&<<t$$    c                ~   [        UR                  5      nUR                   Vs/ s H  o3R                  PM     nn[        U5      n[	        X$U5      n[        UR                  5       VVs/ s H  u  psUR                  U;  d  M  UPM     nnn[        UR                  U5      n[        U5      Ul        g s  snf s  snnf )N)	_evaluate_hand_categoryhandrank_count_ranks_select_keep_ranks	enumerate_limit_discardsset
to_discard)	r   r   categorycardrankscounts
keep_ranksidiscard_indicess	            r   r   r      s    &v{{3H#);;/;4YY;E/% F#HV<J(1&++(>^(>WQ$))S]B]q(>O^%fkk?COO,F 0 _s   B4*B9B9c                2   U R                   R                  UR                  5      n[        UR                  5      n[        U R                   R                  S5      nU R                   R                  5       =(       a    X$-   UR                  :*  nUS:X  a  U(       a  US:  a  ggX!R                  :  a  gUS:  a  U[        SUR                  S-  5      ::  a  gUS:  a  U[        SUR                  S-  5      ::  a  gU[        SUR                  S-  5      ::  a  gg	)
Nr   r   raisecall            fold)	r   amount_to_callidr   r   maxlast_raise_size	can_raisechips)r   r   to_callr!   	min_raiser4   s         r   r   r   $   s    ll))&))4G&v{{3HDLL00!4I&&(Rg.Afll-RI!|Q,,1}C6<<1+<$==1}C6<<2+=$>>#a+,,r   c                F    [        U 5      S:  a  g[        U 5      u  pUS   $ )N   r   )lenr   )r   score_s      r   r   r   8   s$    
4y1}HE8Or   c                J    0 nU  H  nUR                  US5      S-   X'   M     U$ )Nr   r   )get)r#   r$   r   s      r   r   r   ?   s-    Fzz$*Q. Mr   c                   U S:  a  [        U5      $ U S;   a-  UR                  5        VVs1 s H  u  p4US:X  d  M  UiM     snn$ U S:X  a-  UR                  5        VVs1 s H  u  p4US:X  d  M  UiM     snn$ [        5       $ s  snnf s  snnf )N   )r   r+   r+   r   )r   items)r!   r#   r$   r   counts        r   r   r   F   sx    1}5z6(.E%1*EE1}(.E%1*EE5L FEs   BBB.Bc                d    [        S U  5       5      (       a  SOSn[        U5      U:  a  US U $ U$ )Nc              3  >   #    U  H  oR                   S :H  v   M     g7f)r   N)r   ).0r"   s     r   	<genexpr>"_limit_discards.<locals>.<genexpr>Q   s     <ttIINts   r@   r   )anyr:   )r   r'   max_discardss      r   r   r   P   s9    <t<<<1!L
?l*}--r   N)r   'FiveCardDrawGame'r   'FiveCardDrawPlayer'returnz
str | None)r   rJ   r   rK   rL   None)r   listrL   int)r#   	list[int]rL   dict[int, int])r!   rO   r#   rP   r$   rQ   rL   zset[int])r   rN   r'   rP   rL   rP   )__doc__
__future__r   typingr   game_utils.poker_evaluatorr   r   r   r	   r   r   r   r   r   r   r    r   r   <module>rW      s>    #   3:%-(r   