Veils: Rust STFT Implementation
This repository contains an implementation of the stripped-down scipy.signal.ShortTimeFFT class in Python and Rust, with comprehensive verification of ~1:1 accuracy between the implementations.
Files
Core Implementations
standalone_stft.py- Python STFT reference implementationsrc/lib.rs- Rust STFT implementationsrc/bin/shared_data_test.rs- Rust test binary for pipeline verification
Test Scripts (Local Development)
run_code_quality_checks.sh- Fast quality checks (formatting + clippy) → matches CIcode-qualityjobrun_comprehensive_tests.sh- Full test suite (build + tests + docs) → matches CIcomprehensive-testjobrun_crate_tests.sh- Publishing readiness (clean env + publish dry-run) → matches CIpublish-checkjobrun_docker_comparison.sh- Python vs Rust comparison (complete containerized pipeline)
Docker Infrastructure
docker/code_quality.Dockerfile- Base Rust environment with fmt/clippy for quality checksdocker/rust.Dockerfile- Rust STFT implementation container for comparisonsdocker/py.Dockerfile- Python STFT implementation and plotting containerdocker/create_test.Dockerfile- Clean environment for crate publishing testsrun_full_comparison_docker.py- Python script for data generation and comparison
Local Testing Scripts → CI Jobs Mapping
| Local Script | CI Job | Purpose |
|---|---|---|
./run_code_quality_checks.sh |
code-quality |
Format + lint checks |
./run_comprehensive_tests.sh |
comprehensive-test |
Build + all tests + docs |
./run_crate_tests.sh |
publish-check |
Clean env + publish dry-run |
./run_docker_comparison.sh |
sanity-check |
Python vs Rust verification |
Usage
Local Development Testing
Use docker and do small incremental changes; run test scripts to pinpoint and fix issues, or when working on new features.
# Quick quality check (matches CI code-quality job)
# Full test suite (matches CI comprehensive testing)
# Publishing readiness (matches CI publish check)
# Python vs Rust comparison (matches CI sanity check)
The run_docker_comparison.sh script:
- Builds both Rust and Python Docker images
- Runs Python container to generate test data
- Runs Rust container to generate STFT results
- Runs Python container again to create plots and reports
- Generates all comparison files in
comparison_results/
Manual Docker Pipeline (Alternative)
# 1. Build images
# 2. Run Python container to generate data
# 3. Run Rust container
# 4. Run Python container to generate plots and report
Generated Files
Pipeline Comparisons (Input → Reconstruction):
impulse_pipeline_comparison.pngsine_wave_pipeline_comparison.pngchirp_pipeline_comparison.png
Spectrogram Analysis (Frequency-Time Details):
impulse_spectrogram_analysis.pngsine_wave_spectrogram_analysis.pngchirp_spectrogram_analysis.png
Summary Report:
full_comparison_report.txt
Verification Results
| Signal Type | Python Error | Rust Error |
|---|---|---|
| Impulse | 0.00e+00 | 0.00e+00 |
| Sine Wave | 4.57e-17 | 6.19e-17 |
| Chirp | 5.86e-17 | 6.79e-17 |