diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..ee7505a --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,64 @@ +# Copilot Instructions + +## Repository Overview + +This repository provides Python bindings for the [easySBA](https://users.ics.forth.gr/~lourakis/sba/) sparse bundle adjustment C library, using [pybind11](https://pybind11.readthedocs.io/). + +## Repository Layout + +- `src/` – Original C/C++ sources for the easySBA library and the license. +- `easysba/` – Python package: `__init__.py` re-exports `easy_sba` from the compiled pybind11 extension (`_easysba.cpp`). +- `tests/` – `unittest`-based test suite run with `pytest`. +- `docs/` – Usage documentation (`USAGE.md`). +- `pyproject.toml` / `setup.py` – Build configuration (setuptools + pybind11 C extension, cibuildwheel for wheels). + +## Build Requirements + +- Python 3.11+ +- C/C++ toolchain +- BLAS/LAPACK development libraries (e.g. `libblas-dev`, `liblapack-dev`, `liblapacke-dev`) +- Python packages: `numpy`, `pybind11`, `setuptools`, `wheel` + +On Ubuntu/Debian: + +```bash +sudo apt-get install -y build-essential libblas-dev liblapack-dev liblapacke-dev gfortran +``` + +Install the package locally (editable or regular): + +```bash +pip install -v . +# or with uv +uv pip install -v . +``` + +## Running Tests + +```bash +pytest +``` + +Tests that actually run the SBA solver require the environment variable `EASYSBA_RUN_SOLVER=1`: + +```bash +EASYSBA_RUN_SOLVER=1 pytest +``` + +## Code Style and Conventions + +- Python code follows standard PEP 8 conventions. +- C/C++ code in `src/` and `easysba/_easysba.cpp` follows the style of the existing sources. +- Tests live in `tests/` and use `unittest.TestCase` classes, discovered and run via `pytest`. +- Keep the public Python API minimal: `easysba.easy_sba(...)` is the single entry point. + +## Key Files + +| File | Purpose | +|---|---| +| `easysba/_easysba.cpp` | pybind11 binding: wraps the C `easy_sba` function | +| `easysba/__init__.py` | Re-exports `easy_sba` for the public package API | +| `src/sba_levmar.c` | Core Levenberg-Marquardt SBA implementation | +| `tests/test_smoke.py` | Smoke tests (import check + optional solver run) | +| `tests/test_sba_steps.py` | Step-by-step SBA tests | +| `pyproject.toml` | Build system and cibuildwheel configuration |