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

int-brain-lab / ibleatools / 39943909716
51%

Build:
DEFAULT BRANCH: main
Ran 23 Oct 2026 11:11AM UTC
Jobs 1
Files 66
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

23 Oct 2026 11:07AM UTC coverage: 49.203% (+0.4%) from 48.793%
39943909716

push

github

web-flow
Adding methods to run feature aggregation and denoising over multiple snippets (#152)

* Add multi-snippet aggregated features for every feature calculator

get_snippet_start_times spreads snippet start times over a recording
(stratified or linspace) and checks that the snippets do not overlap.
compute_aggregated_features runs compute_snippet on each window, then
aggregates the snippets with the existing aggregation pipeline
(per-channel median, denoising, waveform remap).
BaseFeatureCalculator.compute_denoised_features combines both, so every
calculator subclass gets it.

* Add attributes to the output df

* Open NWB recordings with read_nwb_recording (spikeinterface >= 0.105)

* Drop open readers when pickling SpikeGLX-like and LFPack calculators

Once a reader was opened (e.g. by available_duration), the calculator held an open .cbin file handle or h5py file and could not be pickled, so joblib runs with n_jobs > 1 failed. __getstate__ now pickles the readers as None and each worker reopens them on first use. IBLPIDFeatureCalculator still cannot be pickled (its ONE client): its docstring says to use n_jobs=1.

* Split out aggregate_snippets and record snippet windows and versions

  aggregate_snippets(results) aggregates snippets already computed by compute_snippet (per-channel median, denoising, waveform remap), so snippets can be added one at a time, e.g. for a future online (FIFO) version. compute_aggregated_features now calls it. df.attrs holds the snippet windows (with pid), features_version, and the ibleatools version, git commit and dirty flag. Snippet start times are whole seconds, kept as floats. Also now if channel_labels is not available, then they are marked as good channels

* Add example for multi-snippet denoised features

* Remove stale scratch_dir TODO

* Updated CHANGELOG

4723 of 9599 relevant lines covered (49.2%)

0.49 hits per line

Coverage Regressions

Lines Coverage ∆ File
34
90.16
0.0% features.py
15
92.31
1.3% feature_calculators/base.py
13
72.37
0.0% feature_calculators/ibl.py
9
89.25
0.0% feature_calculators/nwb.py
4
86.23
0.31% aggregation.py
Jobs
ID Job ID Ran Files Coverage
1 39943909716.1 23 Oct 2026 11:11AM UTC 66
49.2
GitHub Action Run
Source Files on build 39943909716
  • Tree
  • List 66
  • Changed 9
  • Source Changed 0
  • Coverage Changed 9
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #39943909716
  • 483d3e17 on github
  • Prev Build on main (#39942347210)
  • Next Build on main (#39982562539)
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