def test_microcanonical_averages_number_of_iterations(grid_3x3_graph): spanning_cluster = grid_3x3_graph.graph['span'] n = 0 for microcanonical_average in percolate.microcanonical_averages( grid_3x3_graph, spanning_cluster=spanning_cluster): assert microcanonical_average['n'] == n n += 1 assert microcanonical_average['n'] == 12
def test_microcanonical_averages_initial_iteration(grid_3x3_graph): spanning_cluster = grid_3x3_graph.graph['span'] ret = next( percolate.microcanonical_averages(grid_3x3_graph, spanning_cluster=spanning_cluster)) assert ret['n'] == 0 assert ret['max_cluster_size'] == 1.0 np.testing.assert_allclose(ret['max_cluster_size_ci'], np.ones(2)) np.testing.assert_allclose(ret['moments'], np.ones(5) * 8) np.testing.assert_allclose(ret['moments_ci'], np.ones((5, 2)) * 8) assert ('spanning_cluster' in ret) == spanning_cluster assert ('spanning_cluster_ci' in ret) == spanning_cluster if spanning_cluster: assert ret['spanning_cluster'] == 1 / 42 np.testing.assert_allclose( np.array([0, 1]) + np.array([1, -1]) * scipy.stats.beta.cdf(ret['spanning_cluster_ci'], a=1, b=41), scipy.stats.norm.cdf(-1) * np.ones(2))
def test_microcanonical_averages_zero_alpha(grid_3x3_graph): with pytest.raises(ValueError): next(percolate.microcanonical_averages(grid_3x3_graph, alpha=0.0))
def test_microcanonical_averages_nonfloat_alpha(grid_3x3_graph): with pytest.raises(ValueError): next(percolate.microcanonical_averages(grid_3x3_graph, alpha='huge'))
def test_microcanonical_averages_nonpositive_runs(grid_3x3_graph): with pytest.raises(ValueError): next(percolate.microcanonical_averages(grid_3x3_graph, runs=0))
def test_microcanonical_averages_noninteger_runs(grid_3x3_graph): with pytest.raises(ValueError): next(percolate.microcanonical_averages(grid_3x3_graph, runs='many'))
# number of runs runs = 1 # system sizes number_of_nodes = [10**5, 10**5] constants = [5] # even = False sequences = [] for i in number_of_nodes: while even == False: rng = np.random.default_rng() sequence = rng.poisson(constants[0], i) if (sum(sequence) % 2) == 0: even == True sequences.append(sequence) graphs = [nx.configuration_model(i) for i in sequences] # compute the microcanonical averages for all system sizes microcanonical_averages = [ percolate.microcanonical_averages(graph=graph, runs=runs) for graph in graphs ] # combine microcanonical averages into one array microcanonical_averages_arrays = [ percolate.microcanonical_averages_arrays(avg) for avg in microcanonical_averages ] print(microcanonical_averages_arrays)