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

XENONnT / fuse / 28634797171 / 3
73%
main: 73%

Build:
DEFAULT BRANCH: main
Ran 03 Jul 2026 02:58AM UTC
Files 52
Run time 1s
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

03 Jul 2026 02:39AM UTC coverage: 72.913% (-0.7%) from 73.569%
28634797171.3

push

github

web-flow
perf(pmt_afterpulses): two-pass numba scheme for photon_afterpulse (#385)

* perf(pmt_afterpulses): two-pass numba scheme for photon_afterpulse

Replace the per-element Python orchestration inside `photon_afterpulse`
(per-element numpy ops: scale rU0, fancy-index prob_ap, compute selection
mask, gather selected channels, argmin-based inverse CDF) with a two-pass
numba scheme:

  Pass 1 — `_ap_select_kernel`: one tight loop over N rows that scales
    rU0 in place by the per-element modifier (halving the DPE entries),
    compares against the per-channel probability ceiling, and emits the
    indices that pass the selection plus the running max for the > 0.5
    warning check. Eliminates the per-element numpy intermediates.

  Pass 2 — `_ap_kernel_nonuniform`: two register-resident O(K) scans per
    selected photon (one over the delay-time CDF, one over the amplitude
    CDF). Replaces the broadcast-+-argmin pattern that materialised an
    (N_sel, K) intermediate per call. The amplitude CDF is sometimes 1D
    and sometimes 2D — both shapes are passed unconditionally and the
    kernel branches on a flag, because numba does not accept a parameter
    whose rank varies per call.

All `rng.random` and `rng.uniform` draws stay in Python in the same
order, with the same argument shapes and the same conditional skips on
empty selections — so the PCG64 sequence is preserved exactly.

Bit-identical to vanilla on `pmt_afterpulses`: every per-row float op
(scalar division, halving, comparison, argmin) follows the same IEEE-754
sequence as the equivalent numpy expression.

Result on K40-class workloads: ~1.4-1.7x reduction in the PMTAfterPulses
plugin's wall time across ER backgrounds and Pb212.

* ci(pre-commit): pin docformatter to python3.12

pre-commit.ci runs hook environments under python3.14 by default.
docformatter v1.7.7's transitive dependency `untokenize 0.1.1` uses
`ast.Constant.s`, an attribute removed in python3.14, so the install
fails when pre-... (continued)

2751 of 3773 relevant lines covered (72.91%)

0.73 hits per line

Source Files on job 28634797171.3
  • Tree
  • List 52
  • Changed 3
  • Source Changed 0
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Build 28634797171
  • 04390c17 on github
  • Prev Job for on main (#28584799675.1)
  • Delete
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