コード例 #1
0
ファイル: models.py プロジェクト: gbartz/workout-generator
    def _trim_most_worked_muscles(self, target_time):
        if self.get_total_time() < target_time:
            return
        non_supersets = [_we for _we in self._workout__exercise_list if _we.first_super_set_workout_exercise_id is None]

        while self.get_total_time() > target_time:
            # SBL MOVE THIS LOGIC TO ITS OWN FUNCTION
            muscle_id_to_ring = {}
            ring_to_count = {}
            for muscle_id_set in MuscleGroup.get_rings():
                muscle_id_tuple = tuple(muscle_id_set)
                for muscle_id in muscle_id_tuple:
                    muscle_id_to_ring[muscle_id] = muscle_id_tuple
                ring_to_count[muscle_id_tuple] = 0

            for _we in non_supersets:
                exercise = Exercise.get_by_id(_we.exercise_id)
                muscle_id_tuple = muscle_id_to_ring[exercise.muscle_group_id]
                if _we.sets:
                    ring_to_count[muscle_id_tuple] += 1
            muscle_ring__count = sorted(ring_to_count.items(), key=lambda t: t[1], reverse=True)

            for _we in non_supersets:
                exercise = Exercise.get_by_id(_we.exercise_id)
                if _we.sets and exercise.muscle_group_id in muscle_ring__count[0][0]:
                    _we.sets = 0
                    if _we.second_exercise:
                        _we.second_exercise.sets = 0
                    break
コード例 #2
0
ファイル: models.py プロジェクト: gbartz/workout-generator
    def _get_workout_component_to_exercises(self):
        workout_component_to_exercises = defaultdict(list)
        first_exercise_superset = [_we for _we in self._workout__exercise_list if _we.first_super_set_workout_exercise_id is None]
        second_exercise_superset = [_we for _we in self._workout__exercise_list if _we.first_super_set_workout_exercise_id is not None]
        for _workout__exercise in first_exercise_superset:
            exercise = Exercise.get_by_id(_workout__exercise.exercise_id)
            workout_component_to_exercises[exercise.workout_component_id].append(_workout__exercise)
        for _workout__exercise in second_exercise_superset:
            exercise = Exercise.get_by_id(_workout__exercise.exercise_id)
            for _workout__exercise_initial in workout_component_to_exercises[exercise.workout_component_id]:
                if _workout__exercise_initial.id == _workout__exercise.first_super_set_workout_exercise_id:
                    _workout__exercise_initial.second_exercise = _workout__exercise
                    break

        return workout_component_to_exercises
コード例 #3
0
ファイル: models.py プロジェクト: gbartz/workout-generator
    def _trim_lonely_muscle_groups(self, target_time):
        if self.get_total_time() < target_time:
            return
        non_supersets = [_we for _we in self._workout__exercise_list if _we.first_super_set_workout_exercise_id is None]
        muscle_id_to_ring = {}
        ring_to_count = {}
        for muscle_id_set in MuscleGroup.get_rings():
            muscle_id_tuple = tuple(muscle_id_set)
            for muscle_id in muscle_id_tuple:
                muscle_id_to_ring[muscle_id] = muscle_id_tuple
            ring_to_count[muscle_id_tuple] = 0

        for _we in non_supersets:
            exercise = Exercise.get_by_id(_we.exercise_id)
            muscle_id_tuple = muscle_id_to_ring[exercise.muscle_group_id]
            ring_to_count[muscle_id_tuple] += 1
        for muscle_ring, count in ring_to_count.items():
            if count == 1:
                for _we in non_supersets:
                    _we.sets = 0
                    if self.get_total_time() < target_time:
                        break
                else:
                    continue
                break
コード例 #4
0
ファイル: models.py プロジェクト: gbartz/workout-generator
    def get_total_time(self):
        total_time = 0.0
        workout_component_to_exercises = self._get_workout_component_to_exercises()
        for workout_component_id, exercise_list in workout_component_to_exercises.items():
            if workout_component_id == WorkoutComponent.FLEXIBILITY:
                continue
            workout_component = WorkoutComponent.get_by_id(workout_component_id)
            for _workout__exercise in exercise_list:
                seconds_rest = workout_component.get_rest(self.phase)
                minutes_rest = float(seconds_rest) / 60
                minutes_rest *= _workout__exercise.sets
                total_time += minutes_rest

                for _we in [_workout__exercise, _workout__exercise.second_exercise]:
                    if _we is None:
                        continue
                    exercise = Exercise.get_by_id(_we.exercise_id)
                    if exercise.timed:
                        total_time += _we.sets * SECONDS_FOR_TIMED_EXERCISE / 60.0
                    else:
                        total_reps = _we.reps * _we.sets
                        rep_minutes = total_reps * self.phase.tempo.seconds_per_rep / 60.0
                        total_time += rep_minutes
        total_time *= TIME_FUDGE_FACTOR
        return total_time
コード例 #5
0
ファイル: models.py プロジェクト: gbartz/workout-generator
 def get_rep_prescriptions_for_muscle(self, muscle_id):
     rep_list = []
     for _workout__exercise in self._workout__exercise_list:
         exercise = Exercise.get_by_id(_workout__exercise.exercise_id)
         if exercise.muscle_group_id == muscle_id:
             rep_list.append(_workout__exercise.reps)
     return rep_list
コード例 #6
0
ファイル: models.py プロジェクト: gbartz/workout-generator
 def get_muscle_ids_used(self):
     muscle_ids = self.get_primary_muscle_ids_used()
     for _workout__exercise in self._workout__exercise_list:
         exercise = Exercise.get_by_id(_workout__exercise.exercise_id)
         muscle_ids.extend(exercise.muscle_group_ids)
     muscle_ids = list(set(muscle_ids))
     return muscle_ids
コード例 #7
0
ファイル: models.py プロジェクト: gbartz/workout-generator
 def get_primary_muscle_ids_used(self, workout_component_id=None):
     muscle_ids = []
     for _workout__exercise in self._workout__exercise_list:
         exercise = Exercise.get_by_id(_workout__exercise.exercise_id)
         if workout_component_id is None or exercise.workout_component_id == workout_component_id:
             muscle_ids.append(exercise.muscle_group_id)
     muscle_ids = list(set(muscle_ids))
     return muscle_ids
コード例 #8
0
ファイル: models.py プロジェクト: gbartz/workout-generator
 def get_exercise_ids_used(self, workout_component_id=None):
     exercise_ids = []
     for _we in self._workout__exercise_list:
         if workout_component_id:
             exercise = Exercise.get_by_id(_we.exercise_id)
             if exercise.workout_component_id != workout_component_id:
                 continue
         exercise_ids.append(_we.exercise_id)
     return exercise_ids
コード例 #9
0
ファイル: models.py プロジェクト: gbartz/workout-generator
 def _trim_isolated_exercises(self, target_time):
     if self.get_total_time() < target_time:
         return
     non_supersets = [_we for _we in self._workout__exercise_list if _we.first_super_set_workout_exercise_id is None]
     for _we in non_supersets:
         exercise = Exercise.get_by_id(_we.exercise_id)
         if not _we.second_exercise and exercise.compound:
             _we.sets = 0
             if self.get_total_time() < target_time:
                 break
コード例 #10
0
ファイル: models.py プロジェクト: gbartz/workout-generator
    def _workout__exercise_to_json(self, _workout__exercise):
        if _workout__exercise is None:
            return None

        if _workout__exercise.first_super_set_workout_exercise_id is None and _workout__exercise.sets == 0:
            # sets can be reduced to 0 via time trimming
            return None

        return {
            "exercise": Exercise.get_by_id(_workout__exercise.exercise_id).to_json(),
            "reps": _workout__exercise.reps,
            "sets": _workout__exercise.sets,
            "superset": self._workout__exercise_to_json(_workout__exercise.second_exercise)
        }