From a8920258a148704a1982884f04f4ab2175348a15 Mon Sep 17 00:00:00 2001 From: Tom Gillespie Date: Fri, 28 Aug 2020 02:28:40 -0700 Subject: [PATCH] neurondm fix the two remaining broken tests test_ttl_simple seems to have been failing due to the fact that importing TestRoundtrip into test_madness.py meant that reimporting the modules during setUp didn't actually create a new clean version because they didn't get gced or something insane like that, possibly due to how pytest isolates and runs tests the second issue is related to the fact that pypy3 super objects seem to have different hashes ... seems like it is probably a bug in the case of a frozenset --- neurondm/neurondm/simple.py | 5 ++++- neurondm/test/test_madness.py | 2 +- neurondm/test/test_neurons.py | 25 ++++++++++++++++++++----- neurondm/test/test_simple.py | 4 +++- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/neurondm/neurondm/simple.py b/neurondm/neurondm/simple.py index 3efd0b2a..746ab471 100644 --- a/neurondm/neurondm/simple.py +++ b/neurondm/neurondm/simple.py @@ -228,7 +228,10 @@ def __init__(self, *phenotypes): pass def __hash__(self): - return hash((self.__class__, super())) + # we cannot use super() here because in pypy3 + # different super()s have different hashes + # this seems like it is probably a bug + return hash((self.__class__, frozenset(self))) def __eq__(self, other): return self.__class__ == other.__class__ and super().__eq__(other) diff --git a/neurondm/test/test_madness.py b/neurondm/test/test_madness.py index a4b2a8c1..e3e646a9 100644 --- a/neurondm/test/test_madness.py +++ b/neurondm/test/test_madness.py @@ -6,7 +6,7 @@ #sys.breakpointhook = pudb.set_trace # TestRoundtrip by itself is not sufficient to induce the cross module version -from test.test_neurons import TestRoundtrip +#from test.test_neurons import TestRoundtrip # for now comment this out due to issue in test_ttl_simple from .common import skipif_no_net # write the file manually to show the issue is not related to a previous write diff --git a/neurondm/test/test_neurons.py b/neurondm/test/test_neurons.py index e6703174..b4f3c7d6 100644 --- a/neurondm/test/test_neurons.py +++ b/neurondm/test/test_neurons.py @@ -129,6 +129,9 @@ def setUp(self): self.NegPhenotype = NegPhenotype self.EntailedPhenotype = EntailedPhenotype + def tearDown(self): + super().tearDown() + def test_py_simple(self): config = self.Config(self.pyname, ttl_export_dir=tel, py_export_dir=pyel) @@ -152,11 +155,14 @@ def test_py_simple(self): assert config.neurons() == config2.neurons() == config3.neurons() def test_ttl_simple(self): - # this fails when - # test_integration.py is run - # AND - # test_roundtrip_py is run - # but NOT when either is run independently + # madness spreads apparently, here is a minimal repro for the issue + # pytest test/test_madness.py test/test_neurons.py -k 'test_ttl_simple or test_entailed_predicate' + # The other classes in this file can be commented out + # an even more specific repro + # pytest test/test_madness.py test/test_neurons.py \ + # -k 'test_madness and test_ttl_simple or + # test_neurons and test_entailed_predicate or + # test_neurons and test_ttl_simple' config = self.Config(self.ttlname, ttl_export_dir=tel, py_export_dir=pyel) self.Neuron(self.Phenotype('TEMP:turtle-phenotype')) @@ -177,6 +183,14 @@ def test_ttl_simple(self): print(a, b, c) assert config.existing_pes is not config2.existing_pes is not config3.existing_pes + if not a == b == c: + breakpoint() + # so somehow when test_entailed_predicate is called along with test_ttl_simple + # n1 from that sneeks into config3, but ONLY when this class is imported into + # another file AND that file is run, so this seems like it is happening because + # somehow the tep neuron persists through the tearDown, and for some reason + # importing a testing module into another file is sufficient to keep the + # garbage collector from collecting between runs or something ??!? assert a == b == c def test_entailed_predicate(self): @@ -198,6 +212,7 @@ def setUp(self): self.Neuron = NeuronCUT + class TestLabels(_TestNeuronsBase): def setUp(self): super().setUp() diff --git a/neurondm/test/test_simple.py b/neurondm/test/test_simple.py index a9fff8a9..b018a4ca 100644 --- a/neurondm/test/test_simple.py +++ b/neurondm/test/test_simple.py @@ -71,4 +71,6 @@ def test_cell_hash_eq_id(self): Phenotype(ilxtr.someOtherValue, ilxtr.someOtherDimension),) assert c1 is not c1o assert c1 == c1o - assert len(set((c1, c1o))) == 1 + + ls = len(set((c1, c1o))) + assert ls == 1