@@ -82,6 +82,36 @@ def normalize_ndarray(arg, name=None):
82
82
import functools
83
83
84
84
85
+ def maybe_normalize (arg , parm ):
86
+ """Normalize arg if a normalizer is registred."""
87
+ normalizer = normalizers .get (parm .annotation , None )
88
+ return normalizer (arg ) if normalizer else arg
89
+
90
+
91
+ def normalizer (func ):
92
+ @functools .wraps (func )
93
+ def wrapped (* args , ** kwds ):
94
+ params = inspect .signature (func ).parameters
95
+ first_param = next (iter (params .values ()))
96
+ # NumPy's API does not have positional args before variadic positional args
97
+ if first_param .kind == inspect .Parameter .VAR_POSITIONAL :
98
+ args = [maybe_normalize (arg , first_param ) for arg in args ]
99
+ else :
100
+ # NB: extra unknown arguments: pass through, will raise in func(*args) below
101
+ args = [
102
+ maybe_normalize (arg , parm ) for arg , parm in zip (args , params .values ())
103
+ ] + args [len (params .values ()) :]
104
+
105
+ kwds = {
106
+ name : maybe_normalize (arg , params [name ]) if name in params else arg
107
+ for name , arg in kwds .items ()
108
+ }
109
+ return func (* args , ** kwds )
110
+
111
+ return wrapped
112
+
113
+
114
+ '''
85
115
def normalize_this(arg, parm):
86
116
"""Normalize arg if a normalizer is registred."""
87
117
normalizer = normalizers.get(parm.annotation, None)
@@ -123,3 +153,4 @@ def wrapped(*args, **kwds):
123
153
return result
124
154
125
155
return wrapped
156
+ '''
0 commit comments