"""
Simulate weight-training data.
"""
from datetime import datetime
from typing import Any, Generator
from pprint import pformat # type: ignore
# from workout_simulator import WorkoutSimulator # type: ignore
from loguru import logger # type: ignore
from datetime_tools.generate_days import generate_dates # type: ignore
from algo_lib.sampling.reservoir_sample import reservoir_sample # type: ignore
[docs]
def get_dates(number_of_workouts: int, start: datetime, periods: int) -> list[str]:
"""Get list of dates.
:param number_of_workouts: Number of workouts to simulate
:type number_of_workouts: int
:param start: Start date for generating dates
:type start: datetime
:param periods: Periods to generate
:type periods: int
:return: List of dates
:rtype: list[str]
"""
date_generator: Generator[Any, None, None] = generate_dates(start, periods)
return reservoir_sample(date_generator, number_of_workouts)
[docs]
def simulate_data() -> None:
"""Simulate specified number of workouts and insert their data into JSON files.
"""
number_of_workouts = 10 # 1 # or you could use: int(sys.argv[1]) # Example: 3 * 365
start_date = datetime(2018, 1, 1) # Start date for generating dates
periods = 4 * 365 # Number of days to generate
# Get random workout dates
dates = get_dates(number_of_workouts, start_date, periods)
dates_sorted = sorted(dates)
logger.debug(pformat(dates_sorted))
# workout_date = dates[0]
# progress = 10
# TRAINING_CATALOGUE: str = "src/simulations/muscles_and_exercises_weight_ranges.yaml"
# OUTPUT_DIR: str = "data/simulated/"
# simulated_workout = WorkoutSimulator(workout_date,
# progress,
# TRAINING_CATALOGUE,
# OUTPUT_DIR,
# )
# simulated_exercises = simulated_workout.select_random_exercises()
# logger.debug(type(simulated_exercises))
# logger.debug(pformat(simulated_exercises))
# actual_reps = random.randint(1, 10)
# weight_range = [50, 90]
# weight_choice = simulated_workout.high_reps_low_weight(weight_range, actual_reps)
# logger.debug(weight_choice)
"""
progress = 10 # to simulate higher weight per set across workouts
for workout in range(number_of_workouts):
workout_date = dates[workout]
simulated_workout = WorkoutSimulator(workout_date, progress)
# actual_reps = random.randint(1, 10)
# weight_range = [50, 90]
# simulated_workout.high_reps_low_weight(weight_range, actual_reps)
# logger.debug(pformat(simulated_workout))
# simulated_workout.write_data()
# progress += 1_000
"""
if __name__ == "__main__":
simulate_data()