• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

aio-libs / multidict / 36342961613
86%

Build:
DEFAULT BRANCH: master
Ran 27 Sep 2026 07:04PM UTC
Jobs 1
Files 45
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

27 Sep 2026 07:03PM UTC coverage: 87.217%. Remained the same
36342961613

push

github

web-flow
Keep view, iterator and init code off the inlining budget (#1614)

<!-- Thank you for your contribution! -->

## What do these changes do?

With GCC 13, which CI and CodSpeed build with, `md_calc_identity()` fell
out of line in `getall()` and `md_contains()` on free-threaded builds,
and `md_contains()` fell out of `keys().isdisjoint()` on regular ones
(the two failures #1612 reports). This keeps code whose speed does not
matter off GCC's inlining budget, and forces the one helper that does
inline:

- `md_contains()` loses its `pret` argument. The keys view `&` and `-`
operators, the only users of the stored key, call a new `NOINLINE
md_find_key()` instead.
- Every view and iterator slot and method, and every function run only
at module init (`multidict_views_init`, `multidict_iter_init`,
`istr_init`, `htkeys_pools_init`, `pool_init`, `new_capsule`), is
`NOINLINE`.
- `md_calc_identity()` is `ALWAYS_INLINE`.

The pure-Python implementation has no equivalent and is unchanged.

## Are there changes in behavior for the user?

No, only speed. Measured with callgrind on GCC 13, instructions per
operation against master: free-threaded `del d[key]` -7.9% (`MultiDict`)
and -7.5% (`CIMultiDict`), `key in d` -3.8% and -6.1%, `CIMultiDict`
`d[key]` -2.1%; regular `update()` -3.6% and -3.5%. The worst
regressions are +0.9% on free-threaded `MultiDict.update()` and +0.5% to
+0.8% on regular `key in d`. Geomean over 52 cells: -0.28% regular,
-0.66% free-threaded.

## Is it a substantial burden for the maintainers to support this?

No.

## Related issue number

Related to #1612

## Checklist

- [x] I think the code is well written
- [ ] Unit tests for the changes exist (N/A, no behavior change; covered
by the existing suite)
- [x] Documentation reflects the changes
- [ ] If you provide code modification, please add yourself to
`CONTRIBUTORS.txt` (N/A)
- [x] Add a new news fragment into the `CHANGES/` folder
- [x] `make doc-spelling` passes and any new technical words ... (continued)

781 of 1562 branches covered (50.0%)

Branch coverage included in aggregate %.

8430 of 8999 relevant lines covered (93.68%)

1.87 hits per line

Jobs
ID Job ID Ran Files Coverage
1 MyPy - 36342961613.1 27 Sep 2026 07:04PM UTC 90
87.22
GitHub Action Run
Source Files on build 36342961613
  • Tree
  • List 45
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #36342961613
  • fe0c53bf on github
  • Prev Build on master (#36340231354)
  • Next Build on master (#36348057864)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc