def test_float(self): n = randint(2, 8) A = [[uniform(-10, 10) for j in range(n)] for i in range(n)] B = [[uniform(-10, 10) for j in range(n)] for i in range(n)] C = [[0 for j in range(n)] for i in range(n)] for i in range(n): for j in range(n): for k in range(n): C[i][j] = C[i][j] + A[i][k] * B[k][j] handle = threadMatrixProduct(A, B, n) handle.matrixProduct() trueSig = True for i in range(n): for j in range(n): trueSig = trueSig and fabs(handle.C[i][j] - C[i][j]) < 10**(-6) self.assertTrue(trueSig)
def test_posint(self): n = randint(2, 8) A = [[randint(0, 10) for j in range(n)] for i in range(n)] B = [[randint(0, 10) for j in range(n)] for i in range(n)] C = [[0 for j in range(n)] for i in range(n)] for i in range(n): for j in range(n): for k in range(n): C[i][j] = C[i][j] + A[i][k] * B[k][j] handle = threadMatrixProduct(A, B, n) handle.matrixProduct() trueSig = True for i in range(n): for j in range(n): trueSig = trueSig and handle.C[i][j] == C[i][j] self.assertTrue(trueSig)
def transitiveClosure(M): # M is the adjacency matrix of the graph # initialising the transitive closure T = [[0 for j in range(len(M))] for i in range(len(M))] # initialising an iterator H = [[M[i][j] for j in range(len(M[i]))] for i in range(len(M))] for i in range(len(M)): for j in range(len(M)): for k in range(len(M)): T[j][k] = T[j][k] or H[j][k] handle = threadMatrixProduct(H, M, len(M)) handle.matrixProduct() for j in range(len(M)): for k in range(len(M)): H[j][k] = handle.C[j][k] for i in range(len(M)): for j in range(len(M)): T[i][j] = 1 if T[i][j] > 0 else 0 return T
def mem_usage(): pid = os.getpid() py = psutil.Process(pid) mem = py.memory_info()[0] / (2.**30) return mem A1 = range(1, 20) B1 = [0 for i in range(1, 20)] for g in range(10): for i in range(1, 20): A = [[randint(8, 10) for k in range(i)] for j in range(i)] B = [[randint(8, 10) for k in range(i)] for j in range(i)] handle = threadMatrixProduct(A, B, i) start = time() handle.interfaceProd() end = time() if i <= 5: B1[i - 1] = B1[i - 1] + (end - start) * (10**3) / (i * i) else: B1[i - 1] = B1[i - 1] + (end - start) * (10**3) / (i * i * i) for i in range(1, 20): B1[i - 1] = B1[i - 1] / 10 plt.plot(A1, B1) plt.show() for i in range(1, 20): A = [[randint(2, 10) for j in range(i)] for k in range(i)] B = [[randint(2, 10) for j in range(i)] for k in range(i)] handle = threadMatrixProduct(A, B, i)