@@ -55,27 +55,32 @@ def _find_arg(sig, arg_name, default_position):
5555
5656 # Check for default name in input args
5757 if arg_name in sig .parameters :
58- return arg_name , params .index (arg_name )
58+ param = sig .parameters [arg_name ]
59+ return arg_name , params .index (arg_name ), param .default
5960 # Otherwise use argument in list by position
6061 elif arg_name is ...:
6162 index = int (_has_self (sig )) + default_position
62- return params [index ], index
63+ param = params [index ]
64+ return param , index , sig .parameters [param ].default
6365 else :
6466 raise ValueError (f"Unable to find parameter '{ arg_name } '." )
6567
6668
67- def _get_value (args , kwargs , name , index ):
69+ def _get_value (args , kwargs , name , index , default_value ):
6870 """Determine value for a given set of args, kwargs, name and index."""
6971 try :
7072 return kwargs [name ]
7173 except KeyError :
7274 try :
7375 return args [index ]
7476 except IndexError :
75- raise IndexError (
76- f"Specified arg idx: { index } , and argument name: { name } , "
77- "were not found in args or kwargs."
78- )
77+ if default_value is not inspect ._empty :
78+ return default_value
79+ else :
80+ raise IndexError (
81+ f"Specified arg idx: { index } , and argument name: { name } , "
82+ "were not found in args or kwargs."
83+ )
7984
8085
8186def _make_decorator_function (
@@ -166,7 +171,7 @@ def wrapper(*args, **kwargs):
166171 if self_val is None :
167172 assert input_val is not None
168173 out_type = iu .determine_array_type (input_val )
169- elif input_val is None :
174+ elif input_val is None or input_val is inspect . _empty :
170175 out_type = self_val .output_type
171176 if out_type == "input" :
172177 out_type = self_val ._input_type
0 commit comments