Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
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()
Esempio n. 4
0
    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