コード例 #1
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
コード例 #2
0
ファイル: generator.py プロジェクト: gbartz/workout-generator
def _select_exercise(exercise_filter, previous_exercise=None, retry_mode=False, logger=None):
    logger = logger or mock.MagicMock()
    if previous_exercise is not None:
        for related_muscle_group_set in MuscleGroup.get_rings():
            if previous_exercise.muscle_group_id in related_muscle_group_set:
                logger.log_muscle_restriction(previous_exercise, related_muscle_group_set)
                exercise_filter.restrict_to_muscle_group_ids(related_muscle_group_set)
                break
    elif not retry_mode:
        logger.log_retry_mode()
        exercise_filter = exercise_filter.compound_only()
    elif retry_mode and previous_exercise is None:
        logger.log_rollback_mode()
        rollback_filter = exercise_filter.copy()
        exercise_filter = exercise_filter.compound_only()
        if exercise_filter.count() == 0:
            exercise_filter = rollback_filter
        if exercise_filter.count() == 0:
            raise DeadEndException("Need a bigger exercise pool to continue")

    exercise_list = [exercise for exercise in exercise_filter.query]

    logger.log_available_exercises(exercise_list)
    exercise_list = evenly_distribute_exercises_by_muscle_group(exercise_list)
    try:
        exercise = random.choice(exercise_list)
    except IndexError:
        raise NoExercisesAvailableException("No exercises left")
    logger.log_exercise_selection(exercise)
    return exercise
コード例 #3
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
コード例 #4
0
ファイル: generator.py プロジェクト: gbartz/workout-generator
def _get_muscle_tuple_to_should_use(user_exercise_filter, workout_component_id):
    usable_muscle_group_ids = user_exercise_filter.copy().for_workout_component(workout_component_id).get_muscle_group_ids()

    list_of_sets = MuscleGroup.get_required_rings()
    for index in xrange(len(list_of_sets)):
        list_of_sets[index] = {item for item in list_of_sets[index] if item in usable_muscle_group_ids}

    list_of_tuples = [tuple(muscle_set) for muscle_set in list_of_sets if muscle_set]
    muscle_tuple_to_should_use = {t: True for t in list_of_tuples}
    return muscle_tuple_to_should_use
コード例 #5
0
    def log_available_superset_exercise(self, exercise_list):
        available_muscle_group_ids = []
        workout_component = "(No available exercises)"
        if exercise_list:
            workout_component = WorkoutComponent.get_by_id(exercise_list[0].workout_component_id).title

        self._log("Before Superset exercise selection, %s exercises are available for %s" % (len(exercise_list), workout_component))
        for exercise in exercise_list:
            available_muscle_group_ids.append(exercise.muscle_group_id)
        available_muscle_group_ids = list(set(available_muscle_group_ids))
        muscle_names = ", ".join([MuscleGroup.get_name_for_id(id) for id in available_muscle_group_ids])
        self._log("Available superset muscle groups: %s" % muscle_names)
コード例 #6
0
 def log_possible_flex_exercises(self, muscle_id, exercises):
     muscle_name = MuscleGroup.get_name_for_id(muscle_id)
     exercise_names = ", ".join([e.name for e in exercises])
     self._log("Adding flexibility for %s.  %s possible exercses: (%s)." %
         (muscle_name, len(exercises), exercise_names))
コード例 #7
0
 def log_add_flexibility(self, muscle_ids):
     muscle_names = ", ".join([MuscleGroup.get_name_for_id(id) for id in muscle_ids])
     self._log("About to add flexibility for muscle groups: %s" % muscle_names)
コード例 #8
0
 def log_muscle_max_reached(self, muscle_group_id):
     muscle_group = MuscleGroup.get_name_for_id(muscle_group_id)
     self._log("Max exercises reached for %s, re-opening filter to other muscles" % muscle_group)
コード例 #9
0
 def log_muscle_restriction(self, previous_exercise, related_muscle_group_set):
     self._log("Previous exercise was %s with muscle group %s" % (previous_exercise.name, MuscleGroup.get_name_for_id(previous_exercise.muscle_group_id)))
     muscle_names = ", ".join([MuscleGroup.get_name_for_id(id) for id in related_muscle_group_set])
     self._log("Restricting to muscle groups: %s" % muscle_names)
コード例 #10
0
 def log_exercise_selection(self, exercise):
     self._log("Exercise selected: %s (Muscle Group: %s)\n" % (exercise.name, MuscleGroup.get_name_for_id(exercise.muscle_group_id)))
コード例 #11
0
 def log_superset_exercise(self, exercise):
     if exercise is None:
         self._log("Superset exercise is None, nothing was available")
     else:
         self._log("Superset Exercise selected: %s (Muscle Group: %s)\n" % (exercise.name, MuscleGroup.get_name_for_id(exercise.muscle_group_id)))