Metadata-Version: 2.4
Name: sigkit
Version: 0.0.3
Summary: The Python DSP Toolkit
Author: Isaiah Harville, Joshua Payne
License-Expression: MIT
Project-URL: Homepage, https://github.com/IsaiahHarvi/SigKit
Project-URL: Documentation, https://isaiahharvi.github.io/SigKit/api/modules.html
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aiohappyeyeballs==2.6.1
Requires-Dist: aiohttp==3.12.4
Requires-Dist: aiosignal==1.3.2
Requires-Dist: annotated-types==0.7.0
Requires-Dist: asttokens==3.0.0
Requires-Dist: attrs==25.3.0
Requires-Dist: certifi==2025.4.26
Requires-Dist: charset-normalizer==3.4.2
Requires-Dist: click==8.2.1
Requires-Dist: colorama==0.4.6
Requires-Dist: contourpy==1.3.2
Requires-Dist: cycler==0.12.1
Requires-Dist: docker-pycreds==0.4.0
Requires-Dist: executing==2.2.0
Requires-Dist: filelock==3.18.0
Requires-Dist: fonttools==4.58.0
Requires-Dist: frozenlist==1.6.0
Requires-Dist: fsspec==2025.5.1
Requires-Dist: gitdb==4.0.12
Requires-Dist: gitpython==3.1.44
Requires-Dist: icecream==2.1.4
Requires-Dist: idna==3.10
Requires-Dist: iniconfig==2.1.0
Requires-Dist: jinja2==3.1.6
Requires-Dist: kiwisolver==1.4.8
Requires-Dist: lightning==2.5.1.post0
Requires-Dist: lightning-utilities==0.14.3
Requires-Dist: markupsafe==3.0.2
Requires-Dist: matplotlib==3.10.3
Requires-Dist: mpmath==1.3.0
Requires-Dist: multidict==6.4.4
Requires-Dist: narwhals==1.42.0
Requires-Dist: networkx==3.4.2
Requires-Dist: numpy==2.2.6
Requires-Dist: packaging==24.2
Requires-Dist: pillow==11.2.1
Requires-Dist: platformdirs==4.3.8
Requires-Dist: plotly==6.1.2
Requires-Dist: pluggy==1.6.0
Requires-Dist: propcache==0.3.1
Requires-Dist: protobuf==6.31.1
Requires-Dist: psutil==7.0.0
Requires-Dist: pydantic==2.11.5
Requires-Dist: pydantic-core==2.33.2
Requires-Dist: pygments==2.19.1
Requires-Dist: pyparsing==3.2.3
Requires-Dist: pytest==8.3.5
Requires-Dist: python-dateutil==2.9.0.post0
Requires-Dist: pytorch-lightning==2.5.1.post0
Requires-Dist: pyyaml==6.0.2
Requires-Dist: requests==2.32.3
Requires-Dist: ruff==0.11.11
Requires-Dist: sentry-sdk==2.29.1
Requires-Dist: setproctitle==1.3.6
Requires-Dist: six==1.17.0
Requires-Dist: smmap==5.0.2
Requires-Dist: sympy==1.14.0
Requires-Dist: torch==2.7.0
Requires-Dist: torchmetrics==1.7.2
Requires-Dist: torchvision==0.22.0
Requires-Dist: tqdm==4.67.1
Requires-Dist: typing-extensions==4.13.2
Requires-Dist: typing-inspection==0.4.1
Requires-Dist: urllib3==2.4.0
Requires-Dist: wandb==0.19.11
Requires-Dist: yarl==1.20.0
Provides-Extra: docs
Requires-Dist: sphinx; extra == "docs"
Requires-Dist: piccolo_theme; extra == "docs"
Requires-Dist: tomli; extra == "docs"
Dynamic: license-file

# [SigKit](https://github.com/users/IsaiahHarvi/projects/5)

[![Version](https://img.shields.io/github/v/release/IsaiahHarvi/SigKit.svg)](https://github.com/IsaiahHarvi/SigKit/releases)
[![Tests Passing](https://img.shields.io/github/actions/workflow/status/IsaiahHarvi/SigKit/test.yaml)](https://github.com/IsaiahHarvi/SigKit/actions?query=workflow%3Apy-test)
[![GitHub Contributors](https://img.shields.io/github/contributors/IsaiahHarvi/SigKit.svg)](https://github.com/IsaiahHarvi/SigKit/graphs/contributors)
[![Issues](https://img.shields.io/github/issues/IsaiahHarvi/SigKit.svg)](https://github.com/IsaiahHarvi/SigKit/issues)
[![Pull Requests](https://img.shields.io/github/issues-pr/IsaiahHarvi/SigKit.svg)](https://github.com/IsaiahHarvi/SigKit/pulls)


**SigKit** is a modular digital signal‐processing toolkit built on top of NumPy. It has additive impairments to simulate OTA impairments. We include a full Machine Learning toolkit with methods for PyTorch designed for training Modulation Classification Models that are capable of generalizing over the air (OTA). It provides:

- **Core abstractions** (`Signal`, `Impairment`, `Modem`, …) for working in complex baseband
- **NumPy ipairments,  PyTorch Transforms & tools** (AWGN, fading, filtering, SNR & BER calculators)
- **PyTorch Transforms** so you can drop signal operations straight into `Compose`
- **PyTorch Lightning Pipeline** includes our pretrained model and methods for retraining
- **(WIP) GNURadio Blocks** wrapping our tools
- **Synthetic data generators** & `torch.utils.data.Dataset` classes

---

## 🚀 Getting Started

### Try the example notebook
A quick way to explore SigKit is to run the Jupyter notebook in:
```
examples/notebooks/basic.ipynb
```

The notebook is a guide that covers:
- Generating a signal with a Modem
- Adding an Impairment like AWGN
- Calculating Signal Metrics
- Visualizing the waveform
> Be sure to restart your notebook's kernel after installing the package.

### Classification
There is also an example notebook for running the pretrained model.
```
examples/notebooks/classification.ipynb
```
> Pull down LFS objects first with `git lfs pull`


## Installing SigKit

### Package Installation
##### Installing the [pypi](https://pypi.org/project/sigkit/) package
```bash
pip install sigkit
```

##### Installing from source (recommended for ML tasks)
```bash
git clone https://github.com/IsaiahHarvi/SigKit.git
cd SigKit
pip install -e .
```

##### Sanity Check for source installs
You can be gauranteeed your installation is sound by running `pytest` without failure from the root of the repository.

### (Optional) DevContainer for VS Code

If you use VS Code and would prefer to isolate your SigKit installation, we’ve provided a DevContainer in the repository.
It is designed to be OS agnostic but it is confirmed to support: `Ubunutu >22.04, ARM MacOS, Windows`

To setup:
1. Install the **Remote – Containers** extension in VS Code.
2. Clone, open the project, and run `chmod +x .devcontainer/setup.sh`.
3. Run **Reopen in Container** from the VSCode console.

Inside the container you’ll have all dependencies installed and SigKit ready to run.

---

## State of Implementations

The below table tracks major planned features. Smaller features like Signal Impairments and Torch Transforms are not tracked here.

Feature | Implemented | Torch Transform
--------|-------------|----------------
**_Architecture_**    |  -   | -
Rust bindings         |  No  | -
**_GNURadio_**        |  -   | -
ClassificationBlock   |  No  | -
Modulator             |  No  | -
**Modems**            |  -   | -
PSK                   | Yes  | -
FSK                   | Yes  | -
QAM                   | WIP  | -
OFDM                  | WIP  | -
MSK                   | No   | -
ASK                   | No   | -
**Machine Learning**  | -    | -
Training Pipeline     | Yes  | -
Pretrained Model      | Yes (WIP) | -
Procedural Dataset    | Yes  | -
File Dataset          | No  | -
**Signal Impairments**| -    | -
AWGN                  | Yes  | ✅
Frequency Shift       | Yes  | ✅
Phase Shift           | Yes  | ✅
Polyphase Resampling  | No   | ❌
Rayleigh Fading       | No   | ❌
Random Resampling     | No   | ❌
IQ Imbalance          | No   | ❌
Time Shift            | No   | ❌

---

## 🛠️ Development

* **Tests**:

  ```bash
  pytest
  ```
* **Lint & Format**:

  ```bash
  ruff check . --fix
  ruff format .
  ```
* **Update docs**:

  ```bash
  # Install the optional dependencies [docs] or:
  pip install sphinx piccolo_theme tomli

  ./docs/gen.sh
  ```
---

## License

This project is released under the **MIT License**. See [LICENSE](LICENSE) for details.
