11import inspect
22import json
33import threading
4- import inspect
54
6- from typing import Any
5+ from typing import Any , Dict
6+ from typing import Callable
77
88
99class Tracker :
10+ """
11+ tracker for python read/write operations
12+ """
1013 rlist = set ()
14+
1115 wlist = set ()
1216 callback = None
1317
@@ -38,9 +42,12 @@ def report():
3842 return '\n ' .join (retvals )
3943
4044 @staticmethod
41- def set_tracker (func ):
45+ def set_tracker (func : Callable [[Dict [str , Any ]], None ]):
46+ """ report hyper-parameter value to a tracker, for example, `mlflow.tracking`
47+ """
4248 Tracker .callback = func
4349
50+
4451class Accessor (dict ):
4552 """
4653 Helper for accessing undefined parameters.
@@ -100,6 +107,7 @@ def __setattr__(self, name: str, value: Any):
100107 root [path ] = HyperParameter ()
101108 root = root [path ]
102109 root [name ] = value
110+ return value
103111
104112 def __str__ (self ):
105113 return ''
@@ -154,7 +162,8 @@ class HyperParameter(dict):
154162 '''
155163
156164 def __init__ (self , ** kws ):
157- return self .update (kws )
165+ super (HyperParameter , self ).__init__ ()
166+ self .update (kws )
158167
159168 def update (self , kws ):
160169 for k , v in kws .items ():
@@ -220,9 +229,6 @@ def get(self, name: str) -> Any:
220229 Tracker .rlist .add (name )
221230 return obj [path [- 1 ]] if path [- 1 ] in obj else None
222231
223- def holder (self ):
224- return
225-
226232 def __setitem__ (self , key , value ):
227233 if isinstance (value , dict ):
228234 return dict .__setitem__ (self , key , HyperParameter (** value ))
@@ -247,11 +253,11 @@ def __setattr__(self, name, value):
247253
248254 def __call__ (self ) -> Any :
249255 """
250- Return a parameter accessor.
256+ Return a parameter accessor.
251257
252258 Returns:
253259 Any: holder of current parameter
254-
260+
255261 Examples:
256262 >>> cfg = HyperParameter(a=1, b = {'c':2, 'd': 3})
257263 >>> cfg().a.getOrElse(2)
@@ -279,9 +285,9 @@ def from_json_file(path):
279285
280286
281287class param_scope (HyperParameter ):
282- '''
288+ '''
283289 thread safe scoped hyper parameeter
284-
290+
285291 Examples:
286292 create a scoped HyperParameter
287293 >>> with param_scope(**{'a': 1, 'b': 2}) as cfg:
@@ -492,4 +498,4 @@ def read_a():
492498 self .assertEqual (read_a (), 2 )
493499 self .assertEqual (read_a (), 1 )
494500
495- unittest .main ()
501+ unittest .main ()
0 commit comments