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

Toilal / rebulk
96%
master: 97%

Build:
Build:
LAST BUILD BRANCH: docs/zensical-site
DEFAULT BRANCH: master
Repo Added 05 Sep 2015 09:44AM UTC
Files 17
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

LAST BUILD ON BRANCH perf/extend-safe-set
branch: perf/extend-safe-set
CHANGE BRANCH
x
Reset
  • perf/extend-safe-set
  • 0.5.0
  • 0.6.0
  • 0.6.1
  • 0.6.2
  • 0.6.3
  • 0.6.4
  • 0.6.5
  • 0.7.0
  • 0.7.1
  • 0.7.2
  • 0.7.3
  • 0.7.4
  • 0.7.5
  • 0.7.6
  • 0.7.7
  • 0.8.1
  • 0.8.2
  • 0.9.0
  • 1.0.0
  • 1.0.1
  • 2.0.0
  • 2.0.0b1
  • 2.0.1
  • chain
  • chore/cleanup-toposort
  • chore/remove-dead-code
  • chore/tooling-coverage-mypy
  • chore/uv-ruff-mypy-migration
  • deprecation-warnings
  • develop
  • docs
  • docs/functional-properties-check-keys
  • docs/v5-design
  • docs/zensical-site
  • feat/check-unused-declared-keys
  • feat/declared-keys-contract-check
  • feat/declared-keys-output-projection
  • feat/key-formatter
  • feat/named-variadic
  • feat/to-dict-typing
  • feat/typed-keys-children
  • feat/typed-keys-poc
  • feat/typed-query-overloads
  • feat/unify-key-param
  • feature/introspector
  • feature/upgrade-dependencies
  • fix/chain-sort-before-groupby
  • fix/declared-keys-skip-private
  • fix/key-reject-structured-types
  • fix/match-hash-stable
  • main
  • markers
  • master
  • perf/cache-getfullargspec
  • py35
  • python-3.12-support
  • python-3.6
  • python2.6
  • refactor/chainpart-typing
  • refactor/decouple-chain-builder
  • refactor/pattern-dry
  • regex-fixes
  • rules
  • semantic-release
  • toposort
  • v0.0.1
  • v0.1.0
  • v0.2.0
  • v0.2.1
  • v0.3.0
  • v0.4.0
  • v0.4.1
  • wip

28 Jun 2026 08:46AM UTC coverage: 96.152% (+0.02%) from 96.137%
28316926455

push

github

Toilal
perf(utils): set-based membership in extend_safe with unhashable fallback

extend_safe deduplicates patterns and rules on every matches() call (guessit
nests ~20 rebulks), so the O(n*m) linear membership was a small but real cost
on the hot path. Use a set for O(1) lookups when elements are hashable, and
fall back to linear membership when they are not -- the introspector feeds it
arbitrary (possibly unhashable) property values, which the naive set version
would crash on.

Reworked from #30 (added the hashability fallback + tests, incl. the
mid-loop fallback case).

Co-authored-by: allrob23 <allrob23@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

10 of 10 new or added lines in 1 file covered. (100.0%)

1799 of 1871 relevant lines covered (96.15%)

13.43 hits per line

Relevant lines Covered
Build:
Build:
1871 RELEVANT LINES 1799 COVERED LINES
13.43 HITS PER LINE
Source Files on perf/extend-safe-set
  • Tree
  • List 17
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
28316926455 perf/extend-safe-set perf(utils): set-based membership in extend_safe with unhashable fallback extend_safe deduplicates patterns and rules on every matches() call (guessit nests ~20 rebulks), so the O(n*m) linear membership was a small but real cost on the hot path. ... push 28 Jun 2026 08:46AM UTC Toilal github
96.15
See All Builds (485)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc