def setUpClass(cls): # 120 vertex graph w one community having 50 and another # w 70 vertices cls.n = [50, 70] cls.vcount = np.cumsum(cls.n) # define non-symmetric probability matrix as uneven cls.Pns = np.vstack(([0.6, 0.2], [0.3, 0.4])) # define symmetric probability as evenly weighted cls.Psy = np.vstack(([0.6, 0.2], [0.3, 0.4])) cls.Psy = symmetrize(cls.Psy) cls.seed = 12345
def generate_data(n, seed=1, symetric=True): """Generate data form dirichelet distribution with n numbers of points """ np.random.seed(seed) parameters = [1, 1, 1] # Generate latent positions X = np.random.dirichlet(parameters, size=n) # Generate probability matrix P = np.dot(X, X.T) # Generate two adjacencies A1 = np.random.binomial(1, P) A2 = np.random.binomial(1, P) if symetric: A1 = symmetrize(A1) A2 = symmetrize(A2) return (X, A1, A2)
def test_sbm(self): n = [50, 60, 70] vcount = np.cumsum(n) # define symmetric probability as evenly weighted Psy = np.vstack(([0.6, 0.2, 0.3], [0.3, 0.4, 0.2], [0.2, 0.8, 0.1])) Psy = symmetrize(Psy) np.random.seed(12345) A = sbm(n, Psy) for i in range(0, len(n)): for j in range(0, len(n)): irange = np.arange(vcount[i] - n[i], vcount[i]) jrange = np.arange(vcount[j] - n[j], vcount[j]) block = A[ (vcount[i] - n[i]) : vcount[i], (vcount[j] - n[j]) : vcount[j] ] if i == j: block = remove_diagonal(block) self.assertTrue(np.isclose(np.mean(block), Psy[i, j], atol=0.02)) self.assertTrue(is_symmetric(A)) self.assertTrue(is_loopless(A)) # check dimensions self.assertTrue(A.shape == (np.sum(n), np.sum(n))) pass
def setUpClass(cls): cls.n = [50, 70] cls.Pns = np.vstack(([0.6, 0.2], [0.3, 0.4])) # define symmetric probability as evenly weighted cls.Psy = np.vstack(([0.6, 0.2], [0.3, 0.4])) cls.Psy = symmetrize(cls.Psy)