Skip to content

Conversation

@pyup-bot
Copy link
Collaborator

@pyup-bot pyup-bot commented Sep 8, 2025

Update sphinx from 7.3.7 to 8.3.0.

Changelog

8.3.0

==============================

Dependencies
------------

Incompatible changes
--------------------

Deprecated
----------

Features added
--------------

Bugs fixed
----------

Testing
-------
Links

Update furo from 2024.5.6 to 2025.7.19.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update sphinx-autobuild from 2024.4.16 to 2025.8.25.

Changelog

2025.08.25

-----------------------

* Drop support for Python 3.9-3.10 to match Sphinx.
* Declare support for Python 3.14.
* Add an optional ``--post-build`` flag to run additional commands
after building the documentation.
* Add support for the ``SPHINX_AUTOBUILD_DEBUG`` environment variable
to help with debugging.

2024.10.03

-----------------------

* Improve error handling for failures in pre-build commands.

2024.10.02

-----------------------

* Show the changed paths that triggered the rebuild.

2024.09.19

-----------------------

* Fix path filtering on Windows by normalising path separators.
* Filter various directories by default (``.git``, ``venv``, etc).
* Serve the correct directory when using make mode (``-M``).

2024.09.18

-----------------------

* Run Sphinx through the Python entry point rather than the binary on PATH.

2024.09.17

-----------------------

* Relax checks for paths that aren't required to exist.

2024.09.03

-----------------------

* Fix support for Python 3.9.
* Fix running ``sphinx-autobuild`` via entry point scripts.
* Run ``sphinx-build`` in a subprocess to mitigate autdoc issues.
* Support the ``-M`` 'make mode' option for ``sphinx-build``.
Links

Update sphinx-sitemap from 2.6.0 to 2.8.0.

Changelog

2.8.0

-----

- |:sparkles:| NEW: Add support for wildcard patterns to :confval:`sitemap_excludes`
`113 <https://github.com/jdillard/sphinx-sitemap/pull/113>`_

2.7.2

-----

*Release date: 2025-06-26*

- |:bug:| FIX: Change :confval:`sitemap_show_lastmod` to default of ``False``

2.7.1

-----

*Release date: 2025-06-20*

- Remove support for Python 3.8

2.7.0

-----

*Release date: 2025-06-20*

* |:sparkles:| NEW: Add support for ``lastmod`` using `sphinx-last-updated-by-git`_
`95 <https://github.com/jdillard/sphinx-sitemap/pull/95>`_
Links

Update sphinx-click from 5.0.1 to 6.0.0.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update sphinx-autodoc-typehints from 2.3.0 to 3.2.0.

Changelog

3.2.0

<!-- Release notes generated using configuration in .github/release.yml at main -->

What's Changed
* Fixed broken changelog link by agronholm in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/530
* Fix issue 481 by nineteendo in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/533
* Don't add :rtype: None by grayjk in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/538
* Place rtype after directive by grayjk in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/537

New Contributors
* agronholm made their first contribution in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/530
* nineteendo made their first contribution in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/533
* grayjk made their first contribution in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/538

**Full Changelog**: https://github.com/tox-dev/sphinx-autodoc-typehints/compare/3.1.0...3.2.0

3.1.0

<!-- Release notes generated using configuration in .github/release.yml at main -->

What's Changed
* Support Sphinx 8.2.0 - drop 3.10 support because Sphinx does by b-kamphorst in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/525

New Contributors
* b-kamphorst made their first contribution in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/525

**Full Changelog**: https://github.com/tox-dev/sphinx-autodoc-typehints/compare/3.0.1...3.1.0

3.0.1

<!-- Release notes generated using configuration in .github/release.yml at main -->

What's Changed
* Fix roles for `types` module by flying-sheep in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/516
* Update Ruff to 0.9.1 by flying-sheep in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/517


**Full Changelog**: https://github.com/tox-dev/sphinx-autodoc-typehints/compare/3.0.0...3.0.1

3.0.0

<!-- Release notes generated using configuration in .github/release.yml at main -->

What's Changed
* 🐛 Replace docutils private API use w/ public by webknjaz in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/507
* Drop support for nptyping by gaborbernat in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/514

New Contributors
* webknjaz made their first contribution in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/507

**Full Changelog**: https://github.com/tox-dev/sphinx-autodoc-typehints/compare/2.5.0...3.0.0

2.5.0

<!-- Release notes generated using configuration in .github/release.yml at main -->

What's Changed
* Fix the type checker by gaborbernat in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/493
* Apply typehints_formatter to signature by Priyansh121096 in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/494

New Contributors
* Priyansh121096 made their first contribution in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/494

**Full Changelog**: https://github.com/tox-dev/sphinx-autodoc-typehints/compare/2.4.4...2.5.0

2.4.4

<!-- Release notes generated using configuration in .github/release.yml at main -->



**Full Changelog**: https://github.com/tox-dev/sphinx-autodoc-typehints/compare/2.4.3...2.4.4

2.4.3

<!-- Release notes generated using configuration in .github/release.yml at main -->



**Full Changelog**: https://github.com/tox-dev/sphinx-autodoc-typehints/compare/2.4.2...2.4.3

2.4.2

<!-- Release notes generated using configuration in .github/release.yml at main -->

What's Changed
* Improve the CI by gaborbernat in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/485


**Full Changelog**: https://github.com/tox-dev/sphinx-autodoc-typehints/compare/2.4.1...2.4.2

2.4.1

<!-- Release notes generated using configuration in .github/release.yml at main -->

What's Changed
* Fix placement of return type when there is a doctest by hoodmane in https://github.com/tox-dev/sphinx-autodoc-typehints/pull/482


**Full Changelog**: https://github.com/tox-dev/sphinx-autodoc-typehints/compare/2.4.0...2.4.1

2.4.0

<!-- Release notes generated using configuration in .github/release.yml at main -->

- Drop 3.9 support
- Add 3.13 support
- Bump dependencies

**Full Changelog**: https://github.com/tox-dev/sphinx-autodoc-typehints/compare/2.3.0...2.4.0
Links

Update pytest from 8.3.5 to 8.4.2.

Changelog

8.4.1

=========================

Bug fixes
---------

- `13461 <https://github.com/pytest-dev/pytest/issues/13461>`_: Corrected ``_pytest.terminal.TerminalReporter.isatty`` to support
being called as a method. Before it was just a boolean which could
break correct code when using ``-o log_cli=true``).


- `13477 <https://github.com/pytest-dev/pytest/issues/13477>`_: Reintroduced :class:`pytest.PytestReturnNotNoneWarning` which was removed by accident in pytest `8.4`.

This warning is raised when a test functions returns a value other than ``None``, which is often a mistake made by beginners.

See :ref:`return-not-none` for more information.


- `13497 <https://github.com/pytest-dev/pytest/issues/13497>`_: Fixed compatibility with ``Twisted 25+``.



Improved documentation
----------------------

- `13492 <https://github.com/pytest-dev/pytest/issues/13492>`_: Fixed outdated warning about ``faulthandler`` not working on Windows.

8.4.0

=========================

Removals and backward incompatible breaking changes
---------------------------------------------------

- `11372 <https://github.com/pytest-dev/pytest/issues/11372>`_: Async tests will now fail, instead of warning+skipping, if you don't have any suitable plugin installed.


- `12346 <https://github.com/pytest-dev/pytest/issues/12346>`_: Tests will now fail, instead of raising a warning, if they return any value other than None.


- `12874 <https://github.com/pytest-dev/pytest/issues/12874>`_: We dropped support for Python 3.8 following its end of life (2024-10-07).


- `12960 <https://github.com/pytest-dev/pytest/issues/12960>`_: Test functions containing a yield now cause an explicit error. They have not been run since pytest 4.0, and were previously marked as an expected failure and deprecation warning.

See :ref:`the docs <yield tests deprecated>` for more information.



Deprecations (removal in next major release)
--------------------------------------------

- `10839 <https://github.com/pytest-dev/pytest/issues/10839>`_: Requesting an asynchronous fixture without a `pytest_fixture_setup` hook that resolves it will now give a DeprecationWarning. This most commonly happens if a sync test requests an async fixture. This should have no effect on a majority of users with async tests or fixtures using async pytest plugins, but may affect non-standard hook setups or ``autouse=True``. For guidance on how to work around this warning see :ref:`sync-test-async-fixture`.



New features
------------

- `11538 <https://github.com/pytest-dev/pytest/issues/11538>`_: Added :class:`pytest.RaisesGroup` as an equivalent to :func:`pytest.raises` for expecting :exc:`ExceptionGroup`. Also adds :class:`pytest.RaisesExc` which is now the logic behind :func:`pytest.raises` and used as parameter to :class:`pytest.RaisesGroup`. ``RaisesGroup`` includes the ability to specify multiple different expected exceptions, the structure of nested exception groups, and flags for emulating :ref:`except* <except_star>`. See :ref:`assert-matching-exception-groups` and docstrings for more information.


- `12081 <https://github.com/pytest-dev/pytest/issues/12081>`_: Added :fixture:`capteesys` to capture AND pass output to next handler set by ``--capture=``.


- `12504 <https://github.com/pytest-dev/pytest/issues/12504>`_: :func:`pytest.mark.xfail` now accepts :class:`pytest.RaisesGroup` for the ``raises`` parameter when you expect an exception group. You can also pass a :class:`pytest.RaisesExc` if you e.g. want to make use of the ``check`` parameter.


- `12713 <https://github.com/pytest-dev/pytest/issues/12713>`_: New `--force-short-summary` option to force condensed summary output regardless of verbosity level.

This lets users still see condensed summary output of failures for quick reference in log files from job outputs, being especially useful if non-condensed output is very verbose.


- `12749 <https://github.com/pytest-dev/pytest/issues/12749>`_: pytest traditionally collects classes/functions in the test module namespace even if they are imported from another file.

For example:

.. code-block:: python

    contents of src/domain.py
   class Testament: ...


    contents of tests/test_testament.py
   from domain import Testament


   def test_testament(): ...

In this scenario with the default options, pytest will collect the class `Testament` from `tests/test_testament.py` because it starts with `Test`, even though in this case it is a production class being imported in the test module namespace.

This behavior can now be prevented by setting the new :confval:`collect_imported_tests` configuration option to ``false``, which will make pytest collect classes/functions from test files **only** if they are defined in that file.

-- by :user:`FreerGit`


- `12765 <https://github.com/pytest-dev/pytest/issues/12765>`_: Thresholds to trigger snippet truncation can now be set with :confval:`truncation_limit_lines` and :confval:`truncation_limit_chars`.

See :ref:`truncation-params` for more information.


- `13125 <https://github.com/pytest-dev/pytest/issues/13125>`_: :confval:`console_output_style` now supports ``times`` to show execution time of each test.


- `13192 <https://github.com/pytest-dev/pytest/issues/13192>`_: :func:`pytest.raises` will now raise a warning when passing an empty string to ``match``, as this will match against any value. Use ``match="^$"`` if you want to check that an exception has no message.


- `13192 <https://github.com/pytest-dev/pytest/issues/13192>`_: :func:`pytest.raises` will now print a helpful string diff if matching fails and the match parameter has ``^`` and ``$`` and is otherwise escaped.


- `13192 <https://github.com/pytest-dev/pytest/issues/13192>`_: You can now pass :func:`with pytest.raises(check=fn): <pytest.raises>`, where ``fn`` is a function which takes a raised exception and returns a boolean. The ``raises`` fails if no exception was raised (as usual), passes if an exception is raised and ``fn`` returns ``True`` (as well as ``match`` and the type matching, if specified, which are checked before), and propagates the exception if ``fn`` returns ``False`` (which likely also fails the test).


- `13228 <https://github.com/pytest-dev/pytest/issues/13228>`_: :ref:`hidden-param` can now be used in ``id`` of :func:`pytest.param` or in
``ids`` of :py:func:`Metafunc.parametrize <pytest.Metafunc.parametrize>`.
It hides the parameter set from the test name.


- `13253 <https://github.com/pytest-dev/pytest/issues/13253>`_: New flag: :ref:`--disable-plugin-autoload <disable_plugin_autoload>` which works as an alternative to :envvar:`PYTEST_DISABLE_PLUGIN_AUTOLOAD` when setting environment variables is inconvenient; and allows setting it in config files with :confval:`addopts`.



Improvements in existing functionality
--------------------------------------

- `10224 <https://github.com/pytest-dev/pytest/issues/10224>`_: pytest's ``short`` and ``long`` traceback styles (:ref:`how-to-modifying-python-tb-printing`)
now have partial :pep:`657` support and will show specific code segments in the
traceback.

.. code-block:: pytest

   ================================= FAILURES =================================
   _______________________ test_gets_correct_tracebacks _______________________

   test_tracebacks.py:12: in test_gets_correct_tracebacks
       assert manhattan_distance(p1, p2) == 1
              ^^^^^^^^^^^^^^^^^^^^^^^^^^
   test_tracebacks.py:6: in manhattan_distance
       return abs(point_1.x - point_2.x) + abs(point_1.y - point_2.y)
                              ^^^^^^^^^
   E   AttributeError: 'NoneType' object has no attribute 'x'

-- by :user:`ammaraskar`


- `11118 <https://github.com/pytest-dev/pytest/issues/11118>`_: Now :confval:`pythonpath` configures `$PYTHONPATH` earlier than before during the initialization process, which now also affects plugins loaded via the `-p` command-line option.

-- by :user:`millerdev`


- `11381 <https://github.com/pytest-dev/pytest/issues/11381>`_: The ``type`` parameter of the ``parser.addini`` method now accepts `"int"` and ``"float"`` parameters, facilitating the parsing of configuration values in the configuration file.

Example:

.. code-block:: python

 def pytest_addoption(parser):
     parser.addini("int_value", type="int", default=2, help="my int value")
     parser.addini("float_value", type="float", default=4.2, help="my float value")

The `pytest.ini` file:

.. code-block:: ini

 [pytest]
 int_value = 3
 float_value = 5.4


- `11525 <https://github.com/pytest-dev/pytest/issues/11525>`_: Fixtures are now clearly represented in the output as a "fixture object", not as a normal function as before, making it easy for beginners to catch mistakes such as referencing a fixture declared in the same module but not requested in the test function.

-- by :user:`the-compiler` and :user:`glyphack`


- `12426 <https://github.com/pytest-dev/pytest/issues/12426>`_: A warning is now issued when :ref:`pytest.mark.usefixtures ref` is used without specifying any fixtures. Previously, empty usefixtures markers were silently ignored.


- `12707 <https://github.com/pytest-dev/pytest/issues/12707>`_: Exception chains can be navigated when dropped into Pdb in Python 3.13+.


- `12736 <https://github.com/pytest-dev/pytest/issues/12736>`_: Added a new attribute `name` with the fixed value `"pytest tests"` to the root tag `testsuites` of the junit-xml generated by pytest.

This attribute is part of many junit-xml specifications and is even part of the `junit-10.xsd` specification that pytest's implementation is based on.


- `12943 <https://github.com/pytest-dev/pytest/issues/12943>`_: If a test fails with an exceptiongroup with a single exception, the contained exception will now be displayed in the short test summary info.


- `12958 <https://github.com/pytest-dev/pytest/issues/12958>`_: A number of :ref:`unraisable <unraisable>` enhancements:

* Set the unraisable hook as early as possible and unset it as late as possible, to collect the most possible number of unraisable exceptions.
* Call the garbage collector just before unsetting the unraisable hook, to collect any straggling exceptions.
* Collect multiple unraisable exceptions per test phase.
* Report the :mod:`tracemalloc` allocation traceback (if available).
* Avoid using a generator based hook to allow handling :class:`StopIteration` in test failures.
* Report the unraisable exception as the cause of the :class:`pytest.PytestUnraisableExceptionWarning` exception if raised.
* Compute the ``repr`` of the unraisable object in the unraisable hook so you get the latest information if available, and should help with resurrection of the object.


- `13010 <https://github.com/pytest-dev/pytest/issues/13010>`_: :func:`pytest.approx` now can compare collections that contain numbers and non-numbers mixed.


- `13016 <https://github.com/pytest-dev/pytest/issues/13016>`_: A number of :ref:`threadexception <unraisable>` enhancements:

* Set the excepthook as early as possible and unset it as late as possible, to collect the most possible number of unhandled exceptions from threads.
* Collect multiple thread exceptions per test phase.
* Report the :mod:`tracemalloc` allocation traceback (if available).
* Avoid using a generator based hook to allow handling :class:`StopIteration` in test failures.
* Report the thread exception as the cause of the :class:`pytest.PytestUnhandledThreadExceptionWarning` exception if raised.
* Extract the ``name`` of the thread object in the excepthook which should help with resurrection of the thread.


- `13031 <https://github.com/pytest-dev/pytest/issues/13031>`_: An empty parameter set as in ``pytest.mark.parametrize([], ids=idfunc)`` will no longer trigger a call to ``idfunc`` with internal objects.


- `13115 <https://github.com/pytest-dev/pytest/issues/13115>`_: Allows supplying ``ExceptionGroup[Exception]`` and ``BaseExceptionGroup[BaseException]`` to ``pytest.raises`` to keep full typing on :class:`ExceptionInfo <pytest.ExceptionInfo>`:

.. code-block:: python

   with pytest.raises(ExceptionGroup[Exception]) as exc_info:
       some_function()

Parametrizing with other exception types remains an error - we do not check the types of child exceptions and thus do not permit code that might look like we do.


- `13122 <https://github.com/pytest-dev/pytest/issues/13122>`_: The ``--stepwise`` mode received a number of improvements:

* It no longer forgets the last failed test in case pytest is executed later without the flag.

 This enables the following workflow:

 1. Execute pytest with ``--stepwise``, pytest then stops at the first failing test;
 2. Iteratively update the code and run the test in isolation, without the ``--stepwise`` flag (for example in an IDE), until it is fixed.
 3. Execute pytest with ``--stepwise`` again and pytest will continue from the previously failed test, and if it passes, continue on to the next tests.

 Previously, at step 3, pytest would start from the beginning, forgetting the previously failed test.

 This change however might cause issues if the ``--stepwise`` mode is used far apart in time, as the state might get stale, so the internal state will be reset automatically in case the test suite changes (for now only the number of tests are considered for this, we might change/improve this on the future).

* New ``--stepwise-reset``/``--sw-reset`` flag, allowing the user to explicitly reset the stepwise state and restart the workflow from the beginning.


- `13308 <https://github.com/pytest-dev/pytest/issues/13308>`_: Added official support for Python 3.14.


- `13380 <https://github.com/pytest-dev/pytest/issues/13380>`_: Fix :class:`ExceptionGroup` traceback filtering to exclude pytest internals.


- `13415 <https://github.com/pytest-dev/pytest/issues/13415>`_: The author metadata of the BibTex example is now correctly formatted with last names following first names.
An example of BibLaTex has been added.
BibTex and BibLaTex examples now clearly indicate that what is cited is software.

-- by :user:`willynilly`


- `13420 <https://github.com/pytest-dev/pytest/issues/13420>`_: Improved test collection performance by optimizing path resolution used in ``FSCollector``.


- `13457 <https://github.com/pytest-dev/pytest/issues/13457>`_: The error message about duplicate parametrization no longer displays an internal stack trace.


- `4112 <https://github.com/pytest-dev/pytest/issues/4112>`_: Using :ref:`pytest.mark.usefixtures <pytest.mark.usefixtures ref>` on :func:`pytest.param` now produces an error instead of silently doing nothing.


- `5473 <https://github.com/pytest-dev/pytest/issues/5473>`_: Replace `:` with `;` in the assertion rewrite warning message so it can be filtered using standard Python warning filters before calling :func:`pytest.main`.


- `6985 <https://github.com/pytest-dev/pytest/issues/6985>`_: Improved :func:`pytest.approx` to enhance the readability of value ranges and tolerances between 0.001 and 1000.
 * The `repr` method now provides clearer output for values within those ranges, making it easier to interpret the results.
 * Previously, the output for those ranges of values and tolerances was displayed in scientific notation (e.g., `42 ± 1.0e+00`). The updated method now presents the tolerance as a decimal for better readability (e.g., `42 ± 1`).

   Example:

   **Previous Output:**

   .. code-block:: console

       >>> pytest.approx(42, abs=1)
       42 ± 1.0e+00

   **Current Output:**

   .. code-block:: console

       >>> pytest.approx(42, abs=1)
       42 ± 1

 -- by :user:`fazeelghafoor`


- `7683 <https://github.com/pytest-dev/pytest/issues/7683>`_: The formerly optional ``pygments`` dependency is now required, causing output always to be source-highlighted (unless disabled via the ``--code-highlight=no`` CLI option).



Bug fixes
---------

- `10404 <https://github.com/pytest-dev/pytest/issues/10404>`_: Apply filterwarnings from config/cli as soon as possible, and revert them as late as possible
so that warnings as errors are collected throughout the pytest run and before the
unraisable and threadexcept hooks are removed.

This allows very late warnings and unraisable/threadexcept exceptions to fail the test suite.

This also changes the warning that the lsof plugin issues from PytestWarning to the new warning PytestFDWarning so it can be more easily filtered.


- `11067 <https://github.com/pytest-dev/pytest/issues/11067>`_: The test report is now consistent regardless if the test xfailed via :ref:`pytest.mark.xfail <pytest.mark.xfail ref>` or :func:`pytest.fail`.

Previously, *xfailed* tests via the marker would have the string ``"reason: "`` prefixed to the message, while those *xfailed* via the function did not. The prefix has been removed.


- `12008 <https://github.com/pytest-dev/pytest/issues/12008>`_: In :pr:`11220`, an unintended change in reordering was introduced by changing the way indices were assigned to direct params. More specifically, before that change, the indices of direct params to metafunc's callspecs were assigned after all parametrizations took place. Now, that change is reverted.


- `12863 <https://github.com/pytest-dev/pytest/issues/12863>`_: Fix applying markers, including :ref:`pytest.mark.parametrize <pytest.mark.parametrize ref>` when placed above `staticmethod` or `classmethod`.


- `12929 <https://github.com/pytest-dev/pytest/issues/12929>`_: Handle StopIteration from test cases, setup and teardown correctly.


- `12938 <https://github.com/pytest-dev/pytest/issues/12938>`_: Fixed ``--durations-min`` argument not respected if ``-vv`` is used.


- `12946 <https://github.com/pytest-dev/pytest/issues/12946>`_: Fixed missing help for :mod:`pdb` commands wrapped by pytest -- by :user:`adamchainz`.


- `12981 <https://github.com/pytest-dev/pytest/issues/12981>`_: Prevent exceptions in :func:`pytest.Config.add_cleanup` callbacks preventing further cleanups.


- `13047 <https://github.com/pytest-dev/pytest/issues/13047>`_: Restore :func:`pytest.approx` handling of equality checks between `bool` and `numpy.bool_` types.

Comparing `bool` and `numpy.bool_` using :func:`pytest.approx` accidentally changed in version `8.3.4` and `8.3.5` to no longer match:

.. code-block:: pycon

   >>> import numpy as np
   >>> from pytest import approx
   >>> [np.True_, np.True_] == pytest.approx([True, True])
   False

This has now been fixed:

.. code-block:: pycon

   >>> [np.True_, np.True_] == pytest.approx([True, True])
   True


- `13119 <https://github.com/pytest-dev/pytest/issues/13119>`_: Improved handling of invalid regex patterns for filter warnings by providing a clear error message.


- `13175 <https://github.com/pytest-dev/pytest/issues/13175>`_: The diff is now also highlighted correctly when comparing two strings.


- `13248 <https://github.com/pytest-dev/pytest/issues/13248>`_: Fixed an issue where passing a ``scope`` in :py:func:`Metafunc.parametrize <pytest.Metafunc.parametrize>` with ``indirect=True``
could result in other fixtures being unable to depend on the parametrized fixture.


- `13291 <https://github.com/pytest-dev/pytest/issues/13291>`_: Fixed ``repr`` of ``attrs`` objects in assertion failure messages when using ``attrs>=25.2``.


- `13312 <https://github.com/pytest-dev/pytest/issues/13312>`_: Fixed a possible ``KeyError`` crash on PyPy during collection of tests involving higher-scoped parameters.


- `13345 <https://github.com/pytest-dev/pytest/issues/13345>`_: Fix type hints for :attr:`pytest.TestReport.when` and :attr:`pytest.TestReport.location`.


- `13377 <https://github.com/pytest-dev/pytest/issues/13377>`_: Fixed handling of test methods with positional-only parameter syntax.

Now, methods are supported that formally define ``self`` as positional-only
and/or fixture parameters as keyword-only, e.g.:

.. code-block:: python

   class TestClass:

       def test_method(self, /, *, fixture): ...

Before, this caused an internal error in pytest.


- `13384 <https://github.com/pytest-dev/pytest/issues/13384>`_: Fixed an issue where pytest could report negative durations.


- `13420 <https://github.com/pytest-dev/pytest/issues/13420>`_: Added ``lru_cache`` to ``nodes._check_initialpaths_for_relpath``.


- `9037 <https://github.com/pytest-dev/pytest/issues/9037>`_: Honor :confval:`disable_test_id_escaping_and_forfeit_all_rights_to_community_support` when escaping ids in parametrized tests.



Improved documentation
----------------------

- `12535 <https://github.com/pytest-dev/pytest/issues/12535>`_: `This
example`<https://docs.pytest.org/en/latest/example/simple.html#making-test-result-information-available-in-fixtures>
showed ``print`` statements that do not exactly reflect what the
different branches actually do.  The fix makes the example more precise.


- `13218 <https://github.com/pytest-dev/pytest/issues/13218>`_: Pointed out in the :func:`pytest.approx` documentation that it considers booleans unequal to numeric zero or one.


- `13221 <https://github.com/pytest-dev/pytest/issues/13221>`_: Improved grouping of CLI options in the ``--help`` output.


- `6649 <https://github.com/pytest-dev/pytest/issues/6649>`_: Added :class:`~pytest.TerminalReporter` to the :ref:`api-reference` documentation page.


- `8612 <https://github.com/pytest-dev/pytest/issues/8612>`_: Add a recipe for handling abstract test classes in the documentation.

A new example has been added to the documentation to demonstrate how to use a mixin class to handle abstract
test classes without manually setting the ``__test__`` attribute for subclasses.
This ensures that subclasses of abstract test classes are automatically collected by pytest.



Packaging updates and notes for downstreams
-------------------------------------------

- `13317 <https://github.com/pytest-dev/pytest/issues/13317>`_: Specified minimum allowed versions of ``colorama``, ``iniconfig``,
and ``packaging``; and bumped the minimum allowed version
of ``exceptiongroup`` for ``python_version<'3.11'`` from a release
candidate to a full release.



Contributor-facing changes
--------------------------

- `12017 <https://github.com/pytest-dev/pytest/issues/12017>`_: Mixed internal improvements:

* Migrate formatting to f-strings in some tests.
* Use type-safe constructs in JUnitXML tests.
* Moved`` MockTiming`` into ``_pytest.timing``.

-- by :user:`RonnyPfannschmidt`


- `12647 <https://github.com/pytest-dev/pytest/issues/12647>`_: Fixed running the test suite with the ``hypothesis`` pytest plugin.



Miscellaneous internal changes
------------------------------

- `6649 <https://github.com/pytest-dev/pytest/issues/6649>`_: Added :class:`~pytest.TerminalReporter` to the public pytest API, as it is part of the signature of the :hook:`pytest_terminal_summary` hook.
Links

Update pytest-mock from 3.14.0 to 3.15.0.

Changelog

3.15.0

------

*2025-09-04*

* Python 3.8 (EOL) is no longer supported.
* `524 <https://github.com/pytest-dev/pytest-mock/pull/524>`_: Added ``spy_return_iter`` to ``mocker.spy``, which contains a duplicate of the return value of the spied method if it is an ``Iterator``.

3.14.1

-------------------

* `503 <https://github.com/pytest-dev/pytest-mock/pull/503>`_: Python 3.14 is now officially supported.
Links

Update fiftyone from 1.5.2 to 1.8.0.

Changelog

1.8.0

Please see the official [Voxel51 Release Notes](https://docs.voxel51.com/release-notes.html#fiftyone-1-8-0) for details.

1.7.2

Please see the official [Voxel51 Release Notes](https://docs.voxel51.com/release-notes.html#fiftyone-1-7-2) for details.

1.7.1

Please see the official [Voxel51 Release Notes](https://docs.voxel51.com/release-notes.html#fiftyone-1-7-1) for details.

1.7.0

Please see the official [Voxel51 Release Notes](https://docs.voxel51.com/release-notes.html#fiftyone-1-7-0) for details!

1.6.0

Please see the official [Voxel51 Release Notes](https://docs.voxel51.com/release-notes.html#fiftyone-1-6-0) for details.
Links

Update datasets from 3.6.0 to 4.0.0.

Changelog

4.0.0

Added

-   Dataset-as-folder: Dataset can now be self-contained module in a folder with
 checksums, dummy data,... This simplify implementing datasets outside the
 TFDS repository.
-   `tfds.load` can now load dataset without using the generation class. So
 `tfds.load('my_dataset:1.0.0')` can work even if `MyDataset.VERSION ==
 '2.0.0'` (See 2493).
-   TFDS CLI (see https://www.tensorflow.org/datasets/cli for detail).
-   `tfds.testing.mock_data` does not require metadata files anymore!
-   `tfds.as_dataframe(ds, ds_info)` with custom visualisation
 ([example](https://www.tensorflow.org/datasets/overview#tfdsas_dataframe)).
-   `tfds.even_splits` to generate subsplits (e.g. `tfds.even_splits('train',
 n=3) == ['train[0%:33%]', 'train[33%:67%]', ...]`.
-   `DatasetBuilder.RELEASE_NOTES` property.
-   `tfds.features.Image` now supports PNG with 4-channels.
-   `tfds.ImageFolder` now supports custom shape, dtype.
-   Downloaded URLs are available through `MyDataset.url_infos`.
-   `skip_prefetch` option to `tfds.ReadConfig`.
-   `as_supervised=True` support for `tfds.show_examples`, `tfds.as_dataframe`.
-   tfds.features can now be saved/loaded, you may have to overwrite
 [FeatureConnector.from_json_content](https://www.tensorflow.org/datasets/api_docs/python/tfds/features/FeatureConnector?version=nightly#from_json_content)
 and `FeatureConnector.to_json_content` to support this feature.
-   Script to detect dead-urls.
-   New datasets.

Changed

-   `tfds.as_numpy()` now returns an iterable which can be iterated multiple
 times. To migrate: `next(ds)` -> `next(iter(ds))`.
-   Rename `tfds.features.text.Xyz` -> `tfds.deprecated.text.Xyz`.

Removed

-   `DatasetBuilder.IN_DEVELOPMENT` property.
-   `tfds.core.disallow_positional_args` (should use Py3 `*,` instead).
-   Testing against TF 1.15. Requires Python 3.6.8+.

Fixed

-   Better archive extension detection for `dl_manager.download_and_extract`.
-   Fix `tfds.__version__` in TFDS nightly to be PEP440 compliant
-   Fix crash when GCS not available.
-   Improved open-source workflow, contributor guide, documentation.
-   Many other internal cleanups, bugs, dead code removal, py2->py3 cleanup,
 pytype annotations,...
-   Datasets updates.
Links

Update ultralytics from 8.3.132 to 8.3.195.

Changelog

8.3.195

📊 Key Changes
- Zero-dependency CPU info (priority)
- Replaced external py-cpuinfo with a lightweight internal utility `ultralytics.utils.cpu.CPUInfo` for fast, consistent CPU detection across macOS/Linux/Windows. See reference docs for CPUInfo added to the site.
- Updated `get_cpu_info()` to use `CPUInfo.name()`.
- Removed `py-cpuinfo` from project dependencies.
- PR: ultralytics 8.3.195 Zero-dependency 30X faster CPU info by glenn-jocher ([view PR 21972](https://github.com/ultralytics/ultralytics/pull/21972)) ⚡

- Checkpoint loading improved
- Restores all checkpoint arguments on load (`model.args` now preserves the full args dict; `DEFAULT_CFG_KEYS` filter removed).
- PR: Restore all arguments on checkpoint load by Y-T-G ([view PR 21968](https://github.com/ultralytics/ultralytics/pull/21968)) 🧠

- OBB prediction fix
- Disabled inappropriate box clipping for OBB when using `xywh=True` in `scale_boxes` to prevent width/height distortion.
- PR: Disable box clipping for OBB predictions by Y-T-G ([view PR 21950](https://github.com/ultralytics/ultralytics/pull/21950)) 📐

- Dataset verification bugfix
- Fixed a typo in `verify_image_label` using the correct `keypoint` parameter (prevents shape errors on pose datasets).
- PR: Fix `keypoints` typo by LH-and-FPGA ([view PR 21965](https://github.com/ultralytics/ultralytics/pull/21965)) 🩹

- Typing modernization
- Switched legacy `typing` generics (List/Dict/...) to built-in `list/dict/...` across code and examples (no behavior change).
- PR: Replace Uppercase Python 3.8 Types → 3.9 types by glenn-jocher ([view PR 21961](https://github.com/ultralytics/ultralytics/pull/21961)) 🧹

🎯 Purpose & Impact
- Faster startup and leaner installs
- Eliminates a dependency and accelerates CPU info retrieval (notable improvement on cold starts and scripts) ⚡
- Fewer environment conflicts and simpler deployments (especially in constrained or offline environments) 📦

- More reliable training/resume/export
- Preserving all checkpoint args improves compatibility with custom configs, training resumption, exports, and Ultralytics HUB workflows 🔁
- Note: `model.args` may contain additional keys—ensure downstream code can handle them gracefully ⚠️

- More accurate predictions and verification
- Correct handling of OBB `xywh` boxes prevents subtle geometry errors in outputs ✅
- Pose dataset checks are more robust thanks to the keypoint variable fix 🧪

Quick tip:
- Get a human-readable CPU name anywhere in code:
python
from ultralytics.utils.cpu import CPUInfo
print(CPUInfo.name())   e.g., "Intel(R) Core(TM) i7-8750H CPU  2.20GHz"


Enjoy a snappier, more robust Ultralytics experience with 8.3.195! ✨

What's Changed
* Replace Uppercase Python 3.8 Types → 3.9 types by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21961
* Restore all arguments on checkpoint load by Y-T-G in https://github.com/ultralytics/ultralytics/pull/21968
* Disable box clipping for OBB predictions by Y-T-G in https://github.com/ultralytics/ultralytics/pull/21950
* Fix `keypoints` typo in `verify_image_label` by LH-and-FPGA in https://github.com/ultralytics/ultralytics/pull/21965
* `ultralytics 8.3.195` Zero-dependency 30X faster CPU info by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21972

New Contributors
* LH-and-FPGA made their first contribution in https://github.com/ultralytics/ultralytics/pull/21965

**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.3.194...v8.3.195

8.3.194

📊 Key Changes
- Exporter dependency and logging (priority)
- Bumped ONNX simplifier to `onnxslim>=0.1.67` for ONNX and TensorFlow SavedModel exports and restored useful `urllib3` logs while keeping `sentry_sdk` quiet. See PR [ultralytics 8.3.194: bump onnxslim in Exporter](https://github.com/ultralytics/ultralytics/pull/21951). 🔧
- CoreML NMS support
- You can now export YOLO models with NMS embedded and run inference directly in Python. See PR [Support CoreML inference with NMS embedded models](https://github.com/ultralytics/ultralytics/pull/21948). 🍎
- TensorFlow export stability
- Pinned TensorFlow and tf-keras during export: `tensorflow>=2.0.0,<=2.19.0` and `tf_keras<=2.19.0` to match onnx2tf requirements. See PR [Pin tf_keras<=2.19.0](https://github.com/ultralytics/ultralytics/pull/21949). 🧩
- Telemetry refactor
- Moved anonymous “Events” from Ultralytics HUB utils to a standalone `ultralytics.utils.events` module; sending runs in a background thread and no longer depends on HUB. See PR [Refactor Events class](https://github.com/ultralytics/ultralytics/pull/21959). 🧠
- Segmentation robustness
- Fixed `cv2.resize` channel limit (512) by splitting large mask tensors to prevent errors with many detections/classes. See PR [Handle cv2.resize 512-channel limit](https://github.com/ultralytics/ultralytics/pull/21947). 🛡️
- SAM-2 API/doc consistency
- Standardized predictor input to `source` and renamed `img` param to `im` in `inference`, updating examples accordingly. See PR [Fix SAM2DynamicInteractivePredictor example](https://github.com/ultralytics/ultralytics/pull/21955). 📘
- Faster CI feedback
- Reduced GPU CI timeout from 6 hours to 20 minutes to prevent runaway jobs. See PR [Prevent long-running billed GPU CI](https://github.com/ultralytics/ultralytics/pull/21960). ⏱️
- Docs refresh
- New Events reference page and updated Queue Management guide with a broader-use video. See [Events utils reference](https://docs.ultralytics.com/reference/utils/events/) and the updated [Queue Management guide](https://docs.ultralytics.com/guides/queue-management/). 🎥

🎯 Purpose & Impact
- More reliable exports and fewer dependency conflicts
- Newer `onnxslim` brings bug fixes and improved model simplification for both ONNX and TensorFlow exports. Restored `urllib3` logs help troubleshoot network issues during export. ✅
- Smoother Apple workflows
- Export with NMS and run CoreML models directly—no manual postprocessing required for supported detection use cases. Example:
 bash
 yolo export model=yolo11n.pt format=coreml nms=True
 yolo predict model=yolo11n.mlpackage
 
- Predictable TensorFlow SavedModel pipeline
- Version pinning prevents breakages with newer TensorFlow releases; if you have TF > 2.19, you’ll be prompted to downgrade for export only. 🔒
- Cleaner, non-blocking telemetry
- Events are now in `ultralytics.utils.events` and sent in the background—no HUB dependency and zero impact on training/export performance. If you import Events directly, update your import:
 python
 from ultralytics.utils.events import events, Events
 
- Fewer runtime errors in dense segmentation
- Avoids crashes from OpenCV’s 512-channel resize limit when handling many masks. 🧪
- Developer experience and CI efficiency
- Faster feedback loops with tighter GPU timeouts; long tests may need adjustments. ⚡
- Minor API/docs alignment
- SAM-2 examples now use `source=...` consistently, reducing confusion. 🧭

Enjoy improved stability and smoother workflows across exports, CoreML inference, and telemetry—with minimal breaking changes. 🎉

What's Changed
* Pin `tf_keras<=2.19.0` by Laughing-q in https://github.com/ultralytics/ultralytics/pull/21949
* Support CoreML inference with NMS embedded models by Y-T-G in https://github.com/ultralytics/ultralytics/pull/21948
* fix: split large channel masks to handle `cv2.resize` 512 limitations by ShuaiLYU in https://github.com/ultralytics/ultralytics/pull/21947
* Fix `SAM2DynamicInteractivePredictor` example in docs by Y-T-G in https://github.com/ultralytics/ultralytics/pull/21955
* Prevent long-running billed GPU CI by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21960
* Refactor Events class by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21959
* Add https://youtu.be/Gxr9SpYPLh0 to docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/21923
* `ultralytics 8.3.194` Bump `onnxslim>=0.1.67` in Exporter by onuralpszr in https://github.com/ultralytics/ultralytics/pull/21951


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.3.193...v8.3.194

8.3.193

📊 Key Changes
- Long-sequence inference optimization (PR 21926) ⚡
- Detects long sequences (streams, screenshots, >1000 images, or any video) and preloads `torchvision` to trigger TorchVision-based NMS automatically.
- Keeps warnings targeted: only warns when not in stream mode.
- Unified checkpoint loading API (PR 21933) 🔄
- Replaces `attempt_load_one_weight`/`attempt_load_weights` with a single `load_checkpoint` function across the codebase.
- Docs updated to reference `ultralytics.nn.tasks.load_checkpoint`.
- Minimal example:
 python
 from ultralytics.nn.tasks import load_checkpoint
 model, ckpt = load_checkpoint("yolo11n.pt", device="cpu", fuse=False)
 
- TQDM progress bar improvements (PRs 21944, 21934, 21932) 📈
- Faster, simpler formatting via f-strings, smarter/smoother rate calculations.
- Human-friendly rate scaling by default (K/M/G for all units), plus “G” tier for very high rates.
- Cleaner completion display for byte downloads (e.g., “12.3 MB” instead of “12.3/12.3 MB”).
- Note: output strings changed; update any scripts that parse exact progress text.
- Clearer save paths (PR 21931) 🗂️
- `get_save_dir()` now returns absolute paths for unambiguous run locations in logs.
- Stable exports via dependency pin (PR 21941) 🔒
- Pins `onnxslim==0.1.65` for ONNX and TF SavedModel exports to avoid unexpected breakages.
- Robust PyTorch version handling (PR 21921) 🧰
- Normalizes `TORCH_VERSION` usage to prevent issues with non-string version objects and align all version checks/logging.
- Better segmentation validation (PR 21503) 🧪
- Corrects mask preparation for `overlap_mask=True` and simplifies IoU computation for more accurate, efficient val results.
- Dataset and docs fixes (PRs 21939, 21942, 21929, 21930) 📚
- Fixes `autosplit` import in `xView.yaml` (`ultralytics.data.split.autosplit`).
- Clarifies recommended dataset folder structure in docs.
- Updates docs CI to target Python 3.9; improves a label error message to mention negative coordinates.

🎯 Purpose & Impact
- Faster, more reliable inference on long videos/large image sets with automatic TorchVision NMS preload—no user action required. 🎬⚡
- Simpler model loading for developers via a single `load_checkpoint` entry point; fewer APIs to remember. 🧠
- Cleaner, more readable progress bars and absolute save paths improve day-to-day usability and logs across CLI and Ultralytics HUB. 🧭
- More stable export workflows thanks to dependency pinning; fewer surprise failures in ONNX/TF pipelines. 📦
- Improved compatibility and diagnostics across PyTorch versions; fewer version-related edge cases. 🛡️
- More accurate segmentation validation and smoother dataset setup with fixed imports and clarified docs. ✅

Tip: If any tooling relies on exact progress bar strings, review and adjust parsers due to the new TQDM formatting. ✍️

What's Changed
* Update docs.yml for Python 3.9 ruff format target by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21929
* Display resolved `save_dir` by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21931
* Remove TQDM duplicate filesize info on completion by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21932
* TQDM smart rate scaling by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21934
* Clarify negative coordinate assertion by samrere in https://github.com/ultralytics/ultralytics/pull/21930
* Pin `onnxslim==0.1.65` by Laughing-q in https://github.com/ultralytics/ultralytics/pull/21941
* Fix `autosplit` import in `xView.yaml` by Laughing-q in https://github.com/ultralytics/ultralytics/pull/21939
* Fix `torch._version_` check for `Torch>1.9` by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/21921
* Scope batch mask process to `_prepare_batch` by Y-T-G in https://github.com/ultralytics/ultralytics/pull/21503
* Consolidate checkpoint loading functions by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21933
* Faster isinstance() checks by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21928
* Fix dataset directory structure information in docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/21942
* TQDM f-strings for speed by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21944
* `ultralytics 8.3.193` Preload `torchvision` for long-sequence inference by Laughing-q in https://github.com/ultralytics/ultralytics/pull/21926

New Contributors
* samrere made their first contribution in https://github.com/ultralytics/ultralytics/pull/21930

**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.3.192...v8.3.193

8.3.192

🌟 Summary
Distributed hyperparameter tuning lands in ultralytics 8.3.192 with optional MongoDB Atlas coordination, delivering scalable HPO across machines, a steadier progress ETA, faster GPU data transfers, and more reliable CSV parsing — plus a clear docs warning on YOLOv5 compatibility. 🚀

📊 Key Changes
- Distributed Hyperparameter Tuning (primary)
- Optional MongoDB Atlas integration to coordinate tuning across multiple machines.
- New args: `mongodb_uri`, `mongodb_db` (default: `ultralytics`), `mongodb_collection` (default: `tuner_results`).
- Robust connection handling: retries, pooling, and an automatic fitness index.
- Shared results: reads best runs from MongoDB, writes new runs back, and syncs to CSV for plotting/resume.
- Early stopping when the shared collection reaches the target iteration count.
- Improved mutation logic, safer bounds, stronger resume behavior, and refreshed examples/docs.
- Progress ETA (tqdm)
- More stable remaining-time estimates, reducing jitter in progress bars. ⏱️
- Performance: non-blocking GPU transfers
- Applied `.to(device, non_blocking=True)` across train/val for Classification, Detection, Pose, Segmentation, YOLO-World (text embeddings), and YOLOE (text/visual prompts) to reduce data-transfer bottlenecks. ⚡
- CSV parsing reliability
- Polars now infers schema from entire files (`infer_schema_length=None`) across dataset conversion, training results, and plotting, preventing type mix-ups and improving plot/metric accuracy. 📈
- Docs update
- Clear warning: models trained in ultralytics/yolov5 are not compatible with the ultralytics/ultralytics library (YOLOv5u is anchor-free). ⚠️

🎯 Purpose & Impact
- Scale your HPO effortlessly
- Distribute tuning jobs across machines using MongoDB Atlas — speed up experimentation and find better hyperparameters sooner. 🌐
- Smoother training experience
- More accurate ETA and faster input pipelines translate to improved GPU utilization and potentially shorter epoch times.
- More trustworthy metrics and plots
- Full-file CSV schema inference reduces parsing errors for local runs and Ultralytics HUB exports.
- Reduced confusion for YOLOv5 users
- Clear compatibility guidance helps teams avoid loading errors and plan migrations to YOLOv5u within ultralytics/ultralytics.

Quick start for distributed tuning:
python
from ultralytics import YOLO

model = YOLO("yolo11n.pt")
model.tune(
 data="coco8.yaml",
 epochs=10,
 iterations=300,
 mongodb_uri="mongodb+srv://user:passcluster.mongodb.net/",
 mongodb_db="ultralytics",
 mongodb_collection="tuner_results",
 plots=False,
 save=False,
 val=False,
)


Helpful links:
- Read the Hyperparameter Tuning guide: https://docs.ultralytics.com/guides/hyperparameter-tuning
- See ultralytics/yolov5 vs ultralytics/ultralytics note: https://github.com/ultralytics/ultralytics/tree/main/docs/en/models/yolov5.md

What's Changed
* fix: 🐞 improve CSV reading performance by disabling schema inference by onuralpszr in https://github.com/ultralytics/ultralytics/pull/21909
* Add `non_blocking=True` for additional train/val loaders by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21912
* Add warning that legacy YOLOv5 models are not compatible with Ultralytics by Y-T-G in https://github.com/ultralytics/ultralytics/pull/21915
* `ultralytics 8.3.192` Distributed Hyperparameter Tuning with MongoDB Atlas Integration by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21882


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.3.191...v8.3.192

8.3.191

📊 Key Changes
- ⚡ Pure-pathlib Git metadata (no subprocess)
- Adds a lightweight `GitRepo` utility in `ultralytics/utils/git.py` to read branch, commit, and origin directly from the filesystem (incl. worktrees and packed-refs).
- Caches values and provides a simple script-mode output.
- New docs page: Reference for utils/git.
- Replaces legacy git helpers across the codebase (e.g., trainer metadata now uses the new GIT object).
- PR: [Pure-pathlib Git metadata (~200× faster)](https://github.com/ultralytics/ultralytics/pull/21885) by glenn-jocher

- 🧠 AutoBackend/model-loading refinements
- Switches to `attempt_load_one_weight` for cleaner single-weight loading and clearer APIs.
- Removes support for `list[str]` weights in AutoBackend; pass a single path or a `torch.nn.Module`.
- Clarifies TF.js backend message: “Ultralytics TF.js inference is not currently supported.”
- PR: [Fix Autobackend string model bug / refactor loading](https://github.com/ultralytics/ultralytics/pull/21892) by glenn-jocher

- 🧠 Modern types + style cleanup
- Modern Python 3.10+ typing across modules (built-in generics, union `|`, postponed annotations).
- PEP8/style refactors and minor test cleanups for clarity and safety.
- PRs: [Modernize type hints](https://github.com/ultralytics/ultralytics/pull/21891) by onuralpszr, [PEP8 refactor](https://github.com/ultralytics/ultralytics/pull/21890) by glenn-jocher, [Whitespace cleanup](https://github.com/ultralytics/ultralytics/pull/21893) by onuralpszr

- 📘 Documentation improvements
- MkDocs config updated to consistently hide duplicate `__init__` summaries.
- Fixes `autosplit` import path in guides (`ultralytics.data.split.autosplit`).
- Adds new reference page for `ultralytics.utils.git`.
- PRs: [Hide init summaries](https://github.com/ultralytics/ultralytics/pull/21889) by glenn-jocher, [Fix autosplit import](https://github.com/ultralytics/ultralytics/pull/21898) by ambitious-octopus

- 🔖 Version bump
- `__version__ = "8.3.191"`

Minimal example for the new Git utility:
python
from ultralytics.utils.git import GitRepo

g = GitRepo()   auto-resolves repo root
if g.is_repo:
 print("Branch:", g.branch)
 print("Commit:", g.commit)
 print("Origin:", g.origin)


🎯 Purpose & Impact
- Speed & reliability 🚀
- Git info retrieval is now ~200× faster and more robust (no shelling out to git), improving startup and metadata reporting—especially in constrained or non-git environments.
- Cleaner APIs & fewer footguns 🧼
- Model-loading is simpler and more predictable. Single-source-of-truth loader removes ambiguity and clarifies unsupported backends (e.g., TF.js).
- Note: If you previously passed `list[str]` weights to AutoBackend, switch to one model path or load a `torch.nn.Module`.
- Better dev ergonomics 🧑‍💻
- Modern typing and style refactors enhance readability, IDE assistance, and tooling.
- Docs fixes remove duplication, ensure correct imports, and add a reference for the new Git utility.
- No impact to YOLO11/YOLO12 training defaults 📦
- Core training/inference behavior remains unchanged for common workflows; updates are backward compatible except for the noted model-list change in AutoBackend.

What's Changed
* PEP8 refactor by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21890
* Update mkdocs.yml to `ignore_init_summary` by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21889
* chore: 🧹  clean up white-space across multiple files by onuralpszr in https://github.com/ultralytics/ultralytics/pull/21893
* refactor(types):  ♻️  modernize type hints with built-in generics and union syntax by onuralpszr in https://github.com/ultralytics/ultralytics/pull/21891
* Fix Docs autosplit import by ambitious-octopus in https://github.com/ultralytics/ultralytics/pull/21898
* Fix Autobackend string model bug by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21892
* `ultralytics 8.3.191` Pure-pathlib Git metadata (no subprocess, ~200× faster) by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21885


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.3.190...v8.3.191

8.3.190

📊 Key Changes
- Autobackend torch-native NMS (most important)
- Introduces a new NMS module `ultralytics/utils/nms.py` with:
 - `TorchNMS.nms` (exact-match, optimized NMS) and `TorchNMS.fast_nms` (vectorized FastNMS)
 - `non_max_suppression` refactored here; rotated NMS supported via `fast_nms` + `batch_probiou`
- Removes hard dependency on `torchvision.ops.nms` for prediction-time use
- YOLO11-optimized, works on CPU and GPU, improves post-processing latency ⚡
- Updated imports across the codebase (`predict`, `val`, examples) to `from ultralytics.utils import nms`
- OBB flows and exporter now use `TorchNMS.fast_nms` with `batch_probiou` for rotated boxes

- AutoBackend API cleanup
- Renamed parameter `weights=` to `model=` for consistency and to avoid duplicate memory usage (glenn-jocher)
- Unified handling for in-memory `torch.nn.Module` and `.pt` loading; gradients disabled by default for safer, faster inference
- Adds clear CoreML logging and a version gate

- CoreML stability
- Enforces `coremltools>=8.0` for CoreML inference to prevent runtime issues; shows a helpful message before loading

- Performance and stability
- Reintroduces platform-safe in-place ops (`sigmoid_()`, `clamp_()`) for non-macOS 14 systems to boost speed
- Adds `MACOS14`/`NOT_MACOS14` flags to handle Apple MPS quirks safely
- Faster internet checks using DNS lookups, improving startup reliability

- Import-time and CI improvements
- Scopes heavy imports (requests/psutil) to runtime, reducing import overhead and avoiding circular deps, including Ultralytics HUB utils
- CI workflows now run for PRs targeting any branch, not just main

- Geometric ops robustness
- Refactors core ops to better handle both HW and HWC shapes, clarifies padding logic, and reduces redundant indexing

- Reproducibility
- Trainer saves `git_commit` in checkpoints; new `utils.get_git_commit()` with caching

- UX and docs
- TQDM progress bar now shows ETA, stable rate, cleaner units, and improved final-state display ⏳
- Dataset/scripts/docs switch to `subprocess.run(...)` for safer command execution
- Tutorial notebook updated for latest versions and simpler dataset download APIs

🎯 Purpose & Impact
- Faster, leaner inference 🏃‍♂️💨
- PyTorch-native NMS reduces reliance on `torchvision`, speeds up post-processing, and lowers latency, especially helpful in deployment and environments where `torchvision` is heavy or unavailable.

- Better platform reliability 🛡️
- macOS 14 handling prevents MPS-related crashes with in-place ops.
- CoreML gating avoids version pitfalls and smooths model execution on Apple devices.

- Improved developer experience 👩‍💻
- Cleaner `AutoBackend(model=...)` API, unified PyTorch paths, and no-grad defaults reduce boilerplate and risks.
- Progress bar is more informative with ETA and better formatting.

- Stronger reproducibility and CI coverage 📦
- Git commit embedded in checkpoints makes experiments traceable.
- CI runs for all PR branches, speeding up feedback across workflows.

- Faster startup and “just works” behavior ⚙️
- Scoped imports and DNS-based connectivity checks improve responsiveness and robustness.

Quick usage examples:
- Use the new NMS utilities:
python
from ultralytics.utils import nms

preds: [B, C+4(+M), N]
out = nms.non_max_suppression(preds, conf_thres=0.25, iou_thres=0.45)

- Updated AutoBackend parameter:
python
from ultralytics.nn.autobackend import AutoBackend

model = AutoBackend(model="yolo11n.pt", device="cuda")

- Ensure CoreML tools are up-to-date:

pip install -U "coremltools>=8.0"


What's Changed
* Add `coremltools>=8.0` check to Autobackend by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21861
* Update `TQDM` progress bar to display remaining time by Laughing-q in https://github.com/ultralytics/ultralytics/pull/21868
* Notebook updates by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21870
* Fix prediction logging info for `obb` by Laughing-q in https://github.com/ultralytics/ultralytics/pull/21871
* Scope `requests` imports by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21876
* Target CI to all PR branches by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21879
* Eliminate duplicate ops indexing by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21877
* `MACOS14` check by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21883
* Rename Autobackend() `weights` to `model` by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21881
* Reintroduce inplace `.clamp_()` and `.sigmoid_()` ops by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21878
* Add git commit hash to checkpoints by Bovey0809 in https://github.com/ultralytics/ultralytics/pull/21836
* Standardize docs build `subprocess` calls by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21887
* Use `subprocess.run()` for improved dataset autodownloads by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21888
* Faster online check using DNS resolution by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21886
* `ultralytics 8.3.190` Autobackend `torch`-native NMS by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/21862

New Contributors
* Bovey0809 made their first contribution in https://github.com/ultralytics/ultralytics/pull/21836

**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.3.189...v8.3.190

8.3.189

📊 Key Changes
- In-place layer fusion (primary change) ⚡
- Conv/BatchNorm and Deconv/BatchNorm fusion now happens in-place, updating existing layers directly with gradients disabled.
- Smarter bias handling (including transposed conv): correctly registers or updates fused bias without creating new layer objects.
- Result: faster fuse(), lower memory use, and cleaner models. See PR [“3x faster inplace model.fuse()”](https://github.com/ultralytics/ultralytics/pull/21844) by glenn-jocher.

- Jetson-aware autobackend improvements ✅

@dagshub
Copy link

dagshub bot commented Sep 8, 2025

@pyup-bot
Copy link
Collaborator Author

Closing this in favor of #625

@pyup-bot pyup-bot closed this Sep 15, 2025
@guysmoilov guysmoilov deleted the pyup-scheduled-update-2025-09-08 branch September 15, 2025 16:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants