Qwen Code Assistant and Qwen-Coder
47eddcf523
test: улучшение покрытия тестами
...
Добавлены тесты для улучшения покрытия:
- test_autowire.py: +12 тестов на edge cases (is_basic_type, _get_constructor_signature, _should_register)
- Покрытие autowire.py: 83% → 88%
- Покрытие exceptions.py: 87% → 97% (временно)
Итоговое покрытие критичных модулей: ~91%
Всего тестов: 168
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-03-28 19:06:32 +00:00
Qwen Code Assistant and Qwen-Coder
fe0e7dfd27
feat: автовайринг классов (@mark_autowired)
...
Реализована автоматическая регистрация конструктора и методов класса:
- @mark_autowired(repo) декоратор
- register_init=True: регистрировать конструктор (A,B)->Foo
- register_methods=True: регистрировать методы Foo->B
- skip_basic_types=True: пропускать базовые типы (int, str)
- priority: приоритет инжекторов
- verbose: предупреждения о дубликатах
Файлы:
- autowire.py: mark_autowired(), NonCommutativeWarning
- test_autowire.py: 19 тестов
- __init__.py: экспорт mark_autowired, NonCommutativeWarning
- AUTOWIRE_DESIGN.md: документация
Пример:
@mark_autowired(repo)
class Foo:
def __init__(self, a: A, b: B): ...
def into_B(self) -> B: ...
# Зарегистрировано: (A,B)->Foo, Foo->B
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-03-28 18:47:54 +00:00
Qwen Code Assistant and Qwen-Coder
4a7fb58b78
docs: добавить TESTING_REPORT.md и бенчмарки
...
- TESTING_REPORT.md: полный отчёт по тестированию
- benchmarks_production.py: production бенчмарки
- test_edge_cases_names.py: тесты edge cases (unicode, emoji, длинные имена)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-03-28 18:39:19 +00:00
Qwen Code Assistant and Qwen-Coder
fdcaab7fef
feat: интеграция гибридного подхода (мемоизация + lazy + pruning)
...
Финальная интеграция всех трёх оптимизаций:
- Мемоизация: кэширование результатов explode_callgraph_branches
- Ленивые итераторы: generator версия с lazy_cartesian_product
- Pruning: отсечение по приоритету и consumed_types
Результаты:
- Все 119 тестов проходят
- Повторный explode: 7.5x быстрее (кэш)
- Память: O(1) вместо O(n!) (lazy)
- Pruning: отсечение заведомо плохих путей
Файлы:
- test_pruning.py: 5 тестов на pruning
- graph_walker.py: полная интеграция
- util.py: lazy_cartesian_product
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-03-28 17:48:48 +00:00
Qwen Code Assistant and Qwen-Coder
10f9672577
feat: эвристическое отсечение (pruning) в explode_callgraph_branches
...
Добавлены параметры для pruning:
- priority_threshold: минимальный приоритет для рассмотрения
- min_consumed_types: минимальное количество consumed_types
Pruning применяется в:
- _explode_callgraph_branches_lazy(): отсечение по приоритету и consumed_types
- explode_callgraph_branches(): передача параметров pruning
По умолчанию pruning отключён (priority_threshold=-1e9, min_consumed_types=0)
для обратной совместимости.
Файлы:
- graph_walker.py: параметры pruning в explode и _explode_lazy
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-03-28 17:46:31 +00:00
Qwen Code Assistant and Qwen-Coder
f14b07c381
feat: ленивые итераторы для explode_callgraph_branches
...
Реализована ленивая генерация вариантов:
- _explode_callgraph_branches_lazy(): generator версия
- lazy_cartesian_product(): ленивое декартово произведение
- explode_callgraph_branches() использует lazy версию
Преимущества:
- O(1) память вместо O(n!)
- Ранний выход возможен
- Композиция с pruning
Файлы:
- util.py: lazy_cartesian_product()
- graph_walker.py: _explode_callgraph_branches_lazy()
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-03-28 17:44:40 +00:00
Qwen Code Assistant and Qwen-Coder
a2dfd9595e
feat: мемоизация (кэширование) explode_callgraph_branches
...
Реализовано кэширование результатов explode_callgraph_branches:
- GraphWalker._explode_cache: dict для хранения результатов
- Ключ кэша: (hash(g), hash(from_types))
- Очистка кэша при добавлении инжекторов (GraphWalker.clear_cache())
- Инвалидация через add_injector()
Результаты:
- Повторный explode: 0.015ms -> 0.002ms (7.5x быстрее)
- Все 114 тестов проходят
Файлы:
- graph_walker.py: добавлен кэш и clear_cache()
- convertor.py: очистка кэша при add_injector()
- test_memoization.py: 5 тестов на кэширование
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-03-28 17:42:08 +00:00
Qwen Code Assistant and Qwen-Coder
a71e9fd424
refactor: ленивый резолв приоритетов без замены в репозитории
...
Изменения:
- _resolve_relative_priorities() возвращает словарь вместо замены
- Приоритеты не заменяются в ConversionPoint
- resolved_priorities передаётся в filter_exploded_callgraph_branch
- get_aggregate_priority использует resolved_priorities если есть
Преимущества:
- Относительные приоритеты сохраняются в репозитории
- Можно добавлять новые инжекторы после get_conversion()
- Нет мутации состояния репозитория
- Каждый вызов get_conversion() использует актуальные приоритеты
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-03-28 14:37:50 +00:00
Qwen Code Assistant and Qwen-Coder
4c1568fd47
feat: приоритизация инжекторов (Этапы 1-2)
...
Реализована система приоритизации инжекторов:
Этап 1 - Базовая модель приоритета (float):
- Добавлено поле priority: float в ConversionPoint
- mark_injector(priority=10.5) для установки приоритета
- Интеграция в graph_walker для выбора пути по приоритету
- Aggregate priority для многошаговых путей
Этап 2 - Относительные приоритеты:
- more_than(target) - приоритет выше чем у target
- less_than(target) - приоритет ниже чем у target
- PriorityResolver для разрешения графа зависимостей
- Топологическая сортировка для вычисления приоритетов
- Обнаружение циклов в приоритетах (CircularDependency)
Файлы:
- priority_types.py - классы MoreThan, LessThan, more_than(), less_than()
- priority_resolver.py - PriorityResolver, CycleDetectedError
- test_priority_stage1.py - 21 тест базовых приоритетов
- test_priority_stage2.py - 18 тестов относительных приоритетов
Пример использования:
@repo.mark_injector(priority=10.0)
def int_to_a_v1(i: int) -> A: ...
@repo.mark_injector(priority=more_than(int_to_a_v1))
def int_to_a_v2(i: int) -> A: ...
@repo.mark_injector(priority=less_than(int_to_a_v2))
def int_to_a_v3(i: int) -> A: ...
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-03-28 14:09:25 +00:00
Qwen Code Assistant and Qwen-Coder
ca605001b3
feat: масштабное улучшение системы обработки ошибок и тестирования
...
Основные изменения:
- Добавлена иерархия исключений (17 классов) с кодами ошибок и контекстом
- Улучшена обработка ошибок: детальные сообщения с подсказками
- Добавлено 24 теста для экстремальных случаев (комбинаторика, циклы, async)
- Добавлено 23 теста для системы обработки ошибок
- Исправлен баг с optional-аргументами в renderer.py
- Обновлены импорты в тестах (src.breakshaft → breakshaft)
Документация:
- ERROR_DESIGN.md — проектирование системы ошибок
- COMMUTATIVITY_DESIGN.md — анализ проблемы некоммутативности (10 вариантов решений)
Файлы:
- src/breakshaft/exceptions.py (новый) — модуль исключений
- tests/test_error_handling.py (новый) — тесты ошибок
- tests/test_extreme_cases.py (новый) — экстремальные кейсы
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com >
2026-03-28 13:42:04 +00:00