def basis_to_ker_basis(self): C = ModMatrix(self.get_extended_ker_basis()) C.transpose() inv = C.get_inverse() if not inv: raise TypeError("the matrix is not invertible! Something went very wrong") return inv
def extend_ker_basis(self): ker_basis = self.get_kernel().get_basis() #assuming vectors are bit vectors if not ker_basis: C = ModMatrix.null(1, self.B.col_count) else: C = ModMatrix(ker_basis) comp = C.complement_row_space() tot = ker_basis[:] + comp[:] self.extended_ker_basis = tot self.extended_ker_basis_flag = True
def solve_test(x, y, n): for i in range(n): AA = ModMatrix.random(x, y) bb = ModVector.random(x) print AA.can_solve(bb) xx = AA.solve(bb) print "A\n", AA, "\n" print "rrefA\n", AA.get_rref(), "\n" print "b\n", bb, "\n" print "x\n", xx, "\n" print "Ax\n", AA * xx print AA * xx == ModMatrix([bb]).get_transpose()
def make_map(self, i): """ make matrices in all given bidegrees this needs a map defined on CobarMonomial objects does this handle 0 dim vector spaces? this is a huge timesink. try to do multiprocessing, check methods for too much simplification """ dom = self.get_cplx()[i] rng = self.get_cplx()[i + 1] for bideg in dom._dict.keys(): out = [] dom_basis = dom._dict[bideg] cols = len(dom_basis) try: rng_basis = rng._dict[bideg] rows = len(rng_basis) except KeyError: rng._dict[bideg] = [] rows = 0 if cols == 0: # we must account for this later! cols = 1 #print "bideg in make maps",bideg dom._maps[bideg] = ModMatrix.null(1, cols) continue if cols == 0: cols = 1 if rows == 0: rows = 1 #print "bideg in make maps. somethings 0", bideg dom._maps[bideg] = ModMatrix.null(rows, cols) continue for mon in dom_basis: value = mon._map_reduced() vect = self.vector_from_element(value, i + 1, bideg[0], bideg[1]) out.append(vect) matrix = ModMatrix(out).get_transpose() print " Made matrix: i, bideg, size", i, bideg, matrix.get_size() dom._maps[bideg] = matrix