github beartype/beartype v0.19.0rc0
Beartype 0.19.0 Release Candidate 0: When Zero Means Something

pre-release6 days ago

Welcome. Welcome, one and all bearthonistas, to the Bear Beta Fan Club. Congrats. You're reading this, so you're automatically in the club. Everyone who has submitted an issue in the last year has been pinged onto this announcement. If you hate @beartype or love @beartype but hate your codebase, simply unsubscribe from this announcement and watch as your codebase burns against the night sky. It's fine. "The burning means it works!", you tell your coworkers.

Beartype 0.19.0 Release Candidate 0 is the inaugural publication of @beartype's first of many painfully broken well-tested pre-releases. If you or someone you love uses @beartype, consider manually upgrading to this pre-release and reporting all painful breakage to your nearest @beartype issue tracker. Note that installing pre-release versions with pip requires manually passing the --pre option on the command-line:

pip install --upgrade --pre beartype  # <-- LET THE THUNDER AND THE HEADS ROLL

You may now be thinking:

"What is this eldritch darkness in my GitHub feed?"

Allow QA-Daddy @leycec to now gently exhaust you on a Friday evening.


Bear Beta Fan Club members pass out from general excitement

@beartype Beta Releases: The Becommoning

@beartype 0.18.0 broke the entire world. @leycec can now admit that to himself while clutching his Maine Coon teddy cat. If your codebase survived @beartype 0.18.0, you deserve an "I Survived @beartype 0.18.0 and All I Got Was This Lousy Badge" badge. The ill-fated @beartype 0.18.0 release cycle that nearly broke my fingers taught me many things: suffering, pain, agony, blah, blah... You know. Just the standard stuff, really.

@beartype 0.18.0 taught me that @beartype has become a lot bigger than me. Other people and people-like AI that are doing meaningful things with their lives and synthetic lives (respectively) now depend on new @beartype releases not throwing up all over everybody.

@beartype ≥ 0.19.0 intends to avoid that throw-up. Several days before releasing any new major version like 0.19.0, 0.20.0, or 0.21.0: ...we see the number sequence I trust

  1. I will officially publish at least one release candidate on PyPI.
  2. Everyone in the Bear Beta Fan Club (...the pro bono lawyers say this means you) will be encouraged to download, install, and exercise this release candidate against your downstream use cases, codebases, apps, APIs, workflows, and test suites. Those who fail to do this will be mocked as their code burns against the night sky. I mock them even as I cry a little. 🥲
  3. I will wait several days for the radioactive fallout to subside.
  4. Assuming no issues or regressions arise, ...lolbro I will officially publish a new major version.
  5. Else:
    1. I will resolve all issues and regressions that arise like red-headed dolls clutching sharp implements. Night of the Living QA: The Bear is Baaaaaack.
    2. I will recursively return back in time to step 1. by releasing yet another release candidate.
  6. Repeat as needed for pain.

Basically, I'm just doing standard beta releases now. That's all I had to say. Instead, I laboriously enumerated a workflow that doesn't really make sense when you squint at it. Oh, well. This too was wasted time.

The sins of the fathers must never be repeated. Never forget @beartype 0.18.0! Never forgive @leycec! Wait. Shouldn't @leycec be forgiven already at some point!? <-- dat poor guy


Bear Beta Fan Club members have no one to blame but @leycec

@beartype 0.19.0: What Broke This Time?

A whole lot, probably. @beartype 0.19.0:

  • Officially supports Python 3.13, the first official CPython release to:
  • Embraces PEP 517 and 621 by refactoring the @beartype build system from setuptools + setup.py 🤮 to Hatch + pyproject.toml 🥂 . It went great, actually. Thanks for asking. I highly recommend Hatch for all projects – new and old. It's like Rust's Cargo, only Python. It actually works, unlike everything else. Hatch: because you're too bald to fight with Python anymore. Caveat emptor:
    • For most users, this doesn't matter. Celebrate.
    • For package maintainers like @harens (...I'm so sorry), this means that all third-party @beartype packages in the wild now need to be manually bumped to depend on Hatch (rather than setuptools) at build time. If your packaging ecosystem also packages Hatch, this is trivial. Else, I sympathize with your growing toothache but can do nothing for you. Emoji man sighs. 😮‍💨
  • Deeply O(1) type-checks a ton of fun containers I've loosely categorized as reiterables (i.e., collections satisfying the collections.abc.Collection protocol with guaranteed O(1) read-only access to only the first collection item). Reiterables include sets, frozen sets, dictionary views, deques (i.e., double-ended queues), and all other containers matched by one or more of the following PEP 484- or 585-compliant type hints:
    • frozenset[...].
    • set[...].
    • collections.deque[...].
    • collections.abc.Collection[...].
    • collections.abc.KeysView[...].
    • collections.abc.MutableSet[...].
    • collections.abc.Set[...].
    • collections.abc.ValuesView[...].
    • typing.AbstractSet[...].
    • typing.Collection[...].
    • typing.Deque[...].
    • typing.FrozenSet[...].
    • typing.KeysView[...].
    • typing.MutableSet[...].
    • typing.Set[...].
    • typing.ValuesView[...].
  • Supports the @equinox.filter_jit and @jax.jit decorators. In fact, @beartype now generically supports all pseudo-callable wrapper objects (i.e., objects defining both the __call__() and __wrapped__ dunder attributes). The @beartype decorator may now be chained (i.e., listed) either below or above the third-party @equinox.filter_jit and @jax.jit decorators. Since all beartype.claw import hooks (e.g., beartype.claw.beartype_this_package()) forcefully chain @beartype above all other decorators, all @beartype import hooks now transparently support:
    • The third-party @equinox.filter_jit decorator.
    • The third-party @jax.jit decorator.
    • All other third-party decorators creating and returning similar pseudo-callable wrapper objects... probably. 😬
  • Refactors our GitHub Actions release workflow away from its prior usage of antiquated (and unsurprisingly insecure) tokens to PyPI-specific "Trusted Publishers" (i.e., PyPI's modern implementation of OpenID Connect (OIDC)). Therefore:
    • In theory, doing so should resolve the current plethora of "Unverified details" that currently pollutes @beartype's PyPI project page. We're not unverified, PyPI! You're unverified.
    • In practice, doing so will almost certainly change nothing and thus have no benefit whatsoever. Indeed, doing so will probably prevent our entire release workflow from behaving as expected – further squandering scarce open-source volunteerism for no particularly good reason whatsoever. Bureaucracy: "What is it good for when @leycec could just be playing video games about robot assassins who insist they meant well instead?"
  • Resolves critical bugs, blah, blah. Who cares. I'm tired. So are you.


Bear Beta Fan Club member after going --disable-gil + --enable-experimental-jit

Last but never least, the most important part...

GitHub Sponsors: They Scratch the Bear's Back. Now, The Bear Scratches Back.

This release comes courtesy these proud GitHub Sponsors, without whom @leycec's cats would currently be eating grasshoppers:

Thanks so much, masters of fintech and metrology.


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

You. Are. Bear Beta Fan Club.

Announcing the Bear Beta Fan Club from the ashes of our issue tracker:

@posita, @wesselb, @iamrecursion, @patrick-kidger, @langfield, @JelleZijlstra, @RobPasMue, @GithubCamouflaged, @kloczek, @uriyasama, @danielgafni, @JWCS, @rbroderi, @AlanCoding, @tvdboom, @crypdick, @jvesely, @komodovaran, @kaparoo, @MaximilienLC, @fleimgruber, @EtaoinWu, @alexoshin, @gabrieldemarmiesse, @James4Ever0, @NLPShenanigans, @rtbs-dev, @yurivict, @st--, @murphyk, @dosisod, @Rogdham, @alisaifee, @denisrosset, @damarro3, @ruancomelli, @jondequinor, @harshita-gupta, @jakebailey, @denballakh, @jaanli, @creatorrr, @msvensson222, @avolchek, @femtomc, @AdrienPensart, @jakelongo, @Artur-Galstyan, @ArneBachmann, @danielward27, @WeepingClown13, @rbnhd, @radomirgr, @rwiegan, @brettc, @spagdoon0411, @helderco, @paulwouters, @jamesbraza, @dcharatan, @kasium, @AdrienPensart, @sunildkumar, @peske, @mentalisttraceur, @awf, @PhilipVinc, @dcharatan, @empyrealapp, @rlkelly, @KyleKing, @skeggse, @RomainBrault


unsure what's happening here but it kinda don't seem right

Don't miss a new beartype release

NewReleases is sending notifications on new releases.