veils 0.1.0

A high-performance Short-Time Fourier Transform (STFT) library with scipy.signal.ShortTimeFFT compatibility
Documentation

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 implementation
  • src/lib.rs - Rust STFT implementation
  • src/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 CI code-quality job
  • run_comprehensive_tests.sh - Full test suite (build + tests + docs) → matches CI comprehensive-test job
  • run_crate_tests.sh - Publishing readiness (clean env + publish dry-run) → matches CI publish-check job
  • run_docker_comparison.sh - Python vs Rust comparison (complete containerized pipeline)

Docker Infrastructure

  • docker/code_quality.Dockerfile - Base Rust environment with fmt/clippy for quality checks
  • docker/rust.Dockerfile - Rust STFT implementation container for comparisons
  • docker/py.Dockerfile - Python STFT implementation and plotting container
  • docker/create_test.Dockerfile - Clean environment for crate publishing tests
  • run_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)
./run_code_quality_checks.sh

# Full test suite (matches CI comprehensive testing)  
./run_comprehensive_tests.sh

# Publishing readiness (matches CI publish check)
./run_crate_tests.sh

# Python vs Rust comparison (matches CI sanity check)
./run_docker_comparison.sh

The run_docker_comparison.sh script:

  1. Builds both Rust and Python Docker images
  2. Runs Python container to generate test data
  3. Runs Rust container to generate STFT results
  4. Runs Python container again to create plots and reports
  5. Generates all comparison files in comparison_results/

Manual Docker Pipeline (Alternative)

# 1. Build images
docker build -f docker/rust.Dockerfile -t veils-rust .
docker build -f docker/py.Dockerfile -t veils-python .

# 2. Run Python container to generate data
docker run --rm -v $(pwd)/comparison_results:/workspace/comparison_results veils-python python run_full_comparison_docker.py --generate-data

# 3. Run Rust container
docker run --rm -v $(pwd)/comparison_results:/workspace/comparison_results veils-rust

# 4. Run Python container to generate plots and report
docker run --rm -v $(pwd)/comparison_results:/workspace/comparison_results veils-python python run_full_comparison_docker.py --run-comparison

Generated Files

Pipeline Comparisons (Input → Reconstruction):

  • impulse_pipeline_comparison.png
  • sine_wave_pipeline_comparison.png
  • chirp_pipeline_comparison.png

Spectrogram Analysis (Frequency-Time Details):

  • impulse_spectrogram_analysis.png
  • sine_wave_spectrogram_analysis.png
  • chirp_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