def get_par_names(func): """ Return a list containing the names of the arguments of "func" other than the first argument. In pygamaland, those are the function's "parameters." """ from scipy._lib._util import getargspec_no_self args, varargs, varkw, defaults = getargspec_no_self(func) return args[1:]
def _construct_argparser(self, *args, **kwargs): if self.shapes: shapes = self.shapes.replace(',', ' ').split() else: shapes = getargspec_no_self(self._rvs).args # have the arguments, construct the method from template shapes_str = ', '.join(shapes) + ', ' if shapes else '' # NB: not None dct = dict(shape_arg_str=shapes_str) ns = {} exec(_parse_arg_template.format(**dct), ns) # NB: attach to the instance, not class for name in ['_parse_args']: setattr(self, name, instancemethod(ns[name], self, self.__class__)) self.shapes = ', '.join(shapes) if shapes else None if not hasattr(self, 'numargs'): self.numargs = len(shapes)
def run(self): env = self.state.document.settings.env # Interface function name = self.arguments[0].strip() obj = _import_object(name) args, varargs, keywords, defaults = getargspec_no_self(obj) # Implementation function impl_name = self.options['impl'] impl_obj = _import_object(impl_name) impl_args, impl_varargs, impl_keywords, impl_defaults = getargspec_no_self( impl_obj) # Format signature taking implementation into account args = list(args) defaults = list(defaults) def set_default(arg, value): j = args.index(arg) defaults[len(defaults) - (len(args) - j)] = value def remove_arg(arg): if arg not in args: return j = args.index(arg) if j < len(args) - len(defaults): del args[j] else: del defaults[len(defaults) - (len(args) - j)] del args[j] options = [] for j, opt_name in enumerate(impl_args): if opt_name in args: continue if j >= len(impl_args) - len(impl_defaults): options.append( (opt_name, impl_defaults[len(impl_defaults) - (len(impl_args) - j)])) else: options.append((opt_name, None)) set_default('options', dict(options)) set_default('method', self.options['method'].strip()) for arg in list(args): if arg not in impl_args and arg not in ('fun', 'x0', 'args', 'tol', 'callback', 'method', 'options'): remove_arg(arg) # XXX deprecation that we should fix someday using Signature (?) with warnings.catch_warnings(record=True): warnings.simplefilter('ignore') signature = inspect.formatargspec(args, varargs, keywords, defaults) # Produce output self.options['noindex'] = True self.arguments[0] = name + signature lines = textwrap.dedent(pydoc.getdoc(impl_obj)).splitlines() # Change "Options" to "Other Parameters", run numpydoc, reset new_lines = [] for line in lines: if line.strip() == 'Options': line = "Other Parameters" elif line.strip() == "-" * len('Options'): line = "-" * len("Other Parameters") new_lines.append(line) # use impl_name instead of name here to avoid duplicate refs mangle_docstrings(env.app, 'function', impl_name, None, None, new_lines) lines = new_lines new_lines = [] for line in lines: if line.strip() == ':Other Parameters:': new_lines.extend((BLURB % (name, )).splitlines()) new_lines.append('\n') new_lines.append(':Options:') else: new_lines.append(line) self.content = ViewList(new_lines, self.content.parent) return base_directive.run(self)
def run(self): env = self.state.document.settings.env # Interface function name = self.arguments[0].strip() obj = _import_object(name) args, varargs, keywords, defaults = getargspec_no_self(obj) # Implementation function impl_name = self.options['impl'] impl_obj = _import_object(impl_name) impl_args, impl_varargs, impl_keywords, impl_defaults = getargspec_no_self(impl_obj) # Format signature taking implementation into account args = list(args) defaults = list(defaults) def set_default(arg, value): j = args.index(arg) defaults[len(defaults) - (len(args) - j)] = value def remove_arg(arg): if arg not in args: return j = args.index(arg) if j < len(args) - len(defaults): del args[j] else: del defaults[len(defaults) - (len(args) - j)] del args[j] options = [] for j, opt_name in enumerate(impl_args): if opt_name in args: continue if j >= len(impl_args) - len(impl_defaults): options.append((opt_name, impl_defaults[len(impl_defaults) - (len(impl_args) - j)])) else: options.append((opt_name, None)) set_default('options', dict(options)) set_default('method', self.options['method'].strip()) for arg in list(args): if arg not in impl_args and arg not in ('fun', 'x0', 'args', 'tol', 'callback', 'method', 'options'): remove_arg(arg) # XXX deprecation that we should fix someday using Signature (?) with warnings.catch_warnings(record=True): warnings.simplefilter('ignore') signature = inspect.formatargspec( args, varargs, keywords, defaults) # Produce output self.options['noindex'] = True self.arguments[0] = name + signature lines = textwrap.dedent(pydoc.getdoc(impl_obj)).splitlines() # Change "Options" to "Other Parameters", run numpydoc, reset new_lines = [] for line in lines: if line.strip() == 'Options': line = "Other Parameters" elif line.strip() == "-"*len('Options'): line = "-"*len("Other Parameters") new_lines.append(line) # use impl_name instead of name here to avoid duplicate refs mangle_docstrings(env.app, 'function', impl_name, None, None, new_lines) lines = new_lines new_lines = [] for line in lines: if line.strip() == ':Other Parameters:': new_lines.extend((BLURB % (name,)).splitlines()) new_lines.append('\n') new_lines.append(':Options:') else: new_lines.append(line) self.content = ViewList(new_lines, self.content.parent) return base_directive.run(self)