Source code for haddock.libs.libfunc

"""
Tools for Functional-Programming in Python.

From: https://github.com/joaomcteixeira/libfuncpy
"""
from operator import is_not
from typing import Any, Callable, Literal


[docs]def chainf(init: Any, *funcs: Callable[..., Any], **common: Any) -> Any: """ Apply a sequence of functions to an initial value. Example ------- >>> chainf(2, *[str, int, float]) 2.0 Parameters ---------- init : anything The initial value. **common : keyword arguments Common key word arguments to all functions. Returns ------- anything The result of the chain of functions; this is, the return value of the last function. """ for func in funcs: init = func(init, **common) return init
[docs]def chainfs(*funcs: Callable[..., Any], **common: Any) -> Callable[..., Any]: """ Store functions be executed on a value. Example ------- >>> do = chainfs(str, int, float) >>> do(2) 2.0 See Also -------- :py:func:`chainf` """ def execute(value: Any) -> Any: return chainf(value, *funcs, **common) return execute
[docs]def give_same(value: Any) -> Any: """Return what is given.""" return value
[docs]def true(*ignore: Any, **everything: Any) -> Literal[True]: """Give True regardless of the input.""" return True
[docs]def false(*ignore: Any, **everything: Any) -> Literal[False]: """Give False regardless of the input.""" return False
[docs]def none(*ignore: Any, **everything: Any) -> Literal[None]: """Give None regardless of the input.""" return None
[docs]def nan(*ignore: Any, **everything: Any) -> float: """Give nan regardless of the input.""" return float('nan')
[docs]def not_none(value: Any) -> bool: """Give True if value is not None, or False otherwise.""" return is_not(value, None)