Skip to content
Snippets Groups Projects
Commit a0ced1b1 authored by Brad Nelson's avatar Brad Nelson
Browse files

make levelset unittests cover all algs

parent 3de61ed0
No related branches found
No related tags found
No related merge requests found
......@@ -11,19 +11,20 @@ class Levelset1dsuper(unittest.TestCase):
from topologylayer.nn import LevelSetLayer1D
# superlevel set
layer = LevelSetLayer1D(size=3, sublevel=False)
for alg in ['hom', 'cohom']:
layer = LevelSetLayer1D(size=3, sublevel=False, alg=alg)
y = torch.tensor([1,0,1], dtype=torch.float).requires_grad_(True)
dgms, issub = layer(y)
self.assertEqual(
issub,
False,
"Expected superlevel set layer")
"Expected superlevel set layer. alg=" + alg)
self.assertEqual(
torch.all(torch.eq(remove_infinite_bars(remove_zero_bars(dgms[0]), issub),
torch.tensor([[1., 0.]]))),
True,
"unexpected barcode")
"unexpected barcode. alg=" + alg)
p = torch.sum(remove_infinite_bars(remove_zero_bars(dgms[0]), issub)[0])
p.backward()
......@@ -31,7 +32,7 @@ class Levelset1dsuper(unittest.TestCase):
self.assertEqual(
y.grad[1].item(),
1.0,
"unexpected gradient")
"unexpected gradient. alg=" + alg)
class Levelset1dsub(unittest.TestCase):
......@@ -39,19 +40,20 @@ class Levelset1dsub(unittest.TestCase):
from topologylayer.nn import LevelSetLayer1D
# sublevel set
layer = LevelSetLayer1D(size=3, sublevel=True)
for alg in ['hom', 'cohom']:
layer = LevelSetLayer1D(size=3, sublevel=True, alg=alg)
y = torch.tensor([1,0,1], dtype=torch.float).requires_grad_(True)
dgms, issub = layer(y)
self.assertEqual(
issub,
True,
"Expected sublevel set layer")
"Expected sublevel set layer. alg=" + alg)
self.assertEqual(
torch.all(torch.eq(remove_zero_bars(dgms[0]),
torch.tensor([[0., np.inf]]))),
True,
"unexpected barcode")
"unexpected barcode. alg=" + alg)
# p = torch.sum(dgms[0][0])
# p.backward()
......@@ -67,24 +69,25 @@ class Levelset2dsuper(unittest.TestCase):
from topologylayer.nn import LevelSetLayer2D
# sublevel set
layer = LevelSetLayer2D(size=(3,3), maxdim=1, sublevel=False)
for alg in ['hom', 'cohom']:
layer = LevelSetLayer2D(size=(3,3), maxdim=1, sublevel=False, alg=alg)
x = torch.tensor([[2, 1, 1],[1, 0.5, 1],[1, 1, 1]], dtype=torch.float).requires_grad_(True)
dgms, issub = layer(x)
self.assertEqual(
issub,
False,
"Expected superlevel set layer")
"Expected superlevel set layer. alg=" + alg)
self.assertEqual(
torch.all(torch.eq(remove_zero_bars(dgms[0]),
torch.tensor([[2., -np.inf]]))),
True,
"unexpected 0-dim barcode")
"unexpected 0-dim barcode. alg=" + alg)
self.assertEqual(
torch.all(torch.eq(remove_zero_bars(dgms[1]),
torch.tensor([[1., 0.5]]))),
True,
"unexpected 1-dim barcode")
"unexpected 1-dim barcode. alg=" + alg)
d1 = remove_zero_bars(dgms[1])
p = d1[0,0] - d1[0,1]
......@@ -93,4 +96,4 @@ class Levelset2dsuper(unittest.TestCase):
self.assertEqual(
x.grad[1,1].item(),
-1.0,
"unexpected gradient")
"unexpected gradient. alg=" + alg)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment