Skip to content

[EXP] Adds uv run pytest for tests #17663

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

Closed
wants to merge 18 commits into from
Closed

[EXP] Adds uv run pytest for tests #17663

wants to merge 18 commits into from

Conversation

Burhan-Q
Copy link
Contributor

@Burhan-Q Burhan-Q commented Nov 20, 2024

Trial to see if using uv to invoke pytests would be beneficial for running CI tests.

🛠️ PR Summary

Made with ❤️ by Ultralytics Actions

🌟 Summary

Simplified command execution in CI by using uv run.

📊 Key Changes

  • Replaced pytest command with uv run pytest in the GitHub Actions CI workflow.

🎯 Purpose & Impact

  • Purpose: This change aims to streamline the execution of tests within the CI environment by leveraging uv run for command running, which could unify or simplify environment management.
  • Impact: Users might see more consistent test execution across different environments, potentially reducing setup complexity and improving reliability in the testing process.

@UltralyticsAssistant UltralyticsAssistant added the devops GitHub Devops or MLops label Nov 20, 2024
@UltralyticsAssistant
Copy link
Member

👋 Hello @Burhan-Q, thank you for submitting your [EXP] Adds 'uv run pytest' for tests 🚀 PR to the ultralytics repository! This is an automated response to guide you through the PR process. An Ultralytics engineer will review your changes soon. In the meantime, please ensure the following:

  • Define a Purpose: Clearly explain the purpose of your PR and link to any relevant issues. Ensure commit messages are clear and adhere to our project's standards.
  • Synchronize with Source: Ensure your PR branch is up-to-date with the main branch of ultralytics/ultralytics. If it's not, update it by clicking 'Update branch' or using git pull and git merge main locally.
  • Ensure CI Checks Pass: Verify all Continuous Integration (CI) checks are successful. If any checks fail, be sure to address the issues promptly. More info on CI can be found here.
  • Update Documentation: Ensure any changes to functionality are reflected in the Ultralytics documentation.
  • Add Tests: If applicable, include tests for your changes and verify they all pass successfully.
  • Sign the CLA: Confirm that you've signed the Contributor License Agreement by adding "I have read the CLA Document and I sign the CLA" to your comment on this PR.
  • Minimize Changes: Try to restrict changes to what's necessary for this particular feature or fix. As Bruce Lee wisely put it, "It is not daily increase but daily decrease, hack away the unessential."

For more detailed guidelines, check out our Contributing Guide. Feel free to leave a comment if you need further assistance. Thank you once again for contributing to Ultralytics! 🚀

@Burhan-Q
Copy link
Contributor Author

Interesting failure with the key take away:

Specifically:

And because your project requires ultralytics[export] and
ultralytics[extra], we can conclude that your projects's requirements
are unsatisfiable.

hint: The `requires-python` value (>=3.8) includes Python versions that
are not supported by your dependencies (e.g., albumentations>=1.4.19
only supports >=3.9). Consider using a more restrictive
`requires-python` value (like >=3.9).
Full error

Using CPython 3.11.10 interpreter at: /opt/hostedtoolcache/Python/3.11.10/x64/bin/python3
Creating virtual environment at: .venv
  × No solution found when resolving dependencies for split
  │ (python_full_version == '3.8.*' and platform_machine == 'arm64' and
  │ platform_system == 'Darwin' and sys_platform == 'darwin'):
  ╰─▶ Because albumentations==1.4.10 depends on numpy>=1.24.4,<2 and
      albumentations==1.4.9 was yanked (reason: Bug in GaussNoise),
      we can conclude that albumentations>=1.4.9,<=1.4.10 depends on
      numpy>=1.24.4,<2.
      And because only the following versions of albumentations are available:
          albumentations<=1.4.6
          albumentations==1.4.7
          albumentations==1.4.8
          albumentations==1.4.9
          albumentations==1.4.10
          albumentations==1.4.11
          albumentations==1.4.12
          albumentations==1.4.13
          albumentations==1.4.14
          albumentations==1.4.15
          albumentations==1.4.16
          albumentations==1.4.[17](https://github.com/ultralytics/ultralytics/actions/runs/11934305021/job/33263135449?pr=17663#step:7:18)
          albumentations==1.4.18
          albumentations==1.4.19
          albumentations==1.4.20
          albumentations==1.4.21
      and all of:
          albumentations>=1.4.6,<=1.4.8
          albumentations>=1.4.11,<=1.4.[18](https://github.com/ultralytics/ultralytics/actions/runs/11934305021/job/33263135449?pr=17663#step:7:19)
      depend on numpy>=1.24.4, we can conclude that
      albumentations>=1.4.6,<1.4.[19](https://github.com/ultralytics/ultralytics/actions/runs/11934305021/job/33263135449?pr=17663#step:7:20) depends on numpy>=1.24.4. (1)

      Because the requested Python version (>=3.8) does not satisfy
      Python>=3.9 and albumentations>=1.4.19 depends on Python>=3.9, we can
      conclude that albumentations>=1.4.19 cannot be used.
      And because we know from (1) that albumentations>=1.4.6,<1.4.19 depends
      on numpy>=1.24.4, we can conclude that albumentations>=1.4.6 depends
      on numpy>=1.24.4.
      And because ultralytics[extra] depends on albumentations>=1.4.6
      and ultralytics[export] depends on numpy{platform_machine ==
      'aarch64'}==1.[23](https://github.com/ultralytics/ultralytics/actions/runs/11934305021/job/33263135449?pr=17663#step:7:24).5, we can conclude that ultralytics[export] and
      ultralytics[extra] are incompatible.
      And because your project requires ultralytics[export] and
      ultralytics[extra], we can conclude that your projects's requirements
      are unsatisfiable.

      hint: The `requires-python` value (>=3.8) includes Python versions that
      are not supported by your dependencies (e.g., albumentations>=1.4.19
      only supports >=3.9). Consider using a more restrictive
      `requires-python` value (like >=3.9).

@Burhan-Q
Copy link
Contributor Author

Even deeper error than previously. This one was a lot more to parse. The conflict is between numpy, ml-dtypes, and tensorstore and appears that Python>=3.9 would be required to resolve this (as well as the prior issue). I think this could be another reason to start making a plan to move to a 3.9 minimum version of Python, as these errors are likely to become more of an issue in the future (even when using pip). Additionally, I suspect it may simplify the dependencies as well.

FYI @glenn-jocher @Laughing-q @ambitious-octopus

Full error

Using CPython 3.11.10 interpreter at: /opt/hostedtoolcache/Python/3.11.10/x64/bin/python3
Creating virtual environment at: .venv
  × No solution found when resolving dependencies for split
  │ (python_full_version >= '3.13' and platform_machine == 'aarch64' and
  │ platform_system == 'Darwin' and sys_platform == 'darwin'):
  ╰─▶ Because only the following versions of numpy{python_full_version >=
      '3.13'} are available:
          numpy{python_full_version >= '3.13'}<=2.0.2
          numpy{python_full_version >= '3.13'}>=2.1.0
      and ml-dtypes==0.3.1 depends on numpy{python_full_version >=
      '3.13'}>=1.26.0, we can conclude that ml-dtypes==0.3.1 depends on one
      of:
          numpy>=1.26.0,<=2.0.2
          numpy>=2.1.0
       (1)
      And because all of:
          ml-dtypes==0.3.2
          ml-dtypes>=0.4.0
      depend on numpy{python_full_version >= '3.12'}>=1.26.0 and only the
      following versions of ml-dtypes are available:
          ml-dtypes<=0.3.2
          ml-dtypes>=0.4.0
      we can conclude that ml-dtypes>=0.3.1, all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0 are incompatible.
      And because tensorstore{python_full_version >= '3.9' and
      platform_machine == 'aarch64'}>=0.1.63 depends on ml-dtypes>=0.3.1 and
      only the following versions of tensorstore{python_full_version >= '3.9'
      and platform_machine == 'aarch64'} are available:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}<=0.1.63
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.64
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.65
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.66
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.68
      we can conclude that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0, all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63,<0.1.64
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.64,<0.1.65
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.65,<0.1.66
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.66,<0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.67,<0.1.68
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.68
       are incompatible. (2)
      Because we know from (1) that ml-dtypes==0.3.1 depends on one of:
          numpy>=1.26.0,<=2.0.2
          numpy>=2.1.0
      and all of:
          ml-dtypes==0.3.2
          ml-dtypes>=0.4.0
      depend on numpy{python_full_version >= '3.12'}>=1.26.0, we can conclude
      that all of:
          ml-dtypes==0.3.1
          ml-dtypes==0.3.2
          ml-dtypes==0.4.0
          ml-dtypes==0.4.1
          ml-dtypes==0.5.0
      , all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0 are incompatible.
      And because only the following versions of ml-dtypes are available:
          ml-dtypes<=0.3.2
          ml-dtypes>=0.4.0
      and tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.64 depends on ml-dtypes>=0.3.1, we can conclude that
      all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.64
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.65
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.66
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.68
      , numpy{python_full_version >= '3.12'}<1.26.0 are incompatible.
      And because we know from (2) that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0, all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63,<0.1.64
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.64,<0.1.65
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.65,<0.1.66
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.66,<0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.67,<0.1.68
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.68
       are incompatible, we can conclude that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0, all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63,<0.1.65
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.65,<0.1.66
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.66,<0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.67,<0.1.68
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.68
       are incompatible. (3)
      Because we know from (1) that ml-dtypes==0.3.1 depends on one of:
          numpy>=1.26.0,<=2.0.2
          numpy>=2.1.0
      and all of:
          ml-dtypes==0.3.2
          ml-dtypes>=0.4.0
      depend on numpy{python_full_version >= '3.12'}>=1.26.0, we can conclude
      that all of:
          ml-dtypes==0.3.1
          ml-dtypes==0.3.2
          ml-dtypes==0.4.0
          ml-dtypes==0.4.1
          ml-dtypes==0.5.0
      , all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0 are incompatible.
      And because only the following versions of ml-dtypes are available:
          ml-dtypes<=0.3.2
          ml-dtypes>=0.4.0
      and tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.65 depends on ml-dtypes>=0.3.1, we can conclude that
      all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.65
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.66
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.68
      , numpy{python_full_version >= '3.12'}<1.26.0 are incompatible.
      And because we know from (3) that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0, all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63,<0.1.65
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.65,<0.1.66
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.66,<0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.67,<0.1.68
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.68
       are incompatible, we can conclude that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0, all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63,<0.1.66
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.66,<0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.67,<0.1.68
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.68
       are incompatible. (4)
      Because we know from (1) that ml-dtypes==0.3.1 depends on one of:
          numpy>=1.26.0,<=2.0.2
          numpy>=2.1.0
      and all of:
          ml-dtypes==0.3.2
          ml-dtypes>=0.4.0
      depend on numpy{python_full_version >= '3.12'}>=1.26.0, we can conclude
      that all of:
          ml-dtypes==0.3.1
          ml-dtypes==0.3.2
          ml-dtypes==0.4.0
          ml-dtypes==0.4.1
          ml-dtypes==0.5.0
      , all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0 are incompatible.
      And because only the following versions of ml-dtypes are available:
          ml-dtypes<=0.3.2
          ml-dtypes>=0.4.0
      and tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.66 depends on ml-dtypes>=0.3.1, we can conclude that
      all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.66
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.68
      , numpy{python_full_version >= '3.12'}<1.26.0 are incompatible.
      And because we know from (4) that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0, all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63,<0.1.66
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.66,<0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.67,<0.1.68
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.68
       are incompatible, we can conclude that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0, all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63,<0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.67,<0.1.68
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.68
       are incompatible. (5)
      Because we know from (1) that ml-dtypes==0.3.1 depends on one of:
          numpy>=1.26.0,<=2.0.2
          numpy>=2.1.0
      and all of:
          ml-dtypes==0.3.2
          ml-dtypes>=0.4.0
      depend on numpy{python_full_version >= '3.12'}>=1.26.0, we can conclude
      that all of:
          ml-dtypes==0.3.1
          ml-dtypes==0.3.2
          ml-dtypes==0.4.0
          ml-dtypes==0.4.1
          ml-dtypes==0.5.0
      , all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0 are incompatible.
      And because only the following versions of ml-dtypes are available:
          ml-dtypes<=0.3.2
          ml-dtypes>=0.4.0
      and tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.67 depends on ml-dtypes>=0.3.1, we can conclude that
      all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}==0.1.68
      , numpy{python_full_version >= '3.12'}<1.26.0 are incompatible.
      And because we know from (5) that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0, all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63,<0.1.67
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.67,<0.1.68
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.68
       are incompatible, we can conclude that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0, all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63,<0.1.68
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.68
       are incompatible. (6)
      Because all of:
          ml-dtypes==0.3.2
          ml-dtypes>=0.4.0
      depend on numpy{python_full_version >= '3.12'}>=1.26.0 and only the
      following versions of ml-dtypes are available:
          ml-dtypes<=0.3.2
          ml-dtypes>=0.4.0
      we can conclude that ml-dtypes>0.3.1 depends on
      numpy{python_full_version >= '3.12'}>=1.26.0.
      And because we know from (1) that ml-dtypes==0.3.1 depends on one of:
          numpy>=1.26.0,<=2.0.2
          numpy>=2.1.0
      we can conclude that ml-dtypes>=0.3.1, all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0 are incompatible.
      And because tensorstore==0.1.68 depends on ml-dtypes>=0.3.1, we can
      conclude that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , tensorstore==0.1.68, numpy{python_full_version >= '3.12'}<1.26.0 are
      incompatible.
      And because we know from (6) that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0, all of:
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63,<0.1.68
          tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>0.1.68
       are incompatible, we can conclude that all of:
          numpy<1.26.0
          numpy>1.26.0,<1.26.1
          numpy>1.26.1,<1.26.2
          numpy>1.26.2,<1.26.3
          numpy>1.26.3,<1.26.4
          numpy>1.26.4,<2.0.0
          numpy>2.0.0,<2.0.1
          numpy>2.0.1,<2.0.2
          numpy>2.0.2,<2.1.0
          numpy>2.1.0,<2.1.1
          numpy>2.1.1,<2.1.2
          numpy>2.1.2,<2.1.3
          numpy>2.1.3
      , numpy{python_full_version >= '3.12'}<1.26.0,
      tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63 are incompatible.
      And because only the following versions of numpy{python_full_version >=
      '3.12'} are available:
          numpy{python_full_version >= '3.12'}<=2.0.2
          numpy{python_full_version >= '3.12'}>=2.1.0
      and ultralytics[export] depends on numpy{platform_machine ==
      'aarch64'}==1.[23](https://github.com/ultralytics/ultralytics/actions/runs/11935609642/job/33267320025?pr=17663#step:7:24).5, we can conclude that ultralytics[export] and
      tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63 are incompatible.
      And because ultralytics[export] depends on
      tensorstore{python_full_version >= '3.9' and platform_machine ==
      'aarch64'}>=0.1.63 and your project requires ultralytics[export], we can
      conclude that your projects's requirements are unsatisfiable.
      hint: Pre-releases are available for ml-dtypes in the requested
      range (e.g., 0.4.0b1), but pre-releases weren't enabled (try:
      `--prerelease=allow`)

@glenn-jocher
Copy link
Member

@Burhan-Q yes, also got another error on uv pip install for benchmarks, was unclear of the cause but seemed related to package conflicts (maybe with numpy, can't remember).

@Burhan-Q
Copy link
Contributor Author

Yeah @glenn-jocher the issue here was also with Numpy conflicts, but as a transient requirements for other packages. At first it was due to albumentations and the [export] group having conflicts, but I was able to resolve that using the [tools.uv] conflicts parameter in the pyproject.toml file. Once that resolved, it brought up this other issue with tensorstore, ml_dtypes , and numpy having a lot of conflicts and didn't seem like it was going to be straightforward to resolve in the same way.

I just wanted to point this out since I previously had mentioned sunsetting 3.8 support previously. Not saying this should instigate an immedate change, but instead maybe a chance to start planning and give users sufficent notice of the change.

Copy link

codecov bot commented Nov 20, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 34.98%. Comparing base (0b51e4f) to head (7547cc2).
Report is 317 commits behind head on main.

❗ There is a different number of reports uploaded between BASE (0b51e4f) and HEAD (7547cc2). Click for more details.

HEAD has 21 uploads less than BASE
Flag BASE (0b51e4f) HEAD (7547cc2)
GPU 3 0
Tests 12 0
Benchmarks 9 3
Additional details and impacted files
@@             Coverage Diff             @@
##             main   #17663       +/-   ##
===========================================
- Coverage   78.40%   34.98%   -43.42%     
===========================================
  Files         129      129               
  Lines       17227    17227               
===========================================
- Hits        13506     6027     -7479     
- Misses       3721    11200     +7479     
Flag Coverage Δ
Benchmarks 34.98% <ø> (ø)
GPU ?
Tests ?

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@glenn-jocher
Copy link
Member

Thank you for highlighting this. The conflicts with numpy, tensorstore, and ml_dtypes, alongside transient dependencies like albumentations, emphasize the growing challenges of maintaining Python 3.8 compatibility. Transitioning to Python 3.9+ seems increasingly necessary to streamline dependency management and resolve such conflicts. We'll consider this feedback when planning future updates and provide users with adequate notice if any changes are implemented.

@Burhan-Q Burhan-Q closed this Mar 16, 2025
@Burhan-Q
Copy link
Contributor Author

Discourse 600x800

@glenn-jocher
Copy link
Member

Thank you for sharing this. For assistance with YOLO implementation or troubleshooting, we recommend reviewing our YOLO Common Issues guide which covers many common scenarios. If you're experiencing a specific error or need implementation guidance, please share details about your use case and we'll help point you to the relevant documentation resources.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
devops GitHub Devops or MLops
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants