mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 21:14:14 +08:00
[pytree][Easy] preserve dict
keys in insertion order in CXX pytree (#130140)
`optree` and JAX pytree traversal the `dict` in sorted key ordering (see [Key Ordering for Dictionaries](https://github.com/metaopt/optree#key-ordering-for-dictionaries)). While in PyTorch Python pytree, we traversal the `dict` in insertion order. See also: - #114392 This aligns the behavior of CXX pytree with Python pytree. Pull Request resolved: https://github.com/pytorch/pytorch/pull/130140 Approved by: https://github.com/zou3519
This commit is contained in:
committed by
PyTorch MergeBot
parent
1f8ff94d4f
commit
9abaaad6a8
@ -23,7 +23,6 @@ from torch.testing._internal.common_utils import (
|
||||
run_tests,
|
||||
skipIfTorchDynamo,
|
||||
subtest,
|
||||
TEST_WITH_TORCHDYNAMO,
|
||||
TestCase,
|
||||
)
|
||||
|
||||
@ -805,7 +804,6 @@ if "optree" in sys.modules:
|
||||
py_pytree.TreeSpec(tuple, None, []) != py_pytree.TreeSpec(list, None, []),
|
||||
)
|
||||
|
||||
@unittest.skipIf(TEST_WITH_TORCHDYNAMO, "Dynamo test in test_treespec_repr_dynamo.")
|
||||
def test_treespec_repr(self):
|
||||
# Check that it looks sane
|
||||
pytree = (0, [0, 0, [0]])
|
||||
@ -820,20 +818,6 @@ if "optree" in sys.modules:
|
||||
),
|
||||
)
|
||||
|
||||
@unittest.skipIf(not TEST_WITH_TORCHDYNAMO, "Eager test in test_treespec_repr.")
|
||||
def test_treespec_repr_dynamo(self):
|
||||
# Check that it looks sane
|
||||
pytree = (0, [0, 0, [0]])
|
||||
_, spec = py_pytree.tree_flatten(pytree)
|
||||
self.assertExpectedInline(
|
||||
repr(spec),
|
||||
"""\
|
||||
TreeSpec(tuple, None, [*,
|
||||
TreeSpec(list, None, [*,
|
||||
*,
|
||||
TreeSpec(list, None, [*])])])""",
|
||||
)
|
||||
|
||||
@parametrize(
|
||||
"spec",
|
||||
[
|
||||
@ -1365,21 +1349,12 @@ class TestCxxPytree(TestCase):
|
||||
def test_treespec_equality(self):
|
||||
self.assertEqual(cxx_pytree.LeafSpec(), cxx_pytree.LeafSpec())
|
||||
|
||||
@unittest.skipIf(TEST_WITH_TORCHDYNAMO, "Dynamo test in test_treespec_repr_dynamo.")
|
||||
def test_treespec_repr(self):
|
||||
# Check that it looks sane
|
||||
pytree = (0, [0, 0, [0]])
|
||||
_, spec = cxx_pytree.tree_flatten(pytree)
|
||||
self.assertEqual(repr(spec), "PyTreeSpec((*, [*, *, [*]]), NoneIsLeaf)")
|
||||
|
||||
@unittest.skipIf(not TEST_WITH_TORCHDYNAMO, "Eager test in test_treespec_repr.")
|
||||
def test_treespec_repr_dynamo(self):
|
||||
# Check that it looks sane
|
||||
pytree = (0, [0, 0, [0]])
|
||||
_, spec = cxx_pytree.tree_flatten(pytree)
|
||||
self.assertExpectedInline(
|
||||
repr(spec),
|
||||
"PyTreeSpec((*, [*, *, [*]]), NoneIsLeaf, namespace='torch')",
|
||||
self.assertEqual(
|
||||
repr(spec), "PyTreeSpec((*, [*, *, [*]]), NoneIsLeaf, namespace='torch')"
|
||||
)
|
||||
|
||||
@parametrize(
|
||||
|
Reference in New Issue
Block a user