
    ]iY                     l   d Z ddlZddlZddlmZ ddlmZmZmZ  ed      Z	e	dz  dz  Z
e	dz  d	z  Zi d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9Zd:ed;efd<Zd;ee   fd=Zd;ee   fd>Zd?ed;ee   fd@ZdAedBefdCZdD ZedEk(  r e        yy)FzBuild/merge betting/nba_historical.json from Kaggle nba_2008-2025.csv.

Source:
  data/kaggle/nba_2008-2025.csv

Provides: spreads, totals, moneylines, scores.
We merge into betting/nba_historical.json by (date, homeTeam, awayTeam).
    N)Path)DictTupleOptionalz/var/www/html/eventheodds/datakaggleznba_2008-2025.csvbettingznba_historical.jsonatlzAtlanta HawksbknzBrooklyn NetsboszBoston CelticschazCharlotte HornetschizChicago BullsclezCleveland CavaliersdalzDallas MavericksdenzDenver NuggetsdetzDetroit PistonsgszGolden State WarriorshouzHouston RocketsindzIndiana PacerslaczLos Angeles ClipperslalzLos Angeles LakersmemzMemphis Grizzliesmiaz
Miami HeatmilzMilwaukee BuckszMinnesota TimberwolveszNew Orleans PelicanszNew York KnickszOklahoma City ThunderzOrlando MagiczPhiladelphia 76erszPhoenix SunszPortland Trail BlazerszSan Antonio SpurszSacramento KingszToronto Raptorsz	Utah JazzzWashington Wizards)minnonyokcorlphiphxporsasactorutahwshsreturnc                     dj                  | xs dj                         j                         j                               S )N  )joinstriplowersplit)r'   s    E/var/www/html/eventheodds/scripts/build_nba_historical_from_kaggle.py_normr1   6   s.    88QW"OO%++-33566    c                     | y t        |       j                         }|dk(  s|j                         dk(  ry 	 t        t	        |            S # t
        $ r Y y w xY wNr+   nan)strr-   r.   intfloat	Exceptionxr'   s     r0   to_intr<   :   sU    yAABw!'')u$58} s   A 	AAc                     | y t        |       j                         }|dk(  s|j                         dk(  ry 	 t        |      S # t        $ r Y y w xY wr4   )r6   r-   r.   r8   r9   r:   s     r0   to_floatr>   F   sP    yAABw!'')u$Qx s   
A 	AArowc                    | j                  d      xs dj                         }|sy | j                  d      xs dj                         j                         }| j                  d      xs dj                         j                         }|r|sy t        j                  ||j	                               }t        j                  ||j	                               }t        | j                  d            }t        | j                  d            }||y t        | j                  d            xs t        |d d       }t        | j                  d	            }	t        | j                  d
            }
| j                  d      xs dj                         j                         }d }d }|	|dv rt        |	      }|dk(  r| }|}n| }|}t        | j                  d            }t        | j                  d            }t        d |||
||fD              }||kD  rd}n
||kD  rd}nd}d }|||z
  }||z   }|dkD  rd}n
|dk  rd}nd}d }|
||z   }||
kD  rd}n
||
k  rd}nd}d| dt        |      j                  dd       dt        |      j                  dd       }|d d||||||d||||dd|
ddt        |      |||||z
  ||z   dd S )!Ndater+   homeaway
score_home
score_awayseason   spreadtotalwhos_favored)rB   rC   moneyline_homemoneyline_awayc              3   $   K   | ]  }|d u 
 y wN ).0vs     r0   	<genexpr>zbuild_record.<locals>.<genexpr>x   s     ^Q1D=^s   drawr   pushoverunderzkaggle-nba--r*   _z-at-nba)	homeScore	awayScoreir   )moneylineHomemoneylineAway
spreadHome
spreadAwayspreadOddsHomespreadOddsAway	totalLinesource)winnerspreadCoveredtotalResultmargintotalPoints)idbdl_game_idsportrA   rF   homeTeamawayTeamscoresoddshasRealOddsresult)getr-   r.   TEAM_MAPupperr<   r7   r>   absanyr1   replacebool)r?   rA   	home_code	away_coderB   rC   shr"   rF   rH   rI   favspread_homespread_awayr'   ml_homeml_awayhas_realrd   spread_coveredrg   adjtotal_resulttpgids                            r0   build_recordr   R   s   GGFO!r((*D&B--/557I&B--/557II<<	9??#45D<<	9??#45D	%	&B	%	&B	zRZCGGH%&7#d2Ah-Fcggh'(FSWWW%&E77>"(b
/
/
1
7
7
9CKKc%55K&="KK"KKSWW-./GSWW-./G^;UGU\*]^^H 
Bw	bNb{"7#N1W#N#NL"W:!L%Z"L!LvQuT{223s;<DtATATUXY\A]@^
_C 

 %$%%""	
 H~+'2g7
/ r2   existingnewc           	      ~   i }| D ]c  }|j                  d      xs dt        |j                  dd            t        |j                  dd            f}|d   sS|d   sY|d   s_|||<   e d}d}|D ]  }|j                  d      xs dt        |j                  dd            t        |j                  dd            f}||v r<||   }|j                  d      xs i |j                  d      xs i }d	D ]:  }	j                  |	      |j                  |	      '|j                  |	      |	<   < j                  d
      dv r|j                  d
d      d
<   |d<   |j                  d      s|j                  d      r|d   |d<   t        |j                  d      xs' |j                  d      xs t        fddD                    |d<   |j                  d      s|j                  d      r|d   |d<   |dz  }|||<   |dz  } t	        |j                               }
|
j                  d        |
||fS )NrA   r+   rl   rm   r         ro   )r\   r]   r^   r_   rb   r`   ra   rc   )Nestimated_DO_NOT_BACKTESTr   rj   rp   c              3   D   K   | ]  }j                  |      d u  y wrN   rr   )rP   kcur_oddss     r0   rR   zmerge.<locals>.<genexpr>   s-       \}|}\d\h\hij\ksw\w  \}s    )r\   r]   r^   rb   rq   c                 &    | j                  dd      S )NrA   r+   r   )r;   s    r0   <lambda>zmerge.<locals>.<lambda>   s    155+ r2   )key)rr   r1   rx   rv   listvaluessort)r   r   idxgr   addedupdatedcurnew_oddsr   outr   s              @r0   merger      sK   ,.C uuV}"E!%%
2*>$?quuZXZG[A\]q6c!fQCH
 EG uuV}"E!%%
2*>$?quuZXZG[A\]#:c(Cwwv,"HuuV}*H  2<<?*x||A/J"*,,q/HQK2
 ||H%)LL%-\\(8%D""CK 77=)aeeM.B%&}%5M"!%cggm&<  '}m@T  '}X[  \}  B|  \}  Y}  "~C778$x !(HqLGCHQJE;> szz|
CHH+H,wr2   c                     t         j                         st        dt                t        j                  j                  dd       g } t        j                         r$	 t        j                  t        t        d            } g }t        t         dd      5 }t        j                  |      }|D ]!  }t        |      }|s|j                  |       # 	 d d d        t        | |      \  }}}t        t        d      5 }t        j                  ||d	
       d d d        t!        d |D              }	t#        dt                t#        dt%        |        dt%        |       d| d|        t#        dt%        |       d|	 d|r|	t%        |      z  dz  nddd       y # t        $ r g } Y (w xY w# 1 sw Y   xY w# 1 sw Y   xY w)NzMissing T)parentsexist_okrr+   zutf-8)newlineencodingwr   )indentc              3   D   K   | ]  }|j                  d       sd  yw)rp   r   Nr   )rP   r   s     r0   rR   zmain.<locals>.<genexpr>  s     9QAEE-$8q9s     zMerged NBA Kaggle into z
Existing: z | New built: z
 | Added: z | Updated: zTotal: z | hasRealOdds: z (d   r   z.1fz%))SRCexists
SystemExitOUTparentmkdirjsonloadopenr9   csv
DictReaderr   appendr   dumpsumprintlen)
r   r   fr   r?   recmergedr   r   reals
             r0   mainr      s   ::<8C5)**JJTD1H
zz|	yyc#/H C	c2	0  ANN1 	 Cs#C

3	   #8S1FE7	c# '!		&!A&' 9&99D	#C5
)*	Js8}o^CH:Zwl[bZc
de	GCK= 0bSY$s6{:J3:N_`ad8eeg
hi'  	H	   ' 's0   #F (F.?F.;F:F+*F+.F7:G__main__)__doc__r   r   pathlibr   typingr   r   r   BASEr   r   rs   r6   r1   r7   r<   r8   r>   dictr   r   r   r   __name__rO   r2   r0   <module>r      s      ( (,-
Xo++
Y..	?	? 
 
	
 
? 
  
 
 
 	
! 
 
 
! 
 
  
<!" 
#$ $
 
"#
=D7S 7S 7	# 		8E? 	ed ex~ eP+D +t +\j> zF r2   