Files
ferro-ta/TROUBLESHOOTING.md
2026-03-23 23:34:28 +05:30

187 lines
5.0 KiB
Markdown

# ferro-ta Troubleshooting Guide
Common build and runtime issues and how to fix them.
---
## Table of Contents
1. [maturin build fails](#maturin-build-fails)
2. [PyO3 version mismatches](#pyo3-version-mismatches)
3. [ImportError: cannot import name '_ferro_ta'](#importerror-cannot-import-name-_ferro_ta)
4. [Rust toolchain not found](#rust-toolchain-not-found)
5. [tests fail with 'ferro_ta not installed'](#tests-fail-with-ferro_ta-not-installed)
6. [mypy / pyright type errors after install](#mypy--pyright-type-errors-after-install)
7. [WASM build fails](#wasm-build-fails)
8. [GPU / CuPy errors](#gpu--cupy-errors)
9. [Coverage below threshold](#coverage-below-threshold)
10. [Common Rust compilation errors](#common-rust-compilation-errors)
---
## maturin build fails
**Symptom:** `maturin develop` or `maturin build` exits with a Rust compilation error.
**Fixes:**
- Ensure you have the **stable** Rust toolchain installed:
```bash
rustup toolchain install stable
rustup default stable
```
- Ensure `rustfmt` and `clippy` components are installed:
```bash
rustup component add rustfmt clippy
```
- Make sure Python headers are available. On Debian/Ubuntu:
```bash
sudo apt-get install python3-dev
```
- If you changed `Cargo.toml`, run `cargo check` first to isolate Rust errors from maturin wrapping issues.
---
## PyO3 version mismatches
**Symptom:** `pyo3` version conflict between your Python interpreter and the version pinned in `Cargo.toml`.
**Fix:** ferro-ta uses PyO3 with the `abi3` feature flag which supports Python 3.10+. If you need a specific version:
```toml
# Cargo.toml
[dependencies]
pyo3 = { version = "0.22", features = ["extension-module", "abi3-py310"] }
```
Run `cargo update -p pyo3` to pull the latest compatible version.
---
## ImportError: cannot import name '_ferro_ta'
**Symptom:**
```
ImportError: cannot import name '_ferro_ta' from 'ferro_ta'
```
**Causes and fixes:**
1. The Rust extension has not been compiled yet — run `maturin develop --release` or `make build`.
2. The `.so` file was compiled for a different Python version — rebuild with the current interpreter.
3. You are running `python` from a different virtualenv — activate the correct environment.
Check that the compiled extension is present:
```bash
python -c "import ferro_ta._ferro_ta; print('OK')"
```
---
## Rust toolchain not found
**Symptom:** `cargo: command not found` or `rustup: command not found`.
**Fix:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
```
---
## tests fail with 'ferro_ta not installed'
**Symptom:** pytest reports import errors for `ferro_ta`.
**Fix:** Build and install the development wheel first:
```bash
maturin develop --release
# or
make build
```
Then re-run tests:
```bash
pytest tests/
```
---
## mypy / pyright type errors after install
**Symptom:** mypy or pyright reports errors for optional dependencies (cupy, polars, etc.).
**Fix:** ferro-ta ships a `pyrightconfig.json` that sets `reportMissingImports = false` for optional deps. For mypy, pass `--ignore-missing-imports`:
```bash
mypy python/ferro_ta --ignore-missing-imports
```
The CI uses this flag by default.
---
## WASM build fails
**Symptom:** `wasm-pack build` fails inside `wasm/`.
**Fix:**
1. Install `wasm-pack`:
```bash
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
```
2. Add the WASM target:
```bash
rustup target add wasm32-unknown-unknown
```
3. Run from the `wasm/` subdirectory (it has its own `[workspace]` table):
```bash
cd wasm && wasm-pack build --target nodejs
```
---
## GPU / CuPy errors
**Symptom:** `ImportError: No module named 'cupy'` or CUDA errors in `ferro_ta.gpu`.
**Fix:** The GPU module is **optional**. Install CuPy matching your CUDA version:
```bash
pip install cupy-cuda12x # for CUDA 12.x
```
If no GPU is available, all ferro_ta functions fall back silently to CPU (NumPy) computation.
---
## Coverage below threshold
**Symptom:** `pytest --cov-fail-under=65` fails with a coverage percentage below 65 %.
**Fix:**
- Run `pytest tests/ --cov=ferro_ta --cov-report=term-missing` to see which lines are uncovered.
- The threshold in CI is 65 %. Local runs may vary if optional dependencies (pandas, polars) are not installed.
- Install all test extras:
```bash
pip install pandas polars hypothesis pyyaml
```
---
## Common Rust compilation errors
### `error[E0425]: cannot find function 'compute_ema'`
Dead code was removed in a refactor. Run `cargo clean` then `cargo build --release`.
### `error: current package believes it's in a workspace when it's not`
This happens in `fuzz/` or `wasm/` sub-crates. Both have `[workspace]` in their `Cargo.toml` to opt out of the root workspace. If you create a new sub-crate, add `[workspace]` to its `Cargo.toml`.
### Linker errors on macOS (Apple Silicon)
```bash
export MACOSX_DEPLOYMENT_TARGET=11.0
maturin develop --release
```
---
## Getting help
- Open an issue: <https://github.com/pratikbhadane24/ferro-ta/issues>
- See `CONTRIBUTING.md` for development guidelines.