Commit Graph

44 Commits

Author SHA1 Message Date
Qwen Code Assistant
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
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
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
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
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
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
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
74d78b1957 Fix callseq deduplication error, allow using Some|None=None args with no commutativity error, add ignore_basictypes_return for a ConversionPoint.from_fn 2025-10-17 00:51:29 +03:00
dbecef1977 Fix renderer deduplicate_callseq duplicates slips 2025-09-14 01:55:47 +03:00
27939ef3ea Fix ForkedConvRepo add_injector signature 2025-08-20 22:01:38 +03:00
5ac6ff102f Add method add_conversion_points into a ConvRepo 2025-08-20 03:11:17 +03:00
9142cb05fc Fix import universal_qualname in a GraphWalker 2025-08-20 03:07:35 +03:00
a256db0203 Add ConversionPoint reference into a ConversionRenderData for a further deduplication and reuse of raw call sequence 2025-08-20 00:31:42 +03:00
d68bb79a97 Bump version 2025-08-19 02:37:59 +03:00
9d03affd41 Allow passing [ConversionPoint] into create_pipeline with a type remap for ConversionPoint 2025-08-19 02:37:01 +03:00
52d82550e6 Allow passing [ConversionPoint] into get_conversion with a type remap for ConversionPoint 2025-08-19 02:32:15 +03:00
742c21e199 Bump version 2025-08-16 18:46:06 +03:00
fd8026a2a5 Update README.md: sync feature list 2025-08-16 18:45:55 +03:00
3150c4b2d0 Fix ctxmanager injects hash 2025-08-16 18:44:58 +03:00
d6f8038efa Make tuple return types unwrap 2025-08-16 18:38:46 +03:00
42b0badc65 Fix ConversionPoint.__repr__ on objects that does not have __qualname__ 2025-08-04 22:43:40 +03:00
849d6094a9 Fix draw_callseq_mermaid cell name 2025-08-04 22:40:09 +03:00
45010c1cf3 Add util_mermaid callseq renderer, fix forked convrepo store_* corruption 2025-07-22 00:34:27 +03:00
70e7b4fe3f Add options to store rendered sources and call sequences 2025-07-21 17:40:36 +03:00
e767ccae15 Fix ConversionPoint.fn_args ignorance of type annot override 2025-07-21 15:45:48 +03:00
90409ec774 Update README.md: sync feature list 2025-07-21 15:34:53 +03:00
6fe37a5ae1 Bump version 2025-07-21 15:32:38 +03:00
66241cd01a Update README.md: add pipeline descripiton 2025-07-21 15:31:26 +03:00
a0de9fcda8 Make smart call deduplication 2025-07-19 22:49:15 +03:00
b058a701a0 Add basic pipeline construction, callseq deduplication pending 2025-07-19 22:32:40 +03:00
eae2cd9a4b Remove unused defaults 2025-07-19 21:13:40 +03:00
69def6e74c Allow default option to be overriden if there is any conversion point that injects this default option 2025-07-19 21:12:35 +03:00
f2ec4fad14 Allow default option to be overriden if was ocasionally provided on a conversion path 2025-07-19 21:08:46 +03:00
b04ea2c16a Add test for non-provided default convertor args 2025-07-19 20:50:49 +03:00
fe53cf9270 Add test for non-provided default consumer args 2025-07-19 20:49:10 +03:00
a2cf1bb6e6 Get rid of manual consumer fn unwrapping for callgraph generation 2025-07-19 20:38:43 +03:00
6bf28e5fe8 Add defaulted args into a ConversionPoint 2025-07-19 20:21:10 +03:00
22e9f6f599 Add context manager tests 2025-07-19 18:13:44 +03:00
987d6b5131 Fix renderer template module path 2025-07-19 01:29:51 +03:00
1896bd7461 Sync versions 2025-07-19 01:27:53 +03:00
f4ca9658fb Fix consumer fn args random mixing 2025-07-19 01:26:26 +03:00
ae8c8b01ba Fix lib src path 2025-07-19 01:25:23 +03:00
7ffc620f06 Add library 2025-07-14 22:47:09 +03:00
baf76597f5 Initial commit 2025-07-14 22:01:09 +03:00