def homology(self,varient="complement",*args):
   hom = {}
   cc = self.chain_complex(varient,(-1,self.poly_ring.ngens()+1),*args)
   #Some need wider return range
   for i in range(self.poly_ring.ngens()+1):
     vs_am = VectorSpace(QQ,len(cc[i]))
     if len(cc[i])==0:
       hom[i] = []
       continue
     if len(cc[i-1])!=0:
       d_im = []
       for b in cc[i-1]:
         d_b = self.differential(b,varient,*args)
         d_im.append(lift_to_basis(d_b,cc[i]))
       img = vs_am.subspace(d_im)
     else:
       img = vs_am.subspace([vs_am.zero()])
     if len(cc[i+1])!=0:
       d_ker = []
       for b in cc[i]:
         d_b = self.differential(b,varient,*args)
         d_ker.append(lift_to_basis(d_b,cc[i+1]))
       ker = (matrix(QQ,d_ker)).left_kernel()
     else:
       ker = vs_am
     quo = ker.quotient(img)
     hom[i] = []
     for b in quo.basis():
       vec = quo.lift(b)
       part_sum = LogarithmicDifferentialForm.make_zero(i,self)
       for c,f in zip(vec,cc[i]):
         part_sum = part_sum + c*f
       hom[i].append(part_sum)
   return hom
 def test_interior_0_form(self):
   x = self.x
   y = self.y
   z = self.z
   logdf = LogarithmicDifferentialForm(0,[x*y-y*z+x**2-z**2+x*x-y*z],self.normal_logdf)
   int_product = logdf.interior_product()
   zero = LogarithmicDifferentialForm.make_zero(0,self.normal_logdf)
   self.assertTrue(int_product.equals(zero))
예제 #3
0
 def test_interior_0_form(self):
     x = self.x
     y = self.y
     z = self.z
     logdf = LogarithmicDifferentialForm(
         0, [x * y - y * z + x**2 - z**2 + x * x - y * z],
         self.normal_logdf)
     int_product = logdf.interior_product()
     zero = LogarithmicDifferentialForm.make_zero(0, self.normal_logdf)
     self.assertTrue(int_product.equals(zero))
 def test_zero_p(self):
   size = [1,3,3,1]
   for s,i in zip(size,range(4)):
     zero = LogarithmicDifferentialForm.make_zero(i,self.normal_logdf)
     zero_vec = [self.normal_logdf.poly_ring.zero() for _ in range(s)]
     self.assertEqual(zero.vec,zero_vec)
def _weighted_sum(weights,forms,diff_forms):
  part = LogarithmicDifferentialForm.make_zero(forms[0].degree,diff_forms)
  for w,f in zip(weights,forms):
    part = part + w*f
  return part
예제 #6
0
 def test_zero_p(self):
     size = [1, 3, 3, 1]
     for s, i in zip(size, range(4)):
         zero = LogarithmicDifferentialForm.make_zero(i, self.normal_logdf)
         zero_vec = [self.normal_logdf.poly_ring.zero() for _ in range(s)]
         self.assertEqual(zero.vec, zero_vec)