Skip to content

Conversation

@renovate
Copy link

@renovate renovate bot commented Mar 5, 2025

This PR contains the following updates:

Package Type Update Change Age Confidence
beartype (source) minor >=0.19.0,<0.20.0 -> >=0.22.7,<0.23.0 age confidence
beartype (changelog) project.dependencies minor >=0.19.0,<0.20.0 -> >=0.22.7,<0.23.0 age confidence

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

beartype/beartype (beartype)

v0.22.7: Beartype 0.22.7: The Road to QA Is Paved with Gradio Intentions

@​beartype 0.22.7 descends like an owl with sorta unsettling black eyes devoid of pupils, majestic wings aloft on the winds of QA. Do not be alarmed. Actually, isn't that when you should be most alarmed? When somebody says, "Do not be alarmed"!? The italicization isn't helping, either. But this will:

# Via "pip", the once-great venerable master packager now fallen on hard times:
$ pip install --upgrade beartype   # <-- you go, pipe-smoking pip

# Via "uv", the plucky upstart spiky-haired kid wielding a sword larger than its body:
$ uv sync beartype                 # <-- @&#8203;Glinte said it, so it must be true

# Via "conda", the corporate scientist in casual lab attire who wants to be your buddy, pal:
$ conda config --add channels conda-forge  # <-- where did python packaging go wrong?
$ conda install conda-forge::beartype      # <-- it all seemed so simple, once.

@​beartype 0.22.7 is the last patch release of the 0.22.X dev cycle. That was a lie. Fortunately, seductive lies aren't a problem here at @​beartype. If we want to hear it, it can't be bad. This release brings big:

  • Gradio compatibility! @​beartype should now be fully compliant with Gradio needs, wants, hungers, and cravings. Gradio: the ML web framework that was hard to satisfy, but we're pretty sure we managed. If you want Gradio, you want @​beartype 0.22.7. 🕸️ + 🐻 = 🧷
  • Shout-outs to @​rbroderi! @​rbroderi's pure-Python implementation of the hypothetical async yield from expression at future-async-yield-from was hugely inspiring. If you're into mutating Python into misshapen forms through the cosmic horrors of forbidden AST transformations, ...who isn't? am i right? i'm right check out @​rbroderi's work. He's up to no good, which is the best kind. 🤗 🫂

That's it. That's all we've got. But you don't even want to know the things we did, the places we went, the behaviour we regret, to make Gradio + @​beartype happen. If Gradio means nothing to you, we've got nothing but memes for you.

@​beartype should now support all popular Python frameworks. If you (or a codebase you love) know of any Python packages, modules, APIs, or other services that @​beartype does not support, please drop us a line on the issue tracker. We'll drop what we're doing video games. it's always video games. and "immediately" resolve that for your heroic team.

Until then, video games await. Let's get those memes started!

the more you stare at this, the more your brain sees

@​beartype 0.22.7 is helping @​leycec and his beautiful science wife to eat food. Thanks entirely to...

GitHub Sponsors: Befriend the Bear and Get a Bear for Life

This release comes courtesy these proud GitHub Sponsors, without whom everyone in the @​leycec family would currently be eating grasshoppers in the abandoned back lot again:

If you represent a security-conscious corporate, government, or non-profit, the best way bar none for you to support @​beartype and secure your own workflow is by subscribing to Tidelift through SonarQube Advanced Security. Security giant Sonar recently acquired Tidelift, guaranteeing the economic viability of the Tidelift model for billions of future open-source projects that have yet to be born. Join the jargon-laden conversation and pay someone else to think about unreadable acronyms like SAST, SCA, and SBOM for once.

Thanks so much, masters of fintech and lifted tides.

The Masters of Fintech and Lifted Tides. That's who.

Lastly but Beastly (but not Leastly)...

we doin' this

...to financially feed @​leycec and his friendly @​beartype through either:

Cue hypnagogic rave music that encourages fiscal irresponsibility. 🎵 🎹 🎶

Bear Club: The First Rule of Bear Club Is You Crush Bugs

@​beartype high-fives the reclusive secret society of worldwide bear bros who might possibly care about this. You are the select few. The elect enlightened. You are:

@​adamtheturtle. @​pablovela5620. @​crypdick. @​Glinte. @​JWCS. @​bitranox. Heroes among us.

@​beartype 0.22.X dev cycle: bye now tnx so much for coming

v0.22.6: Beartype 0.22.6: Gradio, They Said. It'll Be Easy, They Said.

@​beartype 0.22.6 sidles up to your door at 11:20PM with a steaming hot-out-of-the-oven delivery of... wait. This isn't pizza. Where's the pizza, delivery bear? Delivery bear growls, "There is no pizza." You feel uneasy. Maybe asking delivery bear awkward questions as it loiters outside your door under the pale moonlight isn't a choice you'd make again. You accept the misshapen bundle cradled gently in its paws. You know what it is without even looking. It's all so eerily familiar:

# Via "pip", the once-great venerable master packager now fallen on hard times:
$ pip install --upgrade beartype        # <-- you go, pipe-smoking pip

# Via "uv", the plucky upstart spiky-haired kid wielding a sword larger than its body:
$ uv lock --upgrade-package beartype    # <-- you do what you need to do, ultraviolet radiation

# Via "conda", the corporate scientist in casual lab attire who wants to be your buddy, pal:
$ conda config --add channels conda-forge  # <-- where did python packaging go wrong?
$ conda install conda-forge::beartype      # <-- it all seemed so simple, once.

@​beartype 0.22.6 is the patch release you can trust. Finally. caveats may apply. caveats may destroy your app stack mere minutes after upgrading.

Your based Gradio-based ML-LLM-AI web app at https://moneybags.ai mere minutes after upgrading.

@​beartype 0.22.5 is helping @​leycec and his beautiful science wife to eat food. Thanks entirely to...

GitHub Sponsors: Befriend the Bear and Get a Bear for Life

This release comes courtesy these proud GitHub Sponsors, without whom everyone in the @​leycec family would currently be eating grasshoppers in the abandoned back lot again:

If you represent a security-conscious corporate, government, or non-profit, the best way bar none for you to support @​beartype and secure your own workflow is by subscribing to Tidelift through SonarQube Advanced Security. Security giant Sonar recently acquired Tidelift, guaranteeing the economic viability of the Tidelift model for billions of future open-source projects that have yet to be born. Join the jargon-laden conversation and pay someone else to think about unreadable acronyms like SAST, SCA, and SBOM for once.

Thanks so much, masters of fintech and lifted tides.

The Masters of Fintech and Lifted Tides. That's who.

These Are the Days of Our Patch Releases

@​beartype 0.22.6 delivers almost full-blown Gradio compatibility. If the adverb "almost" wasn't doing so much heavy lifting in the prior sentence, we would've punctuated that sentence with an exclamation point. Do not be alarmed by the lack of an exclamation point. @​beartype 0.22.6 doesn't destroy your app stack. At 11:20PM, it's the small things.

@​beartype 0.22.6 preserves inspect.isgeneratorfunction()-ness across @beartype-decorated synchronous generator functions. Gradio needs this, apparently. Previously, the standard inspect.isgeneratorfunction() returned False when passed @beartype-decorated generators. Now, inspect.isgeneratorfunction() returns True. Pretend you understand what this means even as you nod off in the La-Z-Bear-Boy in the foyer that smells faintly of shaving cream:

# Been there. Done that. Bought the bear shirt.
>>> from beartype import beartype
>>> from collections.abc import Iterable
>>> from inspect import isgeneratorfunction

### Synchronous generator! Excitement intensifies! WHY AM I SHOUTING!?!?!?!?!?!?!?!?
>>> @&#8203;beartype
... def congenial_generator(parboiled_parameter: str | None) -> Iterable[str | None]:
...     yield parboiled_parameter

# Prove that @&#8203;beartype 0.22.6 actually did something.
>>> isgeneratorfunction(congenial_generator)
True  # <-- that's it? that's all you've got?

@​beartype 0.22.6 does not, unfortunately, preserve inspect.isasyncgenfunction()-ness across @beartype-decorated asynchronous generator functions. Gradio needs that, too. But everyone who's anyone says that's impossible. When you ask the impossible of @​beartype, do not be surprised when @​beartype fillets a salmon on your desk instead.

And... that's all we've got. It ain't much. It ain't how the QA was won. But that'll do, bear. That'll do.

@​beartype 0.22.6: people smile when you shoot arrows through your hat

Lastly but Beastly (but not Leastly)...

we doin' this

...to financially feed @​leycec and his friendly @​beartype through either:

Cue hypnagogic rave music that encourages fiscal irresponsibility. 🎵 🎹 🎶

Bear Club: The First Rule of Bear Club Is You Crush Bugs

@​beartype high-fives the reclusive secret society of worldwide bear bros who might possibly care about this. You are the select few. The elect enlightened. You are:

@​adamtheturtle. @​pablovela5620. @​crypdick. @​Glinte. @​JWCS. @​bitranox. Heroes among us.

@​beartype and Gradio. You can feel the smug.

v0.22.5: Beartype 0.22.5: Beloved Even by PYTHONOPTIMIZE&#x3D;1

@​beartype 0.22.5 does stuff. Uhhh. Wait. Why are we releasing yet another @​beartype 0.22.x patch within the span of ten seconds? We were just here. We already released @​beartype 0.22.4 a week ago. Wasn't that good enough!? I... I guess not. Turns out ${PYTHONOPTIMIZE} support has been busted in @​beartype for literally years. Probably decades. Nobody cared – until somebody cared. I blame only myself despite wanting to point the finger at somebody else. Anybody else. I'll take anybody. Let's start over.

@​beartype 0.22.5 valiantly arises from the ashes of our issue tracker like a burning phoenix on fire!!!! You can't stop this:

# Via "pip", the once-great venerable master packager now fallen on hard times:
$ pip install --upgrade beartype        # <-- you go, pipe-smoking pip

# Via "uv", the plucky upstart spiky-haired kid wielding a sword larger than its body:
$ uv lock --upgrade-package beartype    # <-- you do what you need to do, ultraviolet radiation

@​beartype 0.22.5 stoically puts on the sunglasses so you don't have to.

The sky is blue and I have hair again.

@​beartype 0.22.5 is helping @​leycec and his beautiful science wife to eat food. Thanks entirely to...

GitHub Sponsors: Befriend the Bear and Get a Bear for Life

This release comes courtesy these proud GitHub Sponsors, without whom everyone in the @​leycec family would currently be eating grasshoppers in the abandoned back lot again:

If you represent a security-conscious corporate, government, or non-profit, the best way bar none for you to support @​beartype and secure your own workflow is by subscribing to Tidelift through SonarQube Advanced Security. Security giant Sonar recently acquired Tidelift, guaranteeing the economic viability of the Tidelift model for billions of future open-source projects that have yet to be born. Join the jargon-laden conversation and pay someone else to think about unreadable acronyms like SAST, SCA, and SBOM for once.

Thanks so much, masters of fintech and lifted tides.

The Masters of Fintech and Lifted Tides. That's who.

Gods Not Another Patch Release. What's Still Wrong with You, @​beartype?

@​beartype 0.22.5 is a patch release that guarantees compatibility with Python optimization. Both the @beartype decorator and beartype.claw import hooks now silently reduce to noops (i.e., do nothing rather than type-checking everything) when users:

  • Pass one or more -O options to the Python interpreter (e.g., python -O worldshattering_app_shatters_world_accidentally.py).
  • Set the ${PYTHONOPTIMIZE} environment variable to a positive integer (e.g., PYTHONOPTIMIZE=1 python worldrepairing_app_repairs_world_shattered_by_worldshattering_app.py).

FastMCP users really care about Python optimization. Apparently, nobody else does. Makes sense. Even @​beartype is too slow for those speed-obsessed LLM gurus. How can this be!? It's never enough for the AI. In the relentless drive for faster query turnaround times, FastMCP is plumbing the depths of the impossible. There are always casualties on the road to progress. @​beartype was one of those casualties. But no more.

@​beartype 0.22.5 is a burning phoenix on fire. It's not a metaphor anymore. We're pretty sure our issue tracker is on fire. What is it now? Still 98 open issues despite a flurry of recent issue resolutions that took our last will to code? Yup. 98 open issues. My... my gods. GitHub. Does no one sleep around here? 😮‍💨

@​beartype + PYTHONOPTIMIZE=1: because you're too tired to even run @​beartype anymore.

Speedboat out of nowhere: @​beartype. Well-meaning innocent bystanders: FastMCP users.

Lastly but Beastly (but not Leastly)...

we doin' this

...to financially feed @​leycec and his friendly @​beartype through either:

Cue hypnagogic rave music that encourages fiscal irresponsibility. 🎵 🎹 🎶

Bear Club: The First Rule of Bear Club Is You Crush Bugs

@​beartype high-fives the reclusive secret society of worldwide bear bros who might possibly care about this. You are the select few. The elect enlightened. You are:

@​strawgate. @​Glinte. @​bitranox. Heroes among us.

@​beartype and FastMCP. It feels deep.

v0.22.4: Beartype 0.22.4: Now Less Hated by Poetry

@​beartype 0.22.4 catastrophically explodes all over your monitor. An oily black residue redolent of snail mucus slides off the screen, dripping with a maddening cadence into the crevices of your trusty mechanical keyboard:

# Via "pip", the once-great venerable master packager now fallen on hard times:
$ pip install --upgrade beartype        # <-- you go, pipe-smoking pip

# Via "uv", the plucky upstart spiky-haired kid wielding a sword larger than its body:
$ uv lock --upgrade-package beartype    # <-- you do what you need to do, ultraviolet radiation

@​beartype 0.22.4 never gets tired of bug-eyed dudes punching squinty-eyed dudes. Childhood memories do not fade.

Left: @​beartype 0.22.4. Right: Poetry and pipenv together as one dude.

@​beartype 0.22.4 is helping @​leycec and his beautiful science wife to eat food. Thanks entirely to...

GitHub Sponsors: Befriend the Bear and Get a Bear for Life

This release comes courtesy these proud GitHub Sponsors, without whom everyone in the @​leycec family would currently be eating grasshoppers in the abandoned back lot again:

If you represent a security-conscious corporate, government, or non-profit, the best way bar none for you to support @​beartype and secure your own workflow is by subscribing to Tidelift through SonarQube Advanced Security. Security giant Sonar recently acquired Tidelift, guaranteeing the economic viability of the Tidelift model for billions of future open-source projects that have yet to be born. Join the jargon-laden conversation and pay someone else to think about unreadable acronyms like SAST, SCA, and SBOM for once.

Thanks so much, masters of fintech and lifted tides.

The Masters of Fintech and Lifted Tides. That's who.

Gods Not Another Patch Release. What's Wrong with You, @​beartype?

@​beartype 0.22.4 is a patch release that guarantees compatibility with both Poetry and pipenv. Previously, @​beartype just assumed that Poetry and pipenv liked @​beartype. What's not to like about @​beartype, guys? Huh!? Apparently...

Everything. @​beartype 0.22.3 broke the assumption that everybody likes @​beartype. Our prior release shipped a pyproject.toml file with a PEP 440-compliant version string:

requires-python = ">=3.10,!=3.14rc1,!=3.14rc2"

That syntax is valid. But Poetry and pipenv didn't care. They do what they want! And they didn't want to have anything to do with @​beartype 0.22.3. We disagree, but that's fair enough. Everyone has bad opinions.

@​beartype 0.22.4 resolves these trivial incompatibilities with popular devtooling. @​beartype 0.22.4 also promises this will never happen again. A new integration test in the @​beartype test suite guarantees Poetry and pipenv compatibility, safeguarding both your QA stack and sanity against midnight regressions at 4:52AM.

@​beartype 0.22.4: what is even happening here

Lastly but Beastly (but not Leastly)...

we doin' this

...to financially feed @​leycec and his friendly @​beartype through either:

Cue hypnagogic rave music that encourages fiscal irresponsibility. 🎵 🎹 🎶

Bear Club: The First Rule of Bear Club Is You Crush Bugs

@​beartype high-fives the reclusive secret society of worldwide bear bros who might possibly care about this. You are the select few. The elect enlightened. You are:

@​nizdolin, @​SaiAakash, @​markspace, @​Spikhalskiy! Because you care, @​beartype cares.

@​beartype 0.22.4: it's more painful than it looks, and it looks pretty painful

v0.22.3: Beartype 0.22.3: Yo Dawg We Heard You Like Redis

@​beartype 0.22.3 descends softly. A crinkled QA leaf drifts somnabulently. Autumn gusts on GitHub. Rain hails on PyPI. These are the haiku of our Pythonic lives:

# Via "pip", the once-great venerable master packager now fallen on hard times:
$ pip install --upgrade beartype   # <-- you go, old man pip

# Via "uv", the plucky upstart spiky-haired kid wielding a sword larger than its body:
$ uv lock --upgrade-package        # <-- you are cleared for takeoff

That's right. uv installation instructions. It's happening, people.

@​beartype 0.22.3 dances the happy dance as your codebase watches in horror

@​beartype 0.22.3 is helping @​leycec and his beautiful science wife to eat food. Thanks entirely to...

GitHub Sponsors: Befriend the Bear and Get a Bear for Life

This release comes courtesy these proud GitHub Sponsors, without whom everyone in the @​leycec family would currently be eating grasshoppers in the abandoned back lot again:

If you represent a security-conscious corporate, government, or non-profit, the best way bar none for you to support @​beartype and secure your own workflow is by subscribing to Tidelift through SonarQube Advanced Security. Security giant Sonar recently acquired Tidelift, guaranteeing the economic viability of the Tidelift model for billions of future open-source projects that have yet to be born. Join the jargon-laden conversation and pay someone else to think about unreadable acronyms like SAST, SCA, and SBOM for once.

Thanks so much, masters of fintech and lifted tides.

The Masters of Fintech and Lifted Tides. That's who.

Patch Release? What's This All About Then?

@​beartype 0.22.3 is a patch release with a big heart, but not a lot to say. It means well, but it doesn't do much. But what it does do, it does so well:

  • Redis vis-a-vis the official redis-py Python client! @​beartype now officially supports Redis in general and the redis.Redis class specifically. Hype it! :godmode:
  • Python 3.9! By the time you read this, Python 3.9 is already dead. Because Python 3.9 support has been nightmare dev fuel an ongoing pain point, @​beartype 0.22.3 drops Python 3.9 support a week ahead of its official End-of-Life (EoL). I generally prefer to abandon Python compatibility with minor releases (e.g., 0.23.0) rather than patch releases like this. But... I gotta make an exception for Bad Boy Python 3.9. I'm sorry, everyone. It got axed. :goberserk:
  • Bluesky! Follow the new @​leycec.bsky.social feed for timely @​beartype release updates! I feel like a narcissist just typing this! Why does every sentence end with an explanation mark! Since GitHub itself lacks any sane means of pushing release announcements to the @​beartype userbase, I had no choice! I had to go full-narcy! Oh, Gods... somebody help @​leycec

@​beartype 0.22.3: it's funny until Helmet Bear eats your code

Lastly but Beastly (but not Leastly)...

we doin' this

...to financially feed @​leycec and his friendly @​beartype through either:

Cue hypnagogic rave music that encourages fiscal irresponsibility. 🎵 🎹 🎶

Bear Club: The First Rule of Bear Club Is You Crush Bugs

@​beartype high-fives the reclusive secret society of worldwide bear bros who might possibly care about this. You are the select few. The elect enlightened. You are:

  • @​ddorian! That's it. It's just you, fellow QA buddy. 😉

@​beartype 0.22.3 at 2:01AM in the morning

v0.22.2: Beartype 0.22.2: Yo Dawg We Heard You Like LLM

@​beartype is proud as a cub gnawing its first salmon to announce: @​beartype has been Tidelifted! For our security-conscious corporate and government userbase, the best way to secure your enterprise and support @​beartype is now through Tidelift vis-a-vis a SonarQube Advanced Security subscription. More on that later. We now return to your regularly scheduled release party. DJ Leycec in residence. Hit those fat QA jams.

Beartype 0.22.0 0.22.1 0.22.2 portals into the mortal plenum with a disturbing "WHOOOMP!" As you panic, all the oxygen in the room is rapidly vacuumed into an adjacent hyperdimension. It's not @​beartype's safest entrance – but it's one we're all sure to remember. This is @​beartype 0.22.2: don't ask what happened to 0.22.0. just... don't.

pip install --upgrade --pre beartype   # beartype casts magic missile on the darkness

The central dogma of @​beartype 0.22.2 is LLM compatibility. Do you like LLM? Do you like compatibility? Then your code likes @​beartype 0.22.2 (even against your better judgement). But before the liking starts...

@​beartype 0.22.2 salutes you who are about to code

@​leycec and his beautiful science wife are eating well. Thanks entirely to...

GitHub Sponsors: Befriend the Bear and Get a Bear for Life

This release comes courtesy these proud GitHub Sponsors, without whom @​leycec's cats would currently be eating grasshoppers in the abandoned back lot again:

Additional financial shout-outs to @​ilyapoz (@​Ilia Pozhilov), the amazing former Yandex code cosmonaut who graciously donated a pile of Georgian lari to @​beartype this go-around. Apparently, the lari is denominated in the ლ Unicode character. What a symbol! It looks like a beautiful hat. If only the Canadian dollar was half as manly. 😭

Thanks so much, masters of fintech and Yandex.

The Masters of Fintech and Yandex. That's who.

Tidelift: A Rising Tide Lifted @​beartype's Not-At-All-Leaky Boat

This release also comes courtesy Tidelift, which very graciously pays out recurring income to security-sensitive open-source projects like @​beartype, NumPy, and other stuff you probably care about. @​beartype joining Tidelift has super-positive implications for Python's broader QA community – including:

  • No rugpull. @​beartype is much less likely to die, disappear, or otherwise wither on the entropic vine now. Sadly, most open-source software does. Without recurring income, most open-source software never makes it to the Tidelift stage. It vanishes without a trace at 5:37AM on a Monday morning, leaving your once-profitable corporate enterprise and your once-stable local government without a working QA solution. That won't happen to @​beartype.
  • Actual security. Thanks to Tidelift making me do it, @​beartype now features an actual honest-to-Ursula security policy. It's boring. It's bog-standard. If we were responsible, we'd encourage you to read it. Instead, here's the tl;dr:
    1. @​beartype users who discover security vulnerabilities are invited to privately disclose those vulnerabilities by submitting a GitHub-managed security vulnerability.
    2. @​beartype will then privately resolve those vulnerabilities.
    3. @​beartype will then publish a new stable release containing those resolutions.
    4. @​beartype will then publicly document your discovery, crediting you and your fearsome l33t skills. Seriously, they're fearsome. We're afraid. With great power comes great responsibility QA. Somebody smart said that.
    5. GitHub will then include these vulnerabilities in its own GitHub Advisory Database, improving everyone's security. Luckily, you are part of everyone. ...what does that even mean?

If you represent a security-conscious corporate, government, or non-profit, the best way bar none for you to support @​beartype and secure your own workflow is by subscribing to Tidelift through SonarQube Advanced Security. Security giant Sonar recently acquired Tidelift, guaranteeing the economic viability of the Tidelift model for billions of future open-source projects that have yet to be born. Join the jargon-laden conversation and pay someone else to think about unreadable acronyms like SAST, SCA, and SBOM for once.

Pictured: Artistic rendition of the @​beartype development process before Tidelift. You weren't supposed to see this.

!!STUFF YOU WANNA READ EVEN THOUGH ITS EXHAUSTING!!

You really want to bump the @​beartype requirement in your pyproject.toml file. Preserve end user sanity tomorrow by explicitly requiring a minimum of @​beartype >=0.22.2 today: e.g.,

# In your top-level "pyproject.toml" configuration:
dependencies = [
    ...
    "beartype >=0.22.2",  # <-- once you go 0.22.2, you go 0.22.2 for life
    ...
]

Why? Bear with us. This explanation may bore you. Imagine what typing this out felt like.

Prior versions of @​beartype are fundamentally incompatible with Python 3.14. Python packagers like pip and uv do not update packages by default. Unless you bump your @​beartype requirement, your existing userbase who already installed your package will be unable to use your package under Python 3.14 – even after manually updating your package, because manually updating your package fails to transitively update all dependencies of your package by default. In other words, Python packaging still kinda sucks.

This is why...

@​beartype looks stoically into the wind as everything breaks

!!MORE STUFF YOU WANNA READ EVEN THOUGH ITS EXHAUSTING!!

beartype.claw import hooks have been supremely revamped. They still work the same, but they're now explicitly compatible with a lot more than they used to be. If you tried enabling beartype_this_package() but switched back to manually decorating everything with @beartype because beartype_this_package() spewed too many errors everywhere, please give beartype_this_package() a second chance:

# In the "{your_package}.__init__" submodule:
from beartype.claw import beartype_this_package
beartype_this_package()  # <-- we're willing to swear on our pinkies that this works now

Let us know how it goes. If stuff is still busted, we'll immediately fix that stuff. We now have the necessary machinery in our abstract syntax tree (AST) transformer to support all (or most, anyway) compatibility woes previously associated with beartype.claw import hooks.

the new beartype.claw shamelessly dances for anyone

tl;dr: Llamas, Bears, & You

@​beartype 0.22.2 dramatically improves compatibility across the board with the APIs, packages, and paradigms you care about. Because you care, we care. In fact, we spent whole months caring. We cared so much we're all cared out. The summer went away in a blitz of caring and we didn't even notice. Oh, Gods. The warmth has fled. The snow is coming. And all we have to show for it is massive compatibility gains across the board.

This includes:

  • Python 3.14! 🐍
  • LangChain! ⛓️
  • FastMCP! 💨
  • Celery! 🥗
  • Polars + Pandera! 🐻‍❄️
  • [PEP 646]! It doesn't really fit the LLM theme, but we did it anyway! It's turkey time. 🦃

@​beartype 0.22.2 weeps from pride and accomplishment, but mostly sleep deprivation

Python 3.14: Oh, It's Big

Python 3.14. You care about Python 3.14 even if you don't know you care. @​beartype now fully supports [PEP 649][] and [749][PEP 749] – landmark QA standards introduced by Python 3.14 that finally obsolete [PEP 563][]. All these numbers mean something. We swear. Since all horror stories start with two nondescript teens in a Buick, let's start there:

from __future__ import annotations

That's [PEP 563][]. And... that's now deprecated. PEP 749 officially deprecated PEP 563 a few months ago:

Sometime after the last release that did not support PEP 649 semantics (expected to be 3.13) reaches its end-of-life, from __future__ import annotations is deprecated. Compiling any code that uses the future import will emit a DeprecationWarning. This will happen no sooner than the first release after Python 3.13 reaches its end-of-life, but the community may decide to wait longer.
After at least two releases, the future import is removed, and annotations are always evaluated as per PEP 649. Code that continues to use the future import will raise a SyntaxError, similar to any other undefined future import.

tl;dr: On October ~15th 2029, from __future__ import annotations will be officially deprecated. On October ~15th 2031, from __future__ import annotations will be removed entirely from the Python language. At that time, any module using from __future__ import annotations will raise a SyntaxError at importation time and thus become unimportable. In 2025, nobody should enable from __future__ import annotations voluntarily.

Sometime over the next several five years, you and your righteous dev team will require Python ≥ 3.14 as a mandatory dependency. That's just the way of the Python world. Planned obsolesce is the road we walk. When that happens, you'll no longer need from __future__ import annotations to declare forward references to undefined types in type hints like this:

# Look, Ma! No "from __future__ import annotations".
# We don't need the future where we're going.
from beartype import beartype

# Under Python ≥ 3.14, this just works. You annotated a function as accepting

# an instance of a type you haven't even declared yet. Yet, this is now fine.
# @&#8203;beartype accepts you and your suspicious code for you who are.
@&#8203;beartype
def useless_func(forward_reference_to_undefined_type: ThisJustWorksNow) -> ThisJustWorksNow:
    return forward_reference_to_undefined_type

# Of course, you *DO* have to eventually define the undefined type used above.

# If you don't, everything will still blow up. It's not @&#8203;beartype's fault.
# Python 3.14 made us do it... We blame Guido.
class ThisJustWorksNow(object):
    pass

Unquoted forward references are thus baked into Python 3.14. Order of type hints and types is no longer significant. Define and annotate stuff in any order you like.

@​beartype 0.22.2: because life is too short and code is too long.

@​beartype: always ready to rip its shirt off at the slightest provocation

Large Language Models: Apparently, They're Large

@​beartype 0.22.2 now ships with out-of-the-box support for Bad Boy LLM APIs that defy community standards, mental health, and your last hair follicles. This includes:

  • LangChain, the 500lb gorilla of the LLM space. We all know it. Some of us shake our fist at it. Many of us prostrate ourselves before it in mute supplication. But all of us must admit... LangChain changed the world. Even if everybody now tries to pretend that only LangGraph exists, LangChain still exists underneath it all – lurking in the grimy shadows with a sinister leer plastered across its placid facade. 🧟
  • FastMCP, the LangChain of the Model Context Protocol (MCP) world. None of this makes sense. Even I no longer know what I'm talking about. Just pretend you too know what the increasingly nonsensical alphabet soup of AI-ML-LLM hype train jargon means. Everyone, let us fake it until our resume says we make it. 🚆
  • Celery. Yeah, yeah. Technically, Celery is larger than AI life. It's the Pythonic task queue on massively parallelized compute nodes. Pragmatically, though, even Celery has rapidly pivoted its previously Django-centric worldview towards the sweeter and more fulfilling world of AI hype. I just wish they'd chosen a more delicious vegetable as their nom de plume. I mean... celery? That stuff's disgusting – and I'm a vegan, sometimes occasionally even by choice. 🥗

These APIs are awesome


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot added the dependencies Pull requests that update a dependency file label Mar 5, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 58f409d to 062d899 Compare March 9, 2025 04:30
@renovate renovate bot changed the base branch from main to beta March 9, 2025 04:30
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 062d899 to 5d6be96 Compare March 9, 2025 05:33
@renovate renovate bot changed the base branch from beta to main March 9, 2025 05:33
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 5d6be96 to b67c499 Compare March 21, 2025 17:08
@renovate renovate bot changed the title fix(deps): update dependency beartype to >=0.20.0,<0.21.0 fix(deps): update dependency beartype to >=0.20.1,<0.21.0 Mar 21, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from b67c499 to d1581b6 Compare March 22, 2025 19:37
@renovate renovate bot changed the title fix(deps): update dependency beartype to >=0.20.1,<0.21.0 fix(deps): update dependency beartype to >=0.20.2,<0.21.0 Mar 22, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from d1581b6 to 104fbf8 Compare April 12, 2025 07:41
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 104fbf8 to 1aec2d0 Compare May 24, 2025 08:21
@renovate renovate bot changed the title fix(deps): update dependency beartype to >=0.20.2,<0.21.0 fix(deps): update dependency beartype to >=0.21.0,<0.22.0 May 24, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 1aec2d0 to 5689ca7 Compare August 15, 2025 07:59
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 5689ca7 to 4575db7 Compare August 23, 2025 07:19
@renovate renovate bot changed the title fix(deps): update dependency beartype to >=0.21.0,<0.22.0 chore(deps): update dependency beartype to >=0.21.0,<0.22.0 Aug 23, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 4575db7 to 17a89c8 Compare August 24, 2025 19:12
@renovate renovate bot changed the title chore(deps): update dependency beartype to >=0.21.0,<0.22.0 fix(deps): update dependency beartype to >=0.21.0,<0.22.0 Aug 24, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 17a89c8 to d0bb87b Compare September 17, 2025 03:26
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from d0bb87b to 3b8c867 Compare October 5, 2025 06:58
@renovate renovate bot changed the title fix(deps): update dependency beartype to >=0.21.0,<0.22.0 fix(deps): update dependency beartype to >=0.22.2,<0.23.0 Oct 5, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 3b8c867 to 3be6363 Compare October 25, 2025 16:04
@renovate renovate bot changed the title fix(deps): update dependency beartype to >=0.22.2,<0.23.0 fix(deps): update dependency beartype to >=0.22.3,<0.23.0 Oct 25, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 3be6363 to 95b6196 Compare October 27, 2025 00:13
@renovate renovate bot changed the title fix(deps): update dependency beartype to >=0.22.3,<0.23.0 fix(deps): update dependency beartype to >=0.22.4,<0.23.0 Oct 27, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 95b6196 to 686f340 Compare November 2, 2025 03:52
@renovate renovate bot changed the title fix(deps): update dependency beartype to >=0.22.4,<0.23.0 fix(deps): update dependency beartype to >=0.22.5,<0.23.0 Nov 2, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 686f340 to 4796d38 Compare November 22, 2025 08:08
@renovate renovate bot changed the title fix(deps): update dependency beartype to >=0.22.5,<0.23.0 fix(deps): update dependency beartype to >=0.22.6,<0.23.0 Nov 22, 2025
@renovate renovate bot force-pushed the renovate/beartype-0.x branch from 4796d38 to 3a4e918 Compare November 29, 2025 11:03
@renovate renovate bot changed the title fix(deps): update dependency beartype to >=0.22.6,<0.23.0 fix(deps): update dependency beartype to >=0.22.7,<0.23.0 Nov 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant