Metadata-Version: 2.4
Name: hybrid-perovskite-studio
Version: 0.1.2
Summary: Workspace-oriented Streamlit toolkit for hybrid perovskite modeling, analysis, and visualization.
Author: Rayan Chakraborty
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/rayanc72/hybrid-perovskite-studio
Project-URL: Documentation, https://github.com/rayanc72/hybrid-perovskite-studio/tree/main/docs
Project-URL: Repository, https://github.com/rayanc72/hybrid-perovskite-studio
Project-URL: Issues, https://github.com/rayanc72/hybrid-perovskite-studio/issues
Keywords: hybrid perovskites,materials science,structure analysis,streamlit,electronic structure,molecular dynamics
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Scientific/Engineering :: Chemistry
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: Topic :: Scientific/Engineering :: Visualization
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: streamlit>=1.33
Provides-Extra: core
Requires-Dist: ase; extra == "core"
Requires-Dist: matplotlib; extra == "core"
Requires-Dist: natsort; extra == "core"
Requires-Dist: networkx; extra == "core"
Requires-Dist: numpy; extra == "core"
Requires-Dist: pandas; extra == "core"
Requires-Dist: pillow; extra == "core"
Requires-Dist: plotly; extra == "core"
Requires-Dist: pymatgen; extra == "core"
Requires-Dist: pyyaml; extra == "core"
Requires-Dist: requests; extra == "core"
Requires-Dist: scipy; extra == "core"
Requires-Dist: spglib; extra == "core"
Provides-Extra: md
Requires-Dist: MDAnalysis; extra == "md"
Requires-Dist: seaborn; extra == "md"
Provides-Extra: pdf
Requires-Dist: diffpy.pdffit2; extra == "pdf"
Requires-Dist: diffpy.structure; extra == "pdf"
Provides-Extra: viz
Requires-Dist: bokeh; extra == "viz"
Requires-Dist: colorcet; extra == "viz"
Requires-Dist: holoviews; extra == "viz"
Requires-Dist: ipyspeck; extra == "viz"
Requires-Dist: mpld3; extra == "viz"
Requires-Dist: streamlit-bokeh-events; extra == "viz"
Requires-Dist: streamlit-extras; extra == "viz"
Requires-Dist: streamlit-ketcher; extra == "viz"
Requires-Dist: streamlit-lottie; extra == "viz"
Provides-Extra: auth
Requires-Dist: streamlit-authenticator; extra == "auth"
Provides-Extra: full
Requires-Dist: ase; extra == "full"
Requires-Dist: bokeh; extra == "full"
Requires-Dist: colorcet; extra == "full"
Requires-Dist: holoviews; extra == "full"
Requires-Dist: ipyspeck; extra == "full"
Requires-Dist: matplotlib; extra == "full"
Requires-Dist: MDAnalysis; extra == "full"
Requires-Dist: mpld3; extra == "full"
Requires-Dist: natsort; extra == "full"
Requires-Dist: networkx; extra == "full"
Requires-Dist: numpy; extra == "full"
Requires-Dist: pandas; extra == "full"
Requires-Dist: pillow; extra == "full"
Requires-Dist: plotly; extra == "full"
Requires-Dist: pymatgen; extra == "full"
Requires-Dist: pyyaml; extra == "full"
Requires-Dist: requests; extra == "full"
Requires-Dist: scipy; extra == "full"
Requires-Dist: seaborn; extra == "full"
Requires-Dist: spglib; extra == "full"
Requires-Dist: streamlit-authenticator; extra == "full"
Requires-Dist: streamlit-bokeh-events; extra == "full"
Requires-Dist: streamlit-extras; extra == "full"
Requires-Dist: streamlit-ketcher; extra == "full"
Requires-Dist: streamlit-lottie; extra == "full"
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Dynamic: license-file

# Hybrid Perovskite Studio

Hybrid perovskites are a highly tunable family of functional materials with broad relevance across materials science, chemistry, and condensed-matter physics. Their hybrid organic-inorganic character makes them especially valuable for studying structure-property relationships through systematic changes in composition, molecular orientation, and lattice geometry. At the same time, that same hybrid character makes them difficult to analyze with many conventional structure-chemistry workflows, since the organic and inorganic sublattices often need to be treated differently.

Hybrid Perovskite Studio (HPS) is a workspace-oriented environment, built upon Streamlit, designed to support this kind of analysis and modelling. Its Structure Workspace focuses on tools for parsing, analyzing, and transforming hybrid perovskite structures while explicitly distinguishing between molecular and inorganic building blocks. Starting from experimental or simulated structures, users can inspect symmetry, molecular connectivity, bond lengths, bond angles, distortion metrics, anisotropic displacement information, pair distribution functions, and polarization-related quantities. The same workspace also supports structure editing and modelling operations, including molecule-specific rotations, reflections, translations, deletions, and interpolation-based transformations.

Beyond structure chemistry, HPS also provides tools for analyzing computational outputs. The Electronic Workspace is currently tailored especially to FHI-aims-style inputs and outputs, and includes functionality for plotting band structures, spin textures, partial densities of states, polarization-related quantities, absorption spectra, and Brillouin-zone information. The Dynamics Workspace extends the analysis to time-dependent simulation data, with tools for extracting trajectory-based structural metrics and monitoring how distortions and related descriptors evolve over time. A Utilities Workspace collects supporting tools for plotting and lightweight custom scripting.

HPS is an active research software project and is still evolving. It grew out of a longer collection of notebook-based and script-based workflows developed for hybrid-perovskite research, and is gradually being consolidated into a more structured, reusable application. Although it focuses upon hybrid perovskites, the tools are equally applicable to other materials classes. While the codebase is already useful for day-to-day analysis, some workflows remain under active refinement and edge cases may still appear. The broader goal is to continue expanding HPS into a flexible and maintainable platform for hybrid perovskite modelling, analysis, and visualization.

## Install

```bash
python3 -m venv .venv
source .venv/bin/activate
pip install ".[full]"
```

## Run

```bash
hps
```

For local development:

```bash
pip install -e ".[full]"
streamlit run src/hps/app.py
```

## Docs

- [Getting Started](docs/user-guide/getting-started.md)
- [Feature Map](docs/feature-map.md)
- [Workspace Guides](docs/index.md)

## Gallery

![Landing Page](docs/images/screenshots/landing-page.png)

![Structure Workspace](docs/images/screenshots/structure-workspace.png)

![Band Structure Studio](docs/images/screenshots/band-structure-studio.png)

![Dynamics Workspace](docs/images/screenshots/dynamics-workspace.png)

## Notes

- PyPI/package entrypoint: `hps`
- Main entrypoint: `streamlit run src/hps/app.py`
- Runtime files belong under `tmp/` and `output/`
- Navigation is defined in `src/hps/ui/navigation.py`
