Simplify forecast panel and extend horizon
This commit is contained in:
@@ -29,7 +29,7 @@ def convert_str_to_date(date_str, format='%Y-%m-%d'):
|
||||
def build_forecast(values, dates, horizon_weeks=8, metric='E1RM'):
|
||||
"""Build a conservative linear forecast from dated exercise observations."""
|
||||
try:
|
||||
horizon_weeks = max(4, min(int(horizon_weeks), 26))
|
||||
horizon_weeks = max(4, min(int(horizon_weeks), 52))
|
||||
except (TypeError, ValueError):
|
||||
horizon_weeks = 8
|
||||
|
||||
@@ -133,6 +133,7 @@ def build_forecast(values, dates, horizon_weeks=8, metric='E1RM'):
|
||||
'last_date': last_date,
|
||||
'last_value': round(float(observed_values[-1]), 1),
|
||||
'projected_value': round(float(future_values[-1]), 1),
|
||||
'projected_change': round(float(future_values[-1] - observed_values[-1]), 1),
|
||||
'weekly_change': round(weekly_change, 1),
|
||||
'r_squared': None if r_squared is None else round(r_squared, 2),
|
||||
'confidence': confidence,
|
||||
@@ -249,6 +250,7 @@ def get_exercise_graph_model(title, estimated_1rm, repetitions, weight, start_da
|
||||
observed_min_date, observed_max_date = min(start_dates), max(start_dates)
|
||||
forecast = build_forecast(estimated_1rm, start_dates, forecast_weeks, metric='E1RM') if forecast_enabled else {'available': False}
|
||||
forecast = add_top_set_forecast(forecast, weight, repetitions, forecast_target_reps)
|
||||
forecast_horizons = [(4, '4w'), (8, '8w'), (12, '3m'), (26, '6m'), (52, '1y')]
|
||||
chart_max_date = forecast.get('end_date', observed_max_date) if forecast.get('available') else observed_max_date
|
||||
total_span = (chart_max_date - observed_min_date).days or 1
|
||||
|
||||
@@ -398,6 +400,7 @@ def get_exercise_graph_model(title, estimated_1rm, repetitions, weight, start_da
|
||||
'forecast_enabled': forecast_enabled,
|
||||
'forecast_weeks': forecast_weeks,
|
||||
'forecast_target_reps': forecast.get('selected_reps', forecast_target_reps or 5),
|
||||
'forecast_horizons': forecast_horizons,
|
||||
'forecast_points': forecast_points,
|
||||
'forecast_band_lower': forecast_band_lower,
|
||||
'forecast_band_upper': forecast_band_upper,
|
||||
|
||||
Reference in New Issue
Block a user