Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.2.1] - 2026-04-18

### Changed
- GUI migrated from Streamlit to Dash — launch with `python examples/gui_app.py`
- `gui` optional dependency updated: `dash>=2.14.0` + `dash-bootstrap-components>=1.5.0` (replaces `streamlit`)
- `launch_app.bat` and `stop_app.bat` updated for Dash process management
- Bumped `black` minimum from `>=23.0.0` to `>=24.3.0` in `requirements.txt`

### Fixed
- Removed stale `streamlit` dependency from `requirements.txt` and `environment.yml`
- Corrected all remaining Streamlit references in docs to Dash (`about.md`, `installation.md`, `contributing.md`, `tutorials/index.md`)
- Updated version number from 0.1.0 to 0.2.0 in `docs/about.md` (including BibTeX citation)
- Fixed Python minimum version in `docs/installation.md` (3.8 → 3.9)
- Updated author contact email to `The-Schultz-Lab@users.noreply.github.com` in `docs/about.md`
- Replaced broken `docs/ROADMAP.md` and `docs/PERFORMANCE_TESTING_GUIDE.md` links in `README.md` and `docs/contributing.md`
- Updated stale Streamlit cache reference in `tests/test_performance.py`
- Fixed logo not rendering on PyPI by replacing relative `logo.svg` path with absolute raw GitHub URL

## [0.2.0] - 2026-04-04

Expand Down
34 changes: 19 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# plotlyMol

<p align="center">
<img src="logo.svg" alt="plotlyMol Logo" width="300"/>
<img src="https://raw.githubusercontent.com/The-Schultz-Lab/plotlyMol/main/logo.svg" alt="plotlyMol Logo" width="300"/>
</p>

[![Tests](https://github.com/The-Schultz-Lab/plotlyMol/actions/workflows/test.yml/badge.svg)](https://github.com/The-Schultz-Lab/plotlyMol/actions/workflows/test.yml)
Expand All @@ -20,11 +20,15 @@ Interactive molecular visualizations with Plotly. Supports SMILES, XYZ, MOL/PDB,
- Static displacement arrows
- Animated vibrations with interactive controls
- Heatmap coloring by displacement magnitude
- Streamlit GUI for interactive exploration
- Dash GUI for interactive exploration

## Installation

### From source (recommended for now)
```bash
pip install plotlymol
```

### From source (for development)

```bash
git clone https://github.com/The-Schultz-Lab/plotlyMol.git
Expand Down Expand Up @@ -68,13 +72,13 @@ fig.show()
from plotlymol3d import draw_3D_rep

fig = draw_3D_rep(
cubefile="path/to/file.cube",
molfile="path/to/file.mol",
mode="ball+stick",
ambient=0.1,
cubedraw="orbitals",
orbital_opacity=0.25,
orbital_colors=["darkorange", "darkblue"],
cubefile="path/to/file.cube",
molfile="path/to/file.mol",
mode="ball+stick",
ambient=0.1,
cubedraw="orbitals",
orbital_opacity=0.25,
orbital_colors=["darkorange", "darkblue"],
)
fig.show()
```
Expand Down Expand Up @@ -167,10 +171,10 @@ for mode in vib_data.modes:

## GUI

Launch the Streamlit app for interactive controls:
Launch the Dash app for interactive controls:

```bash
streamlit run examples/gui_app.py
python examples/gui_app.py
```

## Examples
Expand Down Expand Up @@ -213,7 +217,7 @@ python tests/test_performance.py
jupyter notebook examples/performance_benchmarking.ipynb
```

**Full guide:** [Performance Testing Guide](docs/PERFORMANCE_TESTING_GUIDE.md)
**Full guide:** `docs/PERFORMANCE_TESTING_GUIDE.md` (coming soon)

**Key metrics tracked:**

Expand All @@ -227,7 +231,7 @@ Use these tools to identify bottlenecks and optimize GUI responsiveness.

## Repository layout

```
```text
plotlyMol/
├─ src/
│ └─ plotlymol3d/ # Library package code + sample data files
Expand All @@ -241,4 +245,4 @@ plotlyMol/

## Roadmap

See the current roadmap in [docs/ROADMAP.md](docs/ROADMAP.md).
See [GitHub Issues](https://github.com/The-Schultz-Lab/plotlyMol/issues) for planned features and upcoming work.
13 changes: 7 additions & 6 deletions docs/about.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plotlyMol is an open-source Python package for creating interactive 3D molecular
**Jonathan Schultz**
North Carolina Central University, Assistant Professor of Chemistry

**Benjamin Lear**
**[Benjamin Lear](https://github.com/ProfLear)**
(The Pennsylvania State University, Professor of Chemistry)

## Motivation
Expand Down Expand Up @@ -51,7 +51,7 @@ plotlyMol is built on industry-standard scientific Python libraries:

### Optional Components

- **[Streamlit](https://streamlit.io/)** - Web app framework for GUI
- **[Dash](https://dash.plotly.com/)** - Web app framework for GUI
- **[Kaleido](https://github.com/plotly/Kaleido)** - Static image export
- **pytest** - Testing framework
- **black/ruff** - Code quality tools
Expand All @@ -61,6 +61,7 @@ plotlyMol is built on industry-standard scientific Python libraries:
### Simplicity

Simple things should be simple:

```python
from plotlymol3d import draw_3D_rep
fig = draw_3D_rep(smiles="CCO")
Expand All @@ -70,6 +71,7 @@ fig.show()
### Flexibility

Complex things should be possible:

```python
fig = draw_3D_rep(
cubefile="orbital.cube",
Expand Down Expand Up @@ -139,7 +141,7 @@ Initial development by Prof. Lear focused on creating a modern molecular visuali

## Project Status

**Current Version**: 0.1.0 (Development)
**Current Version**: 0.2.0 (Development)

**Status**: Pre-release

Expand Down Expand Up @@ -194,7 +196,7 @@ Thanks to the developers of:

plotlyMol is released under the [MIT License](https://github.com/The-Schultz-Lab/plotlyMol/blob/main/LICENSE).

```
```text
MIT License

Copyright (c) 2026 Jonathan Schultz & Benjamin Lear
Expand All @@ -214,7 +216,6 @@ copies or substantial portions of the Software.

- **GitHub Issues**: [Report issues or request features](https://github.com/The-Schultz-Lab/plotlyMol/issues)
- **GitHub Discussions**: [Ask questions or share ideas](https://github.com/The-Schultz-Lab/plotlyMol/discussions)
- **Email**: jonathanschultzNU@users.noreply.github.com

## Citation

Expand All @@ -226,7 +227,7 @@ If you use plotlyMol in your research, please cite:
author = {Schultz, Jonathan and Lear, Benjamin},
year = {2026},
url = {https://github.com/The-Schultz-Lab/plotlyMol},
note = {Version 0.1.0}
note = {Version 0.2.0}
}
```

Expand Down
17 changes: 10 additions & 7 deletions docs/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Thank you for your interest in contributing to plotlyMol! This guide will help y

## Ways to Contribute

### Report Bugs
### Report Bugs

Found a bug? Please [open an issue](https://github.com/The-Schultz-Lab/plotlyMol/issues/new) with:

Expand All @@ -14,15 +14,15 @@ Found a bug? Please [open an issue](https://github.com/The-Schultz-Lab/plotlyMol
- System information (OS, Python version)
- Minimal code example

### Suggest Features
### Suggest Features

Have an idea? We'd love to hear it! [Open an issue](https://github.com/The-Schultz-Lab/plotlyMol/issues/new) describing:

- The feature and its use case
- Why it would be valuable
- Possible implementation approach (optional)

### Improve Documentation
### Improve Documentation

Documentation improvements are always welcome:

Expand All @@ -31,7 +31,7 @@ Documentation improvements are always welcome:
- Improve API documentation
- Translate documentation (future)

### Submit Code
### Submit Code

Ready to code? Great! Follow the guidelines below.

Expand Down Expand Up @@ -213,11 +213,13 @@ pre-commit run --all-files
All pull requests must pass CI checks:

#### Test Workflow

- Runs on Ubuntu, macOS, Windows
- Tests Python 3.9, 3.10, 3.11, 3.12
- Runs full test suite with coverage

#### Lint Workflow

- Black formatting check
- Ruff linting
- Mypy type checking
Expand Down Expand Up @@ -297,6 +299,7 @@ Your PR should:
To add support for a new file format:

1. Add parser function in `plotlyMol3D.py`:

```python
def newformat_to_rdkitmol(filepath: str) -> Chem.Mol:
"""Parse new format file to RDKit Mol."""
Expand All @@ -320,10 +323,10 @@ To add new visualization features:

#### 3. GUI Features

To enhance the Streamlit GUI:
To enhance the Dash GUI:

1. Modify `src/plotlymol3d/app.py`
2. Test manually with `streamlit run`
2. Test manually with `python examples/gui_app.py`
3. Update user guide

## Documentation
Expand Down Expand Up @@ -397,7 +400,7 @@ We use [Semantic Versioning](https://semver.org/):

## Development Roadmap

See [ROADMAP.md](roadmap.md) for planned features and improvements.
See [GitHub Issues](https://github.com/The-Schultz-Lab/plotlyMol/issues) for planned features and improvements.

## Recognition

Expand Down
4 changes: 2 additions & 2 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Requirements

plotlyMol requires **Python 3.8 or higher**.
plotlyMol requires **Python 3.9 or higher**.

## Install from Source

Expand Down Expand Up @@ -50,7 +50,7 @@ This includes:
- **black** - Code formatting
- **ruff** - Fast linting
- **mypy** - Type checking
- **streamlit** - GUI application
- **dash** + **dash-bootstrap-components** - GUI application

## Verify Installation

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorials/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Comprehensive tutorials are currently in development! Check back soon for:
- Embedding visualizations
- Building web apps
- API integration
- Streamlit deployment
- Dash deployment

## Jupyter Notebooks

Expand Down
3 changes: 2 additions & 1 deletion environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ dependencies:
- numpy>=1.20.0

# GUI
- streamlit>=1.30.0
- dash>=2.14.0
- dash-bootstrap-components>=1.5.0

# Testing
- pytest>=7.0.0
Expand Down
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ build-backend = "setuptools.build_meta"

[project]
name = "plotlymol"
version = "0.2.0"
version = "0.2.1"
description = "A package to create interactive molecular visualizations using Plotly"
readme = "README.md"
authors = [
{name = "Jonathan Schultz", email = "jonathanschultzNU@users.noreply.github.com"},
{name = "Jonathan Schultz"},
{name = "Benjamin Lear"}
]
license = {text = "MIT"}
Expand Down Expand Up @@ -154,7 +154,7 @@ ignore = [
]

[tool.ruff.lint.per-file-ignores]
"tests/*" = ["ARG", "S101"]
"tests/*" = ["ARG", "S101", "E402"]
"src/plotlymol3d/__init__.py" = ["F403"]
"src/plotlymol3d/test.py" = ["ALL"]
"src/plotlymol3d/Cube_to_Blender*" = ["ALL"]
Expand Down
7 changes: 4 additions & 3 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ pytest>=7.0.0
pytest-cov>=4.0.0

# Linting and Formatting
black>=23.0.0
black>=24.3.0
ruff>=0.1.0
flake8>=6.0.0

Expand All @@ -19,8 +19,9 @@ mypy>=1.0.0
# Optional: Pre-commit hooks
pre-commit>=3.0.0

# GUI for visual testing
streamlit>=1.30.0
# GUI
dash>=2.14.0
dash-bootstrap-components>=1.5.0

# Documentation
mkdocs>=1.5.0
Expand Down
4 changes: 2 additions & 2 deletions tests/test_performance.py
Original file line number Diff line number Diff line change
Expand Up @@ -515,10 +515,10 @@ def analyze_performance_results(results: dict[str, pd.DataFrame]):

# General recommendations
print("\n6. GENERAL RECOMMENDATIONS:")
print(" For GUI/Streamlit Performance:")
print(" For GUI/Dash Performance:")
print(" • Use resolution=16 for interactive preview (2-3x faster)")
print(" • Switch to resolution=32 for final figures")
print(" • Cache parsed vibration files with @st.cache_resource")
print(" • Cache parsed vibration files using session state")
print(" • Use 'stick' mode for molecules >50 atoms")
print(" • Limit animations to 20-30 frames during development")
print(" • Consider 'vdw' mode for very large systems (>100 atoms)")
Expand Down
Loading