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