def run_trials_graph_with_random_hops(si_trials=2):
    pjumps = np.linspace(0, 1, 11)

    # If starting from an empty cache:
    results = {"size": {}, "length": {}}
    for p in pjumps:
        results["size"][p] = defaultdict(list)
        results["length"][p] = defaultdict(list)
    # results = pickle.load(open("cache/random_jump/HIS_SI.p", "rb"))
    for trial in xrange(si_trials):
        print("Trial progress: {}".format(trial / float(si_trials)))
        for p in pjumps:
            print("Jump probability: {0}".format(p))
            for node in school_metadata.keys():
                epi = SI(faculty_graph.copy(),
                         p=0.1,
                         random_jump_p=p,
                         is_random_jump=True)
                epi.infect_node(node)
                epi.simulate()
                results["size"][p][node].append(epi.size)
                results["length"][p][node].append(epi.length)
    # pickle.dump(results, open("cache/random_jump/HIS_SI.p", 'wb'))
    results.clear()
    print("SI + RANDOM HOP done")
def run_trials(si_trials=2, save_timeline=False):
    ps = np.linspace(0, 1, 11)
    rs = np.linspace(0, 1, 5, endpoint=False)
    timeline = []

    # If starting from an empty cache:
    results = {"size": {}, "length": {}}
    for p in ps:
        results["size"][p] = defaultdict(list)
        results["length"][p] = defaultdict(list)
    # results = pickle.load(open("cache/CS_SI.p", "rb"))
    for trial in xrange(si_trials):
        print("Trial progress: {}".format(trial / float(si_trials)))
        for p in ps:
            print("Transmission probability: {0}".format(p))
            for node in school_metadata.keys():
                epi = SI(faculty_graph.copy(), p=p)
                epi.infect_node(node)
                epi.simulate()
                results["size"][p][node].append(epi.size)
                results["length"][p][node].append(epi.length)

                if school_metadata[node][
                        "institution"] in selected_universities:
                    timeline.append({
                        "p":
                        p,
                        "source_inst":
                        school_metadata[node]["institution"],
                        "path": [{
                            "target":
                            school_metadata[target]["institution"],
                            "timestep":
                            time
                        } for (target, time) in epi.timeline]
                    })

    if save_timeline:
        with open("cache/CS_SI_timeline.json", "w") as outfile:
            json.dump(timeline, outfile, indent=4)

    # pickle.dump(results, open("cache/CS_SI.p", 'wb'))
    results.clear()
    print("SI done")
def run_trials(si_trials=2):
    ps = np.linspace(0, 1, 11)
    rs = np.linspace(0, 1, 5, endpoint=False)

    # If starting from an empty cache:
    results = {"size": {}, "length": {}}
    for p in ps:
        results["size"][p] = defaultdict(list)
        results["length"][p] = defaultdict(list)
    # results = pickle.load(open("cache/HIS_SI.p", "rb"))
    for trial in xrange(si_trials):
        print("Trial progress: {}".format(trial / float(si_trials)))
        for p in ps:
            print("Transmission probability: {0}".format(p))
            for node in school_metadata.keys():
                epi = SI(faculty_graph.copy(), p=p)
                epi.infect_node(node)
                epi.simulate()
                results["size"][p][node].append(epi.size)
                results["length"][p][node].append(epi.length)
    # pickle.dump(results, open("cache/HIS_SI.p", 'wb'))
    results.clear()
    print("SI done")