2020import multiprocessing
2121import multiprocessing .pool
2222from functools import partial
23- from collections import namedtuple , OrderedDict , deque
23+ from collections import namedtuple , OrderedDict , deque , defaultdict
2424
2525import law
2626import order as od
@@ -1848,6 +1848,9 @@ def __init__(
18481848 f"to set: { e .args [0 ]} " ,
18491849 )
18501850 raise e
1851+
1852+ # remove keyword from further processing
1853+ kwargs .pop (attr )
18511854 else :
18521855 try :
18531856 deps = set (law .util .make_list (getattr (self .__class__ , attr )))
@@ -1862,11 +1865,15 @@ def __init__(
18621865 # also register a set for storing instances, filled in create_dependencies
18631866 setattr (self , f"{ attr } _instances" , set ())
18641867
1868+ # set all other keyword arguments as instance attributes
1869+ for attr , value in kwargs .items ():
1870+ setattr (self , attr , value )
1871+
18651872 # dictionary of dependency class to instance, set in create_dependencies
18661873 self .deps = DotDict ()
18671874
18681875 # dictionary of keyword arguments mapped to dependenc classes to be forwarded to their init
1869- self .deps_kwargs = DotDict ()
1876+ self .deps_kwargs = defaultdict ( dict ) # TODO: avoid using `defaultdict`
18701877
18711878 # deferred part of the initialization
18721879 if deferred_init :
@@ -1931,8 +1938,15 @@ def deferred_init(self, instance_cache: dict | None = None) -> dict:
19311938 self .init_func ()
19321939
19331940 # instantiate dependencies again, but only perform updates
1934- self .create_dependencies (instance_cache , only_update = True )
1941+ # self.create_dependencies(instance_cache, only_update=True)
1942+
1943+ # NOTE: the above does not correctly propagate `deps_kwargs` to the dependencies.
1944+ # As a workaround, instantiate all dependencies fully a second time by
1945+ # invalidating the instance cache and setting `only_update` to False
1946+ instance_cache = {}
1947+ self .create_dependencies (instance_cache , only_update = False )
19351948
1949+ # NOTE: return value currently not being used anywhere -> remove?
19361950 return instance_cache
19371951
19381952 def create_dependencies (
0 commit comments