# Development and deployment guide ## Runtime profile The repository is ready for a standard CPU Hugging Face Gradio Space. The Space configuration is the YAML block at the top of `README.md`; it selects `app.py`, Python 3.10, and the pinned Gradio version. Runtime packages are in `requirements.txt`: ```text gradio==5.50.0 matplotlib>=3.7,<4 numpy>=1.23,<3 seekpath==2.1.0 spglib>=2.0,<3 ``` `app.py` adds the local `src/` directory to the import path, so a source-layout checkout runs directly without a separate package-install step. ## Local development Create an environment, install the application dependencies, and run the test suite from the repository root: ```bash python -m pip install -r requirements.txt PYTHONPATH=src pytest -q python app.py ``` Open the local Gradio URL and load a bundled example before changing analysis behaviour. The package should also remain usable without Gradio: ```bash python -m pip install -e . induced-exchange-uppasd examples/fept_style/inpsd.dat ``` Keep scientific calculations in `src/induced_exchange/`; `app.py` and `src/induced_exchange/space.py` should remain orchestration and presentation layers. Add or update tests with any behavioural change, especially one that affects input conventions, units, Fourier phases, conditioning diagnostics, or the magnetic model. ## Deploy to Hugging Face Spaces 1. Create a Hugging Face Space with the **Gradio** SDK and a CPU hardware tier appropriate for the intended datasets. 2. Push this repository's release contents to the Space repository. Keep the README YAML metadata, `app.py`, `requirements.txt`, `src/`, and any examples you want visible in the deployed app. 3. Wait for the Space build to complete, then open its public URL. Hugging Face provides the public endpoint, so the application does not use `share=True`. 4. Verify an upload containing separate `inpsd.dat`, `posfile`, `momfile`, and exchange files, as well as a bundled example. ## Operational notes - The application keeps analysis artifacts in temporary storage and cleans prior session artifacts when a new input is loaded. Do not treat Space local disk as durable user storage. - Uploaded inputs are scientific data. Set Space visibility, access controls, and repository history according to the sensitivity of the material. - The interactive mesh selector is limited to CPU-friendly resolutions. Users needing large reciprocal meshes should use the library in their own compute environment. - `spglib` expansion is opt-in in the UI. It should be enabled only for symmetry-reduced exchange files, not complete neighbour lists. - Pinning Gradio matters because the app contains a small compatibility layer for Gradio's 5-to-6 launch/theme API transition. Test a deliberate dependency upgrade locally before publishing it. ## Release checklist - [ ] `PYTHONPATH=src pytest -q` passes. - [ ] `python app.py` starts without import or Gradio warnings that affect use. - [ ] A bundled example completes through download creation. - [ ] README metadata and `requirements.txt` match the intended runtime. - [ ] No private input data, credentials, AI prompts, or local build artifacts are included in the commit.