Skip to content

Commit de9334e

Browse files
authored
Merge branch 'main' into linear-dual-fix
2 parents e3ad661 + adc610b commit de9334e

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

pyomo/opt/results/container.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def __init__(
8080
self._active = False
8181

8282
def __eq__(self, other):
83-
return self.__dict__ == other.__dict__
83+
return self.__dict__ == getattr(other, '__dict__', None)
8484

8585
def get_value(self):
8686
if isinstance(self.value, enum.Enum):
@@ -191,7 +191,7 @@ def __getitem__(self, i):
191191
return self._list[i]
192192

193193
def __eq__(self, other):
194-
return self.__dict__ == other.__dict__
194+
return self.__dict__ == getattr(other, '__dict__', None)
195195

196196
def clear(self):
197197
self._list = []
@@ -279,7 +279,12 @@ def __eq__(self, other):
279279
# underlying dict data (which doesn't show up in the __dict__).
280280
# So we will use the base __eq__ in addition to checking
281281
# __dict__.
282-
return super().__eq__(other) and self.__dict__ == other.__dict__
282+
#
283+
# Note: __eq__ can return True, False, or NotImplemented
284+
base = super().__eq__(other)
285+
if base == True:
286+
return self.__dict__ == getattr(other, '__dict__', None)
287+
return base
283288

284289
def __getattr__(self, name):
285290
try:

pyomo/opt/tests/base/test_soln.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,34 @@ def test_pickle(self):
615615
self.assertIs(d.b, e.b)
616616
self.assertEqual(d.c, e.c)
617617

618+
def test_eq(self):
619+
d = container.MapContainer()
620+
d.declare('x', value=1)
621+
d.declare('y', value='a')
622+
d.declare('z', value=container.ListContainer(container.MapContainer))
623+
self.assertFalse(d == container.MapContainer())
624+
self.assertFalse(d == "Something else")
625+
626+
e = container.ListContainer(container.UndefinedData)
627+
self.assertFalse(d == e)
628+
629+
dd = container.MapContainer()
630+
dd.declare('x', value=1)
631+
dd.declare('y', value=1)
632+
dd.declare('z', value=container.ListContainer(container.UndefinedData))
633+
self.assertFalse(d == dd)
634+
d.y = 'b'
635+
dd.y = 'b'
636+
dd.declare('z', value=container.ListContainer(container.MapContainer))
637+
self.assertTrue(d == dd)
638+
639+
d.z.add()
640+
d.z[0].declare('a', value=0)
641+
self.assertFalse(d == dd)
642+
dd.z.add()
643+
dd.z[0].declare('a', value=0)
644+
self.assertTrue(d == dd)
645+
618646

619647
if __name__ == "__main__":
620648
unittest.main()

0 commit comments

Comments
 (0)