示例#1
0
def test_fetch_program_from_model():
    model_path = os.path.join(os.path.dirname(__file__), "models",
                              "ogasawara_HL.sav")
    model = Model(model_path)
    program = fetch_program_from_model(model)

    assert program is not None
    assert len(program) == 18

    # Assertions for program rows structure
    for _day, sets in program.items():
        for p_set in sets:

            assert isinstance(p_set.exercise, int)
            assert isinstance(p_set.percent_1rm, float)
            assert isinstance(p_set.repetitions, int)

        # Assert all sets in same day actual is done on the same
        # day.
        previous_set_date = None
        for p_set in sets:
            if previous_set_date is None:
                previous_set_date = p_set.datetime.date()
                continue

            today = p_set.datetime.date()
            assert previous_set_date == today
示例#2
0
def pbar(age, weight, performance, sex, hideprogram):
    """
    Makes recommendation based on performance before the training program.
    """
    if sex == 'MAN':
        converted_sex = 0
    elif sex == 'WOMAN':
        converted_sex = 1
    else:
        converted_sex = 2

    data = np.array([age, weight, converted_sex, performance]).reshape(1, -1)
    recengine = RecommendationEngine("pbar")
    best_pred, _ = recengine.recommend_training(data)

    click.secho("\nTraining program: " + best_pred["model"].name, fg="green")
    click.secho("Predicted performance: " +
                str(best_pred["predicted_performance"]) + "\n",
                fg="green")

    hide_program_output = hideprogram
    if hide_program_output is False:
        program = fetch_program_from_model(best_pred["model"])

        click.secho("Program structure: ", fg="green")
        for day, sets in program.items():
            click.secho("Day: " + str(day), fg="green")
            for i, p_set in enumerate(sets):
                calculated_weight = (p_set.percent_1rm / 100 * performance)
                click.secho("     (Set " + str(i) + ") Weight: " +
                            str(calculated_weight) + " Reps: " +
                            str(p_set.repetitions))
示例#3
0
文件: cli.py 项目: vifraa/datx02-05
def print_training_program_from_model(model, performance):
    """
    Prints the training program related to the given model.

    :param model: Model to find program from.
    :param performance: Current performance of the individual.
    """
    program = fetch_program_from_model(model)

    click.secho("Program structure: ", fg="green")
    for day in sorted(program.keys()):
        sets = program[day]
        click.secho("Day: " + str(day), fg="green")
        for i, p_set in enumerate(sets):
            calculated_weight = (p_set.percent_1rm / 100 * performance)
            click.secho("     (Set " + str(i) + ") Weight: " +
                        str(calculated_weight) + ", Reps: " +
                        str(p_set.repetitions) + ", Rest: " + str(p_set.rest) +
                        " minutes.")
示例#4
0
def formttr():
    name = request.form.get("fname")
    file = request.files["ffile"]
    stream = io.StringIO(file.stream.read().decode("UTF8"), newline=None)

    # TODO Let user input format.
    ttrdata = ttrdata_from_csv_bytes(stream, "%m/%d/%Y %H:%M")
    four_weeks_ttrdata = ttrdata[-8:]

    data = np.array(four_weeks_ttrdata).reshape(1, -1)
    recengine = RecommendationEngine("ttr")

    best_pred, _ = recengine.recommend_training(data)
    program = fetch_program_from_model(best_pred["model"])
    return render_template(
        "ttr.html",
        best_pred=best_pred["model"].name,
        predicted_performance=best_pred["predicted_performance"],
        program=program,
        performance=four_weeks_ttrdata[-1],
        name=name)
示例#5
0
def formpbar():
    recengine = RecommendationEngine("pbar")
    name = request.form.get("fname")
    age = int(request.form.get("fage"))
    sex = int(request.form.get("fsex"))
    weight = float(request.form.get("fweight"))
    performance = float(request.form.get("fperformance"))

    data = np.array([age, weight, sex, performance]).reshape(1, -1)
    best_pred, _ = recengine.recommend_training(data)
    program = fetch_program_from_model(best_pred["model"])
    return render_template(
        "index.html",
        age=age,
        sex=sex,
        weight=weight,
        performance=performance,
        best_pred=best_pred["model"].name,
        predicted_performance=best_pred["predicted_performance"],
        program=program,
        name=name)
示例#6
0
def ttr():
    sets = request.json.get('sets', [])
    time_format = request.json.get('timeformat', '')
    weeks = split_into_weeks(sets, time_format)
    if len(weeks.keys()) < 4:
        return jsonify(error=400,
                       text="Sets spanning atleast four weeks is required.")

    ttr_d = calculate_ttrdata_from_week_dict(weeks)
    four_weeks_ttrdata = ttr_d[-8:]
    data = np.array(four_weeks_ttrdata).reshape(1, -1)
    recengine = RecommendationEngine("ttr")
    best_pred, _ = recengine.recommend_training(data)
    program = fetch_program_from_model(best_pred["model"])

    res = {
        "predicted_performance": best_pred["predicted_performance"],
        "training_program": best_pred["model"].name,
        "program_structure": program,
        "calculated_current_1rm": four_weeks_ttrdata[-1]
    }

    return jsonify(res)
示例#7
0
def pbar():

    recengine = RecommendationEngine("pbar")
    age = int(request.json.get('age', ''))
    weight = float(request.json.get('weight', ''))
    sex = request.json.get('sex', '')
    performance = float(request.json.get('performance', ''))
    if sex == 'MAN':
        converted_sex = 0
    elif sex == 'WOMAN':
        converted_sex = 1
    else:
        converted_sex = 2
    data = np.array([age, weight, converted_sex, performance]).reshape(1, -1)
    best_pred, all_predictions = recengine.recommend_training(data)
    program = fetch_program_from_model(best_pred["model"])

    res = {
        "predicted_performance": best_pred["predicted_performance"],
        "training_program": best_pred["model"].name,
        "program_structure": program
    }

    return jsonify(res)
示例#8
0
def test_fetch_program_bad_input():
    model_path = os.path.join(os.path.dirname(__file__), "models",
                              "programdoesnotexist.sav")
    model = Model(model_path)
    program = fetch_program_from_model(model)
    assert program == {}