From f0e5190195c7bc10613d4da83607ba37c5515c41 Mon Sep 17 00:00:00 2001 From: Lesyk01 Date: Sat, 28 Mar 2026 15:18:09 +0300 Subject: [PATCH 1/5] Create functions_oleksii_rak.py --- Week04/functions_oleksii_rak.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Week04/functions_oleksii_rak.py diff --git a/Week04/functions_oleksii_rak.py b/Week04/functions_oleksii_rak.py new file mode 100644 index 00000000..87135c61 --- /dev/null +++ b/Week04/functions_oleksii_rak.py @@ -0,0 +1,32 @@ +import inspect + +# 1. custom_power +custom_power = lambda x=0, /, e=1: x ** e + +# 2. custom_equation +def custom_equation(x: int = 0, y: int = 0, /, a: int = 1, b: int = 1, *, c: int = 1) -> float: + """ + Calculates the custom equation (x**a + y**b) / c. + + :param x: The first base value (positional-only). + :param y: The second base value (positional-only). + :param a: Exponent for x (positional or keyword). + :param b: Exponent for y (positional or keyword). + :param c: Divisor (keyword-only). + :return: The result of the equation as a float. + :rtype: float + """ + return float((x ** a + y ** b) / c) + +# 3. fn_w_counter +def fn_w_counter() -> tuple[int, dict[str, int]]: + if not hasattr(fn_w_counter, "total_calls"): + fn_w_counter.total_calls = 0 + fn_w_counter.callers = {} + + caller_frame = inspect.stack()[1] + caller_name = caller_frame.frame.f_globals.get('__name__', 'unknown') + fn_w_counter.total_calls += 1 + fn_w_counter.callers[caller_name] = fn_w_counter.callers.get(caller_name, 0) + 1 + + return fn_w_counter.total_calls, fn_w_counter.callers From 62a158fb3ca92627ab9f1460da34578eca3be895 Mon Sep 17 00:00:00 2001 From: Lesyk01 Date: Sat, 28 Mar 2026 15:20:01 +0300 Subject: [PATCH 2/5] Create decorators_oleksii_rak.py --- Week04/Week04/decorators_oleksii_rak.py | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Week04/Week04/decorators_oleksii_rak.py diff --git a/Week04/Week04/decorators_oleksii_rak.py b/Week04/Week04/decorators_oleksii_rak.py new file mode 100644 index 00000000..d932c973 --- /dev/null +++ b/Week04/Week04/decorators_oleksii_rak.py @@ -0,0 +1,28 @@ +import time +import tracemalloc +from functools import wraps + +def performance(func): + @wraps(func) + def wrapper(*args, **kwargs): + wrapper.counter += 1 + + tracemalloc.start() + start_time = time.perf_counter() + + result = func(*args, **kwargs) + + end_time = time.perf_counter() + _, peak_mem = tracemalloc.get_traced_memory() + tracemalloc.stop() + + wrapper.total_time += (end_time - start_time) + wrapper.total_mem += peak_mem + + return result + + wrapper.counter = 0 + wrapper.total_time = 0.0 + wrapper.total_mem = 0 + + return wrapper From 3b3b8f864729ae06e1c019f114650e21243861ea Mon Sep 17 00:00:00 2001 From: Lesyk01 Date: Sun, 5 Apr 2026 15:55:28 +0300 Subject: [PATCH 3/5] Create awaitme_oleksii_rak.py --- awaitme_oleksii_rak.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 awaitme_oleksii_rak.py diff --git a/awaitme_oleksii_rak.py b/awaitme_oleksii_rak.py new file mode 100644 index 00000000..2c939ea9 --- /dev/null +++ b/awaitme_oleksii_rak.py @@ -0,0 +1,13 @@ +import inspect +from functools import wraps + +def awaitme(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + result = func(*args, **kwargs) + if inspect.isawaitable(result): + return await result + return result + + return wrapper From e84a223e2583846839d7c13119298d5e80e74d13 Mon Sep 17 00:00:00 2001 From: Lesyk01 Date: Sun, 5 Apr 2026 16:05:11 +0300 Subject: [PATCH 4/5] Create timer_oleksii_rak.py --- Week06/timer_oleksii_rak.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Week06/timer_oleksii_rak.py diff --git a/Week06/timer_oleksii_rak.py b/Week06/timer_oleksii_rak.py new file mode 100644 index 00000000..7bfa47e6 --- /dev/null +++ b/Week06/timer_oleksii_rak.py @@ -0,0 +1,13 @@ +from time import perf_counter + +class Timer: + def __init__(self): + self.start_time = 0.0 + self.end_time = 0.0 + + def __enter__(self): + self.start_time = perf_counter() + return self + + def __exit__(self, *args): + self.end_time = perf_counter() From a97ebc043d53c53559078860c8ef57db96b283b1 Mon Sep 17 00:00:00 2001 From: Lesyk01 Date: Tue, 5 May 2026 10:50:59 +0300 Subject: [PATCH 5/5] Delete Week04/functions_oleksii_rak.py --- Week04/functions_oleksii_rak.py | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 Week04/functions_oleksii_rak.py diff --git a/Week04/functions_oleksii_rak.py b/Week04/functions_oleksii_rak.py deleted file mode 100644 index 87135c61..00000000 --- a/Week04/functions_oleksii_rak.py +++ /dev/null @@ -1,32 +0,0 @@ -import inspect - -# 1. custom_power -custom_power = lambda x=0, /, e=1: x ** e - -# 2. custom_equation -def custom_equation(x: int = 0, y: int = 0, /, a: int = 1, b: int = 1, *, c: int = 1) -> float: - """ - Calculates the custom equation (x**a + y**b) / c. - - :param x: The first base value (positional-only). - :param y: The second base value (positional-only). - :param a: Exponent for x (positional or keyword). - :param b: Exponent for y (positional or keyword). - :param c: Divisor (keyword-only). - :return: The result of the equation as a float. - :rtype: float - """ - return float((x ** a + y ** b) / c) - -# 3. fn_w_counter -def fn_w_counter() -> tuple[int, dict[str, int]]: - if not hasattr(fn_w_counter, "total_calls"): - fn_w_counter.total_calls = 0 - fn_w_counter.callers = {} - - caller_frame = inspect.stack()[1] - caller_name = caller_frame.frame.f_globals.get('__name__', 'unknown') - fn_w_counter.total_calls += 1 - fn_w_counter.callers[caller_name] = fn_w_counter.callers.get(caller_name, 0) + 1 - - return fn_w_counter.total_calls, fn_w_counter.callers