Esempio n. 1
0
 def compute_cohomology(self):
     cohomology = ModVectorSpace([])
     ##### Tweak to check dimension before working
     if not self.get_cohomology_dim():
         self.cohomology = cohomology
         self.cohomology_flag = True
         return
     #####
     index_list = self.get_kernel().get_basis()[:]
     basis_list = []
     for ker_element in index_list:
         if not self.in_cohomology_subspace(basis_list, ker_element):
             basis_list.append(ker_element)
     cohomology.add_basis_element(basis_list)
     self.cohomology = cohomology
     if (self.get_B().col_count - self.get_B().get_rank() 
         - self.get_A().get_rank() != len(cohomology.get_basis())):
         print "A"
         print self.get_A()
         print "B"
         print self.get_B()
         print "rank A"
         print self.get_A().get_rank()
         print "nullity B"
         print self.get_B().col_count - self.get_B().get_rank() 
         print "basis for cohomology"
         for thing in cohomology.get_basis():
             print thing
         raise TypeError("cohomology basis computation incorrect!")
     self.cohomology_flag = True
Esempio n. 2
0
 def compute_image(self):
     image = ModVectorSpace([])
     for row in self.get_A().get_rref():
         if not row.is_zero():
             index = row.get_leading_index()
             image.add_basis_element([ self.get_A().get_column(index) ])
     self.image = image
     self.image_flag = True
Esempio n. 3
0
 def __init__(self, B, A):
     self.B = B
     self.A = A
     self.kernel = None
     self.kernel_flag = False
     self.image = None
     self.image_flag = False
     self.cohomology = None
     self.cohomology_flag = False
     self.product = ModVectorSpace([])
     # if self.A.rows == []:
     #     self.A = ModMatrix.null(self.B.get_size()[1], 1)
     # elif self.B.rows == []:
     #     raise TypeError
     if self.B.get_size()[1] != self.A.get_size()[0]:
         raise TypeError("wrong sizes B: " + str(self.B) + "A: " +
                         str(self.A))
     self.extended_ker_basis = None
     self.extended_ker_basis_flag = False
Esempio n. 4
0
 def get_kernel(self):
     if not self.get_kernel_flag():
         self.kernel = ModVectorSpace(self.get_B().get_kernel_vout())
         self.kernel_flag = True
     return self.kernel