Skip to content

feat: add SigMFReader for .sigmf-data/.sigmf-meta file pairs (closes #282) - #463

Open
easton-ring wants to merge 80 commits into
TorchDSP:mainfrom
techring-live:feat/sigmf-reader
Open

feat: add SigMFReader for .sigmf-data/.sigmf-meta file pairs (closes #282)#463
easton-ring wants to merge 80 commits into
TorchDSP:mainfrom
techring-live:feat/sigmf-reader

Conversation

@easton-ring

Copy link
Copy Markdown

Summary

Adds SigMFReader(FileReader) and SigMFFileHandler(BaseFileHandler) to torchsig.utils.file_handlers, enabling users to load .sigmf-data + .sigmf-meta file pairs as TorchSig datasets via StaticTorchSigDataset.

Closes #282.

What's new

  • torchsig/utils/file_handlers/sigmf.py — new SigMFReader + SigMFFileHandler
    • Supports 9 SigMF datatypes: cf32_le/be, cf64_le, ci32_le/be, ci16_le/be, ci8, cu8
    • Output always np.complex64
    • No import sigmf dependency — JSON parsed directly (avoids >2 GB memmap limitation)
    • Handles both .sigmf-meta and .sigmf-data.sigmf-meta naming conventions
    • Multi-channel (core:num_channels > 1) raises NotImplementedError with a clear message
  • torchsig/utils/file_handlers/__init__.pySigMFReader, SigMFFileHandler added to exports
  • tests/utils/test_sigmf_reader.py — 25 tests covering dtype handling, indexing, metadata mapping, StaticTorchSigDataset integration, and SigMFFileHandler
  • examples/bring_your_own_data_sigmf_example.ipynb — updated to use the new SigMFReader import; inline class definition removed; multi-file usage cell added

Usage

from torchsig.datasets.static_dataset import StaticTorchSigDataset
from torchsig.utils.file_handlers import SigMFReader

dataset = StaticTorchSigDataset(
    root="./my_captures/",
    file_handler_class=SigMFReader,
    target_labels=["class_name"],
)
data, label = dataset[0]   # → (np.ndarray shape (N,) complex64, "elrs")

Test plan

  • pytest tests/utils/test_sigmf_reader.py -v — 25 tests pass, 0 failures
  • pytest tests/ -x -q — full suite passes, 0 regressions
  • pylint --rcfile=.pylintrc torchsig/utils/file_handlers/sigmf.py tests/utils/test_sigmf_reader.py — both score 10.00/10
  • Notebook executes top-to-bottom twice without errors (idempotent)
  • python -c "import torchsig; print(torchsig.__version__)"2.1.2
  • No import sigmf anywhere in torchsig/utils/file_handlers/sigmf.py

pvallance and others added 30 commits September 5, 2024 02:09
	modified:   ../examples/00_example_sig53_dataset.ipynb
	modified:   ../examples/01_example_modulations_dataset.ipynb
	modified:   ../examples/02_example_sig53_classifier.ipynb
	modified:   ../examples/03_example_widebandsig53_dataset.ipynb
	modified:   ../examples/04_example_wideband_modulations_dataset.ipynb
	modified:   ../examples/05_example_wideband_yolo_to_disk.ipynb
	new file:   examples/detect.pt
	renamed:    gr-spectrumdetect/examples/example.grc -> examples/example.grc
	new file:   examples/generate.sh
	renamed:    gr-spectrumdetect/examples/generate_wideband_sig53.py -> examples/generate_wideband_sig53.py
	renamed:    gr-spectrumdetect/examples/make_wbsig53_yolo_dataset_impaired_train.py -> examples/make_wbsig53_yolo_dataset_impaired_train.py
	renamed:    gr-spectrumdetect/examples/make_wbsig53_yolo_dataset_impaired_train_scipy.py -> examples/make_wbsig53_yolo_dataset_impaired_train_scipy.py
	renamed:    gr-spectrumdetect/examples/make_wbsig53_yolo_dataset_impaired_val.py -> examples/make_wbsig53_yolo_dataset_impaired_val.py
	renamed:    gr-spectrumdetect/examples/make_wbsig53_yolo_dataset_impaired_val_scipy.py -> examples/make_wbsig53_yolo_dataset_impaired_val_scipy.py
	renamed:    gr-spectrumdetect/examples/make_yolo.sh -> examples/make_yolo.sh
	renamed:    gr-spectrumdetect/examples/train.sh -> examples/train.sh
	renamed:    gr-spectrumdetect/examples/verify_yolo_dataset_plot.py -> examples/verify_yolo_dataset_plot.py
	renamed:    gr-spectrumdetect/examples/wbsig53.yaml -> examples/wbsig53.yaml
	deleted:    gr-spectrumdetect/CMakeLists.txt
	deleted:    gr-spectrumdetect/Dockerfile
	deleted:    gr-spectrumdetect/MANIFEST.md
	deleted:    gr-spectrumdetect/apps/CMakeLists.txt
	deleted:    gr-spectrumdetect/build_docker.sh
	deleted:    gr-spectrumdetect/cmake/Modules/CMakeParseArgumentsCopy.cmake
	deleted:    gr-spectrumdetect/cmake/Modules/gnuradio-spectrumDetectConfig.cmake
	deleted:    gr-spectrumdetect/cmake/Modules/targetConfig.cmake.in
	deleted:    gr-spectrumdetect/cmake/cmake_uninstall.cmake.in
	deleted:    gr-spectrumdetect/docs/CMakeLists.txt
	deleted:    gr-spectrumdetect/docs/README.spectrumDetect
	deleted:    gr-spectrumdetect/docs/doxygen/CMakeLists.txt
	deleted:    gr-spectrumdetect/docs/doxygen/Doxyfile.in
	deleted:    gr-spectrumdetect/docs/doxygen/doxyxml/__init__.py
	deleted:    gr-spectrumdetect/docs/doxygen/doxyxml/base.py
	deleted:    gr-spectrumdetect/docs/doxygen/doxyxml/doxyindex.py
	deleted:    gr-spectrumdetect/docs/doxygen/doxyxml/generated/__init__.py
	deleted:    gr-spectrumdetect/docs/doxygen/doxyxml/generated/compound.py
	deleted:    gr-spectrumdetect/docs/doxygen/doxyxml/generated/compoundsuper.py
	deleted:    gr-spectrumdetect/docs/doxygen/doxyxml/generated/index.py
	deleted:    gr-spectrumdetect/docs/doxygen/doxyxml/generated/indexsuper.py
	deleted:    gr-spectrumdetect/docs/doxygen/doxyxml/text.py
	deleted:    gr-spectrumdetect/docs/doxygen/other/doxypy.py
	deleted:    gr-spectrumdetect/docs/doxygen/other/group_defs.dox
	deleted:    gr-spectrumdetect/docs/doxygen/other/main_page.dox
	deleted:    gr-spectrumdetect/docs/doxygen/pydoc_macros.h
	deleted:    gr-spectrumdetect/docs/doxygen/update_pydoc.py
	deleted:    gr-spectrumdetect/examples/generate.sh
	deleted:    gr-spectrumdetect/grc/CMakeLists.txt
	deleted:    gr-spectrumdetect/grc/spectrumDetect_specDetect.block.yml
	deleted:    gr-spectrumdetect/grc/spectrumDetect_spectrumPlot.block.yml
	deleted:    gr-spectrumdetect/include/gnuradio/spectrumDetect/CMakeLists.txt
	deleted:    gr-spectrumdetect/include/gnuradio/spectrumDetect/api.h
	deleted:    gr-spectrumdetect/lib/CMakeLists.txt
	deleted:    gr-spectrumdetect/python/spectrumDetect/.gitignore
	deleted:    gr-spectrumdetect/python/spectrumDetect/CMakeLists.txt
	deleted:    gr-spectrumdetect/python/spectrumDetect/__init__.py
	deleted:    gr-spectrumdetect/python/spectrumDetect/bindings/CMakeLists.txt
	deleted:    gr-spectrumdetect/python/spectrumDetect/bindings/README.md
	deleted:    gr-spectrumdetect/python/spectrumDetect/bindings/bind_oot_file.py
	deleted:    gr-spectrumdetect/python/spectrumDetect/bindings/docstrings/README.md
	deleted:    gr-spectrumdetect/python/spectrumDetect/bindings/header_utils.py
	deleted:    gr-spectrumdetect/python/spectrumDetect/bindings/python_bindings.cc
	deleted:    gr-spectrumdetect/python/spectrumDetect/rxTime.py
	deleted:    gr-spectrumdetect/python/spectrumDetect/specDetect.py
	deleted:    gr-spectrumdetect/python/spectrumDetect/spectrumPlot.py
	deleted:    gr-spectrumdetect/run_docker.sh
	modified:   ../scripts/generate_sig53.py
	modified:   ../scripts/generate_wideband_sig53.py
	modified:   ../scripts/test_generate_sig53_scripts.py
	modified:   ../scripts/test_generate_wideband_sig53_scripts.py
	modified:   ../torchsig/datasets/wideband.py
	modified:   ../torchsig/utils/writer.py
	new file:   CMakeLists.txt
	new file:   Dockerfile
	new file:   MANIFEST.md
	new file:   apps/CMakeLists.txt
	new file:   build_docker.sh
	new file:   cmake/Modules/CMakeParseArgumentsCopy.cmake
	new file:   cmake/Modules/gnuradio-spectrumDetectConfig.cmake
	new file:   cmake/Modules/targetConfig.cmake.in
	new file:   cmake/cmake_uninstall.cmake.in
	new file:   docs/CMakeLists.txt
	new file:   docs/README.spectrumDetect
	new file:   docs/doxygen/CMakeLists.txt
	new file:   docs/doxygen/Doxyfile.in
	new file:   docs/doxygen/doxyxml/__init__.py
	new file:   docs/doxygen/doxyxml/base.py
	new file:   docs/doxygen/doxyxml/doxyindex.py
	new file:   docs/doxygen/doxyxml/generated/__init__.py
	new file:   docs/doxygen/doxyxml/generated/compound.py
	new file:   docs/doxygen/doxyxml/generated/compoundsuper.py
	new file:   docs/doxygen/doxyxml/generated/index.py
	new file:   docs/doxygen/doxyxml/generated/indexsuper.py
	new file:   docs/doxygen/doxyxml/text.py
	new file:   docs/doxygen/other/doxypy.py
	new file:   docs/doxygen/other/group_defs.dox
	new file:   docs/doxygen/other/main_page.dox
	new file:   docs/doxygen/pydoc_macros.h
	new file:   docs/doxygen/update_pydoc.py
	new file:   grc/CMakeLists.txt
	new file:   grc/spectrumDetect_specDetect.block.yml
	new file:   grc/spectrumDetect_spectrumPlot.block.yml
	new file:   include/gnuradio/spectrumDetect/CMakeLists.txt
	new file:   include/gnuradio/spectrumDetect/api.h
	new file:   lib/CMakeLists.txt
	new file:   python/spectrumDetect/.gitignore
	new file:   python/spectrumDetect/CMakeLists.txt
	new file:   python/spectrumDetect/__init__.py
	new file:   python/spectrumDetect/bindings/CMakeLists.txt
	new file:   python/spectrumDetect/bindings/README.md
	new file:   python/spectrumDetect/bindings/bind_oot_file.py
	new file:   python/spectrumDetect/bindings/docstrings/README.md
	new file:   python/spectrumDetect/bindings/header_utils.py
	new file:   python/spectrumDetect/bindings/python_bindings.cc
	new file:   python/spectrumDetect/rxTime.py
	new file:   python/spectrumDetect/specDetect.py
	new file:   python/spectrumDetect/spectrumPlot.py
	new file:   run_docker.sh
	new file:   .gitattributes
	modified:   gr-spectrumdetect/examples/detect.pt
	deleted:    detect.pt
	new file:   detect.pt
	modified:   01_example_modulations_dataset.ipynb
	modified:   03_example_widebandsig53_dataset.ipynb
	modified:   06_example_wideband_yolo.ipynb
	modified:   07_example_classify_yolo.ipynb
	modified:   classify.yaml
	modified:   wbdata.yaml
	modified:   ../torchsig/transforms/target_transforms.py
	modified:   ../torchsig/utils/classify_transforms.py
	modified:   ../torchsig/utils/dsp.py
	modified:   ../torchsig/utils/visualize.py
	modified:   ../torchsig/utils/yolo_classify.py
	modified:   ../torchsig/utils/yolo_train.py
	modified:   examples/00_example_sig53_dataset.ipynb
	modified:   examples/01_example_modulations_dataset.ipynb
	modified:   examples/02_example_sig53_classifier.ipynb
	modified:   examples/03_example_widebandsig53_dataset.ipynb
	modified:   examples/04_example_wideband_modulations_dataset.ipynb
	modified:   examples/05_example_wideband_yolo_to_disk.ipynb
	modified:   examples/06_example_wideband_yolo.ipynb
	modified:   examples/07_example_classify_yolo.ipynb
	modified:   examples/classify.yaml
* fix for TorchDSP#254

* Update types.py

* Update types.py

* Update types.py

* Update types.py

* Remove accidental whitespace
…cripts (TorchDSP#278)

* v1.0.0-beta release

* fixing print() error with f-string \n

* fix zarr library dependency

* pytproject.toml typo

* fixed synthetic spectrogram notebook, added min num signals for generate scripts

* remove notebook outputs

---------

Co-authored-by: Matt Carrick <matthew.carrick@peratonlabs.com>
* v1.0.0-beta release

* fixing print() error with f-string \n

* fix zarr library dependency

* pytproject.toml typo

* fixed synthetic spectrogram notebook, added min num signals for generate scripts

* remove notebook outputs

* add dataset unit tests

* add wideband profile code

* fix gr-spectrumdetect

* fix for 100% dataset reproducability based on seeding

* adding missing yaml files

* fixing formatting on page, easier to read

* removing transform_utils.py, no longer useful

---------

Co-authored-by: Ere Oh <eoh@ltsnet.net>
fix: include YAML config files in package installation
* initial support of parameterized signal bandwidth ranges

* using better default values for sample rate, and bandwidth min/max

* updating sample rate fields so pytest passes

* better validation/error checking of min/max signal bandwidth inside verify()

* changing >= into <= such that inequality is printed properly when verify() fails

* prints value under test to make debug easier

* parameterizing center frequency for datasets

* re-enabling seed param, fixes notebook crash on dataset generation

* incrementing release version

* datasets now process min/max for both CF and BW as defined in YAMLs

* examples to create metadata dict from YAML file

* narrowband uses longer burst durations

* adding proper defaults for CF/BW in wideband yaml

* fixing sampling rates in yaml configs

* fixing sample rates for narrowband default YAML configs

* fixing lower-range check for center_freq to allow for a min/max range of 0 and 0

* removing duplicate impairment_level

* "impaired" field now "impairment_level", only accepts an integer

* adding y-axis, x-axis, and color bar labels

* adding non-linear amp and intermod products transforms

* initial commit for burst durations being written in real-world time (w.r.t sample rate). pytests pass but also need to evaluate notebooks and other dataset generation scripts

* fixing default burst times

* updating to use --impairment_level, rather than just --impaired

* using proper burst times in notebooks

* fixing default typing as recommended by @romanziske from TorchDSP#320

* better minimum for signal duration

* reducing burst times

* removing required duplication in names of signals, everything derived from CLASS_FAMILY_DICT

* removing 'samples_per_baud' field, hold over from 0.6.1, it is inaccurate for most signal types and therefore is being removed

* signal lengths now derived from other parameters

* draft implementation of notifying user of remaining space on disk, and also includes a check to stop writing if less than 1 GB is available

* now estimates amount of dataset left to create, throws error if not enough space left on disk

* removing return, not needed

* fixing math error in how many iterations are left

* better handling of minimum default burst durations

* better handling of defaults for signal bandwidth min/max

* better way to handle default arguments for signal center freq min/max

* updating default configs

* better parameters for dataset creation

* adding missing gigabytes unit to error message

* runs periodically, instead of every time, to save cycles

* fixes TorchDSP#328

* updating README directions

* enabling USB-based device permissions

* pulling in files from 0.6.1 that were not merged properly according to TorchDSP#326

* removing old note from README

* fixing path

* reducing the number of cores in gnuradio compilation to avoid crashing on smaller systems

* cleaning up some example commands

* adding in packages to remove warnings during install

* removing unneeded package

* updating readme to 1.0+

* giving execute permissions

* pulling back in missing downloads

* moving "xhost +" command into the script

* fixing version number to 2.18.3, 2.18.4 not available through pip

* add requirements.in and update pyproj

* remove unnecessary imports in generate scripts

* using default 0 GPU device

* undoing version lock in pyprojects.toml

* reverting commit c02b4c9, now able to read back from file

* torch's spectrogram now computes the power internally

* compute_spectrogram() now uses blackman window

* removing normalization param, since all power levels are changed later anyway to match SNR levels

* fixing print statement to use correct variable

* now runs all tests

* draft code writes PFB weights to file on first instasnce and loads afterwards

* writes pickle files in known, repeatable location

* fixing formatting

* adding torchsig prefix on filename

* including versioning in the weights filename

* functions to read/load pickle files

* getting working again

* calling write_pickle() function

* fixing comment

* script can now be run from anywhere

* profiling wideband generation and writing to disk

* using single parameter to test both dataset gen and write to disk

* fixing variable name

* profiling the whole process, including metadata creation

* all tests now use same

* clarifying function names

* * reordering tests
* removing comment

* fixing typo in notebook

* updating another typo in related notebook

* * using 1 worker
* clarifying print statements

* removing comment

* profiling when reading from disk

* add image file handler example (TorchDSP#347)

* add image file handler example

* ensure pytests pass

* Closes TorchDSP#348

* addeding 1.0.0-dev in bug report

* Possible fix for TorchDSP#331

* adding new notebook to readme

* reordering README

* defines batch_size to avoid crash

* tqdm progress bar now updated every 5 seconds, rather than on number of iterations

* simplifying call

* now includes some robustness when reading from file, will recompute if weights file is corrupted

* adding comment

* adding in new transforms and notebooks associated with transforms

* * notebooks now call transform's functional.py
* renaming nonlinear_amplifier() -> nonlinear_amplifier_am_pm()
* moving nonlinear_amplier_poly() from notebook into transform's functional.py

* added missing import, and adding in a plot

* * imports speed of light 'c' from scipy
* removes empty cell at end of notebook

* imports speed of light from scipy

* speed of light now default value in functional, removed from notebook

* reworking notebook, includes more plots

* improved time-domain plot for LO drift

* * frequency drift impairment is now gaussian based
* added some plots to frequency drift notebook

* updating comments

* * reworking LO phase noise to be gaussian based
* fixing comments/var names for local oscillator freq drift

* better legends

* using non-zero frequency to generate better plot

* phase noise plots now similar to frequency drift notebook

* removing old comment

* * filling in the sample rate for the LO drift transform, but crashes
* DatasetSignal() signal has one set of IQ samples (.data) but the metadata is a list?

* LO drift transform now appropriately handles sample rate when metadata is a list

* updating comments

* signal transform now handles sample rate appropriately for LO drift

* phase noise transform now integrated and working in pytest

* adding some wording to the notebook

* * adding in proper sample rate normalization for phase offset transform
* fixing default ranges in pytest and dataset/signal transforms

* * fixing/improving plots to better demonstrate LO phase/freq effects
* adding mark up cells to describe what the notebok is doing

* removing empty cell from notebook

* draft integration of LO phase noise into level 2 wideband impairments

* fixing default ranges

* fixing variable names to match updated function definition

* fixing formatting

* adding phase noise impairment to narrowband

* adding frequency drift into level 2 impairments for narrowband and wideband

* * quantize accepts number of bits in quantizer
* now implements saturation and dynamic range loss
* still needs improvement, but core functionality is there

* much faster implementation for quantize()

* implements both 'ceiling' and 'floor'

* 'floor' implementation was not correct, removing.

* correctly implements 'floor'-type rounding

* * only implements ceiling and floor, no 'nearest'
* commenting out debug plot

* fixing comments

* * not implementing floor, just ceiling
* reference level adjustment now an external parameter

* removing debug plot

* using only default args to clean up the code, make simpler & easier to read

* using default arguments to clean up & simplify code

* increasing default value for quantize

* fixing transform name in __all__

* implements quantize dataset transform

* incorporating quantize into narrowband dataset transforms

* getting impairments onto single lines where possible

* implements quantize signal & dataset transform in wideband

* always apply transform

* removing debug print statements

* * IQ imbalance now stored on one liner
* fixes default dc offset argument

* collapsing to one line

* using default 3rd order intermod

* adding quantize signal transform

* * scales level to maintain proper SNR at output of transform
* uses for loop over all coeffs now
* includes check to throw error if even-power coefficients are non-zero

* draft code to interface with updated third order intermod

* implements coefficients in a for loop

* includes an iterative process to set weights correctly

* accepts a random choice for 3rd or 5th order model

* cleaning up default params

* better range for coeffs

* cleaned up comment

* removing debug plots

* fixing transform function name

* adding in intermod products for level 2 impairments

* quantize() only has one function now for simplicity

* undoing commit from 5a22825

* adding in exception so pytest passes

* updating pytest to match with new functional interface

* quantize and intermod products pytests now pass

* using default burst length params in notebook

* includes option to overwrite dataset within the narrowband and wideband datamodules

* throws error if input param has unhandled type

* includes option for log-based scaling now, good for ranges which include large differences in orders of magnitude

* intermod-products now using the log-based distribution option

* incorporating error handling for log10() distribution for invalid ranges

* fixing test value to be non-zero

* update to non-linear amplifier transform

* moved synthetic spectrogram example to tools folder

* add dataloader and torchsig iterable dataset for reproducibility

* restoring deleted parser lines

* exist() function no longer calls os.listdir() since it fails when path does not exst

* working on the wideband profiling tests

* includes appropriately labeled time axis in spectrogram

* dropping references to old datasets

* fixing order of comments to be in line with order of arguments

* notebook updated with latest file handler interface post-zarr fix

* fixing typo in filename

* includes a "measure" mode whereby the noise-based transforms update the SNR metadata

* removing notebook

* reworking the modulation index such that the power disparity between carrier and message is less drastic

* upconversion_anti_aliasing_filter() now uses iterative filter design since it is more accurate

* phase noise now given in units of degrees

* reworking how frequency drift is implemented

* renaming phase noise transform

* updating parameter to sync with transform

* updated gitignore

* prepare for v1.1.0 release

* add 1.1.0 to bug report

---------

Co-authored-by: Matt Carrick <matthew.carrick@peratonlabs.com>
Co-authored-by: MattCarrickPL <120057274+MattCarrickPL@users.noreply.github.com>
Co-authored-by: Isaiah Harville <iharville@trideum.com>
ereoh and others added 24 commits February 10, 2026 10:00
Implements FileReader subclass that loads SigMF file pairs as TorchSig
datasets without requiring the sigmf library. Supports cf32, cf64, ci32,
ci16, ci8, cu8 datatypes. Handles multi-file roots (annotations from all
.sigmf-data files are concatenated in sorted order).

Closes TorchDSP#282.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix _find_meta_for_data candidate_a path for foo.sigmf-meta convention
- Sanitize colon-keyed annotation fields (lora:x → lora_x) for attribute access
- Raise ValueError on sample_count=0 instead of returning empty Signal
- Replace unreachable class_index=-1 fallback with assert
- Set writer_class=None (never reachable; create_handler raises for write mode)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
23 tests covering:
- Dtype roundtrips (cf32_le, ci16_le/be, ci8, cu8)
- Byte offset indexing (single and multi-file)
- Metadata mapping (sample_rate, center_freq, class_name/index, custom fields)
- Both .sigmf-meta naming conventions
- StaticTorchSigDataset integration
- Error cases (no files, bad dtype, sample_count=0, write mode)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…gMFReader

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…le_handlers

Remove the inline BYODExampleFileHandler class definition; import and use
the new SigMFReader directly. Add a multi-file demo cell showing two .sigmf
pairs in one root with annotation counts verified via assert.
Add overwrite=True to both meta.tofile() calls so re-execution does not
raise SigMFFileExistsError. Move kernelspec from top-level notebook JSON
into metadata where nbformat schema expects it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* remove rust, fix dockerfiles

* fixes TorchDSP#453

* add dataset statistics, fixes TorchDSP#452, TorchDSP#454, TorchDSP#455

* remove unnecessary files

* Update README.md docs link

* Fixes TorchDSP#456

* NPY BYOD coverage, Fixes TorchDSP#456, TorchDSP#458, TorchDSP#459, TorchDSP#461

* cleaned up code, notebooks

* add pypi publish

* fix clock_drift and yaml_dataset notebooks

* update toml
@ereoh

ereoh commented May 13, 2026

Copy link
Copy Markdown
Collaborator

This code looks really useful, so thank you. If you could resolve the merge conflicts I can merge it into main.

@ereoh
ereoh force-pushed the main branch 2 times, most recently from 41abd89 to 9b1949e Compare June 5, 2026 17:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] File Format Support

6 participants