Repository navigation
Expand file tree
/
Copy pathddstructuretest.py
More file actions
152 lines (136 loc) · 5.76 KB
/
Copy pathddstructuretest.py
File metadata and controls
152 lines (136 loc) · 5.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
"""Unit test for ddstructure.py"""
from ddstructure import *
from dstructure import infTypeD, zeroTypeD
from pmc import PMC
from pmc import linearPMC, splitPMC
from utility import DEFAULT_GRADING, SMALL_GRADING
import unittest
class DDStructureTest(unittest.TestCase):
def testCommonIdentityDD(self):
id2 = identityDD(splitPMC(2))
self.assertEqual(len(id2), 6)
self.assertTrue(id2.testDelta())
def testMorToD(self):
id2 = identityDD(splitPMC(2))
d = infTypeD(2)
d2 = id2.morToD(d)
self.assertTrue(d2.testDelta())
d2.simplify()
self.assertEqual(len(d2), 1)
d3 = zeroTypeD(2)
d4 = id2.morToD(d3)
self.assertTrue(d4.testDelta())
d4.simplify()
self.assertEqual(len(d4), 1)
def testToDStructure(self):
ddstr = identityDD(linearPMC(1))
dstr = ddstr.toDStructure()
hochchild = dstr.morToD(dstr)
self.assertEqual(len(hochchild), 18)
hochchild.simplify(find_homology_basis = True)
self.assertEqual(len(hochchild), 4)
meaning_len = [len(gen.prev_meaning)
for gen in hochchild.getGenerators()]
self.assertEqual(sorted(meaning_len), [1,1,1,2])
def testIdentityMatchDiagram(self):
pmc_to_test = [splitPMC(2), PMC([(0,2),(1,6),(3,5),(4,7)])]
for pmc in pmc_to_test:
for idem_size in [0,1,2,3,4]:
ddstr = identityDD(pmc, idem_size)
# Special check for the identity diagram: all gradings should be
# zero
if DEFAULT_GRADING == SMALL_GRADING:
for gen in ddstr.generators:
self.assertEqual(ddstr.grading[gen],
ddstr.gr_set.zero())
def testDual(self):
pmc = PMC([(0,2),(1,6),(3,5),(4,7)])
ddstr = identityDD(pmc)
ddstr_dual = ddstr.dual()
self.assertEqual(ddstr_dual.algebra1, pmc.getAlgebra())
self.assertEqual(ddstr_dual.algebra2, pmc.opp().getAlgebra())
def testHochschildCohomology(self):
# Check HH^*(A)
# Rank 4 is right for HH^* of A in genus 1 case
pmc = splitPMC(1)
ddstr = identityDD(pmc)
cx = ddstr.hochschildCochains()
cx.simplify()
self.assertEqual(len(cx), 4)
# Rank 1 in the extremal strands grading
pmc = splitPMC(2)
ddstr = identityDD(pmc, 0)
cx = ddstr.hochschildCochains()
cx.simplify()
self.assertEqual(len(cx), 1)
# Rank should be indepdendent of PMC (equals 16)
for pmc in [splitPMC(2), linearPMC(2), PMC([(0,2),(1,6),(3,5),(4,7)])]:
ddstr = identityDD(pmc)
cx = ddstr.hochschildCochains()
cx.simplify()
self.assertEqual(len(cx), 16)
class DDMorphismTest(unittest.TestCase):
def testMappingCone(self):
pmc = splitPMC(1)
alg = pmc.getAlgebra()
tensor_alg = TensorDGAlgebra((alg, alg))
ddstr1 = SimpleDDStructure(F2, alg, alg)
ddstr2 = SimpleDDStructure(F2, alg, alg)
gens = dict()
gens["x"] = SimpleDDGenerator(ddstr1, pmc.idem([0]), pmc.idem([0]), "x")
gens["y"] = SimpleDDGenerator(ddstr2, pmc.idem([1]), pmc.idem([1]), "y")
ddstr1.addGenerator(gens["x"])
ddstr2.addGenerator(gens["y"])
ddstr1.addDelta(
gens["x"], gens["x"], pmc.sd([(0, 2)]), pmc.sd([(0, 2)]), 1)
ddstr2.addDelta(
gens["y"], gens["y"], pmc.sd([(1, 3)]), pmc.sd([(1, 3)]), 1)
morphism_cx = MorDDtoDDComplex(F2, ddstr1, ddstr2)
morphism = 1*MorDDtoDDGenerator(
morphism_cx, gens["x"],
TensorGenerator((pmc.sd([(0, 1)]), pmc.sd([(0, 1)])), tensor_alg),
gens["y"])
morphism += 1*MorDDtoDDGenerator(
morphism_cx, gens["x"],
TensorGenerator((pmc.sd([(2, 3)]), pmc.sd([(2, 3)])), tensor_alg),
gens["y"])
# Need diff of morphism to be zero for the mapping cone to satisfy
# d^2 = 0.
self.assertEqual(morphism.diff(), 0)
mapping_cone = morphism_cx.getMappingCone(morphism)
self.assertEqual(len(mapping_cone), 2)
mc_gens = dict()
for gen in mapping_cone.getGenerators():
mc_gens[gen.name] = gen
self.assertTrue("S_x" in mc_gens and "T_y" in mc_gens)
self.assertEqual(len(mapping_cone.delta(mc_gens["S_x"])), 3)
self.assertEqual(len(mapping_cone.delta(mc_gens["T_y"])), 1)
self.assertTrue(mapping_cone.testDelta())
def testMultiply(self):
pmc = splitPMC(2)
alg = pmc.getAlgebra()
tensor_alg = TensorDGAlgebra((alg, alg))
ddstr = SimpleDDStructure(F2, alg, alg)
gens = dict()
gens["x"] = SimpleDDGenerator(ddstr, pmc.idem([0]), pmc.idem([0]), "x")
gens["y"] = SimpleDDGenerator(ddstr, pmc.idem([1]), pmc.idem([1]), "y")
ddstr.addGenerator(gens["x"])
ddstr.addGenerator(gens["y"])
morphism_cx = MorDDtoDDComplex(F2, ddstr, ddstr)
morphism1 = 1*MorDDtoDDGenerator(
morphism_cx, gens["x"],
TensorGenerator((pmc.sd([(0, 1)]), pmc.sd([(0, 1)])), tensor_alg),
gens["y"])
morphism1 += 1*MorDDtoDDGenerator(
morphism_cx, gens["x"],
TensorGenerator((pmc.sd([(2, 3)]), pmc.sd([(2, 3)])), tensor_alg),
gens["y"])
morphism2 = 1*MorDDtoDDGenerator(
morphism_cx, gens["y"],
TensorGenerator((pmc.sd([(1, 2)]), pmc.sd([(1, 2)])), tensor_alg),
gens["x"])
self.assertEqual(len(morphism1 * morphism2), 1)
self.assertEqual(len(morphism2 * morphism1), 1)
self.assertNotEqual(morphism1 * morphism2, morphism2 * morphism1)
if __name__ == "__main__":
unittest.main()