def _np_signature(f): """An enhanced funcsigs.signature that can handle numpy.ufunc.""" if not isinstance(f, np.ufunc): return funcsigs.signature(f) def names_from_num(prefix, n): if n <= 0: return [] elif n == 1: return [prefix] else: return [prefix + str(i + 1) for i in range(n)] input_names = names_from_num('x', f.nin) output_names = names_from_num('out', f.nout) keyword_only_params = [ ('where', True), ('casting', 'same_kind'), ('order', 'K'), ('dtype', None), ('subok', True), ('signature', None), ('extobj', None)] params = [] params += [Parameter(name, Parameter.POSITIONAL_ONLY) for name in input_names] if f.nout > 1: params += [Parameter(name, Parameter.POSITIONAL_ONLY, default=None) for name in output_names] params += [Parameter('out', Parameter.POSITIONAL_OR_KEYWORD, default=None if f.nout == 1 else (None,) * f.nout)] params += [Parameter(name, Parameter.KEYWORD_ONLY, default=default) for name, default in keyword_only_params] return funcsigs.Signature(params)
def _restore_parameters(ray_parameters): """Reconstructs the funcsigs.Parameter objects.""" return [ Parameter(rayparam.name, _convert_to_parameter_kind(rayparam.kind_int), default=rayparam.default, annotation=rayparam.annotation, _partial_kwarg=rayparam.partial_kwarg) for rayparam in ray_parameters ]
def __init__(self, singular_cost_functions): self._cost_function_handle = MultiCostFunction.cost_sum self._cost_function_argcount = len(singular_cost_functions) self._cost_function_signature = Signature(parameters=[ Parameter(name='cost%s' % _i, kind=Parameter.POSITIONAL_OR_KEYWORD) for _i in range(self._cost_function_argcount) ]) self._assign_function_formatter() self._flags = {} self._ndf = None self._needs_errors = False for _singular_cost_function in singular_cost_functions: if _singular_cost_function.needs_errors: self._needs_errors = True break
def defaults(self, new_defaults): if self.parcount != len( new_defaults ): # first arg is independent variable, but not a parameter raise ModelFunctionException( 'Expected %s parameter defaults (1 per parameter), but received %s' % (self.parcount, len(new_defaults))) # pad defaults with empties for 'x' new_defaults = [Parameter.empty ] * (self.argcount - self.parcount) + new_defaults # set new signature self._model_function_signature = Signature(parameters=[ Parameter( name=_par.name, kind=_par.kind, default=_par_default, ) for _par, _par_default in zip(self.signature.parameters.values(), new_defaults) ])
def make_signature(names): return Signature( Parameter(name, Parameter.POSITIONAL_OR_KEYWORD) for name in names)