ezmsg-sigproc 2.13.1__tar.gz → 2.14.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/PKG-INFO +1 -1
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/__version__.py +2 -2
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/affinetransform.py +22 -5
- ezmsg_sigproc-2.14.0/src/ezmsg/sigproc/util/array.py +59 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/.github/workflows/docs.yml +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/.github/workflows/python-publish.yml +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/.github/workflows/python-tests.yml +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/.gitignore +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/.pre-commit-config.yaml +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/LICENSE +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/README.md +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/Makefile +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/make.bat +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/_templates/autosummary/module.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/api/index.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/conf.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/HybridBuffer.md +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/explanations/array_api.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/explanations/sigproc.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/how-tos/signalprocessing/adaptive.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/how-tos/signalprocessing/checkpoint.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/how-tos/signalprocessing/composite.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/how-tos/signalprocessing/content-signalprocessing.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/how-tos/signalprocessing/processor.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/how-tos/signalprocessing/standalone.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/how-tos/signalprocessing/stateful.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/how-tos/signalprocessing/unit.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/img/HybridBufferBasic.svg +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/img/HybridBufferOverflow.svg +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/sigproc/architecture.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/sigproc/base.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/sigproc/content-sigproc.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/sigproc/processors.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/sigproc/units.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/tutorials/signalprocessing.rst +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/index.md +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/pyproject.toml +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/__init__.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/activation.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/adaptive_lattice_notch.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/aggregate.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/bandpower.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/base.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/butterworthfilter.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/butterworthzerophase.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/cheby.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/combfilter.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/coordinatespaces.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/decimate.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/denormalize.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/detrend.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/diff.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/downsample.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/ewma.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/ewmfilter.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/extract_axis.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/fbcca.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/filter.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/filterbank.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/filterbankdesign.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/fir_hilbert.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/fir_pmc.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/firfilter.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/gaussiansmoothing.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/kaiser.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/linear.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/math/__init__.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/math/abs.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/math/add.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/math/clip.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/math/difference.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/math/invert.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/math/log.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/math/pow.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/math/scale.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/merge.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/messages.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/quantize.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/resample.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/rollingscaler.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/sampler.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/scaler.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/signalinjector.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/singlebandpow.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/slicer.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/spectral.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/spectrogram.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/spectrum.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/transpose.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/util/__init__.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/util/asio.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/util/axisarray_buffer.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/util/buffer.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/util/message.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/util/profile.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/util/sparse.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/util/typeresolution.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/wavelets.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/src/ezmsg/sigproc/window.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/__init__.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/conftest.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/helpers/__init__.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/helpers/synth.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/helpers/util.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/bytewax/test_spectrum_bytewax.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/bytewax/test_window_bytewax.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_add_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_butterworth_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_butterworthzerophase_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_coordinatespaces_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_decimate_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_difference_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_downsample_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_filter_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_fir_hilbert_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_fir_pmc_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_rollingscaler_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_sampler_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_scaler_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_spectrum_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_window_system.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/resources/xform.csv +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/test_profile.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/buffer/test_axisarray_buffer.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/buffer/test_buffer.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/buffer/test_buffer_overflow.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_activation.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_adaptive_lattice_notch.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_affine_transform.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_aggregate.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_bandpower.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_base.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_butter.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_butterworthzerophase.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_combfilter.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_coordinatespaces.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_denormalize.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_diff.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_downsample.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_ewma.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_extract_axis.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_fbcca.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_filter.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_filterbank.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_filterbankdesign.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_fir_hilbert.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_fir_pmc.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_firfilter.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_gaussian_smoothing_filter.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_kaiser.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_linear.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_math.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_math_add.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_math_difference.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_merge.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_quantize.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_resample.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_rollingscaler.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_sampler.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_scaler.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_singlebandpow.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_slicer.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_spectrogram.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_spectrum.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_transpose.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_util.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_wavelets.py +0 -0
- {ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/unit/test_window.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ezmsg-sigproc
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.14.0
|
|
4
4
|
Summary: Timeseries signal processing implementations in ezmsg
|
|
5
5
|
Author-email: Griffin Milsap <griffin.milsap@gmail.com>, Preston Peranich <pperanich@gmail.com>, Chadwick Boulay <chadwick.boulay@gmail.com>, Kyle McGraw <kmcgraw@blackrockneuro.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '2.
|
|
32
|
-
__version_tuple__ = version_tuple = (2,
|
|
31
|
+
__version__ = version = '2.14.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (2, 14, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -23,6 +23,8 @@ from ezmsg.baseproc import (
|
|
|
23
23
|
from ezmsg.util.messages.axisarray import AxisArray, AxisBase
|
|
24
24
|
from ezmsg.util.messages.util import replace
|
|
25
25
|
|
|
26
|
+
from ezmsg.sigproc.util.array import array_device, is_float_dtype, xp_asarray, xp_create
|
|
27
|
+
|
|
26
28
|
|
|
27
29
|
def _find_block_diagonal_clusters(weights: np.ndarray) -> list[tuple[np.ndarray, np.ndarray]] | None:
|
|
28
30
|
"""Detect block-diagonal structure in a weight matrix.
|
|
@@ -245,13 +247,25 @@ class AffineTransformTransformer(
|
|
|
245
247
|
|
|
246
248
|
self._state.new_axis = replace(message.axes[axis], data=np.array(new_labels))
|
|
247
249
|
|
|
248
|
-
# Convert to match message.data namespace
|
|
250
|
+
# Convert to match message.data namespace and device for _process.
|
|
251
|
+
# Weights are stored as numpy float64 after cluster detection; some
|
|
252
|
+
# devices (e.g. MPS) don't support float64, so we downcast weight
|
|
253
|
+
# arrays to the message's dtype when the message is floating-point.
|
|
249
254
|
xp = get_namespace(message.data)
|
|
255
|
+
dev = array_device(message.data)
|
|
256
|
+
msg_dt = message.data.dtype
|
|
257
|
+
# Downcast weights dtype only for float message data (avoids casting
|
|
258
|
+
# float weights to integer when message data happens to be int).
|
|
259
|
+
w_dt = msg_dt if is_float_dtype(xp, msg_dt) else None
|
|
250
260
|
if self._state.weights is not None:
|
|
251
|
-
self._state.weights = xp
|
|
261
|
+
self._state.weights = xp_asarray(xp, self._state.weights, dtype=w_dt, device=dev)
|
|
252
262
|
if self._state.clusters is not None:
|
|
253
263
|
self._state.clusters = [
|
|
254
|
-
(
|
|
264
|
+
(
|
|
265
|
+
xp_asarray(xp, in_idx, device=dev),
|
|
266
|
+
xp_asarray(xp, out_idx, device=dev),
|
|
267
|
+
xp_asarray(xp, sub_w, dtype=w_dt, device=dev),
|
|
268
|
+
)
|
|
255
269
|
for in_idx, out_idx, sub_w in self._state.clusters
|
|
256
270
|
]
|
|
257
271
|
|
|
@@ -345,7 +359,7 @@ class AffineTransformTransformer(
|
|
|
345
359
|
|
|
346
360
|
# Pre-allocate output (omitted channels stay zero)
|
|
347
361
|
out_shape = data.shape[:-1] + (self._state.n_out,)
|
|
348
|
-
result = xp.zeros
|
|
362
|
+
result = xp_create(xp.zeros, out_shape, dtype=data.dtype, device=array_device(data))
|
|
349
363
|
|
|
350
364
|
for in_idx, out_idx, sub_weights in self._state.clusters:
|
|
351
365
|
chunk = xp.take(data, in_idx, axis=data.ndim - 1)
|
|
@@ -371,7 +385,10 @@ class AffineTransformTransformer(
|
|
|
371
385
|
# The weights are stacked A|B where A is the transform and B is a single row
|
|
372
386
|
# in the equation y = Ax + B. This supports NeuroKey's weights matrices.
|
|
373
387
|
sample_shape = data.shape[:axis_idx] + (1,) + data.shape[axis_idx + 1 :]
|
|
374
|
-
data = xp.concat(
|
|
388
|
+
data = xp.concat(
|
|
389
|
+
(data, xp_create(xp.ones, sample_shape, dtype=data.dtype, device=array_device(data))),
|
|
390
|
+
axis=axis_idx,
|
|
391
|
+
)
|
|
375
392
|
|
|
376
393
|
if axis_idx in [-1, len(message.dims) - 1]:
|
|
377
394
|
data = xp.matmul(data, self._state.weights)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Portable helpers for Array API interoperability.
|
|
2
|
+
|
|
3
|
+
These utilities smooth over differences between Array API libraries
|
|
4
|
+
(NumPy, PyTorch, MLX, CuPy, etc.) — in particular around ``device``
|
|
5
|
+
placement and ``dtype`` introspection, which are not uniformly supported.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import numpy as np
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def array_device(x):
|
|
12
|
+
"""Return the device of an array, or ``None`` for device-less libraries."""
|
|
13
|
+
try:
|
|
14
|
+
from array_api_compat import device
|
|
15
|
+
|
|
16
|
+
return device(x)
|
|
17
|
+
except (AttributeError, TypeError):
|
|
18
|
+
return None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def xp_asarray(xp, obj, *, dtype=None, device=None):
|
|
22
|
+
"""Portable ``xp.asarray`` that omits unsupported kwargs.
|
|
23
|
+
|
|
24
|
+
Some Array API libraries (e.g. MLX) don't accept a ``device`` keyword.
|
|
25
|
+
This helper builds the kwargs dict dynamically so that only supported
|
|
26
|
+
arguments are forwarded.
|
|
27
|
+
"""
|
|
28
|
+
kwargs = {}
|
|
29
|
+
if dtype is not None:
|
|
30
|
+
kwargs["dtype"] = dtype
|
|
31
|
+
if device is not None:
|
|
32
|
+
kwargs["device"] = device
|
|
33
|
+
return xp.asarray(obj, **kwargs)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def xp_create(fn, *args, dtype=None, device=None, **extra):
|
|
37
|
+
"""Call a creation function (``zeros``, ``ones``, ``eye``) portably.
|
|
38
|
+
|
|
39
|
+
Omits ``device`` if it is ``None`` (for libraries that don't support it).
|
|
40
|
+
"""
|
|
41
|
+
kwargs = dict(extra)
|
|
42
|
+
if dtype is not None:
|
|
43
|
+
kwargs["dtype"] = dtype
|
|
44
|
+
if device is not None:
|
|
45
|
+
kwargs["device"] = device
|
|
46
|
+
return fn(*args, **kwargs)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def is_float_dtype(xp, dtype) -> bool:
|
|
50
|
+
"""Check whether *dtype* is a real floating-point type, portably."""
|
|
51
|
+
try:
|
|
52
|
+
return xp.isdtype(dtype, "real floating")
|
|
53
|
+
except AttributeError:
|
|
54
|
+
pass
|
|
55
|
+
# Fallback for libraries without isdtype (e.g. MLX).
|
|
56
|
+
try:
|
|
57
|
+
return xp.issubdtype(dtype, xp.floating)
|
|
58
|
+
except (AttributeError, TypeError):
|
|
59
|
+
return np.issubdtype(np.dtype(dtype), np.floating)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/how-tos/signalprocessing/unit.rst
RENAMED
|
File without changes
|
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/img/HybridBufferOverflow.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/sigproc/content-sigproc.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/docs/source/guides/tutorials/signalprocessing.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/bytewax/test_spectrum_bytewax.py
RENAMED
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/bytewax/test_window_bytewax.py
RENAMED
|
File without changes
|
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_butterworth_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_decimate_system.py
RENAMED
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_difference_system.py
RENAMED
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_downsample_system.py
RENAMED
|
File without changes
|
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_fir_hilbert_system.py
RENAMED
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_fir_pmc_system.py
RENAMED
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_rollingscaler_system.py
RENAMED
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_sampler_system.py
RENAMED
|
File without changes
|
|
File without changes
|
{ezmsg_sigproc-2.13.1 → ezmsg_sigproc-2.14.0}/tests/integration/ezmsg/test_spectrum_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|