Skip to content

Honor falsey callable callbacks in WeakFunctionProxy - #359

Merged
GrahamDumpleton merged 1 commit into
GrahamDumpleton:developfrom
xiehuanyi:fix-falsey-weak-proxy-callbacks
Oct 12, 2026
Merged

GrahamDumpleton merged 1 commit into
GrahamDumpleton:developfrom
xiehuanyi:fix-falsey-weak-proxy-callbacks

Conversation

@xiehuanyi

Copy link
Copy Markdown
Contributor

A valid callback can evaluate as false, for example an initially empty callable list used to collect expiration notifications. WeakFunctionProxy passed this callback directly to weakref.ref instead of wrapping it, so it received a weak reference instead of the public proxy. For a bound method, expiration of both the instance and function could also invoke it twice.

Treat only None as the absence of a callback. False-valued callable callbacks now use the same proxy forwarding and once-only expiration handling as other callbacks. Add regressions for free functions and bound methods, plus an unreleased change note.

Validation on Linux:

  • Both new cases fail before the fix with the C extension enabled and disabled, and pass after it.
  • The complete just test matrix passes: 27 full-suite runs over Python 3.9–3.15, including 3.14t and 3.15t, each with pure-Python installation, C extension enabled, and C extension disabled at runtime. The recipe's pinned mypy pair tests run in this matrix.
  • Final targeted weak-proxy suites pass in both implementations (16 tests each).
  • git diff --check passes. Black's remaining test-file findings are also present on develop; the added code is formatted without unrelated changes.

AI assistance was used to prepare the implementation and tests. The commands above were executed locally. Remote CI remains subject to the repository's normal approval workflow.

Copilot AI balanced review requested due to automatic review settings October 11, 2026 08:48

This comment was marked as spam.

@GrahamDumpleton
GrahamDumpleton merged commit e9d491c into GrahamDumpleton:develop Oct 12, 2026
47 checks passed
4alvit added a commit to ha-homelab/ha-echo-dot that referenced this pull request Oct 20, 2026
Bumps [wrapt](https://github.com/GrahamDumpleton/wrapt) from 2.5.0 to
2.5.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/GrahamDumpleton/wrapt/releases">wrapt's
releases</a>.</em></p>
<blockquote>
<h2>wrapt 2.5.1</h2>
<p>Full release notes: <a
href="https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1">https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1</a></p>
<p>Install from PyPi (recommended):</p>
<pre><code>pip install wrapt==2.5.1
</code></pre>
<p>PyPi uploads follow each GitHub release; if <code>pip</code> reports
the
version is unavailable, the matching PyPi upload may not have
happened yet.</p>
<p>Pre-built wheels are provided for a range of Python versions
and platforms (Linux x86_64/aarch64/riscv64, macOS x86_64 and
arm64, Windows x86_64 and arm64, plus PyPy and free-threaded
builds). The source distribution is also attached together
with <code>SHA256SUMS</code> for verification.</p>
<h2>wrapt 2.5.1rc1</h2>
<p>Release candidate. Release notes for the upcoming
2.5.1 final (work in progress): <a
href="https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1">https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1</a></p>
<p>May be installable from PyPi:</p>
<pre><code>pip install wrapt==2.5.1rc1
</code></pre>
<p>If <code>pip</code> reports the version is unavailable, this
candidate
either has not been uploaded yet or is not being published to
PyPi. Use the attached wheels or build from the source
distribution instead:</p>
<pre><code>tar xf wrapt-2.5.1rc1.tar.gz
cd wrapt-2.5.1rc1
pip install .
</code></pre>
<p><code>SHA256SUMS</code> is attached for verification of the
archives.</p>
<h2>wrapt 2.5.1.dev1</h2>
<p>Development snapshot. Not normally published to PyPi
(occasionally uploaded to exercise the release pipeline).</p>
<p>Release notes for the upcoming 2.5.1 final (work in
progress): <a
href="https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1">https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1</a></p>
<p>Platform wheels and the source distribution are attached. To
test against your Python install, either grab a matching wheel
or build from the source distribution:</p>
<pre><code>pip install
wrapt-2.5.1.dev1-&lt;python&gt;-&lt;abi&gt;-&lt;platform&gt;.whl
</code></pre>
<p>or</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/GrahamDumpleton/wrapt/blob/develop/docs/changes.rst">wrapt's
changelog</a>.</em></p>
<blockquote>
<h2>Version 2.5.1</h2>
<p><strong>Bugs Fixed</strong></p>
<ul>
<li>
<p>A <code>LazyObjectProxy</code> created with an <code>interface</code>
argument that
declared a path-like type, such as <code>os.PathLike</code> or
<code>pathlib.Path</code>,
did not define the <code>__fspath__()</code> special method on the class
it
generated. Because <code>os.fspath()</code> looks up
<code>__fspath__()</code> on the type
of the object, passing such a proxy to <code>os.fspath()</code>, the
builtin
<code>open()</code> or other standard library functions accepting paths
raised
<code>TypeError</code> before the factory callable had been invoked to
create the
wrapped object. The <code>__fspath__()</code> special method is now
added when the
declared interface provides it, in the same way as is already done for
the other special methods looked up on the type, so the first path
conversion triggers creation of the wrapped object and succeeds. With
thanks to Muneeb Sheikh for <code>pull request
[#360](GrahamDumpleton/wrapt#360)
&lt;https://github.com/GrahamDumpleton/wrapt/pull/360&gt;</code>_.</p>
</li>
<li>
<p>A callback passed to <code>wrapt.WeakFunctionProxy</code> which was
callable but
evaluated as false, such as an event emitter object which reports its
number of subscribers via <code>__len__()</code> and is empty when first
created,
was passed the underlying weak reference object instead of the proxy
when the wrapped function expired. Where the wrapped function was a
bound method, such a callback could also be called twice, once each
when the instance and the function expired. Only <code>None</code> is
now treated
as meaning no callback was supplied, which mirrors the behaviour of
<code>weakref.ref()</code> and <code>weakref.proxy()</code> in the
standard library, so
these callbacks now receive the proxy and are called only once, as for
any other callback. With thanks to Huanyi Xie for <code>pull request
[#359](GrahamDumpleton/wrapt#359)
&lt;https://github.com/GrahamDumpleton/wrapt/pull/359&gt;</code>_.</p>
</li>
<li>
<p>A <code>wrapt.AdapterFactory</code> instance passed as the
<code>adapter</code> argument
to <code>wrapt.decorator</code> was ignored, and so never called, if the
instance
evaluated as false, such as when the factory class defined
<code>__bool__()</code>
or <code>__len__()</code>. The decorated function then retained its
original
signature instead of that produced by the factory. Whether an adapter
factory was supplied is now determined by type before the truth value
of the adapter is considered, so such factories are always called. As a
consequence of this change a factory can now also return
<code>None</code>, or
any other false value, to indicate that no adapter should be used for a
particular function, where previously this failed with an obscure error.
With thanks to Luochenchen for <code>pull request
[#358](GrahamDumpleton/wrapt#358)
&lt;https://github.com/GrahamDumpleton/wrapt/pull/358&gt;</code>_ which
identified
the issue.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/dbbb21fa76915541a850a2029e97c116f38a53b0"><code>dbbb21f</code></a>
Merge branch 'release/2.5.1'</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/95e2afbb47cadfdff5e19ec88ba7caf718bd4a45"><code>95e2afb</code></a>
Drop the release candidate suffix for the 2.5.1 release.</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/1ed68ca8c32b15c59dea50032b08bc3271529ec3"><code>1ed68ca</code></a>
Update to 2.5.1rc1.</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/77e826dd8973c960f0733977ec67f43896a4d050"><code>77e826d</code></a>
Recognise adapter factories by type so one which evaluates as false is
not ig...</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/13efe635b6942394977b016cfd2d8ac6530a8124"><code>13efe63</code></a>
Move change note for PR <a
href="https://redirect.github.com/GrahamDumpleton/wrapt/issues/359">#359</a>
under 2.5.1 and add clarifying comments.</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/6ba6048628e7a1c584bd767b451037dc36dd6b03"><code>6ba6048</code></a>
Reorder <strong>fspath</strong> handling in lazy proxy and add change
note for PR <a
href="https://redirect.github.com/GrahamDumpleton/wrapt/issues/360">#360</a>.</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/5e97e2d1a3c2effc9f1f8357f83802e6cbce8998"><code>5e97e2d</code></a>
Update to 2.5.1.dev1.</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/e9d491c7c8b31747e9dc280f48783d69d9ac2904"><code>e9d491c</code></a>
Merge pull request <a
href="https://redirect.github.com/GrahamDumpleton/wrapt/issues/359">#359</a>
from xiehuanyi/fix-falsey-weak-proxy-callbacks</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/0d6c935bac4fe9c4b3ca2a0f696950024b8b07bc"><code>0d6c935</code></a>
Merge pull request <a
href="https://redirect.github.com/GrahamDumpleton/wrapt/issues/360">#360</a>
from muneikh/fix-lazy-pathlike-interface</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/de574aa4fd5ca3c272e533dfd250a4868bfacbb3"><code>de574aa</code></a>
Honor the declared pathlike interface in lazy proxies</li>
<li>Additional commits viewable in <a
href="https://github.com/GrahamDumpleton/wrapt/compare/2.5.0...2.5.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=wrapt&package-manager=pip&previous-version=2.5.0&new-version=2.5.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: alvit <272257197+4alvit@users.noreply.github.com>
MaxiBoether pushed a commit to datologyai/zephon that referenced this pull request Oct 26, 2026
Bumps the uv-dependencies group with 3 updates:
[wrapt](https://github.com/GrahamDumpleton/wrapt),
[ruff](https://github.com/astral-sh/ruff) and
[transformers](https://github.com/huggingface/transformers).

Updates `wrapt` from 2.5.0 to 2.5.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/GrahamDumpleton/wrapt/releases">wrapt's
releases</a>.</em></p>
<blockquote>
<h2>wrapt 2.5.1</h2>
<p>Full release notes: <a
href="https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1">https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1</a></p>
<p>Install from PyPi (recommended):</p>
<pre><code>pip install wrapt==2.5.1
</code></pre>
<p>PyPi uploads follow each GitHub release; if <code>pip</code> reports
the
version is unavailable, the matching PyPi upload may not have
happened yet.</p>
<p>Pre-built wheels are provided for a range of Python versions
and platforms (Linux x86_64/aarch64/riscv64, macOS x86_64 and
arm64, Windows x86_64 and arm64, plus PyPy and free-threaded
builds). The source distribution is also attached together
with <code>SHA256SUMS</code> for verification.</p>
<h2>wrapt 2.5.1rc1</h2>
<p>Release candidate. Release notes for the upcoming
2.5.1 final (work in progress): <a
href="https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1">https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1</a></p>
<p>May be installable from PyPi:</p>
<pre><code>pip install wrapt==2.5.1rc1
</code></pre>
<p>If <code>pip</code> reports the version is unavailable, this
candidate
either has not been uploaded yet or is not being published to
PyPi. Use the attached wheels or build from the source
distribution instead:</p>
<pre><code>tar xf wrapt-2.5.1rc1.tar.gz
cd wrapt-2.5.1rc1
pip install .
</code></pre>
<p><code>SHA256SUMS</code> is attached for verification of the
archives.</p>
<h2>wrapt 2.5.1.dev1</h2>
<p>Development snapshot. Not normally published to PyPi
(occasionally uploaded to exercise the release pipeline).</p>
<p>Release notes for the upcoming 2.5.1 final (work in
progress): <a
href="https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1">https://wrapt.readthedocs.io/en/latest/changes.html#version-2-5-1</a></p>
<p>Platform wheels and the source distribution are attached. To
test against your Python install, either grab a matching wheel
or build from the source distribution:</p>
<pre><code>pip install
wrapt-2.5.1.dev1-&lt;python&gt;-&lt;abi&gt;-&lt;platform&gt;.whl
</code></pre>
<p>or</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/GrahamDumpleton/wrapt/blob/develop/docs/changes.rst">wrapt's
changelog</a>.</em></p>
<blockquote>
<h2>Version 2.5.1</h2>
<p><strong>Bugs Fixed</strong></p>
<ul>
<li>
<p>A <code>LazyObjectProxy</code> created with an <code>interface</code>
argument that
declared a path-like type, such as <code>os.PathLike</code> or
<code>pathlib.Path</code>,
did not define the <code>__fspath__()</code> special method on the class
it
generated. Because <code>os.fspath()</code> looks up
<code>__fspath__()</code> on the type
of the object, passing such a proxy to <code>os.fspath()</code>, the
builtin
<code>open()</code> or other standard library functions accepting paths
raised
<code>TypeError</code> before the factory callable had been invoked to
create the
wrapped object. The <code>__fspath__()</code> special method is now
added when the
declared interface provides it, in the same way as is already done for
the other special methods looked up on the type, so the first path
conversion triggers creation of the wrapped object and succeeds. With
thanks to Muneeb Sheikh for <code>pull request
[#360](GrahamDumpleton/wrapt#360)
&lt;https://github.com/GrahamDumpleton/wrapt/pull/360&gt;</code>_.</p>
</li>
<li>
<p>A callback passed to <code>wrapt.WeakFunctionProxy</code> which was
callable but
evaluated as false, such as an event emitter object which reports its
number of subscribers via <code>__len__()</code> and is empty when first
created,
was passed the underlying weak reference object instead of the proxy
when the wrapped function expired. Where the wrapped function was a
bound method, such a callback could also be called twice, once each
when the instance and the function expired. Only <code>None</code> is
now treated
as meaning no callback was supplied, which mirrors the behaviour of
<code>weakref.ref()</code> and <code>weakref.proxy()</code> in the
standard library, so
these callbacks now receive the proxy and are called only once, as for
any other callback. With thanks to Huanyi Xie for <code>pull request
[#359](GrahamDumpleton/wrapt#359)
&lt;https://github.com/GrahamDumpleton/wrapt/pull/359&gt;</code>_.</p>
</li>
<li>
<p>A <code>wrapt.AdapterFactory</code> instance passed as the
<code>adapter</code> argument
to <code>wrapt.decorator</code> was ignored, and so never called, if the
instance
evaluated as false, such as when the factory class defined
<code>__bool__()</code>
or <code>__len__()</code>. The decorated function then retained its
original
signature instead of that produced by the factory. Whether an adapter
factory was supplied is now determined by type before the truth value
of the adapter is considered, so such factories are always called. As a
consequence of this change a factory can now also return
<code>None</code>, or
any other false value, to indicate that no adapter should be used for a
particular function, where previously this failed with an obscure error.
With thanks to Luochenchen for <code>pull request
[#358](GrahamDumpleton/wrapt#358)
&lt;https://github.com/GrahamDumpleton/wrapt/pull/358&gt;</code>_ which
identified
the issue.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/dbbb21fa76915541a850a2029e97c116f38a53b0"><code>dbbb21f</code></a>
Merge branch 'release/2.5.1'</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/95e2afbb47cadfdff5e19ec88ba7caf718bd4a45"><code>95e2afb</code></a>
Drop the release candidate suffix for the 2.5.1 release.</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/1ed68ca8c32b15c59dea50032b08bc3271529ec3"><code>1ed68ca</code></a>
Update to 2.5.1rc1.</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/77e826dd8973c960f0733977ec67f43896a4d050"><code>77e826d</code></a>
Recognise adapter factories by type so one which evaluates as false is
not ig...</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/13efe635b6942394977b016cfd2d8ac6530a8124"><code>13efe63</code></a>
Move change note for PR <a
href="https://redirect.github.com/GrahamDumpleton/wrapt/issues/359">#359</a>
under 2.5.1 and add clarifying comments.</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/6ba6048628e7a1c584bd767b451037dc36dd6b03"><code>6ba6048</code></a>
Reorder <strong>fspath</strong> handling in lazy proxy and add change
note for PR <a
href="https://redirect.github.com/GrahamDumpleton/wrapt/issues/360">#360</a>.</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/5e97e2d1a3c2effc9f1f8357f83802e6cbce8998"><code>5e97e2d</code></a>
Update to 2.5.1.dev1.</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/e9d491c7c8b31747e9dc280f48783d69d9ac2904"><code>e9d491c</code></a>
Merge pull request <a
href="https://redirect.github.com/GrahamDumpleton/wrapt/issues/359">#359</a>
from xiehuanyi/fix-falsey-weak-proxy-callbacks</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/0d6c935bac4fe9c4b3ca2a0f696950024b8b07bc"><code>0d6c935</code></a>
Merge pull request <a
href="https://redirect.github.com/GrahamDumpleton/wrapt/issues/360">#360</a>
from muneikh/fix-lazy-pathlike-interface</li>
<li><a
href="https://github.com/GrahamDumpleton/wrapt/commit/de574aa4fd5ca3c272e533dfd250a4868bfacbb3"><code>de574aa</code></a>
Honor the declared pathlike interface in lazy proxies</li>
<li>Additional commits viewable in <a
href="https://github.com/GrahamDumpleton/wrapt/compare/2.5.0...2.5.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `ruff` from 0.17.0 to 0.17.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/releases">ruff's
releases</a>.</em></p>
<blockquote>
<h2>0.17.1</h2>
<h2>Release Notes</h2>
<p>Released on 2026-10-15.</p>
<h3>Preview features</h3>
<ul>
<li>[<code>pycodestyle</code>] Don't treat <code>None</code>,
<code>True</code>, or <code>False</code> as keywords
(<code>E271</code>-<code>E274</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29322">#29322</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Fix dedent with multiple leading comments (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29382">#29382</a>)</li>
<li>[<code>flake8-pyi</code>] Detect legacy positional-only parameters
in <code>__new__</code> methods (<code>PYI063</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/28502">#28502</a>)</li>
<li>[<code>flake8-pyi</code>] Fix false positives on quoted annotations
(<code>PYI036</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29274">#29274</a>)</li>
<li>[<code>perflint</code>] Avoid invalid comprehension suggestions
(<code>PERF401</code>, <code>PERF403</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29366">#29366</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Treat more <code>collections</code> and <code>weakref</code>
containers as mutable (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29213">#29213</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>[<code>flake8-import-conventions</code>] Update default and example
<code>aliases</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29333">#29333</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a href="https://github.com/fixfon"><code>@​fixfon</code></a></li>
<li><a href="https://github.com/mmaxjr"><code>@​mmaxjr</code></a></li>
<li><a
href="https://github.com/joshuavetos"><code>@​joshuavetos</code></a></li>
<li><a
href="https://github.com/nekomario28"><code>@​nekomario28</code></a></li>
<li><a href="https://github.com/ntBre"><code>@​ntBre</code></a></li>
<li><a
href="https://github.com/shan3520"><code>@​shan3520</code></a></li>
</ul>
<h2>Install ruff 0.17.1</h2>
<h3>Install prebuilt binaries via shell script</h3>
<pre lang="sh"><code>curl --proto '=https' --tlsv1.2 -LsSf
https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh
| sh
</code></pre>
<h3>Install prebuilt binaries via powershell script</h3>
<pre lang="sh"><code>powershell -ExecutionPolicy Bypass -c &quot;irm
https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1
| iex&quot;
</code></pre>
<h2>Download ruff 0.17.1</h2>
<p>|  File  | Platform | Checksum |</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's
changelog</a>.</em></p>
<blockquote>
<h2>0.17.1</h2>
<p>Released on 2026-10-15.</p>
<h3>Preview features</h3>
<ul>
<li>[<code>pycodestyle</code>] Don't treat <code>None</code>,
<code>True</code>, or <code>False</code> as keywords
(<code>E271</code>-<code>E274</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29322">#29322</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Fix dedent with multiple leading comments (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29382">#29382</a>)</li>
<li>[<code>flake8-pyi</code>] Detect legacy positional-only parameters
in <code>__new__</code> methods (<code>PYI063</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/28502">#28502</a>)</li>
<li>[<code>flake8-pyi</code>] Fix false positives on quoted annotations
(<code>PYI036</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29274">#29274</a>)</li>
<li>[<code>perflint</code>] Avoid invalid comprehension suggestions
(<code>PERF401</code>, <code>PERF403</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29366">#29366</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Treat more <code>collections</code> and <code>weakref</code>
containers as mutable (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29213">#29213</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>[<code>flake8-import-conventions</code>] Update default and example
<code>aliases</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/29333">#29333</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a href="https://github.com/fixfon"><code>@​fixfon</code></a></li>
<li><a href="https://github.com/mmaxjr"><code>@​mmaxjr</code></a></li>
<li><a
href="https://github.com/joshuavetos"><code>@​joshuavetos</code></a></li>
<li><a
href="https://github.com/nekomario28"><code>@​nekomario28</code></a></li>
<li><a href="https://github.com/ntBre"><code>@​ntBre</code></a></li>
<li><a
href="https://github.com/shan3520"><code>@​shan3520</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/astral-sh/ruff/commit/4683270c69cbdaf6ad64d3f983fc458d5a43b41f"><code>4683270</code></a>
Bump version to 0.17.1 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/29420">#29420</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/3514027edb659bbc3c787d355be9d130e5587f15"><code>3514027</code></a>
[ty] Update typing conformance suite pin (<a
href="https://redirect.github.com/astral-sh/ruff/issues/29417">#29417</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/829455624d78f2e89669e4b4b14af2b96abdb1ae"><code>8294556</code></a>
Update referenced PR security-review workflow (<a
href="https://redirect.github.com/astral-sh/ruff/issues/29237">#29237</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/d1e1b1f69b511df4385f64b510eeec4da01c1a0e"><code>d1e1b1f</code></a>
[ty] Preserve recursive aliases when rebuilding intersections (<a
href="https://redirect.github.com/astral-sh/ruff/issues/29057">#29057</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/93526150df078af7dd8fc4226cdcc469539d2001"><code>9352615</code></a>
[<code>perflint</code>] Avoid invalid comprehension suggestions
(<code>PERF401</code>, <code>PERF403</code>) (...</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/83a3afc3156d73ae4296f3fa74ede28e4c72bfcd"><code>83a3afc</code></a>
Fix dedent with multiple leading comments (<a
href="https://redirect.github.com/astral-sh/ruff/issues/29382">#29382</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/b42a8734410230f4529151782cae951b99bed858"><code>b42a873</code></a>
[ty] Clarify object attribute write-contract rationale (<a
href="https://redirect.github.com/astral-sh/ruff/issues/29384">#29384</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/d01678ebf594c97a7767d4372061c1f80ae5b5bb"><code>d01678e</code></a>
[ty] Clarify object attribute write-contract rationale (<a
href="https://redirect.github.com/astral-sh/ruff/issues/29384">#29384</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/355b42a7719d8a555e3ee50c89848b42d8a11eb5"><code>355b42a</code></a>
[ty] Avoid writable override contracts from object (<a
href="https://redirect.github.com/astral-sh/ruff/issues/29373">#29373</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/e26e6d2a54ac2c5e1f5b1945042de3ff3885bf8e"><code>e26e6d2</code></a>
[ty] Collect intersection inference through constraint relations (<a
href="https://redirect.github.com/astral-sh/ruff/issues/28677">#28677</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.17.0...0.17.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `transformers` from 5.19.0 to 5.20.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/huggingface/transformers/releases">transformers's
releases</a>.</em></p>
<blockquote>
<h1>Release v5.20.1</h1>
<p>Special surprise including the new model Beam from Reflection AI
:partying_face:</p>
<!-- raw HTML omitted -->
<p>Beam is a token-efficient, frontier-scale model focused on coding and
agentic use cases. It is built for teams that want to run a powerful
model on their own hardware, infrastructure, or cloud, and customize it
to their specific needs.</p>
<p><strong>Links:</strong> <a
href="https://huggingface.co/docs/transformers/main/en/model_doc/beam">Documentation</a></p>
<ul>
<li>Fix small bug in auto mappings (<a
href="https://redirect.github.com/huggingface/transformers/issues/49664">#49664</a>)
by <a href="https://github.com/yonigozlan"><code>@​yonigozlan</code></a>
in <a
href="https://redirect.github.com/huggingface/transformers/pull/49664">#49664</a></li>
</ul>
<h2>Some real patch fixes</h2>
<p>We broke loading models on older torch versions 😢 should be fixed
now. But here is the full list of fixes</p>
<ul>
<li>Fix HunYuan-VL image assignment during batched generation (<a
href="https://redirect.github.com/huggingface/transformers/issues/49557">#49557</a>)
by <a
href="https://github.com/Arnav66692"><code>@​Arnav66692</code></a></li>
<li>Fix DeepGEMM Mega MoE under expert parallelism(<a
href="https://redirect.github.com/huggingface/transformers/issues/49428">#49428</a>)
by <a
href="https://github.com/IlyasMoutawwakil"><code>@​IlyasMoutawwakil</code></a></li>
<li>Fix from_pretrained on torch 2.7: require torch&gt;=2.8 for
distributed checkpointing (<a
href="https://redirect.github.com/huggingface/transformers/issues/49652">#49652</a>)
by <a
href="https://github.com/naveecode"><code>@​naveecode</code></a></li>
<li>Make DtensorShardOperation work on torch 2.6 and 2.7 (<a
href="https://redirect.github.com/huggingface/transformers/issues/49657">#49657</a>)
by <a
href="https://github.com/hazelxue"><code>@​hazelxue</code></a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/huggingface/transformers/compare/v5.20.0...v5.20.1">https://github.com/huggingface/transformers/compare/v5.20.0...v5.20.1</a></p>
<h1>Release v5.20.0</h1>
<h2>New Model additions</h2>
<h3>Muse Spark Open</h3>
<!-- raw HTML omitted -->
<p>Muse Spark Open is a multimodal mixture-of-experts model from Meta
that takes text, images, audio, and video as input and generates text.
It has 816B total parameters (42B active per token) and a context window
of up to 1,048,576 tokens shared across modalities. It is trained for
agentic coding tasks such as multi-file editing, debugging, and tool
use. Checkpoints are available in BF16 and NVFP4 formats.</p>
<p><strong>Links:</strong> <a
href="https://huggingface.co/docs/transformers/main/en/model_doc/muse_spark">Documentation</a>
| <a href="http://hf.co/blog/meta-muse-spark-open">Blog Post</a></p>
<ul>
<li>Add Muse Spark Open (<a
href="https://redirect.github.com/huggingface/transformers/issues/49644">#49644</a>)
by <a href="https://github.com/guarin"><code>@​guarin</code></a> in <a
href="https://redirect.github.com/huggingface/transformers/pull/49644">#49644</a></li>
</ul>
<h3>Ling 3.0</h3>
<p>Ling 3.0 Flash is a hybrid Mixture-of-Experts language model from
InclusionAI. Its decoder groups five Kimi Delta Attention (KDA) layers
with one Multi-head Latent Attention (MLA) layer. The MLA blocks use
interleaved rotary embeddings and a head-wise output gate, and the
feed-forward blocks combine routed and shared experts. It is natively
supported in Transformers as <code>BailingHybridForCausalLM</code>, so
it loads without <code>trust_remote_code=True</code>.</p>
<p><strong>Links:</strong> <a
href="https://huggingface.co/docs/transformers/main/en/model_doc/bailing_hybrid">Documentation</a></p>
<ul>
<li>[Model] Add native Ling 3.0 Flash support (<a
href="https://redirect.github.com/huggingface/transformers/issues/49446">#49446</a>)
by <a href="https://github.com/icavan"><code>@​icavan</code></a> in <a
href="https://redirect.github.com/huggingface/transformers/pull/49446">#49446</a></li>
</ul>
<h3>Kolibri1</h3>
<p>Kolibri 1 is Aleph Alpha's mixture-of-experts reasoning model,
focused on German and English. Each of its 50 layers routes every token
to 6 of 384 experts using sigmoid routing, and adds one shared expert.
Four sliding-window attention layers alternate with one full-attention
layer, and RoPE is applied only in the sliding-window layers.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/huggingface/transformers/commit/0ea877911a11499053df677befd4b35b172ff502"><code>0ea8779</code></a>
v5.20.1</li>
<li><a
href="https://github.com/huggingface/transformers/commit/de4f35f52fa49b67ed3d2770e1b52cc140e958f1"><code>de4f35f</code></a>
Fix small bug in auto mappings (<a
href="https://redirect.github.com/huggingface/transformers/issues/49664">#49664</a>)</li>
<li><a
href="https://github.com/huggingface/transformers/commit/759c53818123638c70cd2b2c0a14929e36cc4f5d"><code>759c538</code></a>
Make <code>DtensorShardOperation</code> work on torch 2.6 and 2.7 (<a
href="https://redirect.github.com/huggingface/transformers/issues/49657">#49657</a>)</li>
<li><a
href="https://github.com/huggingface/transformers/commit/c180e2dceb1ddad135ee51c2d96ea25c6f1ead5f"><code>c180e2d</code></a>
Fix from_pretrained on torch 2.7: require torch&gt;=2.8 for distributed
checkpoi...</li>
<li><a
href="https://github.com/huggingface/transformers/commit/10d36aaa33e0d6481cfedd2cd38ee0b9257f6226"><code>10d36aa</code></a>
Fix DeepGEMM Mega MoE under expert parallelism (<a
href="https://redirect.github.com/huggingface/transformers/issues/49428">#49428</a>)</li>
<li><a
href="https://github.com/huggingface/transformers/commit/e45b214955b8ad1e8b6b88df9b6fff36817f04a3"><code>e45b214</code></a>
Fix HunYuan-VL image assignment during batched generation (<a
href="https://redirect.github.com/huggingface/transformers/issues/49557">#49557</a>)</li>
<li><a
href="https://github.com/huggingface/transformers/commit/48e4bcd72362ff4887651112dbfa8227211a393a"><code>48e4bcd</code></a>
v5.20.0</li>
<li><a
href="https://github.com/huggingface/transformers/commit/487dcfa6ab1c294ce2695005108fdf19a63363eb"><code>487dcfa</code></a>
Add Muse Spark Open (<a
href="https://redirect.github.com/huggingface/transformers/issues/49644">#49644</a>)</li>
<li><a
href="https://github.com/huggingface/transformers/commit/d2e102b6a7c180fedcfd29901608f25de89603b2"><code>d2e102b</code></a>
[docs] Hardware docs template (<a
href="https://redirect.github.com/huggingface/transformers/issues/49575">#49575</a>)</li>
<li><a
href="https://github.com/huggingface/transformers/commit/9d59c2c504f5630b73faf6a86637d93991a60219"><code>9d59c2c</code></a>
Add MOSS-Transcribe-Diarize model (<a
href="https://redirect.github.com/huggingface/transformers/issues/48386">#48386</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/huggingface/transformers/compare/v5.19.0...v5.20.1">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
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.

3 participants