diff options
author | lucius <[email protected]> | 2025-08-01 20:38:14 +0300 |
---|---|---|
committer | lucius <[email protected]> | 2025-08-01 20:56:28 +0300 |
commit | d26972227453799b411b840c959784b73d6d99db (patch) | |
tree | d29d806528a5f3e8cb8c3a4db55964c51ad70e37 /contrib/python/matplotlib/py3/mpl_toolkits | |
parent | 0bb3ce5b64266cb67f53ffcb7cb36ae72316b641 (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