def METHOD_NAME(
        name: str, model: Recommender, experiment: Experiment,
        train: pd.DataFrame, top_k: int, test_users: pd.DataFrame,
        predict_only: bool = False
):
    """
    Run fit_predict for the `model`, measure time on fit_predict and evaluate metrics
    """
    start_time = time.time()
    if not predict_only:
        model.fit(log=train)
    fit_time = time.time() - start_time
    pred = model.predict(log=train, k=top_k, users=test_users)
    pred.cache()
    pred.count()
    predict_time = time.time() - start_time - fit_time
    experiment.add_result(name, pred)
    metric_time = time.time() - start_time - fit_time - predict_time
    experiment.results.loc[name, 'fit_time'] = fit_time
    experiment.results.loc[name, 'predict_time'] = predict_time
    experiment.results.loc[name, 'metric_time'] = metric_time
    experiment.results.loc[name, 'full_time'] = (fit_time + predict_time + metric_time)
    pred.unpersist()