Skip to content

Commit f06b7ba

Browse files
committed
fix: compare default_factory in pytree compatibility check; fix orderedict typos
1 parent 0177df5 commit f06b7ba

2 files changed

Lines changed: 13 additions & 3 deletions

File tree

tensorcircuit/backends/abstract_backend.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,8 @@ def _treedefs_compatible(treedef_a: _TreeDef, treedef_b: _TreeDef) -> bool:
242242
if issubclass(treedef_a.typ, dict):
243243
if treedef_a.sorted_keys != treedef_b.sorted_keys:
244244
return False
245+
if treedef_a.aux_data != treedef_b.aux_data:
246+
return False
245247
return all(
246248
_treedefs_compatible(ac, bc)
247249
for ac, bc in zip(treedef_a.children, treedef_b.children)

tests/test_pure_pytree.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,14 @@ def test_numeric_string_keys(self):
123123
class TestFlattenOrderedDict:
124124
"""OrderedDict preserves insertion order (not sorted like dict)."""
125125

126-
def test_orderedict_preserves_insertion_order(self):
126+
def test_ordereddict_preserves_insertion_order(self):
127127
od = OrderedDict([("c", 3), ("a", 1), ("b", 2)])
128128
leaves, td = _pure_tree_flatten(od)
129129
# Insertion order, not sorted
130130
assert leaves == [3, 1, 2]
131131
assert td.sorted_keys == ("c", "a", "b")
132132

133-
def test_orderedict_type_recorded(self):
133+
def test_ordereddict_type_recorded(self):
134134
od = OrderedDict([("a", 1)])
135135
_, td = _pure_tree_flatten(od)
136136
assert td.typ is OrderedDict
@@ -369,7 +369,7 @@ def test_map_over_nested(self):
369369
result = _pure_tree_map(lambda x: x + 10, tree)
370370
assert result == {"a": [11, 12], "b": (13,)}
371371

372-
def test_map_preserves_orderedict_type(self):
372+
def test_map_preserves_ordereddict_type(self):
373373
od = OrderedDict([("c", 1), ("a", 2)])
374374
result = _pure_tree_map(lambda x: x * 10, od)
375375
assert isinstance(result, OrderedDict)
@@ -435,6 +435,14 @@ def test_type_mismatch_dict_vs_list(self):
435435
with pytest.raises(ValueError, match="structure mismatch"):
436436
_pure_tree_map(lambda x, y: (x, y), {"a": 1}, [1])
437437

438+
def test_defaultdict_factory_mismatch(self):
439+
with pytest.raises(ValueError, match="structure mismatch"):
440+
_pure_tree_map(
441+
lambda x, y: (x, y),
442+
defaultdict(int, {"a": 1}),
443+
defaultdict(list, {"a": 2}),
444+
)
445+
438446

439447
class TestTreeMapNoArgs:
440448
"""Edge case: no pytree arguments."""

0 commit comments

Comments
 (0)