Merge pull request #32527 from jaingaurav/cherry-2.0-2

[r2.0-CherryPick]:Disallow comparing ObjectIdentityWrapper to others
This commit is contained in:
Goldie Gadde 2019-09-14 14:56:36 -07:00 committed by GitHub
commit 451681fa38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 6 deletions

View File

@ -38,9 +38,10 @@ class _ObjectIdentityWrapper(object):
return self._wrapped
def __eq__(self, other):
if isinstance(other, _ObjectIdentityWrapper):
return self._wrapped is other._wrapped # pylint: disable=protected-access
return False
if not isinstance(other, _ObjectIdentityWrapper):
raise TypeError("Cannot compare wrapped object with unwrapped object")
return self._wrapped is other._wrapped # pylint: disable=protected-access
def __ne__(self, other):
return not self.__eq__(other)

View File

@ -25,9 +25,32 @@ from tensorflow.python.util import object_identity
class ObjectIdentityWrapperTest(test.TestCase):
def testWrapperNotEqualToWrapped(self):
o = object()
self.assertNotEqual(o, object_identity._ObjectIdentityWrapper(o))
self.assertNotEqual(object_identity._ObjectIdentityWrapper(o), o)
class SettableHash(object):
def __init__(self):
self.hash_value = 8675309
def __hash__(self):
return self.hash_value
o = SettableHash()
wrap1 = object_identity._ObjectIdentityWrapper(o)
wrap2 = object_identity._ObjectIdentityWrapper(o)
self.assertEqual(wrap1, wrap1)
self.assertEqual(wrap1, wrap2)
self.assertEqual(o, wrap1.unwrapped)
self.assertEqual(o, wrap2.unwrapped)
with self.assertRaises(TypeError):
bool(o == wrap1)
with self.assertRaises(TypeError):
bool(wrap1 != o)
self.assertNotIn(o, set([wrap1]))
o.hash_value = id(o)
# Since there is now a hash collision we raise an exception
with self.assertRaises(TypeError):
bool(o in set([wrap1]))
class ObjectIdentitySetTest(test.TestCase):