James McCool commited on
Commit
6e003bf
·
1 Parent(s): 7a861ff

Adding WNBA support

Browse files
Files changed (3) hide show
  1. app.py +97 -1
  2. database.py +3 -2
  3. database_queries.py +520 -0
app.py CHANGED
@@ -546,6 +546,51 @@ def define_fd_nfl_showdown_slates():
546
  slate_name_lookup = dict(zip(slate_names, unique_slates))
547
  return slate_names, slate_name_lookup
548
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
549
  try:
550
  nfl_slate_names_dk, nfl_slate_name_lookup_dk = define_dk_nfl_showdown_slates()
551
  except:
@@ -1282,7 +1327,7 @@ with st.container():
1282
  site_var = st.selectbox("Select Site", ['Draftkings', 'Fanduel'])
1283
 
1284
  with col3:
1285
- sport_var = st.selectbox("Select Sport", ['MLB', 'NBA', 'NHL', 'MMA', 'NASCAR', 'GOLF', 'NFL'], key='sport_var')
1286
 
1287
  with col4:
1288
  type_var = st.selectbox("Select Game Type", ['Classic', 'Showdown'])
@@ -1340,6 +1385,8 @@ with st.container():
1340
  if site_var == 'Draftkings':
1341
  if sport_var == 'NBA':
1342
  slate_var3 = st.radio("Which slate data are you loading?", (nba_slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
 
 
1343
  elif sport_var == 'NFL':
1344
  slate_var3 = st.radio("Which slate data are you loading?", (nfl_slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1345
  elif sport_var == 'NHL':
@@ -1357,6 +1404,8 @@ with st.container():
1357
  elif site_var == 'Fanduel':
1358
  if sport_var == 'NBA':
1359
  slate_var3 = st.radio("Which slate data are you loading?", (nba_slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
 
 
1360
  elif sport_var == 'NFL':
1361
  slate_var3 = st.radio("Which slate data are you loading?", (nfl_slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1362
  elif sport_var == 'NHL':
@@ -1383,6 +1432,9 @@ with st.container():
1383
  elif sport_var == 'MLB':
1384
  salary_min_var = st.number_input("Minimum salary used", min_value = 0, max_value = 35000, value = 34000, step = 100, key = 'salary_min_var_fd')
1385
  salary_max_var = st.number_input("Maximum salary used", min_value = 0, max_value = 35000, value = 35000, step = 100, key = 'salary_max_var_fd')
 
 
 
1386
  else:
1387
  salary_min_var = st.number_input("Minimum salary used", min_value = 0, max_value = 60000, value = 59000, step = 100, key = 'salary_min_var_fd')
1388
  salary_max_var = st.number_input("Maximum salary used", min_value = 0, max_value = 60000, value = 60000, step = 100, key = 'salary_max_var_fd')
@@ -1457,6 +1509,14 @@ with st.container():
1457
  mlb_showdown_salaries = grab_mlb_showdown_salaries()
1458
  except:
1459
  mlb_showdown_salaries = None
 
 
 
 
 
 
 
 
1460
 
1461
  try:
1462
  selected_tab = st.segmented_control(
@@ -1675,6 +1735,8 @@ if selected_tab == 'Data Load':
1675
  if type_var != 'Showdown':
1676
  if sport_var == 'NBA':
1677
  portfolio_load = init_DK_NBA_lineups(type_var, slate_var3, prio_var, prio_mix, dk_nba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
 
 
1678
  elif sport_var == 'NFL':
1679
  portfolio_load = init_DK_NFL_lineups(type_var, slate_var3, prio_var, prio_mix, dk_nfl_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1680
  elif sport_var == 'NHL':
@@ -1690,6 +1752,8 @@ if selected_tab == 'Data Load':
1690
  else:
1691
  if sport_var == 'NBA':
1692
  portfolio_load = init_DK_NBA_lineups(type_var, nba_slate_name_lookup_dk[slate_var3], prio_var, prio_mix, dk_nba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
 
 
1693
  elif sport_var == 'NFL':
1694
  portfolio_load = init_DK_NFL_lineups(type_var, nfl_slate_name_lookup_dk[slate_var3], prio_var, prio_mix, dk_nfl_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1695
  elif sport_var == 'NHL':
@@ -1714,6 +1778,8 @@ if selected_tab == 'Data Load':
1714
  ## Testing something here
1715
  if sport_var == 'NBA':
1716
  portfolio_load = init_FD_NBA_lineups(type_var, slate_var3, prio_var, prio_mix, fd_nba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
 
 
1717
  elif sport_var == 'NFL':
1718
  portfolio_load = init_FD_NFL_lineups(type_var, slate_var3, prio_var, prio_mix, fd_nfl_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1719
  elif sport_var == 'NHL':
@@ -1729,6 +1795,8 @@ if selected_tab == 'Data Load':
1729
  else:
1730
  if sport_var == 'NBA':
1731
  portfolio_load = init_FD_NBA_lineups(type_var, nba_slate_name_lookup_fd[slate_var3], prio_var, prio_mix, fd_nba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
 
 
1732
  elif sport_var == 'NFL':
1733
  portfolio_load = init_FD_NFL_lineups(type_var, nfl_slate_name_lookup_fd[slate_var3], prio_var, prio_mix, fd_nfl_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1734
  elif sport_var == 'NHL':
@@ -2054,8 +2122,36 @@ if selected_tab == 'Data Load':
2054
  st.session_state['locked_teams_list'] = None
2055
  grid_map = None
2056
  opp_map = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2057
  st.session_state['db_projections_file'] = projections_file
2058
  st.session_state['projections_loaded'] = True
 
2059
  if 'projections_df' in st.session_state:
2060
  del st.session_state['projections_df']
2061
 
 
546
  slate_name_lookup = dict(zip(slate_names, unique_slates))
547
  return slate_names, slate_name_lookup
548
 
549
+ def grab_wnba_reg_salaries(slate_var: str):
550
+ collection = salaries_db["WNBA_reg_player_info"]
551
+ eastern = pytz.timezone('US/Eastern')
552
+ today_str = datetime.now(eastern).strftime("%Y%m%d")
553
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
554
+ records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
555
+ records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
556
+ if slate_var == 'Main':
557
+ records = records.sort_values(by='ID', ascending=True)
558
+ records = records.drop_duplicates(subset=['Name'], keep='first')
559
+ elif slate_var == 'Secondary':
560
+ records = records.sort_values(by='ID', ascending=True)
561
+ # Keep middle occurrence: drop first and last, keep middle
562
+ grouped = records.groupby('Name')
563
+ middle_records = []
564
+ for name, group in grouped:
565
+ if len(group) == 1:
566
+ # Only one record, keep it
567
+ middle_records.append(group)
568
+ elif len(group) == 2:
569
+ # Two records, keep the second one (last)
570
+ middle_records.append(group.iloc[1:2])
571
+ else:
572
+ # Three or more records, keep the middle one(s)
573
+ # For odd number of records, keep the true middle
574
+ # For even number of records, keep the record at index len//2
575
+ middle_idx = len(group) // 2
576
+ middle_records.append(group.iloc[middle_idx:middle_idx+1])
577
+ records = pd.concat(middle_records, ignore_index=True)
578
+ elif slate_var == 'Auxiliary':
579
+ records = records.sort_values(by='ID', ascending=True)
580
+ records = records.drop_duplicates(subset=['Name'], keep='last')
581
+ return records
582
+
583
+ def grab_wnba_showdown_salaries():
584
+ collection = salaries_db["WNBA_showdown_player_info"]
585
+ # Get current time in Eastern Time (handles EST/EDT automatically)
586
+ eastern = pytz.timezone('US/Eastern')
587
+ today_str = datetime.now(eastern).strftime("%Y%m%d")
588
+ print(f"Current date in Eastern Time: {today_str}")
589
+ records = pd.DataFrame(list(collection.find({'Contest Date': {'$gte': today_str}})))
590
+ records = records[['Display Name', 'draftableId', 'Position', 'Salary']]
591
+ records = records.rename(columns={'Display Name': 'Name', 'draftableId': 'ID', 'Position': 'Roster Position'})
592
+ return records
593
+
594
  try:
595
  nfl_slate_names_dk, nfl_slate_name_lookup_dk = define_dk_nfl_showdown_slates()
596
  except:
 
1327
  site_var = st.selectbox("Select Site", ['Draftkings', 'Fanduel'])
1328
 
1329
  with col3:
1330
+ sport_var = st.selectbox("Select Sport", ['MLB', 'NBA', 'NHL', 'MMA', 'NASCAR', 'GOLF', 'NFL', 'WNBA'], key='sport_var')
1331
 
1332
  with col4:
1333
  type_var = st.selectbox("Select Game Type", ['Classic', 'Showdown'])
 
1385
  if site_var == 'Draftkings':
1386
  if sport_var == 'NBA':
1387
  slate_var3 = st.radio("Which slate data are you loading?", (nba_slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1388
+ elif sport_var == 'WNBA':
1389
+ slate_var3 = st.radio("Which slate data are you loading?", (wnba_slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1390
  elif sport_var == 'NFL':
1391
  slate_var3 = st.radio("Which slate data are you loading?", (nfl_slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1392
  elif sport_var == 'NHL':
 
1404
  elif site_var == 'Fanduel':
1405
  if sport_var == 'NBA':
1406
  slate_var3 = st.radio("Which slate data are you loading?", (nba_slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1407
+ elif sport_var == 'WNBA':
1408
+ slate_var3 = st.radio("Which slate data are you loading?", (wnba_slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1409
  elif sport_var == 'NFL':
1410
  slate_var3 = st.radio("Which slate data are you loading?", (nfl_slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1411
  elif sport_var == 'NHL':
 
1432
  elif sport_var == 'MLB':
1433
  salary_min_var = st.number_input("Minimum salary used", min_value = 0, max_value = 35000, value = 34000, step = 100, key = 'salary_min_var_fd')
1434
  salary_max_var = st.number_input("Maximum salary used", min_value = 0, max_value = 35000, value = 35000, step = 100, key = 'salary_max_var_fd')
1435
+ elif sport_var == 'WNBA':
1436
+ salary_min_var = st.number_input("Minimum salary used", min_value = 0, max_value = 40000, value = 39000, step = 100, key = 'salary_min_var_fd')
1437
+ salary_max_var = st.number_input("Maximum salary used", min_value = 0, max_value = 40000, value = 40000, step = 100, key = 'salary_max_var_fd')
1438
  else:
1439
  salary_min_var = st.number_input("Minimum salary used", min_value = 0, max_value = 60000, value = 59000, step = 100, key = 'salary_min_var_fd')
1440
  salary_max_var = st.number_input("Maximum salary used", min_value = 0, max_value = 60000, value = 60000, step = 100, key = 'salary_max_var_fd')
 
1509
  mlb_showdown_salaries = grab_mlb_showdown_salaries()
1510
  except:
1511
  mlb_showdown_salaries = None
1512
+ try:
1513
+ wnba_reg_salaries = grab_wnba_reg_salaries(slate_var3)
1514
+ except:
1515
+ wnba_reg_salaries = None
1516
+ try:
1517
+ wnba_showdown_salaries = grab_wnba_showdown_salaries()
1518
+ except:
1519
+ wnba_showdown_salaries = None
1520
 
1521
  try:
1522
  selected_tab = st.segmented_control(
 
1735
  if type_var != 'Showdown':
1736
  if sport_var == 'NBA':
1737
  portfolio_load = init_DK_NBA_lineups(type_var, slate_var3, prio_var, prio_mix, dk_nba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1738
+ elif sport_var == 'WNBA':
1739
+ portfolio_load = init_DK_WNBA_lineups(type_var, slate_var3, prio_var, prio_mix, dk_wnba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1740
  elif sport_var == 'NFL':
1741
  portfolio_load = init_DK_NFL_lineups(type_var, slate_var3, prio_var, prio_mix, dk_nfl_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1742
  elif sport_var == 'NHL':
 
1752
  else:
1753
  if sport_var == 'NBA':
1754
  portfolio_load = init_DK_NBA_lineups(type_var, nba_slate_name_lookup_dk[slate_var3], prio_var, prio_mix, dk_nba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1755
+ elif sport_var == 'WNBA':
1756
+ portfolio_load = init_DK_WNBA_lineups(type_var, wnba_slate_name_lookup_dk[slate_var3], prio_var, prio_mix, dk_wnba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1757
  elif sport_var == 'NFL':
1758
  portfolio_load = init_DK_NFL_lineups(type_var, nfl_slate_name_lookup_dk[slate_var3], prio_var, prio_mix, dk_nfl_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1759
  elif sport_var == 'NHL':
 
1778
  ## Testing something here
1779
  if sport_var == 'NBA':
1780
  portfolio_load = init_FD_NBA_lineups(type_var, slate_var3, prio_var, prio_mix, fd_nba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1781
+ elif sport_var == 'WNBA':
1782
+ portfolio_load = init_FD_WNBA_lineups(type_var, slate_var3, prio_var, prio_mix, fd_wnba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1783
  elif sport_var == 'NFL':
1784
  portfolio_load = init_FD_NFL_lineups(type_var, slate_var3, prio_var, prio_mix, fd_nfl_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1785
  elif sport_var == 'NHL':
 
1795
  else:
1796
  if sport_var == 'NBA':
1797
  portfolio_load = init_FD_NBA_lineups(type_var, nba_slate_name_lookup_fd[slate_var3], prio_var, prio_mix, fd_nba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1798
+ elif sport_var == 'WNBA':
1799
+ portfolio_load = init_FD_WNBA_lineups(type_var, wnba_slate_name_lookup_fd[slate_var3], prio_var, prio_mix, fd_wnba_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1800
  elif sport_var == 'NFL':
1801
  portfolio_load = init_FD_NFL_lineups(type_var, nfl_slate_name_lookup_fd[slate_var3], prio_var, prio_mix, fd_nfl_showdown_db_translation, lineup_num_var, salary_min_var, salary_max_var, min_stacks_var, max_stacks_var, min_secondary_stacks_var, max_secondary_stacks_var, [])
1802
  elif sport_var == 'NHL':
 
2122
  st.session_state['locked_teams_list'] = None
2123
  grid_map = None
2124
  opp_map = None
2125
+ elif sport_var == 'WNBA':
2126
+ if site_var == 'Draftkings':
2127
+ if type_var == 'Classic':
2128
+ projections_file = init_wnba_baselines(type_var, site_var, slate_var3)[0]
2129
+ minutes_map = None
2130
+ st.session_state['locked_teams_list'] = None
2131
+ grid_map = None
2132
+ opp_map = None
2133
+ elif type_var == 'Showdown':
2134
+ projections_file = init_wnba_baselines(type_var, site_var, slate_var3)[2]
2135
+ minutes_map = None
2136
+ st.session_state['locked_teams_list'] = None
2137
+ grid_map = None
2138
+ opp_map = None
2139
+ elif site_var == 'Fanduel':
2140
+ if type_var == 'Classic':
2141
+ projections_file = init_wnba_baselines(type_var, site_var, slate_var3)[1]
2142
+ minutes_map = None
2143
+ st.session_state['locked_teams_list'] = None
2144
+ grid_map = None
2145
+ opp_map = None
2146
+ elif type_var == 'Showdown':
2147
+ projections_file = init_wnba_baselines(type_var, site_var, slate_var3)[3]
2148
+ minutes_map = None
2149
+ st.session_state['locked_teams_list'] = None
2150
+ grid_map = None
2151
+ opp_map = None
2152
  st.session_state['db_projections_file'] = projections_file
2153
  st.session_state['projections_loaded'] = True
2154
+
2155
  if 'projections_df' in st.session_state:
2156
  del st.session_state['projections_df']
2157
 
database.py CHANGED
@@ -12,12 +12,13 @@ def init_conn():
12
  salaries_db = client['Contest_Information']
13
  nfl_db = client["NFL_Database"]
14
  nba_db = client["NBA_Database"]
 
15
  mlb_db = client["MLB_Database"]
16
  nhl_db = client["NHL_Database"]
17
  mma_db = client["MMA_Database"]
18
  pga_db = client["PGA_Database"]
19
  nascar_db = client['NASCAR_Database']
20
 
21
- return nfl_db, salaries_db, nba_db, mlb_db, nhl_db, mma_db, pga_db, nascar_db
22
 
23
- nfl_db, salaries_db, nba_db, mlb_db, nhl_db, mma_db, pga_db, nascar_db = init_conn()
 
12
  salaries_db = client['Contest_Information']
13
  nfl_db = client["NFL_Database"]
14
  nba_db = client["NBA_Database"]
15
+ wnba_db = client["WNBA_DFS"]
16
  mlb_db = client["MLB_Database"]
17
  nhl_db = client["NHL_Database"]
18
  mma_db = client["MMA_Database"]
19
  pga_db = client["PGA_Database"]
20
  nascar_db = client['NASCAR_Database']
21
 
22
+ return nfl_db, salaries_db, nba_db, wnba_db, mlb_db, nhl_db, mma_db, pga_db, nascar_db
23
 
24
+ nfl_db, salaries_db, nba_db, wnba_db, mlb_db, nhl_db, mma_db, pga_db, nascar_db = init_conn()
database_queries.py CHANGED
@@ -2952,6 +2952,526 @@ def init_FD_PGA_lineups(type_var, slate_var, prio_var, prio_mix, lineup_num, sal
2952
 
2953
  return FD_seed
2954
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2955
  def init_nascar_baselines(type_var: str, site_var: str, slate_var: str):
2956
 
2957
  if slate_var == 'Main':
 
2952
 
2953
  return FD_seed
2954
 
2955
+ def init_wnba_baselines(type_var: str, site_var: str, slate_var: str):
2956
+
2957
+ if slate_var == 'Main':
2958
+ slate_var = 'Main Slate'
2959
+ elif slate_var == 'Secondary':
2960
+ slate_var = 'Secondary Slate'
2961
+ elif slate_var == 'Auxiliary':
2962
+ slate_var = 'Late Slate'
2963
+
2964
+ if type_var == 'Showdown':
2965
+ collection = wnba_db["Player_SD_Range_Of_Outcomes"]
2966
+ cursor = collection.find()
2967
+
2968
+ raw_display = pd.DataFrame(list(cursor))
2969
+ raw_display = raw_display[['Player', 'Position', 'Team', 'Salary', 'Minutes Proj', 'Median', 'Own', 'CPT_Own', 'player_id', 'slate', 'site', 'version', 'timestamp']]
2970
+ raw_display['Median'] = raw_display['Median'].replace('', 0).astype(float)
2971
+ raw_display = raw_display.rename(columns={"player_id": "player_ID"})
2972
+ raw_display = raw_display.loc[raw_display['Median'] > 0]
2973
+ raw_display = raw_display.apply(pd.to_numeric, errors='ignore')
2974
+ sd_raw = raw_display.sort_values(by='Median', ascending=False)
2975
+ dk_sd_roo_raw = sd_raw[sd_raw['site'] == 'Draftkings']
2976
+ dk_sd_id_map = dict(zip(dk_sd_roo_raw['Player'], dk_sd_roo_raw['player_ID']))
2977
+ fd_sd_roo_raw = sd_raw[sd_raw['site'] == 'Fanduel']
2978
+ fd_sd_id_map = dict(zip(fd_sd_roo_raw['Player'], fd_sd_roo_raw['player_ID']))
2979
+ fd_sd_roo_raw['player_ID'] = fd_sd_roo_raw['player_ID'].astype(str)
2980
+ fd_sd_roo_raw['player_ID'] = fd_sd_roo_raw['player_ID'].str.rsplit('-', n=1).str[0].astype(str)
2981
+
2982
+ minutes_map = dict(zip(sd_raw['Player'], sd_raw['Minutes Proj']))
2983
+ locked_teams_list = None
2984
+
2985
+ dk_sd_roo_raw = dk_sd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'timestamp', 'site', 'Minutes Proj'])
2986
+ fd_sd_roo_raw = fd_sd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'timestamp', 'site', 'Minutes Proj'])
2987
+
2988
+ dk_sd_roo_raw = dk_sd_roo_raw.rename(columns={'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'Median': 'median', 'Own': 'ownership', 'CPT_Own': 'captain ownership'})
2989
+ fd_sd_roo_raw = fd_sd_roo_raw.rename(columns={'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'Median': 'median', 'Own': 'ownership', 'CPT_Own': 'captain ownership'})
2990
+
2991
+ dk_roo_raw = None
2992
+ fd_roo_raw = None
2993
+ dk_id_map = None
2994
+ fd_id_map = None
2995
+
2996
+ else:
2997
+ collection = wnba_db["Player_Range_Of_Outcomes"]
2998
+ cursor = collection.find()
2999
+
3000
+ raw_display = pd.DataFrame(list(cursor))
3001
+ raw_display = raw_display[['Player', 'Position', 'Team', 'Salary', 'Minutes Proj', 'Median', 'Own', 'CPT_Own', 'player_id', 'slate', 'site', 'version', 'timestamp']]
3002
+ raw_display = raw_display.rename(columns={"player_id": "player_ID"})
3003
+ raw_display['Median'] = raw_display['Median'].replace('', 0).astype(float)
3004
+ raw_display = raw_display.loc[raw_display['Median'] > 0]
3005
+ raw_display = raw_display[raw_display['slate'] == slate_var]
3006
+ dk_roo_raw = raw_display[raw_display['site'] == 'Draftkings']
3007
+ fd_roo_raw = raw_display[raw_display['site'] == 'Fanduel']
3008
+ dk_id_map = dict(zip(dk_roo_raw['Player'], dk_roo_raw['player_ID']))
3009
+ fd_id_map = dict(zip(fd_roo_raw['Player'], fd_roo_raw['player_ID']))
3010
+ raw_display = raw_display.apply(pd.to_numeric, errors='ignore')
3011
+
3012
+ minutes_map = dict(zip(raw_display['Player'], raw_display['Minutes Proj']))
3013
+
3014
+ dk_roo_raw = dk_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'timestamp', 'site', 'Minutes Proj'])
3015
+ fd_roo_raw = fd_roo_raw.drop(columns=['player_ID', 'slate', 'version', 'timestamp', 'site', 'Minutes Proj'])
3016
+
3017
+ dk_roo_raw = dk_roo_raw.rename(columns={'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'Median': 'median', 'Own': 'ownership', 'CPT_Own': 'captain ownership'})
3018
+ fd_roo_raw = fd_roo_raw.rename(columns={'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'Median': 'median', 'Own': 'ownership', 'CPT_Own': 'captain ownership'})
3019
+
3020
+ collection = wnba_db["Live_Projections"]
3021
+ cursor = collection.find()
3022
+
3023
+ raw_display = pd.DataFrame(list(cursor))
3024
+ locked_teams_frame = raw_display[raw_display['Locked'] == 1]
3025
+ live_dict = dict(zip(raw_display['Player'], raw_display['Live_Proj']))
3026
+ live_median_dict = dict(zip(raw_display['Player'], raw_display['Median']))
3027
+ locked_teams_dict = dict(zip(locked_teams_frame['Team'], locked_teams_frame['Locked']))
3028
+ locked_teams_list = list(locked_teams_dict.keys())
3029
+
3030
+ dk_roo_raw['median'] = dk_roo_raw['player_names'].map(live_dict)
3031
+ fd_roo_raw['median'] = fd_roo_raw['player_names'].map(live_dict)
3032
+
3033
+ dk_roo_raw['median'] = np.where(dk_roo_raw['median'] == 0, dk_roo_raw['player_names'].map(live_median_dict), dk_roo_raw['median'])
3034
+ fd_roo_raw['median'] = np.where(fd_roo_raw['median'] == 0, fd_roo_raw['player_names'].map(live_median_dict), fd_roo_raw['median'])
3035
+
3036
+ dk_sd_roo_raw = None
3037
+ fd_sd_roo_raw = None
3038
+ dk_sd_id_map = None
3039
+ fd_sd_id_map = None
3040
+
3041
+ return dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map, minutes_map, locked_teams_list
3042
+
3043
+ def init_DK_WNBA_lineups(type_var, slate_var, prio_var, prio_mix, wnba_db_translation, lineup_num, salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max, player_var2):
3044
+
3045
+ if prio_var == 'Mix':
3046
+ prio_var = None
3047
+
3048
+ if type_var == 'Classic':
3049
+ if slate_var == 'Main':
3050
+ collection = wnba_db['DK_WNBA_name_map']
3051
+ cursor = collection.find()
3052
+ raw_data = pd.DataFrame(list(cursor))
3053
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
3054
+
3055
+ collection = wnba_db['DK_WNBA_seed_frame']
3056
+ if prio_var == None:
3057
+ if player_var2 != []:
3058
+ player_columns = ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']
3059
+ query_conditions = []
3060
+
3061
+ for player in player_var2:
3062
+ # Create a condition for each player to check if they appear in any column
3063
+ player_condition = {'$or': [{col: player} for col in player_columns]}
3064
+ query_conditions.append(player_condition)
3065
+
3066
+ # Combine all player conditions with $or
3067
+ if query_conditions:
3068
+ filter_query = {'$or': query_conditions}
3069
+ cursor1 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3070
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3071
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3072
+ }]}).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3073
+ cursor2 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3074
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3075
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3076
+ }]}).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3077
+ else:
3078
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3079
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3080
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3081
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3082
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3083
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3084
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3085
+ else:
3086
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3087
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3088
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3089
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3090
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3091
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3092
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3093
+ else:
3094
+ cursor = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3095
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3096
+ }).sort(prio_var, -1).limit(lineup_num)
3097
+ raw_display = pd.DataFrame(list(cursor))
3098
+
3099
+ raw_display = raw_display.drop_duplicates(subset=['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL'])
3100
+ raw_display = raw_display.head(lineup_num)
3101
+
3102
+ raw_display = raw_display[['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']]
3103
+ dict_columns = ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']
3104
+ # Map names
3105
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
3106
+ elif slate_var == 'Secondary':
3107
+ collection = wnba_db['DK_WNBA_Secondary_name_map']
3108
+ cursor = collection.find()
3109
+ raw_data = pd.DataFrame(list(cursor))
3110
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
3111
+
3112
+ collection = wnba_db['DK_WNBA_Secondary_seed_frame']
3113
+ if prio_var == None:
3114
+ if player_var2 != []:
3115
+ player_columns = ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']
3116
+ query_conditions = []
3117
+
3118
+ for player in player_var2:
3119
+ # Create a condition for each player to check if they appear in any column
3120
+ player_condition = {'$or': [{col: player} for col in player_columns]}
3121
+ query_conditions.append(player_condition)
3122
+
3123
+ # Combine all player conditions with $or
3124
+ if query_conditions:
3125
+ filter_query = {'$or': query_conditions}
3126
+ cursor1 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3127
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3128
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3129
+ }]}).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3130
+ cursor2 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3131
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3132
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3133
+ }]}).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3134
+ else:
3135
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3136
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3137
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3138
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3139
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3140
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3141
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3142
+ else:
3143
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3144
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3145
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3146
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3147
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3148
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3149
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3150
+ else:
3151
+ cursor = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3152
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3153
+ }).sort(prio_var, -1).limit(lineup_num)
3154
+ raw_display = pd.DataFrame(list(cursor))
3155
+
3156
+ raw_display = raw_display.drop_duplicates(subset=['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL'])
3157
+ raw_display = raw_display.head(lineup_num)
3158
+
3159
+ raw_display = raw_display[['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']]
3160
+ dict_columns = ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']
3161
+ # Map names
3162
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
3163
+ elif slate_var == 'Auxiliary':
3164
+ collection = wnba_db['DK_WNBA_Late_name_map']
3165
+ cursor = collection.find()
3166
+ raw_data = pd.DataFrame(list(cursor))
3167
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
3168
+
3169
+ collection = wnba_db['DK_WNBA_Late_seed_frame']
3170
+ if prio_var == None:
3171
+ if player_var2 != []:
3172
+ player_columns = ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']
3173
+ query_conditions = []
3174
+
3175
+ for player in player_var2:
3176
+ # Create a condition for each player to check if they appear in any column
3177
+ player_condition = {'$or': [{col: player} for col in player_columns]}
3178
+ query_conditions.append(player_condition)
3179
+
3180
+ # Combine all player conditions with $or
3181
+ if query_conditions:
3182
+ filter_query = {'$or': query_conditions}
3183
+ cursor1 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3184
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3185
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3186
+ }]}).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3187
+ cursor2 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3188
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3189
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3190
+ }]}).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3191
+ else:
3192
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3193
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3194
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3195
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3196
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3197
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3198
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3199
+ else:
3200
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3201
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3202
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3203
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3204
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3205
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3206
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3207
+ else:
3208
+ cursor = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3209
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3210
+ }).sort(prio_var, -1).limit(lineup_num)
3211
+ raw_display = pd.DataFrame(list(cursor))
3212
+
3213
+ raw_display = raw_display.drop_duplicates(subset=['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL'])
3214
+ raw_display = raw_display.head(lineup_num)
3215
+
3216
+ raw_display = raw_display[['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']]
3217
+ dict_columns = ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL']
3218
+ # Map names
3219
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
3220
+ elif type_var == 'Showdown':
3221
+ collection = wnba_db[wnba_db_translation[slate_var]]
3222
+ if prio_var == None:
3223
+ if player_var2 != []:
3224
+ player_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
3225
+ query_conditions = []
3226
+
3227
+ for player in player_var2:
3228
+ # Create a condition for each player to check if they appear in any column
3229
+ player_condition = {'$or': [{col: player} for col in player_columns]}
3230
+ query_conditions.append(player_condition)
3231
+
3232
+ # Combine all player conditions with $or
3233
+ if query_conditions:
3234
+ filter_query = {'$or': query_conditions}
3235
+ cursor1 = collection.find(_showdown_seed_filter_with_players(filter_query, salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3236
+ cursor2 = collection.find(_showdown_seed_filter_with_players(filter_query, salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3237
+ else:
3238
+ cursor1 = collection.find(_showdown_seed_filter(salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3239
+ cursor2 = collection.find(_showdown_seed_filter(salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3240
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3241
+ else:
3242
+ cursor1 = collection.find(_showdown_seed_filter(salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3243
+ cursor2 = collection.find(_showdown_seed_filter(salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3244
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3245
+ else:
3246
+ cursor = collection.find(_showdown_seed_filter(salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort(prio_var, -1).limit(lineup_num)
3247
+ raw_display = pd.DataFrame(list(cursor))
3248
+
3249
+ raw_display = raw_display.drop_duplicates(subset=['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'])
3250
+ raw_display = raw_display.head(lineup_num)
3251
+
3252
+ raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']]
3253
+
3254
+ DK_seed = raw_display.to_numpy()
3255
+
3256
+ return DK_seed
3257
+
3258
+ def init_FD_WNBA_lineups(type_var, slate_var, prio_var, prio_mix, wnba_db_translation, lineup_num, salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max, player_var2):
3259
+
3260
+ if prio_var == 'Mix':
3261
+ prio_var = None
3262
+
3263
+ if type_var == 'Classic':
3264
+ if slate_var == 'Main':
3265
+ collection = wnba_db['FD_WNBA_name_map']
3266
+ cursor = collection.find()
3267
+ raw_data = pd.DataFrame(list(cursor))
3268
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
3269
+
3270
+
3271
+ collection = wnba_db['FD_WNBA_seed_frame']
3272
+ if prio_var == None:
3273
+ if player_var2 != []:
3274
+ player_columns = ['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']
3275
+ query_conditions = []
3276
+
3277
+ for player in player_var2:
3278
+ # Create a condition for each player to check if they appear in any column
3279
+ player_condition = {'$or': [{col: player} for col in player_columns]}
3280
+ query_conditions.append(player_condition)
3281
+
3282
+ # Combine all player conditions with $or
3283
+ if query_conditions:
3284
+ filter_query = {'$or': query_conditions}
3285
+ cursor1 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3286
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3287
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3288
+ }]}).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3289
+ cursor2 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3290
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3291
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3292
+ }]}).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3293
+ else:
3294
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3295
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3296
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3297
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3298
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3299
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3300
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3301
+ else:
3302
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3303
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3304
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3305
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3306
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3307
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3308
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3309
+ else:
3310
+ cursor = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3311
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3312
+ }).sort(prio_var, -1).limit(lineup_num)
3313
+ raw_display = pd.DataFrame(list(cursor))
3314
+
3315
+ raw_display = raw_display.drop_duplicates(subset=['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4'])
3316
+ raw_display = raw_display.head(lineup_num)
3317
+
3318
+ raw_display = raw_display[['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']]
3319
+ dict_columns = ['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']
3320
+ # Map names
3321
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
3322
+ elif slate_var == 'Secondary':
3323
+ collection = wnba_db['FD_WNBA_Secondary_name_map']
3324
+ cursor = collection.find()
3325
+ raw_data = pd.DataFrame(list(cursor))
3326
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
3327
+
3328
+ collection = wnba_db['FD_WNBA_Secondary_seed_frame']
3329
+ if prio_var == None:
3330
+ if player_var2 != []:
3331
+ player_columns = ['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']
3332
+ query_conditions = []
3333
+
3334
+ for player in player_var2:
3335
+ # Create a condition for each player to check if they appear in any column
3336
+ player_condition = {'$or': [{col: player} for col in player_columns]}
3337
+ query_conditions.append(player_condition)
3338
+
3339
+ # Combine all player conditions with $or
3340
+ if query_conditions:
3341
+ filter_query = {'$or': query_conditions}
3342
+ cursor1 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3343
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3344
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3345
+ }]}).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3346
+ cursor2 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3347
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3348
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3349
+ }]}).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3350
+ else:
3351
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3352
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3353
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3354
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3355
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3356
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3357
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3358
+ else:
3359
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3360
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3361
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3362
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3363
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3364
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3365
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3366
+ else:
3367
+ cursor = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3368
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3369
+ }).sort(prio_var, -1).limit(lineup_num)
3370
+ raw_display = pd.DataFrame(list(cursor))
3371
+
3372
+ raw_display = raw_display.drop_duplicates(subset=['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4'])
3373
+ raw_display = raw_display.head(lineup_num)
3374
+
3375
+ raw_display = raw_display[['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']]
3376
+ dict_columns = ['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']
3377
+ # Map names
3378
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
3379
+ elif slate_var == 'Auxiliary':
3380
+ collection = wnba_db['FD_WNBA_Late_name_map']
3381
+ cursor = collection.find()
3382
+ raw_data = pd.DataFrame(list(cursor))
3383
+ names_dict = dict(zip(raw_data['key'], raw_data['value']))
3384
+
3385
+ collection = wnba_db['FD_WNBA_Late_seed_frame']
3386
+ if prio_var == None:
3387
+ if player_var2 != []:
3388
+ player_columns = ['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']
3389
+ query_conditions = []
3390
+
3391
+ for player in player_var2:
3392
+ # Create a condition for each player to check if they appear in any column
3393
+ player_condition = {'$or': [{col: player} for col in player_columns]}
3394
+ query_conditions.append(player_condition)
3395
+
3396
+ # Combine all player conditions with $or
3397
+ if query_conditions:
3398
+ filter_query = {'$or': query_conditions}
3399
+ cursor1 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3400
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3401
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3402
+ }]}).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3403
+ cursor2 = collection.find({'$and': [filter_query, {'salary': {'$gte': salary_min, '$lte': salary_max},
3404
+ 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3405
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3406
+ }]}).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3407
+ else:
3408
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3409
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3410
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3411
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3412
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3413
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3414
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3415
+ else:
3416
+ cursor1 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3417
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3418
+ }).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3419
+ cursor2 = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3420
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3421
+ }).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3422
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3423
+ else:
3424
+ cursor = collection.find({'salary': {'$gte': salary_min, '$lte': salary_max}, 'Team_count': {'$gte': team_count_min if team_count_min is not None else 1, '$lte': team_count_max if team_count_max is not None else 999},
3425
+ 'Secondary_count': {'$gte': secondary_team_count_min if secondary_team_count_min is not None else 1, '$lte': secondary_team_count_max if secondary_team_count_max is not None else 999},
3426
+ }).sort(prio_var, -1).limit(lineup_num)
3427
+ raw_display = pd.DataFrame(list(cursor))
3428
+
3429
+ raw_display = raw_display.drop_duplicates(subset=['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4'])
3430
+ raw_display = raw_display.head(lineup_num)
3431
+
3432
+ raw_display = raw_display[['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']]
3433
+ dict_columns = ['G1', 'G2', 'G3', 'F1', 'F2', 'F3', 'F4']
3434
+ # Map names
3435
+ raw_display[dict_columns] = raw_display[dict_columns].apply(lambda x: x.map(names_dict))
3436
+
3437
+ elif type_var == 'Showdown':
3438
+ collection = wnba_db[wnba_db_translation[slate_var]]
3439
+ if prio_var == None:
3440
+ if player_var2 != []:
3441
+ player_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
3442
+ query_conditions = []
3443
+
3444
+ for player in player_var2:
3445
+ # Create a condition for each player to check if they appear in any column
3446
+ player_condition = {'$or': [{col: player} for col in player_columns]}
3447
+ query_conditions.append(player_condition)
3448
+
3449
+ # Combine all player conditions with $or
3450
+ if query_conditions:
3451
+ filter_query = {'$or': query_conditions}
3452
+ cursor1 = collection.find(_showdown_seed_filter_with_players(filter_query, salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3453
+ cursor2 = collection.find(_showdown_seed_filter_with_players(filter_query, salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3454
+ else:
3455
+ cursor1 = collection.find(_showdown_seed_filter(salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3456
+ cursor2 = collection.find(_showdown_seed_filter(salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3457
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3458
+ else:
3459
+ cursor1 = collection.find(_showdown_seed_filter(salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('proj', -1).limit(_mix_seed_limit_primary(lineup_num, prio_mix))
3460
+ cursor2 = collection.find(_showdown_seed_filter(salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort('Own', -1).limit(_mix_seed_limit_secondary(lineup_num, prio_mix))
3461
+ raw_display = pd.concat([pd.DataFrame(list(cursor1)), pd.DataFrame(list(cursor2))])
3462
+ else:
3463
+ cursor = collection.find(_showdown_seed_filter(salary_min, salary_max, team_count_min, team_count_max, secondary_team_count_min, secondary_team_count_max)).sort(prio_var, -1).limit(lineup_num)
3464
+ raw_display = pd.DataFrame(list(cursor))
3465
+
3466
+ raw_display = raw_display.drop_duplicates(subset=['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'])
3467
+ raw_display = raw_display.head(lineup_num)
3468
+
3469
+ raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']]
3470
+
3471
+ FD_seed = raw_display.to_numpy()
3472
+
3473
+ return FD_seed
3474
+
3475
  def init_nascar_baselines(type_var: str, site_var: str, slate_var: str):
3476
 
3477
  if slate_var == 'Main':