NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3370 most downloaded on PyPI
Multiple dispatch in Python
Last release 27 days ago
07 Sep 2026
Release timing varies
gaps range from 9 days to 9 months
Nearly every release is documented
notes for 55 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
78 releases · first in 2019
Remove Val , which was deprecated in v0.5.0 in favour of typing.Literal ( #269 by @nstarman ).
mypyc for faster dispatch (#287, #288, and #289 by @nstarman).beartype>=0.23 (#296 by @nstarman).Val, which was deprecated in v0.5.0 in favour of typing.Literal (#269 by @nstarman).One column per quarter.
Support union aliases in Python 3.14 and later ( @nstarman ).
Starting this release, Plum will be available on PyPI as both plum-dispatch and plum .
Starting this release, Plum will be available on PyPI as both plum-dispatch and plum.
Add faithful keyword to ModuleType .
faithful keyword to ModuleType.Note: All imports should now go through plum directly! That is, not plum.signature.Signature , but plum.Signature . Please do open an issue if this re
Note: All imports should now go through plum directly! That is, not plum.signature.Signature, but plum.Signature. Please do open an issue if this release breaks something that shouldn't break.
Changes:
uv (#218 by @nstarman).src layout (#249 by @nstarman).mypyc builds for better performance (#247 by @nstarman)!Complete deprecation cycles ( #230 and #236 ).
This release features numerous very helpful contributions and improvements by @nstarman!
typing_extensions as standard library and make more use of it (#226 and #232).dispatch fixture (#234).methods.py (#237).overload (#238).nox for testing (#235 and #240).#228 also fixes an important bug to do with the handling of unions (CC @davidwyld).
Add keyword argument condition to ModuleType .
condition to ModuleType.Fix precedence keyword argument (thanks @nstarman !).
Allow type_to in add_promotion_rule to be an object .
type_to in add_promotion_rule to be an object.Add more types to various functions and classes (thanks again @nstarman !!).
Add types for convert (thanks @nstarman!).
convert (thanks @nstarman!).Expose the attribute dispatch for bound functions (thanks @nstarman!).
dispatch for bound functions (thanks @nstarman!).Expose methods to bound functions. (Thanks @nstarman!)
Make typing_extensions a runtime requirement for all Python versions.
typing_extensions a runtime requirement for all Python versions.Require typing-extensions>=4.9.0 for python older than 3.11 by @francesco-ballarin in https://github.com/beartype/plum/pull/182
typing-extensions>=4.9.0 for python older than 3.11 by @francesco-ballarin in https://github.com/beartype/plum/pull/182Full Changelog: https://github.com/beartype/plum/compare/v2.5.1...v2.5.1.post1
Make redefinition warnings opt-in by setting warn_redefinition=True in Dispatcher, Function, or Resolver.
warn_redefinition=True in Dispatcher, Function, or Resolver.Fix failing import of typing_extensions (@PhilipVinc).
typing_extensions (@PhilipVinc).Val (@nstarman).Deprecate multihash (thanks @nstarman!).
multihash (thanks @nstarman!).Do not unnecessarily redefine a method when a self-promotion rule is defined. (#170 by @nstarman)
refactor: small cleanup by @nstarman in https://github.com/beartype/plum/pull/157
Full Changelog: https://github.com/beartype/plum/compare/v2.4.1...v2.4.2
Better handle C-defined classes (#152) (thanks @PhilipVinc!).
Improvement to the dispatch algorithm by avoiding unnecessary ambiguities. See #117 and #151. The algorithm is still not optimal, but this is a clear
Add type_nonparametric (thanks @nstarman!).
type_nonparametric (thanks @nstarman!).* Add allow_fail to ModuleType.
allow_fail to ModuleType.Add type_unparametrized. (Thanks @nstarman! :) )
type_unparametrized. (Thanks @nstarman! :) )Let conversion_method return the function. (Thanks @nstarman!)
conversion_method return the function. (Thanks @nstarman!)Improve rendering of function calls in exceptions.
@ if the source cannot be resolved.Fix support for Annotated, thanks to @hodgespodge!
Annotated, thanks to @hodgespodge!This update brings very pretty method printing! Yay. A massive thanks to @PhilipVinc, who contributed quite many PRs to implement this.
This update brings very pretty method printing! Yay. A massive thanks to @PhilipVinc, who contributed quite many PRs to implement this.
Consider
from numbers import Number
from plum import dispatch
@dispatch
def add(x: int, y: Number):
return x + y
@dispatch
def add(x: Number, y: int):
return x + y
Now methods print nicely:
<img width="647" alt="image" src="https://github.com/beartype/plum/assets/1444448/de736ccf-1b9a-4d04-82f8-3e3b4cb0f434">
In case of a mismatch, the exception shows which methods you could've meant:
<img width="895" alt="image" src="https://github.com/beartype/plum/assets/1444448/c92f6e5c-6ca5-4bca-a046-0fc13e276761">
And in the case of an ambiguity, the exception nicely shows which methods cannot be disambiguated:
<img width="737" alt="image" src="https://github.com/beartype/plum/assets/1444448/d1b062a5-c94c-4de7-9a0f-2c8bef6364f6">
Fix #105 (thanks @PhilipVinc!).
0.16.2.PLUM_SIMPLE_DOC environment variable.Temporarily remove deprecation warning for Val. (Thanks, @PhilipVinc!)
Val. (Thanks, @PhilipVinc!)Support mypy-compliant pattern suggested by @gabrieldemarmiesse, @wch, and @machow.
mypy-compliant pattern suggested by @gabrieldemarmiesse, @wch, and @machow.mypy and pyright tests into CI.Nothing published for this version
Generate docstrings play nice with sphinx (#75).
sphinx (#75).Nothing published for this version
At last, Plum 2! See #73 and #68.
At last, Plum 2!
See #73 and #68.
Also exclude subdirectories of tests.
tests.Remove directory tests from release.
tests from release.Add support for A | B syntax (thanks @PhilipVinc!).
A | B syntax (thanks @PhilipVinc!).Nothing published for this version
Nothing published for this version
Add experimental support for IPython's autoreload extension, by @PhilipVinc. See also #44.
Fix bug in extract_signature (fixes #41).
extract_signature (fixes #41).operator.attrgetter and operator.itemgetter (fixes #43).Nothing published for this version
Safely handle C-defined functions in Function.dispatch.
Function.dispatch.Fix inspection whenever function.py is compiled with Cython.
function.py is compiled with Cython.Let Function.dispatch support future annotations.
Function.dispatch support future annotations.Add full support for from __future__ import annotations.
from __future__ import annotations.Automatically unquote forward reference strings. This adds compatibility for from __future__ import annotations.
from __future__ import annotations.Improve error message when dispatching on __call__.
__call__.Release a version for registration on Zenodo.
Also build wheels for macOS M1.
Fix building wheels for all platforms. (@PhilipVinc)
Build wheels for all platforms. (@PhilipVinc)
Add support for typing.Iterable and typing.Sequence. The implementation of is involves some duplicate code and might miss a few features, but it shoul
typing.Iterable and typing.Sequence. The implementation of is involves some duplicate code and might miss a few features, but it should suffice for the most common use cases. Cleaning this up is left as a future TODO, along with other refactoring.Fix/improve behaviour for default arguments (@PhilipVinc).
Fix inheritance for @parametric.
@parametric.Fix bug surrounding runtime_type_of (@PhilipVinc).
runtime_type_of (@PhilipVinc).* Add support for typing.Dict.
typing.Dict.Your coding agent can read these notes before it upgrades. Set up the MCP server →