API reference¶

calls.raises(__e: BaseException) → Callable[[...], Any][source]¶

Create a callable which raises the given exception.

The return value is marked Any so its signature fits anywhere a callable is needed.

Example

>>> f = raises(ValueError("foo"))
...
>>> f()  # any arguments are accepted
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: foo

Note

The resulting callable is picklable if the given value is.

calls.always(__v: S) → Callable[[...], S][source]¶

Create a callable which always returns the same value

Example

>>> f = always(4)
...
>>> f()  # any arguments are accepted
4

Note

The resulting callable is picklable if the given value is.

calls.identity(__v: S) → S[source]¶

Pass the given value unmodified

Example

>>> identity(4)
4
>>> identity("foo")
"foo"
calls.flip(__f: BinaryFunction[Q, R, S]) → BinaryFunction[R, Q, S][source]¶

Flip the two arguments of a function. Often useful in combination with partial().

Example

>>> f = flip(round)
...
>>> f(2, 5.125)
5.13
>>> f(0, 3.4)
3

Note

The resulting callable is picklable if the original is.

calls.pipe() → Callable[[T1], T1][source]¶
calls.pipe(__f1: Callable[[T1], T2]) → Callable[[T1], T2]
calls.pipe(__f1: Callable[[T1], T2], __f2: Callable[[T2], T3]) → Callable[[T1], T3]
calls.pipe(__f1: Callable[[T1], T2], __f2: Callable[[T2], T3], __f3: Callable[[T3], T4]) → Callable[[T1], T4]
calls.pipe(__f1: Callable[[T1], T2], __f2: Callable[[T2], T3], __f3: Callable[[T3], T4], __f4: Callable[[T4], T5]) → Callable[[T1], T5]
calls.pipe(__f1: Callable[[T1], T2], __f2: Callable[[T2], T3], __f3: Callable[[T3], T4], __f4: Callable[[T4], T5], __f5: Callable[[T5], T6]) → Callable[[T1], T6]
calls.pipe(__f1: Callable[[T1], T2], __f2: Callable[[T2], T3], __f3: Callable[[T3], T4], __f4: Callable[[T4], T5], __f5: Callable[[T5], T6], __f6: Callable[[T6], T7]) → Callable[[T1], T7]
calls.pipe(__f1: Callable[[T1], T2], __f2: Callable[[T2], T3], __f3: Callable[[T3], T4], __f4: Callable[[T4], T5], __f5: Callable[[T5], T6], __f6: Callable[[T6], T7], __f7: Callable[[T7], T8]) → Callable[[T1], T8]
calls.pipe(__f1: Callable, __f2: Callable, __f3: Callable, __f4: Callable, __f5: Callable, __f6: Callable, __f7: Callable, *__fn: Callable) → Callable

Create a new callable by piping several in succession

Example

>>> fn = pipe(float, lambda x: x / 4, int)
>>> fn('9.3')
2

Note

  • Type checking is supported up to 7 functions, due to limitations of the Python type system.

  • The resulting callable is picklable if the given callables are.

class calls.UnaryFunction(*args, **kwargs)[source]¶

Protocol for a callable taking exactly one argument.

Examples of objects satisfying this protocol:

>>> # Below are all UnaryFunction[int, float]
...
>>> def myfunc(a: int) -> float:
...     return a / 7
...
>>> lambda a: a / 7
...
>>> (7).__rtruediv__
class calls.BinaryFunction(*args, **kwargs)[source]¶

Protocol for a callable which takes exactly two arguments.

Examples of objects satisfying this protocol:

>>> # Below are all BinaryFunction[str, int, str]
...
>>> def myfunc(s: str, w: int) -> str:
...     return a.center(b)
...
>>> lambda s, w: s.center(w)
...
>>> str.center