Source code for nemos.solvers._solver_doc_helper
import inspect
import re
from pydoc import render_doc
from typing import Type
from ._solver_registry import get_solver
[docs]
def get_solver_documentation(solver: str | Type, show_help: bool = False) -> str:
"""
Get the documentation of a specified solver, including accepted arguments and the docstring of its `__init__`.
Parameters
----------
solver:
`solver` can be a string or a type (e.g. `nemos.solvers.JaxoptGradientDescent`).
If `solver` is a string, the corresponding solver will be read from the solver registry.
show_help:
Instead of the docstring, show the full output that would be produced by `help(solver)`
where `solver` is a type.
Example
-------
>>> import nemos as nmo
>>> print(nmo.solvers.get_solver_documentation("SVRG"))
Showing docstring of nemos.solvers._svrg.WrappedSVRG.
For potentially more info, use `show_help=True`.
<BLANKLINE>
Adapter for NeMoS's implementation of SVRG following the AbstractSolver interface.
<BLANKLINE>
Accepted arguments:
-------------------
- batch_size
- fun
- has_aux
- init_params
- key
- maxiter
- stepsize
- tol
<BLANKLINE>
SVRG's documentation:
...
"""
if isinstance(solver, str):
solver = get_solver(solver).implementation
if show_help:
return render_doc(solver, title="Help on %s")
solver_class_path = f"{solver.__module__}.{solver.__name__}"
intro = inspect.cleandoc(f"""
Showing docstring of {solver_class_path}.
For potentially more info, use `show_help=True`.
""")
solver_doc = inspect.getdoc(solver) or f"No documentation found for {solver}."
doc = intro + "\n\n" + solver_doc
# if it doesn't already have it, then expand the docs
# with the __init__'s docstring'
pattern = r"More info from (.+)\.__init__"
if re.search(pattern, doc) is None:
solver_init_doc_header = inspect.cleandoc(
f"More info from {solver.__name__}.__init__"
)
solver_init_doc_header += "\n" + "-" * len(solver_init_doc_header)
solver_init_doc = inspect.cleandoc(
inspect.getdoc(solver.__init__) or "No __init__ documentation found."
)
solver_init_doc = solver_init_doc_header + "\n" + solver_init_doc
doc += "\n\n" + solver_init_doc
return doc