tonic 1.5.1.dev13__tar.gz → 1.5.1.dev18__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.
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/AUTHORS +2 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/ChangeLog +3 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/PKG-INFO +1 -1
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/datasets.rst +1 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_datasets.py +62 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/__init__.py +1 -0
- tonic-1.5.1.dev18/tonic/datasets/ntidigits18.py +145 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/event_downsampling.py +3 -3
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic.egg-info/PKG-INFO +1 -1
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic.egg-info/SOURCES.txt +1 -0
- tonic-1.5.1.dev18/tonic.egg-info/pbr.json +1 -0
- tonic-1.5.1.dev13/tonic.egg-info/pbr.json +0 -1
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/.binder/requirements.txt +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/.coveragerc +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/.github/workflows/ci-pipeline.yml +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/.pre-commit-config.yaml +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/.readthedocs.yml +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/LICENSE.txt +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/MANIFEST.in +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/README.md +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/Makefile +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_static/event-cameras/eventstream.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_static/event-cameras/framestream.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_static/event-cameras/receptive-fields.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_static/event-cameras/sampling-theorems.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_static/snn/neuron-models.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_static/snn/surrogates.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_static/tonic-logo-black-bg.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_static/tonic-logo-black.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_static/tonic-logo-white.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_static/tonic_favicon.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_templates/class_dataset.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/_templates/class_transform.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/about/about.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/about/info.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/about/prototype.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/about/release_notes.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/conf.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/README.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/representations/README.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/representations/plot_tobinarep.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/representations/plot_toframe.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/representations/plot_toimage.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/representations/plot_totimesurface.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/representations/plot_tovoxelgrid.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/README.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_centercrop.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_crop_time.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_decimation.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_denoise.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_downsample.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_drop_event.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_drop_event_by_area.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_drop_event_by_time.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_drop_pixel.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_event_downsampling.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_merge_polarities.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_random_crop.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_random_flip_lr.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_random_flip_ud.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_random_time_reversal.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_refractory_period.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_spatial_jitter.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_time_jitter.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_uniform_noise.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/getting_involved/communication_channels.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/getting_involved/contribute.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/getting_involved/getting_involved.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/getting_started/getting_started.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/getting_started/install.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/getting_started/nmnist.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/how-tos/how-tos.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/how-tos/loading-raw-events.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/how-tos/visualizing-data.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/how-tos/wrapping_own_data.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/index.md +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/make.bat +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/reading_material/design_choices.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/reading_material/intro-event-cameras.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/reading_material/intro-snns.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/reading_material/reading_material.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/reading_material/training-snns.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/requirements.txt +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/transformations.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/tutorials/Aug_DiskCachDataset.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/tutorials/audio_transforms_tutorial.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/tutorials/batching.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/tutorials/davis_data.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/tutorials/fast_dataloading.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/tutorials/large_datasets.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/tutorials/slicing.ipynb +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/tutorials/tutorials.rst +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/requirements.txt +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/setup.cfg +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/setup.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/dataset_utils.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/prototype_dataset_utils.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/requirements.txt +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_audio_augmentations.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_audio_transforms.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_aug_caching.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_caching.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_chained_transforms.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_data/sample.aedat4 +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_data/sample_aedat_header.aedat +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_data/sample_ncars.dat +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_data/sample_nmnist.bin +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_data/sample_stmnist.mat +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_dsec.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_io.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_prototype_datasets.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_representations.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_sliced_dataset.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_slicers.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_tonic_utils.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/test_transforms.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/torch_requirements.txt +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/test/utils.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/__init__.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/audio_augmentations.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/audio_transforms.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/cached_dataset.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/collation.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/dataset.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/asl_dvs.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/cifar10dvs.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/davisdataset.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/dsec.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/dvs_lips.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/dvsgesture.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/ebssa.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/hsd.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/mvsec.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/ncaltech101.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/nmnist.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/pokerdvs.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/s_mnist.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/threeET_eyetracking.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/tum_vie.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/datasets/visual_place_recognition.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/download_utils.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/__init__.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/crop.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/decimate.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/denoise.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/drop_event.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/drop_pixel.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/refractory_period.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/spatial_jitter.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/time_jitter.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/time_skew.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/to_averaged_timesurface.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/to_bina_rep.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/to_frame.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/to_timesurface.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/to_voxel_grid.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/functional/uniform_noise.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/io.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/README.md +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/__init__.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/datasets/__init__.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/datasets/ncars.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/datasets/nmnist.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/datasets/prophesee.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/datasets/stmnist.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/datasets/utils/__init__.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/datasets/utils/_dataset.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/datasets/utils/_utils.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/prototype/slicers.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/sliced_dataset.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/slicers.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/transforms.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic/utils.py +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic-logo-padded.png +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic.egg-info/dependency_links.txt +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic.egg-info/not-zip-safe +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic.egg-info/requires.txt +0 -0
- {tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/tonic.egg-info/top_level.txt +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
Andreu Girbau <andreu.girbau@gmail.com>
|
|
1
2
|
Anindya Ghosh <anindya128@yahoo.com>
|
|
2
3
|
Antoine Grimaldi <antoine.grimaldi@univ-amu.fr>
|
|
3
4
|
AntoineGrimaldi <antoine.grimaldi@univ-amu.fr>
|
|
@@ -29,6 +30,7 @@ Sadique Sheik <sadique.sheik@aictx.ai>
|
|
|
29
30
|
Sadique Sheik <sadique.sheik@synsense.ai>
|
|
30
31
|
Sadique Sheik <sheiksadique@gmail.com>
|
|
31
32
|
Sami Barchid <sami.barchid@univ-lille.fr>
|
|
33
|
+
Simon Narduzzi <simon.narduzzi@csem.ch>
|
|
32
34
|
Simon Narduzzi <simon.narduzzi@gmail.com>
|
|
33
35
|
Thomas Nowotny <t.nowotny@sussex.ac.uk>
|
|
34
36
|
Tobias Fischer <info@tobiasfischer.info>
|
|
@@ -181,6 +181,68 @@ class NMNISTTestCaseTest(dataset_utils.DatasetTestCase):
|
|
|
181
181
|
return {"n_samples": 1}
|
|
182
182
|
|
|
183
183
|
|
|
184
|
+
def create_ntidigits_data(filename, n_samples):
|
|
185
|
+
with h5py.File(filename, mode="w") as write_file:
|
|
186
|
+
# Generate random times and units
|
|
187
|
+
times = np.random.random(size=(n_samples, 100)).astype(np.float16)
|
|
188
|
+
units = np.random.randint(0, 64, size=times.shape, dtype=np.uint16)
|
|
189
|
+
|
|
190
|
+
# Generate random sequences of symbols
|
|
191
|
+
symbols = ["o", "1", "2", "3", "4", "5", "6", "7", "8", "9", "z"]
|
|
192
|
+
sequences = np.array([
|
|
193
|
+
"speaker-a-" + "".join(np.random.choice(symbols, size=np.random.randint(1, 7), replace=True))
|
|
194
|
+
for _ in range(n_samples)
|
|
195
|
+
]).astype("|S18")
|
|
196
|
+
|
|
197
|
+
for partition in ["train", "test"]:
|
|
198
|
+
# Create a dictionary to store the addresses and timestamps of each speaker
|
|
199
|
+
addresses = {}
|
|
200
|
+
timestamps = {}
|
|
201
|
+
for i in range(n_samples):
|
|
202
|
+
speaker = sequences[i]
|
|
203
|
+
if speaker not in addresses:
|
|
204
|
+
addresses[speaker] = units[i]
|
|
205
|
+
timestamps[speaker] = times[i]
|
|
206
|
+
|
|
207
|
+
# Create a group for addresses and timestamps, Store each speaker's data as a dataset in the group
|
|
208
|
+
train_address_group = write_file.create_group("{}_addresses".format(partition))
|
|
209
|
+
for speaker, addresses in addresses.items():
|
|
210
|
+
train_address_group.create_dataset(speaker, data=np.array(addresses, dtype=np.uint16))
|
|
211
|
+
|
|
212
|
+
train_timestamps_group = write_file.create_group("{}_timestamps".format(partition))
|
|
213
|
+
for speaker, timestamps in timestamps.items():
|
|
214
|
+
train_timestamps_group.create_dataset(speaker, data=np.array(timestamps, dtype=np.float16))
|
|
215
|
+
|
|
216
|
+
# Create datasets for labels
|
|
217
|
+
write_file.create_dataset("{}_labels".format(partition), data=sequences)
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
class NTIDIGITS18TestCaseTrain(dataset_utils.DatasetTestCase):
|
|
221
|
+
DATASET_CLASS = datasets.NTIDIGITS18
|
|
222
|
+
FEATURE_TYPES = (datasets.NTIDIGITS18.dtype,)
|
|
223
|
+
TARGET_TYPES = (int,)
|
|
224
|
+
KWARGS = {"train": True}
|
|
225
|
+
|
|
226
|
+
def inject_fake_data(self, tmpdir):
|
|
227
|
+
testfolder = os.path.join(tmpdir, "NTIDIGITS18/")
|
|
228
|
+
os.makedirs(testfolder, exist_ok=True)
|
|
229
|
+
create_ntidigits_data(testfolder + "n-tidigits.hdf5", n_samples=2)
|
|
230
|
+
return {"n_samples": 2}
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
class NTIDIGITS18TestCaseTest(dataset_utils.DatasetTestCase):
|
|
234
|
+
DATASET_CLASS = datasets.NTIDIGITS18
|
|
235
|
+
FEATURE_TYPES = (datasets.NTIDIGITS18.dtype,)
|
|
236
|
+
TARGET_TYPES = (int,)
|
|
237
|
+
KWARGS = {"train": False}
|
|
238
|
+
|
|
239
|
+
def inject_fake_data(self, tmpdir):
|
|
240
|
+
testfolder = os.path.join(tmpdir, "NTIDIGITS18/")
|
|
241
|
+
os.makedirs(testfolder, exist_ok=True)
|
|
242
|
+
create_ntidigits_data(testfolder + "n-tidigits.hdf5", n_samples=2)
|
|
243
|
+
return {"n_samples": 2}
|
|
244
|
+
|
|
245
|
+
|
|
184
246
|
def create_hsd_data(filename, n_samples):
|
|
185
247
|
with h5py.File(filename, mode="w") as write_file:
|
|
186
248
|
times = np.random.random(size=(n_samples, 100)).astype(np.float16)
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/user/bin/env python
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
import h5py
|
|
5
|
+
import os
|
|
6
|
+
from typing import Callable, Optional
|
|
7
|
+
|
|
8
|
+
from tonic.dataset import Dataset
|
|
9
|
+
from tonic.io import make_structured_array
|
|
10
|
+
import requests
|
|
11
|
+
from tqdm import tqdm
|
|
12
|
+
|
|
13
|
+
class NTIDIGITS18(Dataset):
|
|
14
|
+
"""`N-TIDIGITS18 Dataset <https://docs.google.com/document/d/1Uxe7GsKKXcy6SlDUX4hoJVAC0-UkH-8kr5UXp0Ndi1M/edit?tab=t.0#heading=h.sbnu5gtazqjq/>`_
|
|
15
|
+
Cochlea Spike Dataset.
|
|
16
|
+
::
|
|
17
|
+
|
|
18
|
+
@article{anumula2018feature,
|
|
19
|
+
title={Feature representations for neuromorphic audio spike streams},
|
|
20
|
+
author={Anumula, Jithendar and Neil, Daniel and Delbruck, Tobi and Liu, Shih-Chii},
|
|
21
|
+
journal={Frontiers in neuroscience},
|
|
22
|
+
volume={12},
|
|
23
|
+
pages={23},
|
|
24
|
+
year={2018},
|
|
25
|
+
publisher={Frontiers Media SA}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
Parameters:
|
|
29
|
+
save_to (string): Location to save files to on disk. Will put files in an 'hsd' subfolder.
|
|
30
|
+
train (bool): If True, uses training subset, otherwise testing subset.
|
|
31
|
+
single_digits (bool): If True, only returns samples with single digits (o, 1, 2, 3, 4, 5, 6, 7, 8, 9, z), with class 0 for 'o' and 11 for 'z'.
|
|
32
|
+
transform (callable, optional): A callable of transforms to apply to the data.
|
|
33
|
+
target_transform (callable, optional): A callable of transforms to apply to the targets/labels.
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
A dataset object that can be indexed or iterated over. One sample returns a tuple of (events, targets).
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
base_url = "https://www.dropbox.com/scl/fi/1x4lxt9yyw25sc3tez8oi/n-tidigits.hdf5?e=2&rlkey=w8gi5udvib2zqzosusa5tr3wq&dl=1"
|
|
40
|
+
filename = "n-tidigits.hdf5"
|
|
41
|
+
file_md5 = "360a2d11e5429555c9197381cf6b58e0"
|
|
42
|
+
folder_name = ""
|
|
43
|
+
|
|
44
|
+
sensor_size = (64, 1, 1)
|
|
45
|
+
dtype = np.dtype([("t", int), ("x", int), ("p", int)])
|
|
46
|
+
ordering = dtype.names
|
|
47
|
+
|
|
48
|
+
class_map = {"o": 0,
|
|
49
|
+
"1": 1,
|
|
50
|
+
"2": 2,
|
|
51
|
+
"3": 3,
|
|
52
|
+
"4": 4,
|
|
53
|
+
"5": 5,
|
|
54
|
+
"6": 6,
|
|
55
|
+
"7": 7,
|
|
56
|
+
"8": 8,
|
|
57
|
+
"9": 9,
|
|
58
|
+
"z": 10}
|
|
59
|
+
|
|
60
|
+
def __init__(
|
|
61
|
+
self,
|
|
62
|
+
save_to: str,
|
|
63
|
+
train: bool = True,
|
|
64
|
+
single_digits=False,
|
|
65
|
+
transform: Optional[Callable] = None,
|
|
66
|
+
target_transform: Optional[Callable] = None,
|
|
67
|
+
):
|
|
68
|
+
super().__init__(
|
|
69
|
+
save_to,
|
|
70
|
+
transform=transform,
|
|
71
|
+
target_transform=target_transform,
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
self.url = self.base_url
|
|
75
|
+
# load the data
|
|
76
|
+
self.file_path = os.path.join(self.location_on_system, self.filename)
|
|
77
|
+
|
|
78
|
+
if not self._check_exists():
|
|
79
|
+
self.download()
|
|
80
|
+
|
|
81
|
+
self.data = h5py.File(self.file_path, 'r')
|
|
82
|
+
self.partition = "train" if train else "test"
|
|
83
|
+
self.single_indices = [i for i in range(len(self.data[f"{self.partition}_labels"])) if
|
|
84
|
+
len(self.data[f"{self.partition}_labels"][i].decode().split("-")[-1]) == 1]
|
|
85
|
+
self._samples = [x.decode() for x in self.data[f"{self.partition}_labels"]]
|
|
86
|
+
self.single_digits = single_digits
|
|
87
|
+
|
|
88
|
+
if single_digits:
|
|
89
|
+
self._samples = [self._samples[i] for i in self.single_indices]
|
|
90
|
+
|
|
91
|
+
self.labels = [x.decode().split("-")[-1] for x in self.data[f"{self.partition}_labels"]]
|
|
92
|
+
|
|
93
|
+
def download(self) -> None:
|
|
94
|
+
response = requests.get(self.base_url, stream=True)
|
|
95
|
+
if response.status_code == 200:
|
|
96
|
+
print("Downloading N-TIDIGITS from Dropbox at {}...".format(self.base_url))
|
|
97
|
+
file_size = int(response.headers.get('Content-Length', 0)) # get total file size in bytes
|
|
98
|
+
chunk_size = 8192
|
|
99
|
+
|
|
100
|
+
os.makedirs(self.location_on_system, exist_ok=True)
|
|
101
|
+
# Initialize progress bar
|
|
102
|
+
with open(os.path.join(self.location_on_system, self.filename), 'wb') as f, tqdm(
|
|
103
|
+
total=file_size,
|
|
104
|
+
unit='B',
|
|
105
|
+
unit_scale=True,
|
|
106
|
+
desc="Downloading",
|
|
107
|
+
ascii=True
|
|
108
|
+
) as pbar:
|
|
109
|
+
for chunk in response.iter_content(chunk_size=chunk_size):
|
|
110
|
+
if chunk: # filter out keep-alive new chunks
|
|
111
|
+
f.write(chunk)
|
|
112
|
+
pbar.update(len(chunk))
|
|
113
|
+
else:
|
|
114
|
+
print("Failed to download N-TIDIGITS from Dropbox. Please try again later.")
|
|
115
|
+
response.raise_for_status()
|
|
116
|
+
def __getitem__(self, index):
|
|
117
|
+
sample_id = self._samples[index]
|
|
118
|
+
x = np.asarray(self.data[f"{self.partition}_addresses"][sample_id])
|
|
119
|
+
t = np.asarray(self.data[f"{self.partition}_timestamps"][sample_id])
|
|
120
|
+
events = make_structured_array(
|
|
121
|
+
t * 1e6,
|
|
122
|
+
x,
|
|
123
|
+
1,
|
|
124
|
+
dtype=self.dtype,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
target = sample_id.split("-")[-1]
|
|
128
|
+
|
|
129
|
+
if self.single_digits:
|
|
130
|
+
assert len(target) == 1, "Single digit samples requested, but target is not single digit."
|
|
131
|
+
target = self.class_map[target]
|
|
132
|
+
|
|
133
|
+
if self.transform is not None:
|
|
134
|
+
events = self.transform(events)
|
|
135
|
+
if self.target_transform is not None:
|
|
136
|
+
target = self.target_transform(target)
|
|
137
|
+
return events, target
|
|
138
|
+
|
|
139
|
+
def __len__(self):
|
|
140
|
+
return len(self._samples)
|
|
141
|
+
|
|
142
|
+
def _check_exists(self):
|
|
143
|
+
return (
|
|
144
|
+
self._is_file_present()
|
|
145
|
+
)
|
|
@@ -46,8 +46,8 @@ def differentiator_downsample(events: np.ndarray, sensor_size: tuple, target_siz
|
|
|
46
46
|
time = int(differentiated_time // dt)
|
|
47
47
|
|
|
48
48
|
# Separate events based on polarity and apply Heaviside
|
|
49
|
-
event_hist_pos =
|
|
50
|
-
event_hist_neg =
|
|
49
|
+
event_hist_pos = event_histogram >= noise_threshold
|
|
50
|
+
event_hist_neg = -event_histogram >= noise_threshold
|
|
51
51
|
|
|
52
52
|
frame_histogram[time,...,1] += event_hist_pos
|
|
53
53
|
frame_histogram[time,...,0] += event_hist_neg
|
|
@@ -154,4 +154,4 @@ def integrator_downsample(events: np.ndarray, sensor_size: tuple, target_size: t
|
|
|
154
154
|
|
|
155
155
|
dtype = np.dtype({'names': names, 'formats': formats})
|
|
156
156
|
|
|
157
|
-
return unstructured_to_structured(events_new.copy(), dtype=dtype)
|
|
157
|
+
return unstructured_to_structured(events_new.copy(), dtype=dtype)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"git_version": "e410323", "is_release": false}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"git_version": "82ff84c", "is_release": false}
|
|
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
|
{tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_drop_event_by_area.py
RENAMED
|
File without changes
|
{tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_drop_event_by_time.py
RENAMED
|
File without changes
|
|
File without changes
|
{tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_event_downsampling.py
RENAMED
|
File without changes
|
{tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_merge_polarities.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_random_time_reversal.py
RENAMED
|
File without changes
|
{tonic-1.5.1.dev13 → tonic-1.5.1.dev18}/docs/gallery/transformations/plot_refractory_period.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
|
|
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
|