def create_commit_matrix(revisions):
    import functools

    from gitlog import get_commit_hashes, get_files

    commit_hashes = get_commit_hashes(revisions)

    files = get_files(revisions)

    commit_mtrx = {}
    for f in files:
        commit_mtrx.update([(f, [0 for i in range(len(commit_hashes))])])

    for commit_index in range(len(revisions)):
        commit = revisions[commit_index]
        for f in commit["files"]:
            commit_mtrx[f][commit_index] = 1

    return commit_mtrx
def recommend(path):
    from jubatus.recommender import client
    from jubatus.recommender import types
    from jubatus.common import Datum
    from commit_matrix import create_commit_matrix
    from gitlog import dump, get_files, get_commit_hashes

    json_frmt_log = dump(path)
    mtrx=create_commit_matrix(json_frmt_log)
    commit_hashes=get_commit_hashes(json_frmt_log)

    recommender = client.Recommender(_host, _port, _name)
    for filename,cmts in mtrx.items():
        d={}
        for i in range(len(cmts)):
            d.update([(commit_hashes[i], cmts[i])])
        recommender.update_row(filename, Datum(d))

    recommended={}

    for f in get_files(json_frmt_log):
        r = [x.id for x in recommender.similar_row_from_id(f, 4)]
        recommended.update([(f, [x for x in r[1:]])])
    return recommended