From 94bc3b8524a5b813fb1ec44501a5293278bdbf67 Mon Sep 17 00:00:00 2001 From: oSTEVEo Date: Fri, 3 Apr 2026 01:30:35 +0300 Subject: [PATCH] Pylance fixes --- MusinAA/task1/structures/BinaryTree.py | 2 +- MusinAA/task1/structures/HashTable.py | 6 ++-- MusinAA/task1/structures/LinkedList.py | 2 +- MusinAA/task1/util/randomNames.py | 8 +++++ MusinAA/task1/util/timeTester.py | 44 ++++++++++++++++---------- 5 files changed, 41 insertions(+), 21 deletions(-) diff --git a/MusinAA/task1/structures/BinaryTree.py b/MusinAA/task1/structures/BinaryTree.py index 93493f5..e98c31a 100644 --- a/MusinAA/task1/structures/BinaryTree.py +++ b/MusinAA/task1/structures/BinaryTree.py @@ -37,7 +37,7 @@ def bst_find(root: dict|None, name: str) -> str|None: if node != None: return node['phone'] -def find_node_to_delete(root: dict, name: str) -> dict|None: +def find_node_to_delete(root: dict|None, name: str) -> dict|None: """Поиск в ширину.""" while root != None: if root['name'] == name: diff --git a/MusinAA/task1/structures/HashTable.py b/MusinAA/task1/structures/HashTable.py index 08b93fd..dd16599 100644 --- a/MusinAA/task1/structures/HashTable.py +++ b/MusinAA/task1/structures/HashTable.py @@ -20,7 +20,7 @@ def hash_fun(name: str, size: int) -> int: n -= 1 return int(hashSum) % size -def ht_insert(buckets: list, name: str, phone: str, blen:int = 50) -> list: +def ht_insert(buckets: list|None, name: str, phone: str, blen:int = 50) -> list: """Возвращает новый массив бакетов Вычисляет индекс, вызывает ll_insert для соответствующего бакета. Функция не меняет размер массива бакетов автоматически!""" @@ -43,8 +43,8 @@ def ht_delete(buckets: list, name: str) -> list: buckets[index] = ll_delete(buckets[index], name) return buckets -def ht_find(buckets: list, name: str) -> str: - if buckets == []: +def ht_find(buckets: list|None, name: str) -> str|None: + if buckets == [] or buckets == None: raise ValueError("Длинна buckets должна быть больше 0") size = len(buckets) diff --git a/MusinAA/task1/structures/LinkedList.py b/MusinAA/task1/structures/LinkedList.py index 54850ad..ed0d1ba 100644 --- a/MusinAA/task1/structures/LinkedList.py +++ b/MusinAA/task1/structures/LinkedList.py @@ -32,7 +32,7 @@ def ll_find(head : dict|None, name: str) -> str|None: currentNode = currentNode['next'] return None -def ll_delete(head : dict|None, name: str) -> dict: +def ll_delete(head : dict|None, name: str) -> dict|None: """Удаляет узел, возвращает новую голову.""" if head == None: return None diff --git a/MusinAA/task1/util/randomNames.py b/MusinAA/task1/util/randomNames.py index 3fffb67..2e08f82 100644 --- a/MusinAA/task1/util/randomNames.py +++ b/MusinAA/task1/util/randomNames.py @@ -31,6 +31,14 @@ names_pool = ( "Добрыня" ) +_non_existent_names = [ + "Ноль", "Целковый", "Полушка", "Четвертушка", "Осьмушка", + "Пудовичок", "Медячок", "Серебрячок", "Золотничок", "Девятичок" +] +assert set(names_pool).isdisjoint(set(_non_existent_names)), \ +"В списке несуществующих имён существуют существующие имена сущностей" +names_pool_to_find = random.choices(names_pool, k=100) + _non_existent_names + def generate_phone(phone_len=11) -> str: # 88005553535 return str(random.randint(10**phone_len, 10**(phone_len+1)-1)) diff --git a/MusinAA/task1/util/timeTester.py b/MusinAA/task1/util/timeTester.py index a0a5007..763b25d 100644 --- a/MusinAA/task1/util/timeTester.py +++ b/MusinAA/task1/util/timeTester.py @@ -1,24 +1,36 @@ import time from typing import Callable, Any +from task1.util.randomNames import names_pool_to_find -def _concrete_insert_tester(func: Callable[[Any, str, str], Any], records: list) -> float: - """Исследует время работы функции вставки""" - aboba = None - +def test(records: list, + insert_func: Callable[[Any, str, str], Any], + find_func: Callable[[Any, str], Any], + delete_func: Callable[[Any, str], Any]) -> dict: + data = None + + # Вставка всех записей start = time.perf_counter() for item in records: - aboba = func(aboba, name=item[0], phone=item[1]) + data = insert_func(data, item[0], item[1]) end = time.perf_counter() + insert_time = end - start - elapsed = end - start - return elapsed + # Поиск 110 случайных записей + start = time.perf_counter() + for name in names_pool_to_find: + find_func(data, name) + end = time.perf_counter() + find_time = end - start -def insert_tester(func_to_test: Callable[[Any, str, str], Any], records_shuffled, records_sorted) -> dict: - """Возвращает словарь с временем сортировки в обоих режимах""" - shuffled = _concrete_insert_tester(func_to_test, records_shuffled) - sorted = _concrete_insert_tester(func_to_test, records_sorted) - - return {"Function": func_to_test.__name__, - "shuffled": shuffled, - "sorted": sorted - } \ No newline at end of file + # Удаление 50 случайных записей + start = time.perf_counter() + for name in names_pool_to_find: + data = delete_func(data, name) + end = time.perf_counter() + delete_time = end - start + + return { + "insert_time" : insert_time , + "find_time" : find_time , + "delete_time": delete_time + }