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

XENONnT / fuse / 28634797171
73%

Build:
DEFAULT BRANCH: main
Ran 03 Jul 2026 02:52AM UTC
Jobs 4
Files 52
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

03 Jul 2026 02:39AM UTC coverage: 73.125% (-0.8%) from 73.974%
28634797171

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)

47 of 100 new or added lines in 1 file covered. (47.0%)

2 existing lines in 1 file now uncovered.

2759 of 3773 relevant lines covered (73.12%)

2.91 hits per line

Uncovered Changes

Lines Coverage ∆ File
53
64.6
-27.8% fuse/plugins/pmt_and_daq/pmt_afterpulses.py

Coverage Regressions

Lines Coverage ∆ File
2
64.6
-27.8% fuse/plugins/pmt_and_daq/pmt_afterpulses.py
Jobs
ID Job ID Ran Files Coverage
1 28634797171.1 03 Jul 2026 02:52AM UTC 52
72.73
GitHub Action Run
2 28634797171.2 03 Jul 2026 02:52AM UTC 52
72.73
GitHub Action Run
3 28634797171.3 03 Jul 2026 02:58AM UTC 52
72.91
GitHub Action Run
4 28634797171.4 03 Jul 2026 02:58AM UTC 52
72.91
GitHub Action Run
Source Files on build 28634797171
  • Tree
  • List 52
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 04390c17 on github
  • Prev Build on main (#28584799675)
  • 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