-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Incorporate knowledge of disjoint markers into simplification #7760
Comments
\cc @ibraheemdev |
I have this working, but it does mean all expressions like |
I could just replace
|
Could you not keep the knowledge around what the original marker expression was and serialize that into the lockfile instead. At read it should be rather trivial to expand it out when the lockfile is read? Performance wise this will be slightly worse but you presumably there won't be that many cases where that is necessary. |
## Summary This is an alternative to #9344. If accepted, I need to audit the codebase and call sites to apply it everywhere, but the basic idea is: rather than encoding mutually-incompatible pairs of markers in the representation itself, we have an additional method on `MarkerTree` that expands the false-y definition to take into account assumptions about which markers can be true alongside others. We then check if the the current marker implies that at least one of them is true. So, for example, we know that `sys_platform == 'win32'` and `platform_system == 'Darwin'` are mutually exclusive. When given a marker expression like `python_version >= '3.7'`, we test if `python_version >= '3.7'` and `sys_platform != 'win32' or platform_system != 'Darwin'` are disjoint, i.e., if the following can't be satisfied: ``` python_version >= '3.7' and (sys_platform != 'win32' or platform_system != 'Darwin') ``` Since, if this can't be satisfied, it implies that the left-hand expression requires `sys_platform == 'win32'` and `platform_system == 'Darwin'` to be true at the same time. I think the main downsides here are: 1. We can't _simplify_ markers based on these implications. So we'd still write markers like `sys_platform == 'win32' and platform_system != 'Darwin'`, even though we know the latter expression is redundant. 2. It might be expensive? I'm not sure. I don't think we test for falseness _that_ often though. Closes #7760. Closes #9275.
There are some markers that we "know" cannot be true at the same time, despite the fact that it's not encoded in the grammar or schema at all.
For example, this is never true:
platform_system == 'Linux' and sys_platform == 'darwin'
.If we encode knowledge about the markers that we "know" are disjoint, we can omit more forks, wheels, etc.
The text was updated successfully, but these errors were encountered: