Skip to content

Commit 9eaa79c

Browse files
Fiddle-Config Teamcopybara-github
authored andcommitted
Internal change. purely make the presubmit happy. to be deleted once the diffbase is removed.
PiperOrigin-RevId: 631644170
1 parent 20925d8 commit 9eaa79c

3 files changed

Lines changed: 38 additions & 0 deletions

File tree

fiddle/_src/experimental/auto_config.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,12 @@ def build_model():
601601
)
602602

603603

604+
def inlined_partial(
605+
auto_config_fn: AutoConfig, *args, **kwargs
606+
) -> functools.partial:
607+
return functools.partial(auto_config_fn, *args, **kwargs)
608+
609+
604610
@dataclasses.dataclass(frozen=True)
605611
class ConfigTypes:
606612
config_cls: Type[config.Config] = config.Config
@@ -759,6 +765,19 @@ def auto_config_call_handler(fn_or_cls, *args, **kwargs):
759765
for name, arg in kwargs.items()
760766
},
761767
)
768+
elif fn_or_cls is inlined_partial:
769+
auto_config_fn, partial_args = args[0], args[1:]
770+
if not isinstance(auto_config_fn, AutoConfig):
771+
raise ValueError(
772+
'inlined_partial should only be applied to auto_config functions.'
773+
)
774+
cfg = auto_config_fn.as_buildable(*partial_args, **kwargs)
775+
if not isinstance(cfg, config.Config):
776+
raise ValueError(
777+
'inlined_partial should only be applied to auto_config functions'
778+
' that create a single top-level Config.'
779+
)
780+
return cast_lib.cast(partial_cls, cfg)
762781

763782
if fn_or_cls is exempt:
764783
return fn_or_cls(*args, **kwargs)

fiddle/_src/experimental/auto_config_test.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,24 @@ def test_fn_config_2():
318318
self.assertEqual(expected_config, test_fn_config_1.as_buildable())
319319
self.assertEqual(expected_config, test_fn_config_2.as_buildable())
320320

321+
def test_inlined_partial(self):
322+
expected_config = fdl.Partial(FrozenSampleClass, arg1=1, arg2=2)
323+
324+
@auto_config.auto_config
325+
def make_frozen_sample_class(arg1):
326+
return FrozenSampleClass(arg1, 2)
327+
328+
@auto_config.auto_config
329+
def test_config():
330+
return auto_config.inlined_partial(make_frozen_sample_class, arg1=1)
331+
332+
self.assertEqual(expected_config, test_config.as_buildable())
333+
334+
python_path_output = test_config()
335+
self.assertIsInstance(python_path_output, functools.partial)
336+
self.assertEqual(python_path_output.func, make_frozen_sample_class)
337+
self.assertEqual(python_path_output.keywords, {'arg1': 1})
338+
321339
def test_create_config_with_args(self):
322340
expected_config = fdl.Config(
323341
FrozenSampleClass, 'positional', arg2='default'

fiddle/experimental/auto_config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from fiddle._src.experimental.auto_config import ConfigTypes
3131
from fiddle._src.experimental.auto_config import exempt
3232
from fiddle._src.experimental.auto_config import inline
33+
from fiddle._src.experimental.auto_config import inlined_partial
3334
from fiddle._src.experimental.auto_config import is_auto_config
3435
from fiddle._src.experimental.auto_config import UnsupportedLanguageConstructError
3536
from fiddle._src.experimental.with_tags import with_tags

0 commit comments

Comments
 (0)