Metadata-Version: 2.4
Name: bnpm
Version: 0.7.1
Summary: A library of useful modules for data analysis.
Author: Richard Hakim
License: MIT License
        
        Copyright (c) 2021 RichieHakim
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
Keywords: data analysis,machine learning,neuroscience
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: all
Requires-Dist: h5py; extra == "all"
Requires-Dist: ipywidgets; extra == "all"
Requires-Dist: kornia; extra == "all"
Requires-Dist: matplotlib; extra == "all"
Requires-Dist: natsort; extra == "all"
Requires-Dist: numba; extra == "all"
Requires-Dist: numpy; extra == "all"
Requires-Dist: opencv_contrib_python; extra == "all"
Requires-Dist: opt_einsum; extra == "all"
Requires-Dist: optuna; extra == "all"
Requires-Dist: optuna_integration; extra == "all"
Requires-Dist: pandas; extra == "all"
Requires-Dist: paramiko; extra == "all"
Requires-Dist: psutil; extra == "all"
Requires-Dist: PyYAML; extra == "all"
Requires-Dist: pytest; extra == "all"
Requires-Dist: hypothesis; extra == "all"
Requires-Dist: scikit_learn; extra == "all"
Requires-Dist: scikit_image; extra == "all"
Requires-Dist: tqdm; extra == "all"
Requires-Dist: seaborn; extra == "all"
Requires-Dist: sparse; extra == "all"
Requires-Dist: scipy; extra == "all"
Requires-Dist: sqlalchemy; extra == "all"
Requires-Dist: pymysql; extra == "all"
Requires-Dist: xxhash; extra == "all"
Requires-Dist: wandb; extra == "all"
Requires-Dist: tensorly; extra == "all"
Requires-Dist: torch; extra == "all"
Requires-Dist: torchvision; extra == "all"
Requires-Dist: torchaudio; extra == "all"
Requires-Dist: toolz; extra == "all"
Requires-Dist: tables; extra == "all"
Requires-Dist: pulp; extra == "all"
Requires-Dist: spconv; extra == "all"
Requires-Dist: torch_sparse; extra == "all"
Requires-Dist: av; extra == "all"
Requires-Dist: pynwb; extra == "all"
Requires-Dist: sendgrid; extra == "all"
Requires-Dist: pycuda; extra == "all"
Requires-Dist: cuml; extra == "all"
Requires-Dist: cupy; extra == "all"
Requires-Dist: cudf; extra == "all"
Requires-Dist: scanimage_tiff_reader; extra == "all"
Requires-Dist: jupyter; extra == "all"
Requires-Dist: PyWavelets; extra == "all"
Requires-Dist: mat73; extra == "all"
Requires-Dist: pathos; extra == "all"
Requires-Dist: pygame; extra == "all"
Requires-Dist: psycopg2-binary; extra == "all"
Provides-Extra: all-latest
Requires-Dist: h5py; extra == "all-latest"
Requires-Dist: ipywidgets; extra == "all-latest"
Requires-Dist: kornia; extra == "all-latest"
Requires-Dist: matplotlib; extra == "all-latest"
Requires-Dist: natsort; extra == "all-latest"
Requires-Dist: numba; extra == "all-latest"
Requires-Dist: numpy; extra == "all-latest"
Requires-Dist: opencv_contrib_python; extra == "all-latest"
Requires-Dist: opt_einsum; extra == "all-latest"
Requires-Dist: optuna; extra == "all-latest"
Requires-Dist: optuna_integration; extra == "all-latest"
Requires-Dist: pandas; extra == "all-latest"
Requires-Dist: paramiko; extra == "all-latest"
Requires-Dist: psutil; extra == "all-latest"
Requires-Dist: PyYAML; extra == "all-latest"
Requires-Dist: pytest; extra == "all-latest"
Requires-Dist: hypothesis; extra == "all-latest"
Requires-Dist: scikit_learn; extra == "all-latest"
Requires-Dist: scikit_image; extra == "all-latest"
Requires-Dist: tqdm; extra == "all-latest"
Requires-Dist: seaborn; extra == "all-latest"
Requires-Dist: sparse; extra == "all-latest"
Requires-Dist: scipy; extra == "all-latest"
Requires-Dist: sqlalchemy; extra == "all-latest"
Requires-Dist: pymysql; extra == "all-latest"
Requires-Dist: xxhash; extra == "all-latest"
Requires-Dist: wandb; extra == "all-latest"
Requires-Dist: tensorly; extra == "all-latest"
Requires-Dist: torch; extra == "all-latest"
Requires-Dist: torchvision; extra == "all-latest"
Requires-Dist: torchaudio; extra == "all-latest"
Requires-Dist: toolz; extra == "all-latest"
Requires-Dist: tables; extra == "all-latest"
Requires-Dist: pulp; extra == "all-latest"
Requires-Dist: spconv; extra == "all-latest"
Requires-Dist: torch_sparse; extra == "all-latest"
Requires-Dist: av; extra == "all-latest"
Requires-Dist: pynwb; extra == "all-latest"
Requires-Dist: sendgrid; extra == "all-latest"
Requires-Dist: pycuda; extra == "all-latest"
Requires-Dist: cuml; extra == "all-latest"
Requires-Dist: cupy; extra == "all-latest"
Requires-Dist: cudf; extra == "all-latest"
Requires-Dist: scanimage_tiff_reader; extra == "all-latest"
Requires-Dist: jupyter; extra == "all-latest"
Requires-Dist: PyWavelets; extra == "all-latest"
Requires-Dist: mat73; extra == "all-latest"
Requires-Dist: pathos; extra == "all-latest"
Requires-Dist: pygame; extra == "all-latest"
Requires-Dist: psycopg2-binary; extra == "all-latest"
Provides-Extra: full
Requires-Dist: h5py; extra == "full"
Requires-Dist: ipywidgets; extra == "full"
Requires-Dist: kornia; extra == "full"
Requires-Dist: matplotlib; extra == "full"
Requires-Dist: natsort; extra == "full"
Requires-Dist: numba; extra == "full"
Requires-Dist: numpy; extra == "full"
Requires-Dist: opencv_contrib_python; extra == "full"
Requires-Dist: opt_einsum; extra == "full"
Requires-Dist: optuna; extra == "full"
Requires-Dist: optuna_integration; extra == "full"
Requires-Dist: pandas; extra == "full"
Requires-Dist: paramiko; extra == "full"
Requires-Dist: psutil; extra == "full"
Requires-Dist: PyYAML; extra == "full"
Requires-Dist: pytest; extra == "full"
Requires-Dist: hypothesis; extra == "full"
Requires-Dist: scikit_learn; extra == "full"
Requires-Dist: scikit_image; extra == "full"
Requires-Dist: tqdm; extra == "full"
Requires-Dist: seaborn; extra == "full"
Requires-Dist: sparse; extra == "full"
Requires-Dist: scipy; extra == "full"
Requires-Dist: sqlalchemy; extra == "full"
Requires-Dist: pymysql; extra == "full"
Requires-Dist: xxhash; extra == "full"
Requires-Dist: wandb; extra == "full"
Requires-Dist: tensorly; extra == "full"
Requires-Dist: torch; extra == "full"
Requires-Dist: torchvision; extra == "full"
Requires-Dist: torchaudio; extra == "full"
Requires-Dist: toolz; extra == "full"
Requires-Dist: tables; extra == "full"
Requires-Dist: pulp; extra == "full"
Requires-Dist: spconv; extra == "full"
Requires-Dist: torch_sparse; extra == "full"
Requires-Dist: av; extra == "full"
Requires-Dist: pynwb; extra == "full"
Requires-Dist: sendgrid; extra == "full"
Requires-Dist: pycuda; extra == "full"
Requires-Dist: cuml; extra == "full"
Requires-Dist: cupy; extra == "full"
Requires-Dist: cudf; extra == "full"
Requires-Dist: scanimage_tiff_reader; extra == "full"
Requires-Dist: jupyter; extra == "full"
Requires-Dist: PyWavelets; extra == "full"
Requires-Dist: mat73; extra == "full"
Requires-Dist: pathos; extra == "full"
Requires-Dist: pygame; extra == "full"
Requires-Dist: psycopg2-binary; extra == "full"
Provides-Extra: full-latest
Requires-Dist: h5py; extra == "full-latest"
Requires-Dist: ipywidgets; extra == "full-latest"
Requires-Dist: kornia; extra == "full-latest"
Requires-Dist: matplotlib; extra == "full-latest"
Requires-Dist: natsort; extra == "full-latest"
Requires-Dist: numba; extra == "full-latest"
Requires-Dist: numpy; extra == "full-latest"
Requires-Dist: opencv_contrib_python; extra == "full-latest"
Requires-Dist: opt_einsum; extra == "full-latest"
Requires-Dist: optuna; extra == "full-latest"
Requires-Dist: optuna_integration; extra == "full-latest"
Requires-Dist: pandas; extra == "full-latest"
Requires-Dist: paramiko; extra == "full-latest"
Requires-Dist: psutil; extra == "full-latest"
Requires-Dist: PyYAML; extra == "full-latest"
Requires-Dist: pytest; extra == "full-latest"
Requires-Dist: hypothesis; extra == "full-latest"
Requires-Dist: scikit_learn; extra == "full-latest"
Requires-Dist: scikit_image; extra == "full-latest"
Requires-Dist: tqdm; extra == "full-latest"
Requires-Dist: seaborn; extra == "full-latest"
Requires-Dist: sparse; extra == "full-latest"
Requires-Dist: scipy; extra == "full-latest"
Requires-Dist: sqlalchemy; extra == "full-latest"
Requires-Dist: pymysql; extra == "full-latest"
Requires-Dist: xxhash; extra == "full-latest"
Requires-Dist: wandb; extra == "full-latest"
Requires-Dist: tensorly; extra == "full-latest"
Requires-Dist: torch; extra == "full-latest"
Requires-Dist: torchvision; extra == "full-latest"
Requires-Dist: torchaudio; extra == "full-latest"
Requires-Dist: toolz; extra == "full-latest"
Requires-Dist: tables; extra == "full-latest"
Requires-Dist: pulp; extra == "full-latest"
Requires-Dist: spconv; extra == "full-latest"
Requires-Dist: torch_sparse; extra == "full-latest"
Requires-Dist: av; extra == "full-latest"
Requires-Dist: pynwb; extra == "full-latest"
Requires-Dist: sendgrid; extra == "full-latest"
Requires-Dist: pycuda; extra == "full-latest"
Requires-Dist: cuml; extra == "full-latest"
Requires-Dist: cupy; extra == "full-latest"
Requires-Dist: cudf; extra == "full-latest"
Requires-Dist: scanimage_tiff_reader; extra == "full-latest"
Requires-Dist: jupyter; extra == "full-latest"
Requires-Dist: PyWavelets; extra == "full-latest"
Requires-Dist: mat73; extra == "full-latest"
Requires-Dist: pathos; extra == "full-latest"
Requires-Dist: pygame; extra == "full-latest"
Requires-Dist: psycopg2-binary; extra == "full-latest"
Provides-Extra: core
Requires-Dist: numpy; extra == "core"
Requires-Dist: torch; extra == "core"
Requires-Dist: matplotlib; extra == "core"
Requires-Dist: scipy; extra == "core"
Requires-Dist: tqdm; extra == "core"
Requires-Dist: numba; extra == "core"
Requires-Dist: opt_einsum; extra == "core"
Requires-Dist: PyYAML; extra == "core"
Requires-Dist: toolz; extra == "core"
Provides-Extra: plot
Requires-Dist: ipywidgets; extra == "plot"
Requires-Dist: seaborn; extra == "plot"
Requires-Dist: scikit_image; extra == "plot"
Requires-Dist: opencv_contrib_python; extra == "plot"
Requires-Dist: PyWavelets; extra == "plot"
Provides-Extra: ml
Requires-Dist: scikit_learn; extra == "ml"
Requires-Dist: optuna; extra == "ml"
Requires-Dist: optuna_integration; extra == "ml"
Requires-Dist: tensorly; extra == "ml"
Requires-Dist: sparse; extra == "ml"
Requires-Dist: kornia; extra == "ml"
Requires-Dist: torchvision; extra == "ml"
Requires-Dist: torchaudio; extra == "ml"
Requires-Dist: wandb; extra == "ml"
Provides-Extra: io
Requires-Dist: h5py; extra == "io"
Requires-Dist: tables; extra == "io"
Requires-Dist: pandas; extra == "io"
Requires-Dist: natsort; extra == "io"
Requires-Dist: mat73; extra == "io"
Requires-Dist: scanimage_tiff_reader; extra == "io"
Provides-Extra: sql
Requires-Dist: sqlalchemy; extra == "sql"
Requires-Dist: pymysql; extra == "sql"
Requires-Dist: psycopg2-binary; extra == "sql"
Provides-Extra: server
Requires-Dist: paramiko; extra == "server"
Requires-Dist: sendgrid; extra == "server"
Provides-Extra: video
Requires-Dist: av; extra == "video"
Requires-Dist: pygame; extra == "video"
Requires-Dist: pathos; extra == "video"
Requires-Dist: opencv_contrib_python; extra == "video"
Provides-Extra: gpu
Requires-Dist: pycuda; extra == "gpu"
Requires-Dist: cuml; extra == "gpu"
Requires-Dist: cupy; extra == "gpu"
Requires-Dist: cudf; extra == "gpu"
Requires-Dist: spconv; extra == "gpu"
Requires-Dist: torch_sparse; extra == "gpu"
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: hypothesis; extra == "dev"
Requires-Dist: jupyter; extra == "dev"
Requires-Dist: xxhash; extra == "dev"
Provides-Extra: scientific
Requires-Dist: numpy; extra == "scientific"
Requires-Dist: torch; extra == "scientific"
Requires-Dist: matplotlib; extra == "scientific"
Requires-Dist: scipy; extra == "scientific"
Requires-Dist: tqdm; extra == "scientific"
Requires-Dist: numba; extra == "scientific"
Requires-Dist: opt_einsum; extra == "scientific"
Requires-Dist: PyYAML; extra == "scientific"
Requires-Dist: toolz; extra == "scientific"
Requires-Dist: ipywidgets; extra == "scientific"
Requires-Dist: seaborn; extra == "scientific"
Requires-Dist: scikit_image; extra == "scientific"
Requires-Dist: opencv_contrib_python; extra == "scientific"
Requires-Dist: PyWavelets; extra == "scientific"
Requires-Dist: scikit_learn; extra == "scientific"
Requires-Dist: optuna; extra == "scientific"
Requires-Dist: optuna_integration; extra == "scientific"
Requires-Dist: tensorly; extra == "scientific"
Requires-Dist: sparse; extra == "scientific"
Requires-Dist: kornia; extra == "scientific"
Requires-Dist: torchvision; extra == "scientific"
Requires-Dist: torchaudio; extra == "scientific"
Requires-Dist: wandb; extra == "scientific"
Requires-Dist: h5py; extra == "scientific"
Requires-Dist: tables; extra == "scientific"
Requires-Dist: pandas; extra == "scientific"
Requires-Dist: natsort; extra == "scientific"
Requires-Dist: mat73; extra == "scientific"
Requires-Dist: scanimage_tiff_reader; extra == "scientific"
Provides-Extra: core-latest
Requires-Dist: numpy; extra == "core-latest"
Requires-Dist: torch; extra == "core-latest"
Requires-Dist: matplotlib; extra == "core-latest"
Requires-Dist: scipy; extra == "core-latest"
Requires-Dist: tqdm; extra == "core-latest"
Requires-Dist: numba; extra == "core-latest"
Requires-Dist: opt_einsum; extra == "core-latest"
Requires-Dist: PyYAML; extra == "core-latest"
Requires-Dist: toolz; extra == "core-latest"
Provides-Extra: core-cv2headless
Requires-Dist: numpy; extra == "core-cv2headless"
Requires-Dist: torch; extra == "core-cv2headless"
Requires-Dist: matplotlib; extra == "core-cv2headless"
Requires-Dist: scipy; extra == "core-cv2headless"
Requires-Dist: tqdm; extra == "core-cv2headless"
Requires-Dist: numba; extra == "core-cv2headless"
Requires-Dist: opt_einsum; extra == "core-cv2headless"
Requires-Dist: PyYAML; extra == "core-cv2headless"
Requires-Dist: toolz; extra == "core-cv2headless"
Provides-Extra: core-latest-cv2headless
Requires-Dist: numpy; extra == "core-latest-cv2headless"
Requires-Dist: torch; extra == "core-latest-cv2headless"
Requires-Dist: matplotlib; extra == "core-latest-cv2headless"
Requires-Dist: scipy; extra == "core-latest-cv2headless"
Requires-Dist: tqdm; extra == "core-latest-cv2headless"
Requires-Dist: numba; extra == "core-latest-cv2headless"
Requires-Dist: opt_einsum; extra == "core-latest-cv2headless"
Requires-Dist: PyYAML; extra == "core-latest-cv2headless"
Requires-Dist: toolz; extra == "core-latest-cv2headless"
Dynamic: license-file

[![PyPI version](https://badge.fury.io/py/bnpm.svg)](https://badge.fury.io/py/bnpm)
[![Downloads](https://pepy.tech/badge/bnpm)](https://pepy.tech/project/bnpm)
[![repo size](https://img.shields.io/github/repo-size/RichieHakim/basic_neural_processing_modules)](https://github.com/RichieHakim/basic_neural_processing_modules/)

#  basic_neural_processing_modules 
Personal library of functions used in analyzing neural data.
If you find a bug or just want to reach out: RichHakim@gmail.com

## Installation 
Normal installation of `bnpm` does not install all possible dependencies; there are some specific functions that wrap libraries that may need to be installed separately on a case-by-case basis.

Install stable version:
```
pip install bnpm[core]
```

If installing on a server or any computer without graphics/display, install using `core_cv2Headless`. If you accidentally installed the normal version, simply please uninstall `pip uninstall opencv-contrib-python` and install `pip install opencv-contrib-python-headless` instead. 

Functional extras are also available:
- `bnpm[ml]` for modeling and optimization tools
- `bnpm[plot]` for plotting and visualization utilities
- `bnpm[io]` for file/data IO helpers
- `bnpm[sql]` for SQL backends
- `bnpm[server]` for remote/server helpers
- `bnpm[video]` for video processing helpers
- `bnpm[gpu]` for optional GPU ecosystem packages
- `bnpm[dev]` for test/dev tooling
- `bnpm[all]` for the full dependency set


Install development version:
```
pip install git+https://github.com/RichieHakim/basic_neural_processing_modules.git
```

import with:
```
import bnpm
```


## Usage 
My favorites:
- **`automatic_regression`** module
    - Allows for easy and fast hyperparameter optimization of regression models
    - Any model with a `fit` and `predict` method can be used (e.g. `sklearn` and similar)
    - Uses `optuna` for hyperparameter optimization

Other useful functions:
- Signal Processing:
    - `timeSeries.rolling_percentile_rq_multicore`
        - Fast rolling percentile calculation
    -  `timeSeries.event_triggered_traces`
        - Fast creation of a matrix of aligned traces relative to specified event times

- Machine Learning:
    - `neural_networks` module
        - Has nice RNN regression and classification classes
    - `decomposition.torch_PCA`
        - Fast standard PCA using PyTorch
    - `similarity.orthogonalize`
        - Orthogonalize a matrix relative to a set of vectors using OLS or Gram-Schmidt process

- Miscellaneous
    - `path_helpers.find_paths`
        - Find paths to files and/or folders in a directory. Searches recursively using regex.
    - `image_processing.play_video_cv2`
        - Plays and/or saves a 3D array as a video using OpenCV
    - `h5_handling.simple_save` and `h5_handling.simple_load`
        - Simple lazy loading and saving of dictionaries as nested h5 files
