diff --git a/codegen/gen_parmap_timeout.py b/codegen/gen_parmap_timeout.py index b2461aa..3104ab9 100644 --- a/codegen/gen_parmap_timeout.py +++ b/codegen/gen_parmap_timeout.py @@ -10,7 +10,7 @@ def generate_generics_assignments(n: int) -> str: def generate_parmap(n: int) -> str: return f""" -def par_map_{n}_timeout( +def par_map_timeout_{n}( {signature_variables(n)}, executor: concurrent.futures.Executor, timeout: timedelta, diff --git a/codegen/gen_parmap_timeout_n.py b/codegen/gen_parmap_timeout_n.py new file mode 100644 index 0000000..c12c55f --- /dev/null +++ b/codegen/gen_parmap_timeout_n.py @@ -0,0 +1,97 @@ +from codegen.constants import MAX_N +from codegen.gen_parmap_timeout import signature_return_generics + +# To generate the actual function +def generate_parmap_n_main_fn() -> str: + return f""" +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + {optional_signature_variables(start=3, n=MAX_N)}, + *, # Makes executor, timeout, and logger keyword only + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Union[{tuple_returns()}]: + \"""Executes 2 to 22 functions in parallel\""" + {all_checks_and_returns()} + else: + return par_map_timeout_2(func1=func1, func2=func2, executor=executor) +""" + + +def optional_signature_variables(start: int, n: int) -> str: + func_variables: list[str] = [] + for i in range(start, n): + func_variables.append(f"func{i}: Optional[Callable[[], A{i}]] = None") + return ",".join(func_variables) + + +def tuple_returns() -> str: + tuples: list[str] = [] + for i in range(2, MAX_N): + tuples.append(f"Tuple[{signature_return_generics(i)}]") + return ",".join(tuples) + + +def is_not_none_checks(n: int) -> str: + predicates: list[str] = [] + for i in range(n, 2, -1): # stop at 2 because don't need to check func2 and fun1 + predicates.append(f"func{i} is not None") + joined_preds = " and ".join(predicates) + return f"if {joined_preds}:" + + +def return_statement(n: int) -> str: + return f" return par_map_timeout_{n}({keyword_args(n)},executor=executor, timeout=timeout, logger=logger)" + + +def keyword_args(n: int) -> str: + keywords: list[str] = [] + for i in range(1, n + 1): + keywords.append(f"func{i}=func{i}") + return ",".join(keywords) + + +def all_checks_and_returns() -> str: + check_and_returns: list[str] = [] + for i in range(MAX_N - 1, 2, -1): + check_and_returns.append(is_not_none_checks(i) + "\n " + return_statement(i)) + return "\n ".join(check_and_returns) + + +# end: To generate the actual function + +# To generate the @overload hints + + +def generate_overloads() -> str: + overloads: list[str] = [] + for i in range(2, MAX_N): + overloads.append(generate_single_overload(i)) + return "\n".join(overloads) + + +def generate_single_overload(i: int) -> str: + definition = f""" +@overload +def par_map_n({mandatory_signature_variables(i)}, *, executor: concurrent.futures.Executor, timeout: timedelta, logger: Optional[Callable[[str], None]] = None) -> Tuple[{signature_return_generics(i)}]: + ... +""" + return definition + + +def mandatory_signature_variables(n: int) -> str: + func_variables: list[str] = [] + for i in range(1, n + 1): + func_variables.append(f"func{i}: Callable[[], A{i}]") + return ",".join(func_variables) + + +if __name__ == "__main__": + overloads: str = generate_overloads() + main_function: str = generate_parmap_n_main_fn() + with open("generated_gen_parmap_timeout_n.py", "w+") as text_file: + text_file.write(overloads) + text_file.write(main_function) + diff --git a/tests/test_typesafe_parmap.py b/tests/test_typesafe_parmap.py index 704482b..c92778d 100644 --- a/tests/test_typesafe_parmap.py +++ b/tests/test_typesafe_parmap.py @@ -5,7 +5,7 @@ from datetime import timedelta from typesafe_parmap import par_map_2, par_map_3, par_map_n -from typesafe_parmap.parmap_timeout import par_map_2_timeout +from typesafe_parmap.parmap_timeout import par_map_timeout_2 tp = ThreadPoolExecutor(5) @@ -69,7 +69,7 @@ def short_running_str(param: str) -> str: return param executor = ThreadPoolExecutor(2) - int_result, str_result = par_map_2_timeout( + int_result, str_result = par_map_timeout_2( func1=lambda: long_running_int(5), func2=lambda: short_running_str("test"), executor=executor, diff --git a/typesafe_parmap/parmap_n_timeout.py b/typesafe_parmap/parmap_n_timeout.py new file mode 100644 index 0000000..66d9271 --- /dev/null +++ b/typesafe_parmap/parmap_n_timeout.py @@ -0,0 +1,1555 @@ +from typing import overload +from concurrent.futures import Future +from typesafe_parmap.parmap_timeout import * + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[Optional[A1], Optional[A2]]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[Optional[A1], Optional[A2], Optional[A3]]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[Optional[A1], Optional[A2], Optional[A3], Optional[A4]]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[Optional[A1], Optional[A2], Optional[A3], Optional[A4], Optional[A5]]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[Optional[A1], Optional[A2], Optional[A3], Optional[A4], Optional[A5], Optional[A6]]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[Optional[A1], Optional[A2], Optional[A3], Optional[A4], Optional[A5], Optional[A6], Optional[A7]]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], Optional[A2], Optional[A3], Optional[A4], Optional[A5], Optional[A6], Optional[A7], Optional[A8] +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + func13: Callable[[], A13], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + func13: Callable[[], A13], + func14: Callable[[], A14], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + func13: Callable[[], A13], + func14: Callable[[], A14], + func15: Callable[[], A15], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + func13: Callable[[], A13], + func14: Callable[[], A14], + func15: Callable[[], A15], + func16: Callable[[], A16], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + func13: Callable[[], A13], + func14: Callable[[], A14], + func15: Callable[[], A15], + func16: Callable[[], A16], + func17: Callable[[], A17], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + func13: Callable[[], A13], + func14: Callable[[], A14], + func15: Callable[[], A15], + func16: Callable[[], A16], + func17: Callable[[], A17], + func18: Callable[[], A18], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + Optional[A18], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + func13: Callable[[], A13], + func14: Callable[[], A14], + func15: Callable[[], A15], + func16: Callable[[], A16], + func17: Callable[[], A17], + func18: Callable[[], A18], + func19: Callable[[], A19], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + Optional[A18], + Optional[A19], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + func13: Callable[[], A13], + func14: Callable[[], A14], + func15: Callable[[], A15], + func16: Callable[[], A16], + func17: Callable[[], A17], + func18: Callable[[], A18], + func19: Callable[[], A19], + func20: Callable[[], A20], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + Optional[A18], + Optional[A19], + Optional[A20], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + func13: Callable[[], A13], + func14: Callable[[], A14], + func15: Callable[[], A15], + func16: Callable[[], A16], + func17: Callable[[], A17], + func18: Callable[[], A18], + func19: Callable[[], A19], + func20: Callable[[], A20], + func21: Callable[[], A21], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + Optional[A18], + Optional[A19], + Optional[A20], + Optional[A21], +]: + ... + + +@overload +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Callable[[], A3], + func4: Callable[[], A4], + func5: Callable[[], A5], + func6: Callable[[], A6], + func7: Callable[[], A7], + func8: Callable[[], A8], + func9: Callable[[], A9], + func10: Callable[[], A10], + func11: Callable[[], A11], + func12: Callable[[], A12], + func13: Callable[[], A13], + func14: Callable[[], A14], + func15: Callable[[], A15], + func16: Callable[[], A16], + func17: Callable[[], A17], + func18: Callable[[], A18], + func19: Callable[[], A19], + func20: Callable[[], A20], + func21: Callable[[], A21], + func22: Callable[[], A22], + *, + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + Optional[A18], + Optional[A19], + Optional[A20], + Optional[A21], + Optional[A22], +]: + ... + + +def par_map_n( + func1: Callable[[], A1], + func2: Callable[[], A2], + func3: Optional[Callable[[], A3]] = None, + func4: Optional[Callable[[], A4]] = None, + func5: Optional[Callable[[], A5]] = None, + func6: Optional[Callable[[], A6]] = None, + func7: Optional[Callable[[], A7]] = None, + func8: Optional[Callable[[], A8]] = None, + func9: Optional[Callable[[], A9]] = None, + func10: Optional[Callable[[], A10]] = None, + func11: Optional[Callable[[], A11]] = None, + func12: Optional[Callable[[], A12]] = None, + func13: Optional[Callable[[], A13]] = None, + func14: Optional[Callable[[], A14]] = None, + func15: Optional[Callable[[], A15]] = None, + func16: Optional[Callable[[], A16]] = None, + func17: Optional[Callable[[], A17]] = None, + func18: Optional[Callable[[], A18]] = None, + func19: Optional[Callable[[], A19]] = None, + func20: Optional[Callable[[], A20]] = None, + func21: Optional[Callable[[], A21]] = None, + func22: Optional[Callable[[], A22]] = None, + *, # Makes executor, timeout, and logger keyword only + executor: concurrent.futures.Executor, + timeout: timedelta, + logger: Optional[Callable[[str], None]] = None, +) -> Union[ + Tuple[Optional[A1], Optional[A2]], + Tuple[Optional[A1], Optional[A2], Optional[A3]], + Tuple[Optional[A1], Optional[A2], Optional[A3], Optional[A4]], + Tuple[Optional[A1], Optional[A2], Optional[A3], Optional[A4], Optional[A5]], + Tuple[Optional[A1], Optional[A2], Optional[A3], Optional[A4], Optional[A5], Optional[A6]], + Tuple[Optional[A1], Optional[A2], Optional[A3], Optional[A4], Optional[A5], Optional[A6], Optional[A7]], + Tuple[ + Optional[A1], Optional[A2], Optional[A3], Optional[A4], Optional[A5], Optional[A6], Optional[A7], Optional[A8] + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + Optional[A18], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + Optional[A18], + Optional[A19], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + Optional[A18], + Optional[A19], + Optional[A20], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + Optional[A18], + Optional[A19], + Optional[A20], + Optional[A21], + ], + Tuple[ + Optional[A1], + Optional[A2], + Optional[A3], + Optional[A4], + Optional[A5], + Optional[A6], + Optional[A7], + Optional[A8], + Optional[A9], + Optional[A10], + Optional[A11], + Optional[A12], + Optional[A13], + Optional[A14], + Optional[A15], + Optional[A16], + Optional[A17], + Optional[A18], + Optional[A19], + Optional[A20], + Optional[A21], + Optional[A22], + ], +]: + """Executes 2 to 22 functions in parallel""" + if ( + func22 is not None + and func21 is not None + and func20 is not None + and func19 is not None + and func18 is not None + and func17 is not None + and func16 is not None + and func15 is not None + and func14 is not None + and func13 is not None + and func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_22( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + func13=func13, + func14=func14, + func15=func15, + func16=func16, + func17=func17, + func18=func18, + func19=func19, + func20=func20, + func21=func21, + func22=func22, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func21 is not None + and func20 is not None + and func19 is not None + and func18 is not None + and func17 is not None + and func16 is not None + and func15 is not None + and func14 is not None + and func13 is not None + and func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_21( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + func13=func13, + func14=func14, + func15=func15, + func16=func16, + func17=func17, + func18=func18, + func19=func19, + func20=func20, + func21=func21, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func20 is not None + and func19 is not None + and func18 is not None + and func17 is not None + and func16 is not None + and func15 is not None + and func14 is not None + and func13 is not None + and func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_20( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + func13=func13, + func14=func14, + func15=func15, + func16=func16, + func17=func17, + func18=func18, + func19=func19, + func20=func20, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func19 is not None + and func18 is not None + and func17 is not None + and func16 is not None + and func15 is not None + and func14 is not None + and func13 is not None + and func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_19( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + func13=func13, + func14=func14, + func15=func15, + func16=func16, + func17=func17, + func18=func18, + func19=func19, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func18 is not None + and func17 is not None + and func16 is not None + and func15 is not None + and func14 is not None + and func13 is not None + and func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_18( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + func13=func13, + func14=func14, + func15=func15, + func16=func16, + func17=func17, + func18=func18, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func17 is not None + and func16 is not None + and func15 is not None + and func14 is not None + and func13 is not None + and func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_17( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + func13=func13, + func14=func14, + func15=func15, + func16=func16, + func17=func17, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func16 is not None + and func15 is not None + and func14 is not None + and func13 is not None + and func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_16( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + func13=func13, + func14=func14, + func15=func15, + func16=func16, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func15 is not None + and func14 is not None + and func13 is not None + and func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_15( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + func13=func13, + func14=func14, + func15=func15, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func14 is not None + and func13 is not None + and func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_14( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + func13=func13, + func14=func14, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func13 is not None + and func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_13( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + func13=func13, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func12 is not None + and func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_12( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + func12=func12, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func11 is not None + and func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_11( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + func11=func11, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func10 is not None + and func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_10( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + func10=func10, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func9 is not None + and func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_9( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + func9=func9, + executor=executor, + timeout=timeout, + logger=logger, + ) + if ( + func8 is not None + and func7 is not None + and func6 is not None + and func5 is not None + and func4 is not None + and func3 is not None + ): + return par_map_timeout_8( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + func8=func8, + executor=executor, + timeout=timeout, + logger=logger, + ) + if func7 is not None and func6 is not None and func5 is not None and func4 is not None and func3 is not None: + return par_map_timeout_7( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + func7=func7, + executor=executor, + timeout=timeout, + logger=logger, + ) + if func6 is not None and func5 is not None and func4 is not None and func3 is not None: + return par_map_timeout_6( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + func6=func6, + executor=executor, + timeout=timeout, + logger=logger, + ) + if func5 is not None and func4 is not None and func3 is not None: + return par_map_timeout_5( + func1=func1, + func2=func2, + func3=func3, + func4=func4, + func5=func5, + executor=executor, + timeout=timeout, + logger=logger, + ) + if func4 is not None and func3 is not None: + return par_map_timeout_4( + func1=func1, func2=func2, func3=func3, func4=func4, executor=executor, timeout=timeout, logger=logger + ) + if func3 is not None: + return par_map_timeout_3( + func1=func1, func2=func2, func3=func3, executor=executor, timeout=timeout, logger=logger + ) + else: + return par_map_timeout_2(func1=func1, func2=func2, executor=executor) diff --git a/typesafe_parmap/parmap_timeout.py b/typesafe_parmap/parmap_timeout.py index bc3da96..189ce93 100644 --- a/typesafe_parmap/parmap_timeout.py +++ b/typesafe_parmap/parmap_timeout.py @@ -46,7 +46,7 @@ def try_future_result( A22 = TypeVar("A22") -def par_map_2_timeout( +def par_map_timeout_2( func1: Callable[[], A1], func2: Callable[[], A2], executor: concurrent.futures.Executor, @@ -64,7 +64,7 @@ def par_map_2_timeout( return fut1_result, fut2_result -def par_map_3_timeout( +def par_map_timeout_3( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -87,7 +87,7 @@ def par_map_3_timeout( return fut1_result, fut2_result, fut3_result -def par_map_4_timeout( +def par_map_timeout_4( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -115,7 +115,7 @@ def par_map_4_timeout( return fut1_result, fut2_result, fut3_result, fut4_result -def par_map_5_timeout( +def par_map_timeout_5( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -148,7 +148,7 @@ def par_map_5_timeout( return fut1_result, fut2_result, fut3_result, fut4_result, fut5_result -def par_map_6_timeout( +def par_map_timeout_6( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -186,7 +186,7 @@ def par_map_6_timeout( return fut1_result, fut2_result, fut3_result, fut4_result, fut5_result, fut6_result -def par_map_7_timeout( +def par_map_timeout_7( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -229,7 +229,7 @@ def par_map_7_timeout( return fut1_result, fut2_result, fut3_result, fut4_result, fut5_result, fut6_result, fut7_result -def par_map_8_timeout( +def par_map_timeout_8( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -279,7 +279,7 @@ def par_map_8_timeout( return fut1_result, fut2_result, fut3_result, fut4_result, fut5_result, fut6_result, fut7_result, fut8_result -def par_map_9_timeout( +def par_map_timeout_9( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -352,7 +352,7 @@ def par_map_9_timeout( ) -def par_map_10_timeout( +def par_map_timeout_10( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -432,7 +432,7 @@ def par_map_10_timeout( ) -def par_map_11_timeout( +def par_map_timeout_11( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -519,7 +519,7 @@ def par_map_11_timeout( ) -def par_map_12_timeout( +def par_map_timeout_12( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -613,7 +613,7 @@ def par_map_12_timeout( ) -def par_map_13_timeout( +def par_map_timeout_13( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -714,7 +714,7 @@ def par_map_13_timeout( ) -def par_map_14_timeout( +def par_map_timeout_14( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -822,7 +822,7 @@ def par_map_14_timeout( ) -def par_map_15_timeout( +def par_map_timeout_15( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -937,7 +937,7 @@ def par_map_15_timeout( ) -def par_map_16_timeout( +def par_map_timeout_16( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -1059,7 +1059,7 @@ def par_map_16_timeout( ) -def par_map_17_timeout( +def par_map_timeout_17( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -1188,7 +1188,7 @@ def par_map_17_timeout( ) -def par_map_18_timeout( +def par_map_timeout_18( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -1324,7 +1324,7 @@ def par_map_18_timeout( ) -def par_map_19_timeout( +def par_map_timeout_19( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -1467,7 +1467,7 @@ def par_map_19_timeout( ) -def par_map_20_timeout( +def par_map_timeout_20( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -1617,7 +1617,7 @@ def par_map_20_timeout( ) -def par_map_21_timeout( +def par_map_timeout_21( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3], @@ -1774,7 +1774,7 @@ def par_map_21_timeout( ) -def par_map_22_timeout( +def par_map_timeout_22( func1: Callable[[], A1], func2: Callable[[], A2], func3: Callable[[], A3],