Created
August 5, 2024 10:16
-
-
Save samvv/6a8525313131eb2501859dd60a4c2803 to your computer and use it in GitHub Desktop.
Overloaded pipe() in Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
out = '' | |
# Edit this variable | |
count = 25 | |
for i in range(0, count): | |
out += f"_T{i} = TypeVar('_T{i}')\n" | |
out += '\n' | |
for i in range(0, count): | |
out += '@overload\n' | |
out += f"def pipe(arg0: _T0" | |
for k in range(0, i): | |
out += f", f{k}: Callable[[_T{k}], _T{k+1}]" | |
out += f', /) -> _T{i}: ...\n\n' | |
out += f""" | |
def pipe(arg0, fs): | |
result = arg0 | |
for f in fs: | |
result = f(result) | |
return result | |
""" | |
print(out) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
_T0 = TypeVar('_T0') | |
_T1 = TypeVar('_T1') | |
_T2 = TypeVar('_T2') | |
_T3 = TypeVar('_T3') | |
_T4 = TypeVar('_T4') | |
_T5 = TypeVar('_T5') | |
_T6 = TypeVar('_T6') | |
_T7 = TypeVar('_T7') | |
_T8 = TypeVar('_T8') | |
_T9 = TypeVar('_T9') | |
_T10 = TypeVar('_T10') | |
_T11 = TypeVar('_T11') | |
_T12 = TypeVar('_T12') | |
_T13 = TypeVar('_T13') | |
_T14 = TypeVar('_T14') | |
_T15 = TypeVar('_T15') | |
_T16 = TypeVar('_T16') | |
_T17 = TypeVar('_T17') | |
_T18 = TypeVar('_T18') | |
_T19 = TypeVar('_T19') | |
_T20 = TypeVar('_T20') | |
_T21 = TypeVar('_T21') | |
_T22 = TypeVar('_T22') | |
_T23 = TypeVar('_T23') | |
_T24 = TypeVar('_T24') | |
@overload | |
def pipe(arg0: _T0, /) -> _T0: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], /) -> _T1: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], f1: Callable[[_T1], _T2], /) -> _T2: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], f1: Callable[[_T1], _T2], f2: Callable[[_T2], _T3], /) -> _T3: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], f1: Callable[[_T1], _T2], f2: Callable[[_T2], _T3], f3: Callable[[_T3], _T4], /) -> _T4: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], f1: Callable[[_T1], _T2], f2: Callable[[_T2], _T3], f3: Callable[[_T3], _T4], f4: Callable[[_T4], _T5], /) -> _T5: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], f1: Callable[[_T1], _T2], f2: Callable[[_T2], _T3], f3: Callable[[_T3], _T4], f4: Callable[[_T4], _T5], f5: Callable[[_T5], _T6], /) -> _T6: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], f1: Callable[[_T1], _T2], f2: Callable[[_T2], _T3], f3: Callable[[_T3], _T4], f4: Callable[[_T4], _T5], f5: Callable[[_T5], _T6], f6: Callable[[_T6], _T7], /) -> _T7: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], /) -> _T8: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], /) -> _T9: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], /) -> _T10: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], /) -> _T11: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], /) -> _T12: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], /) -> _T13: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], /) -> _T14: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], f14: Callable[[_T14], _T15], /) -> _T15: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], f14: Callable[[_T14], _T15], f15: Callable[[_T15], _T16], /) -> _T16: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], f14: Callable[[_T14], _T15], f15: Callable[[_T15], _T16], f16: Callable[[_T16], _T17], /) -> _T17: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], f14: Callable[[_T14], _T15], f15: Callable[[_T15], _T16], f16: Callable[[_T16], _T17], f17: Callable[[_T17], _T18], /) -> _T18: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], f14: Callable[[_T14], _T15], f15: Callable[[_T15], _T16], f16: Callable[[_T16], _T17], f17: Callable[[_T17], _T18], f18: Callable[[_T18], _T19], /) -> _T19: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], f14: Callable[[_T14], _T15], f15: Callable[[_T15], _T16], f16: Callable[[_T16], _T17], f17: Callable[[_T17], _T18], f18: Callable[[_T18], _T19], f19: Callable[[_T19], _T20], /) -> _T20: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], f14: Callable[[_T14], _T15], f15: Callable[[_T15], _T16], f16: Callable[[_T16], _T17], f17: Callable[[_T17], _T18], f18: Callable[[_T18], _T19], f19: Callable[[_T19], _T20], f20: Callable[[_T20], _T21], /) -> _T21: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], f14: Callable[[_T14], _T15], f15: Callable[[_T15], _T16], f16: Callable[[_T16], _T17], f17: Callable[[_T17], _T18], f18: Callable[[_T18], _T19], f19: Callable[[_T19], _T20], f20: Callable[[_T20], _T21], f21: Callable[[_T21], _T22], /) -> _T22: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], f14: Callable[[_T14], _T15], f15: Callable[[_T15], _T16], f16: Callable[[_T16], _T17], f17: Callable[[_T17], _T18], f18: Callable[[_T18], _T19], f19: Callable[[_T19], _T20], f20: Callable[[_T20], _T21], f21: Callable[[_T21], _T22], f22: Callable[[_T22], _T23], /) -> _T23: ... | |
@overload | |
def pipe(arg0: _T0, f0: Callable[[_T0], _T1], 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], f8: Callable[[_T8], _T9], f9: Callable[[_T9], _T10], f10: Callable[[_T10], _T11], f11: Callable[[_T11], _T12], f12: Callable[[_T12], _T13], f13: Callable[[_T13], _T14], f14: Callable[[_T14], _T15], f15: Callable[[_T15], _T16], f16: Callable[[_T16], _T17], f17: Callable[[_T17], _T18], f18: Callable[[_T18], _T19], f19: Callable[[_T19], _T20], f20: Callable[[_T20], _T21], f21: Callable[[_T21], _T22], f22: Callable[[_T22], _T23], f23: Callable[[_T23], _T24], /) -> _T24: ... | |
def pipe(arg0, *fs): | |
result = arg0 | |
for f in fs: | |
result = f(result) | |
return result |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Don't forget to
from typing import Callable, TypeVar
in whatever file you place the generated code.