Skip to content
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

uv pip compile --universal markers not sufficiently simplifying #5660

Closed
notatallshaw-gts opened this issue Jul 31, 2024 · 4 comments · Fixed by #5898
Closed

uv pip compile --universal markers not sufficiently simplifying #5660

notatallshaw-gts opened this issue Jul 31, 2024 · 4 comments · Fixed by #5898
Assignees
Labels
bug Something isn't working

Comments

@notatallshaw-gts
Copy link

Since a recent uv update I find that there are pathological cases cases using --universal that can cause the markers to explode. It seems like these could be simplified but it's hard to tell because they get so big.

Steps to repoduce:

uv 0.2.32
Command:

echo -e "apache-airflow[cncf.kubernetes,elasticsearch,google,google_auth,grpc,hashicorp,http,ldap,microsoft.azure,mysql,odbc,pandas,postgres,redis,sendgrid,sftp,slack]==2.3.4\n pylint>=2.14.5\n apache-airflow-providers-microsoft-azure==4.2.0\n azure-identity==1.10.0\n azure-identity==1.10.0\n azure-servicebus==7.8.0\n certifi==2022.6.15\n msal==1.18.0\n msal-extensions==1.0.0" | uv pip compile - --python 3.10 --universal --annotation-style line --quiet | grep "certifi==" 

Output:

certifi==2022.6.15 ; (python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (platform_machine != 'aarch64' and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')))))) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (platform_machine != 'aarch64' and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')))))))) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (platform_machine != 'aarch64' and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')))))))) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (platform_machine != 'aarch64' and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')))))) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (platform_machine != 'aarch64' and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')))))))))) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (platform_machine != 'aarch64' and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')))))))) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11'))))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')))) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))))) and ((python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')))))) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system == 'Windows') or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')))) or (((python_version == '3.11' and platform_system == 'Windows') or (python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system == 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))) and ((python_version == '3.11' and platform_system != 'Windows') or (python_version == '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.11' and platform_system == 'Windows') or (python_version < '3.11' and platform_system != 'Windows') or (python_version < '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows')) or (python_version < '3.12' and python_version >= '3.11' and platform_system != 'Windows' and (python_version < '3.11' or python_version > '3.11')) or (python_version < '3.12' and python_version >= '3.11' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows') and (python_version < '3.11' or python_version > '3.11')) or (python_version >= '3.12' and platform_system == 'Windows') or (python_version >= '3.12' and platform_system != 'Windows') or (python_version >= '3.12' and (python_version < '3.5' or platform_system == 'Windows') and (python_version < '3.5' or platform_system != 'Windows'))))))))  # via elastic-transport, httpcore, httpx, kubernetes, kubernetes-asyncio, msrest, requests, uamqp

FYI, this is a simplified example but it actually has a longer amount of markers, in my real requirements the marker size was about one third of this.

@charliermarsh
Copy link
Member

@ibraheemdev is working on a robust solution to this 🤞

@notatallshaw-gts notatallshaw-gts changed the title uv pip compile --universal markers not sufficiently simplifying simplifying uv pip compile --universal markers not sufficiently simplifying Jul 31, 2024
@charliermarsh
Copy link
Member

We tend to use transformers with all extras for this kind of hard case, and the markers there get really, really big :)

@notatallshaw-gts
Copy link
Author

notatallshaw-gts commented Jul 31, 2024

We tend to use transformers with all extras for this kind of hard case, and the markers there get really, really big :)

This was the first time I saw VS Code complain that it won't show a whole line by default because it's too long.

The example I give is ~60kb of markers on one of the requirements. I suspected you were already working on this, but I didn't have time to thoroughly search the issues.

@charliermarsh
Copy link
Member

No worries, all good.

@charliermarsh charliermarsh added the bug Something isn't working label Jul 31, 2024
zanieb pushed a commit that referenced this issue Aug 9, 2024
This PR rewrites the `MarkerTree` type to use algebraic decision
diagrams (ADD). This has many benefits:
- The diagram is canonical for a given marker function. It is impossible
to create two functionally equivalent marker trees that don't refer to
the same underlying ADD. This also means that any trivially true or
unsatisfiable markers are represented by the same constants.
- The diagram can handle complex operations (conjunction/disjunction) in
polynomial time, as well as constant-time negation.
- The diagram can be converted to a simplified DNF form for user-facing
output.

The new representation gives us a lot more confidence in our marker
operations and simplification, which is proving to be very important
(see #5733 and
#5163).

Unfortunately, it is not easy to split this PR into multiple commits
because it is a large rewrite of the `marker` module. I'd suggest
reading through the `marker/algebra.rs`, `marker/simplify.rs`, and
`marker/tree.rs` files for the new implementation, as well as the
updated snapshots to verify how the new simplification rules work in
practice. However, a few other things were changed:
- [We now use release-only comparisons for `python_full_version`, where
we previously only did for
`python_version`](https://github.com/astral-sh/uv/blob/ibraheem/canonical-markers/crates/pep508-rs/src/marker/algebra.rs#L522).
I'm unsure how marker operations should work in the presence of
pre-release versions if we decide that this is incorrect.
- [Meaningless marker expressions are now
ignored](https://github.com/astral-sh/uv/blob/ibraheem/canonical-markers/crates/pep508-rs/src/marker/parse.rs#L502).
This means that a marker such as `'x' == 'x'` will always evaluate to
`true` (as if the expression did not exist), whereas we previously
treated this as always `false`. It's negation however, remains `false`.
- [Unsatisfiable markers are written as `python_version <
'0'`](https://github.com/astral-sh/uv/blob/ibraheem/canonical-markers/crates/pep508-rs/src/marker/tree.rs#L1329).
- The `PubGrubSpecifier` type has been moved to the new `uv-pubgrub`
crate, shared by `pep508-rs` and `uv-resolver`. `pep508-rs` also depends
on the `pubgrub` crate for the `Range` type, we probably want to move
`pubgrub::Range` into a separate crate to break this, but I don't think
that should block this PR (cc @konstin).

There is still some remaining work here that I decided to leave for now
for the sake of unblocking some of the related work on the resolver.
- We still use `Option<MarkerTree>` throughout uv, which is unnecessary
now that `MarkerTree::TRUE` is canonical.
- The `MarkerTree` type is now interned globally and can potentially
implement `Copy`. However, it's unclear if we want to add more
information to marker trees that would make it `!Copy`. For example, we
may wish to attach extra and requires-python environment information to
avoid simplifying after construction.
- We don't currently combine `python_full_version` and `python_version`
markers.
- I also have not spent too much time investigating performance and
there is probably some low-hanging fruit. Many of the test cases I did
run actually saw large performance improvements due to the markers being
simplified internally, reducing the stress on the old `normalize`
routine, especially for the extremely large markers seen in
`transformers` and other projects.

Resolves #5660,
#5179.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants