diff --git a/pyglove/core/symbolic/dict.py b/pyglove/core/symbolic/dict.py index 5ca6b30..0135f03 100644 --- a/pyglove/core/symbolic/dict.py +++ b/pyglove/core/symbolic/dict.py @@ -459,7 +459,7 @@ def sym_hash(self) -> int: """Symbolic hashing.""" return base.sym_hash( (self.__class__, - tuple([base.sym_hash((k, v)) for k, v in self.sym_items() + tuple([(k, base.sym_hash(v)) for k, v in self.sym_items() if v != pg_typing.MISSING_VALUE]))) def _sym_getattr( # pytype: disable=signature-mismatch # overriding-parameter-type-checks diff --git a/pyglove/core/symbolic/dict_test.py b/pyglove/core/symbolic/dict_test.py index 1b6cc60..5aafb6a 100644 --- a/pyglove/core/symbolic/dict_test.py +++ b/pyglove/core/symbolic/dict_test.py @@ -1199,6 +1199,12 @@ def __hash__(self): self.assertEqual(hash(Dict(x=a)), hash(Dict(x=b))) self.assertNotEqual(hash(Dict(x=B(1))), hash(Dict(x=B(2)))) + class C(pg_object.Object): + x: str + use_symbolic_comparison = False + + self.assertEqual(Dict(x=C('abc')).sym_hash(), Dict(x=C('abc')).sym_hash()) + def test_sym_parent(self): sd = Dict(x=dict(a=1), y=[]) self.assertIsNone(sd.sym_parent)