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
- I will officially publish at least one release candidate on PyPI.
- 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. 🥲
- I will wait several days for the radioactive fallout to subside.
- Assuming no issues or regressions arise, ...lolbro I will officially publish a new major version.
- Else:
- 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.
- I will recursively return back in time to step 1. by releasing yet another release candidate.
- 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:
- Support no-GIL, GIL-free multi-threading via the PEP 703-compliant
--disable-gil
compile-time option. Yes! YES! YEEEEEEESSSSS!!!! Wait. Where am I? What are these fingers on this keyboard? This must be what good dreams are typed of. - Support an official LLVM-based Just-in-Time (JIT) compiler via the PEP 744-compliant
--enable-experimental-jit
compile-time option. OMMMMMMMMMMMMMMMMG..... It's happening. It's really happening. My breathing is now laboured and making awkwardly squishy noises that upset the cat.
- Support no-GIL, GIL-free multi-threading via the PEP 703-compliant
- 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 thecollections.abc.Collection
protocol with guaranteedO(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 allbeartype.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. 😬
- The third-party
- 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:
- @sesco-llc (SESCO Enterprises), "The Power of Innovation in Trading": this inspires me to get out of the house and do something
https://sescollc.com - @DylanModesitt (Dylan Modesitt), quantitative strategies energy trading associate: ...wikipedia, don't fail me now!
https://dylanmodesitt.com - @tactile-metrology (Tactile Metrology), "Software and hardware that you can touch." When I want to be touched by software and hardware, I call @tactile-metrology:
https://metrolo.gy imagine if this domain actually worked. how cool would that be!?
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