summaryrefslogtreecommitdiffstats
path: root/contrib/python/matplotlib/py3/mpl_toolkits
diff options
context:
space:
mode:
authorlucius <[email protected]>2025-08-01 20:38:14 +0300
committerlucius <[email protected]>2025-08-01 20:56:28 +0300
commitd26972227453799b411b840c959784b73d6d99db (patch)
treed29d806528a5f3e8cb8c3a4db55964c51ad70e37 /contrib/python/matplotlib/py3/mpl_toolkits
parent0bb3ce5b64266cb67f53ffcb7cb36ae72316b641 (diff)
YQL-20206: Optimize X AND/OR Not X YQL-20229
Делает возможным такие оптимизации: - `X AND NOT X -> FALSE` - `X OR NOT X -> TRUE` Работает в том числе если X будет завернут в Unessential. Только для неопциональных X. Пример замены когда много аргументов: ``` In: A and X and B and NOT X and C and X and D Out: A and FALSE and B and C and D ``` Выражение из примера можно преобразовать если X, B и C не требуют побочных эффектов. Или вот пример если B' требует побочных эффектов: ``` In: A and X and B' and NOT X and C and X and D Out: A and X and B' and FALSE and C and D ``` Про что думал, но не стал делать: 1) Можно заменять на константу не только X / NOT X, но и всю цепочку подряд идущих узлов без побочных эффектов. Оставляю это другим оптимизаторам, чтобы меньше думать про нюансы и не дублировать код (в частности чтобы не заботиться о типизации если в цепочке оказался Optional Bool). 2) Можно поддержать опциональные X, тогда будет примерно такое преобразование `X AND NOT X -> IF(X IS NULL, NULL, FALSE)`. Неочевидно что это улучшение и пока решили не делать. Оптимизатор под флагом. Тесты с включением флага тут: [https://nda.ya.ru/t/6YuCsGDE7H8Dnd](https://nda.ya.ru/t/YVdMA5B37H8Dne commit_hash:c34cf075a46c6b06c742ff0b15697b93ede75924
Diffstat (limited to 'contrib/python/matplotlib/py3/mpl_toolkits')
0 files changed, 0 insertions, 0 deletions