James McCool commited on
Commit
3ff610a
·
1 Parent(s): b7746b2

Refactor exposure_spread function and 'Manage Portfolio' logic to replace stack management with an option to ignore specific stacks, enhancing user control in exposure calculations.

Browse files
Files changed (2) hide show
  1. app.py +3 -5
  2. global_func/exposure_spread.py +4 -8
app.py CHANGED
@@ -1513,9 +1513,7 @@ if selected_tab == 'Manage Portfolio':
1513
  exposure_player = st.selectbox("Player", options=sorted(list(set(st.session_state['projections_df']['player_names'].unique()))), key='exposure_player')
1514
  exposure_target = st.number_input("Target Exposure", value=.50, min_value=0.0, max_value=1.0, step=0.01)
1515
  if 'Stack' in st.session_state['working_frame'].columns:
1516
- exposure_stack_bool = st.selectbox("Maintain Stacks?", options=['Yes', 'No'], index=0)
1517
- else:
1518
- exposure_stack_bool = 'No'
1519
  remove_teams_exposure = st.multiselect("Removed/Locked teams?", options=sorted(list(set(st.session_state['projections_df']['team'].unique()))), default=[])
1520
  specific_replacements = st.multiselect("Specific Replacements?", options=sorted(list(set(st.session_state['projections_df']['player_names'].unique()))), default=[])
1521
  submitted_col, export_col = st.columns(2)
@@ -1527,7 +1525,7 @@ if selected_tab == 'Manage Portfolio':
1527
  if reg_submitted:
1528
  st.session_state['settings_base'] = False
1529
  prior_frame = st.session_state['working_frame'].copy()
1530
- parsed_frame = exposure_spread(st.session_state['working_frame'], st.session_state['exposure_player'], exposure_target, exposure_stack_bool, remove_teams_exposure, specific_replacements, st.session_state['projections_df'], sport_var, type_var, salary_max, stacking_sports)
1531
 
1532
  if type_var == 'Classic':
1533
  if sport_var == 'CS2' or sport_var == 'LOL':
@@ -1620,7 +1618,7 @@ if selected_tab == 'Manage Portfolio':
1620
  elif exp_submitted:
1621
  st.session_state['settings_base'] = False
1622
  prior_frame = st.session_state['export_base'].copy()
1623
- parsed_frame = exposure_spread(st.session_state['export_base'], st.session_state['exposure_player'], exposure_target, exposure_stack_bool, remove_teams_exposure, specific_replacements, st.session_state['projections_df'], sport_var, type_var, salary_max, stacking_sports)
1624
 
1625
  if type_var == 'Classic':
1626
  if sport_var == 'CS2' or sport_var == 'LOL':
 
1513
  exposure_player = st.selectbox("Player", options=sorted(list(set(st.session_state['projections_df']['player_names'].unique()))), key='exposure_player')
1514
  exposure_target = st.number_input("Target Exposure", value=.50, min_value=0.0, max_value=1.0, step=0.01)
1515
  if 'Stack' in st.session_state['working_frame'].columns:
1516
+ ignore_stacks = st.selectbox("Ignore Specific Stacks?", options=sorted(list(set(st.session_state['projections_df']['team'].unique()))), default=[])
 
 
1517
  remove_teams_exposure = st.multiselect("Removed/Locked teams?", options=sorted(list(set(st.session_state['projections_df']['team'].unique()))), default=[])
1518
  specific_replacements = st.multiselect("Specific Replacements?", options=sorted(list(set(st.session_state['projections_df']['player_names'].unique()))), default=[])
1519
  submitted_col, export_col = st.columns(2)
 
1525
  if reg_submitted:
1526
  st.session_state['settings_base'] = False
1527
  prior_frame = st.session_state['working_frame'].copy()
1528
+ parsed_frame = exposure_spread(st.session_state['working_frame'], st.session_state['exposure_player'], exposure_target, ignore_stacks, remove_teams_exposure, specific_replacements, st.session_state['projections_df'], sport_var, type_var, salary_max, stacking_sports)
1529
 
1530
  if type_var == 'Classic':
1531
  if sport_var == 'CS2' or sport_var == 'LOL':
 
1618
  elif exp_submitted:
1619
  st.session_state['settings_base'] = False
1620
  prior_frame = st.session_state['export_base'].copy()
1621
+ parsed_frame = exposure_spread(st.session_state['export_base'], st.session_state['exposure_player'], exposure_target, ignore_stacks, remove_teams_exposure, specific_replacements, st.session_state['projections_df'], sport_var, type_var, salary_max, stacking_sports)
1622
 
1623
  if type_var == 'Classic':
1624
  if sport_var == 'CS2' or sport_var == 'LOL':
global_func/exposure_spread.py CHANGED
@@ -148,14 +148,10 @@ def check_position_eligibility(sport, column_name, player_positions):
148
  # Default fallback - assume exact position match
149
  return column_name in player_positions
150
 
151
- def exposure_spread(working_frame, exposure_player, exposure_target, exposure_stack_bool, remove_teams, specific_replacements, projections_df, sport_var, type_var, salary_max, stacking_sports):
152
  comparable_players = projections_df[projections_df['player_names'] == exposure_player]
153
 
154
  comparable_players = comparable_players.reset_index(drop=True)
155
- if exposure_stack_bool == 'Yes':
156
- comparable_stack = comparable_players['team'][0]
157
- else:
158
- comparable_stack = 0
159
  comp_salary_high = comparable_players['salary'][0]
160
  comp_salary_low = comparable_players['salary'][0] - 500
161
  comp_projection_high = comparable_players['median'][0]
@@ -196,9 +192,9 @@ def exposure_spread(working_frame, exposure_player, exposure_target, exposure_st
196
  # isolate the rows that contain the player
197
  player_rows = working_frame[player_mask]
198
  replace_rows = working_frame[replace_mask]
199
- if comparable_stack != 0:
200
- player_rows = player_rows[player_rows['Stack'] != comparable_stack]
201
- replace_rows = replace_rows[replace_rows['Stack'] != comparable_stack]
202
 
203
  change_counter = 0
204
 
 
148
  # Default fallback - assume exact position match
149
  return column_name in player_positions
150
 
151
+ def exposure_spread(working_frame, exposure_player, exposure_target, ignore_stacks, remove_teams, specific_replacements, projections_df, sport_var, type_var, salary_max, stacking_sports):
152
  comparable_players = projections_df[projections_df['player_names'] == exposure_player]
153
 
154
  comparable_players = comparable_players.reset_index(drop=True)
 
 
 
 
155
  comp_salary_high = comparable_players['salary'][0]
156
  comp_salary_low = comparable_players['salary'][0] - 500
157
  comp_projection_high = comparable_players['median'][0]
 
192
  # isolate the rows that contain the player
193
  player_rows = working_frame[player_mask]
194
  replace_rows = working_frame[replace_mask]
195
+ if ignore_stacks != []:
196
+ player_rows = player_rows[~player_rows['Stack'].isin(ignore_stacks)]
197
+ replace_rows = replace_rows[~replace_rows['Stack'].isin(ignore_stacks)]
198
 
199
  change_counter = 0
200