def test_generate_and_parse_sparse6(self):
     for i in list(range(13)) + [31, 47, 62, 63, 64, 72]:
         m = min(2 * i, i * i // 2)
         g = nx.random_graphs.gnm_random_graph(i, m, seed=i)
         gstr = nx.generate_sparse6(g, header=False)
         g2 = nx.parse_sparse6(gstr)
         assert_equal(g2.order(), g.order())
         assert_equal(sorted(g2.edges()), sorted(g.edges()))
Example #2
0
 def test_generate_and_parse_sparse6(self):
     for i in list(range(13)) + [31, 47, 62, 63, 64, 72]:
         m = min(2 * i, i * i // 2)
         g = nx.random_graphs.gnm_random_graph(i, m, seed=i)
         gstr = nx.generate_sparse6(g, header=False)
         g2 = nx.parse_sparse6(gstr)
         assert_equal(g2.order(), g.order())
         assert_equal(sorted(g2.edges()), sorted(g.edges()))
 def directed_error(self):
     nx.generate_sparse6(nx.DiGraph())
    def test_generate_sparse6(self):
        # Checked against sage encoder
        assert_equal(nx.generate_sparse6(nx.empty_graph(0)), '>>sparse6<<:?')
        assert_equal(nx.generate_sparse6(nx.empty_graph(1)), '>>sparse6<<:@')
        assert_equal(nx.generate_sparse6(nx.empty_graph(5)), '>>sparse6<<:D')
        assert_equal(nx.generate_sparse6(nx.empty_graph(68)),
                     '>>sparse6<<:~?@C')
        assert_equal(nx.generate_sparse6(nx.empty_graph(258049)),
                     '>>sparse6<<:~~???~?@')

        G1 = nx.complete_graph(4)
        assert_equal(nx.generate_sparse6(G1, header=True), '>>sparse6<<:CcKI')
        assert_equal(nx.generate_sparse6(G1, header=False), ':CcKI')

        # Padding testing
        assert_equal(nx.generate_sparse6(nx.path_graph(4), header=False),
                     ':Cdv')
        assert_equal(nx.generate_sparse6(nx.path_graph(5), header=False),
                     ':DaYn')
        assert_equal(nx.generate_sparse6(nx.path_graph(6), header=False),
                     ':EaYnN')
        assert_equal(nx.generate_sparse6(nx.path_graph(7), header=False),
                     ':FaYnL')
        assert_equal(nx.generate_sparse6(nx.path_graph(8), header=False),
                     ':GaYnLz')
Example #5
0
    def test_generate_sparse6(self):
        # Checked against sage encoder
        assert_equal(nx.generate_sparse6(nx.empty_graph(0)), '>>sparse6<<:?')
        assert_equal(nx.generate_sparse6(nx.empty_graph(1)), '>>sparse6<<:@')
        assert_equal(nx.generate_sparse6(nx.empty_graph(5)), '>>sparse6<<:D')
        assert_equal(nx.generate_sparse6(nx.empty_graph(68)),
                     '>>sparse6<<:~?@C')
        assert_equal(nx.generate_sparse6(nx.empty_graph(258049)),
                     '>>sparse6<<:~~???~?@')

        G1 = nx.complete_graph(4)
        assert_equal(nx.generate_sparse6(G1, header=True),
                     '>>sparse6<<:CcKI')
        assert_equal(nx.generate_sparse6(G1, header=False), ':CcKI')

        # Padding testing
        assert_equal(nx.generate_sparse6(nx.path_graph(4), header=False),
                     ':Cdv')
        assert_equal(nx.generate_sparse6(nx.path_graph(5), header=False),
                     ':DaYn')
        assert_equal(nx.generate_sparse6(nx.path_graph(6), header=False),
                     ':EaYnN')
        assert_equal(nx.generate_sparse6(nx.path_graph(7), header=False),
                     ':FaYnL')
        assert_equal(nx.generate_sparse6(nx.path_graph(8), header=False),
                     ':GaYnLz')
Example #6
0
 def directed_raises(self):
     nx.generate_sparse6(nx.DiGraph())
Example #7
0
def toyBatch(tg,
             td,
             outfile,
             irts=Irts({}),
             fitinfo=Fitinfo({}),
             start_seed=0,
             methods=[
                 'rw', 'fe', 'uinvite', 'uinvite_irt', 'uinvite_prior',
                 'uinvite_irt_prior'
             ],
             header=1,
             debug=False):
    np.random.seed(start_seed)

    # break out of function if using unknown method
    for method in methods:
        if method not in [
                'rw', 'fe', 'uinvite', 'uinvite_irt', 'uinvite_prior',
                'uinvite_irt_prior', 'goni', 'goni_valid', 'threshold',
                'threshold_valid'
        ]:
            raise ValueError(
                'ERROR: Trying to fit graph with unknown method: ', method)

    # flag if using a prior method
    if ('uinvite_prior' in methods) or ('uinvite_irt_prior' in methods):
        use_prior = 1
    else:
        use_prior = 0

    # flag if using an IRT method
    if ('uinvite_irt' in methods) or ('uinvite_irt_prior' in methods):
        use_irt = 1
    else:
        use_irt = 0

    if use_prior:
        prior = genSWPrior(tg, fitinfo.prior_samplesize)

    # stuff to write to file
    globalvals = ['numedges', 'graph_seed', 'x_seed', 'truegraph',
                  'll_tg']  # same across all methods, updates with each seed
    methodvals = [
        'method', 'cost', 'll', 'time', 'bestgraph', 'hit', 'miss', 'fa', 'cr'
    ]  # differ per method

    f = open(outfile, 'a', 0)  # write/append to file with no buffering
    if header == 1:
        objs = [tg, td, irts, fitinfo]
        header_towrite = [
            str(i) for var in objs for i in var.keys() if i != 'data'
        ] + globalvals + methodvals
        f.write(','.join(header_towrite) + '\n')

    # write all parameters to file except irts.data (too long for csv file! if they're toy irts, they can be re-generated from seed)
    objs = [tg, td, irts, fitinfo]
    params_towrite = [
        str(var[i]) for var in objs for i in var.keys() if i != 'data'
    ]

    # how many graphs to run?
    seed_param = start_seed
    last_seed = start_seed + tg.numgraphs

    while seed_param < last_seed:

        # generate toy graph and data
        # give up if it's hard to generate data that cover full graph

        # generate toy data
        graph_seed = seed_param
        g, a = genG(tg, seed=graph_seed)

        # ugly code -- who writes this shit? oh wait, it's me
        tries = 0
        while True:
            x_seed = seed_param

            [Xs, irts.data, alter_graph] = genX(g, td, seed=x_seed)

            # generate IRTs if using IRT model
            if use_irt: irts.data = stepsToIRT(irts, seed=x_seed)

            if alter_graph == 0:  # only use data that covers the entire graph
                break
            else:
                tries = tries + 1
                seed_param = seed_param + 1
                last_seed = last_seed + 1  # if data is unusable (doesn't cover whole graph), add another seed
                if tries >= 1000:
                    raise ValueError(
                        "Data doesn't cover full graph... Increase 'trim' or 'numx' (or change graph)"
                    )

        numedges = nx.number_of_edges(g)
        truegraph = nx.generate_sparse6(g, header=False)  # to write to file

        for method in methods:

            recordname = "record_" + str(graph_seed) + "_" + str(
                x_seed) + "_" + method + ".csv"
            if debug: print "SEED: ", seed_param, "method: ", method

            # Find best graph! (and log time)
            ll_tg = ""  # only record TG LL for U-INVITE models; otherwise it's ambiguous whether it's using IRT/prior/etc
            starttime = datetime.now()
            if method == 'uinvite':
                bestgraph, ll = uinvite(Xs,
                                        td,
                                        tg.numnodes,
                                        debug=debug,
                                        fitinfo=fitinfo,
                                        recordname=recordname)
                ll_tg = probX(Xs, a, td)[0]
            if method == 'uinvite_prior':
                bestgraph, ll = uinvite(Xs,
                                        td,
                                        tg.numnodes,
                                        prior=prior,
                                        debug=debug,
                                        fitinfo=fitinfo,
                                        recordname=recordname)
                ll_tg = probX(Xs, a, td, prior=prior)[0]
            if method == 'uinvite_irt':
                bestgraph, ll = uinvite(Xs,
                                        td,
                                        tg.numnodes,
                                        irts=irts,
                                        debug=debug,
                                        fitinfo=fitinfo,
                                        recordname=recordname)
                ll_tg = probX(Xs, a, td, irts=irts)[0]
            if method == 'uinvite_irt_prior':
                bestgraph, ll = uinvite(Xs,
                                        td,
                                        tg.numnodes,
                                        irts=irts,
                                        prior=prior,
                                        debug=debug,
                                        fitinfo=fitinfo,
                                        recordname=recordname)
                ll_tg = probX(Xs, a, td, prior=prior, irts=irts)[0]
            if method == 'goni':
                bestgraph = goni(Xs, tg.numnodes, fitinfo=fitinfo)
                ll = probX(Xs, bestgraph, td)[0]
            if method == 'goni_valid':
                bestgraph = goni(Xs,
                                 tg.numnodes,
                                 td=td,
                                 valid=1,
                                 fitinfo=fitinfo)
                ll = probX(Xs, bestgraph, td)[0]
            if method == 'threshold':
                bestgraph = goni(Xs, tg.numnodes, fitinfo=fitinfo, c=1)
                ll = probX(Xs, bestgraph, td)[0]
            if method == 'threshold_valid':
                bestgraph = goni(Xs,
                                 tg.numnodes,
                                 td=td,
                                 valid=1,
                                 fitinfo=fitinfo,
                                 c=1)
                ll = probX(Xs, bestgraph, td)[0]
            if method == 'rw':
                bestgraph = noHidden(Xs, tg.numnodes)
                ll = probX(Xs, bestgraph, td)[0]
            if method == 'fe':
                bestgraph = firstEdge(Xs, tg.numnodes)
                ll = probX(Xs, bestgraph, td)[0]
            elapsedtime = str(datetime.now() - starttime)
            if debug:
                print elapsedtime
                print "COST: ", cost(bestgraph, a)
                print nx.generate_sparse6(nx.to_networkx_graph(bestgraph),
                                          header=False)

            # Record cost, time elapsed, LL of best graph, hash of best graph, and SDT measures
            graphcost = cost(bestgraph, a)
            hit, miss, fa, cr = costSDT(bestgraph, a)
            graphhash = nx.generate_sparse6(nx.to_networkx_graph(bestgraph),
                                            header=False)

            global_towrite = [
                str(i)
                for i in [numedges, graph_seed, x_seed, truegraph, ll_tg]
            ]
            method_towrite = [
                str(i) for i in [
                    method, graphcost, ll, elapsedtime, graphhash, hit, miss,
                    fa, cr
                ]
            ]

            # log stuff here
            f.write(','.join(params_towrite) + ',')
            f.write(','.join(global_towrite) + ',')
            f.write(','.join(method_towrite) + '\n')

        seed_param = seed_param + 1
    f.close()
Example #8
0
 def directed_raises(self):
     nx.generate_sparse6(nx.DiGraph())
Example #9
0
 def directed_error(self):
     nx.generate_sparse6(nx.DiGraph())