mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-12-19 05:40:34 +08:00
redefinition -> defaults kept in config
Summary:
This is an internal change in the config systen. It allows redefining a pluggable implementation with new default values. This is useful in notebooks / interactive use. For example, this now works.
class A(ReplaceableBase):
pass
registry.register
class B(A):
i: int = 4
class C(Configurable):
a: A
a_class_type: str = "B"
def __post_init__(self):
run_auto_creation(self)
expand_args_fields(C)
registry.register
class B(A):
i: int = 5
c = C()
assert c.a.i == 5
Reviewed By: shapovalov
Differential Revision: D38219371
fbshipit-source-id: 72911a9bd3426d3359cf8802cc016fc7f6d7713b
This commit is contained in:
committed by
Facebook GitHub Bot
parent
cb49550486
commit
6b481595f0
@@ -378,14 +378,20 @@ class TestConfig(unittest.TestCase):
|
||||
with self.assertWarnsRegex(
|
||||
UserWarning, "New implementation of Grape is being chosen."
|
||||
):
|
||||
bowl = FruitBowl(**bowl_args)
|
||||
self.assertIsInstance(bowl.main_fruit, Grape)
|
||||
defaulted_bowl = FruitBowl()
|
||||
self.assertIsInstance(defaulted_bowl.main_fruit, Grape)
|
||||
self.assertEqual(defaulted_bowl.main_fruit.large, True)
|
||||
self.assertEqual(defaulted_bowl.main_fruit.get_color(), "green")
|
||||
|
||||
with self.assertWarnsRegex(
|
||||
UserWarning, "New implementation of Grape is being chosen."
|
||||
):
|
||||
args_bowl = FruitBowl(**bowl_args)
|
||||
self.assertIsInstance(args_bowl.main_fruit, Grape)
|
||||
# Redefining the same class won't help with defaults because encoded in args
|
||||
self.assertEqual(bowl.main_fruit.large, False)
|
||||
|
||||
self.assertEqual(args_bowl.main_fruit.large, False)
|
||||
# But the override worked.
|
||||
self.assertEqual(bowl.main_fruit.get_color(), "green")
|
||||
self.assertEqual(args_bowl.main_fruit.get_color(), "green")
|
||||
|
||||
# 2. Try redefining without the dataclass modifier
|
||||
# This relies on the fact that default creation processes the class.
|
||||
@@ -397,7 +403,7 @@ class TestConfig(unittest.TestCase):
|
||||
with self.assertWarnsRegex(
|
||||
UserWarning, "New implementation of Grape is being chosen."
|
||||
):
|
||||
bowl = FruitBowl(**bowl_args)
|
||||
FruitBowl(**bowl_args)
|
||||
|
||||
# 3. Adding a new class doesn't get picked up, because the first
|
||||
# get_default_args call has frozen FruitBowl. This is intrinsic to
|
||||
|
||||
Reference in New Issue
Block a user