eagleplot 3.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- eagleplot-3.0.0/LICENSE +21 -0
- eagleplot-3.0.0/PKG-INFO +304 -0
- eagleplot-3.0.0/README.md +246 -0
- eagleplot-3.0.0/eagleplot/Home.py +362 -0
- eagleplot-3.0.0/eagleplot/__init__.py +19 -0
- eagleplot-3.0.0/eagleplot/annotations.py +215 -0
- eagleplot-3.0.0/eagleplot/assets/logo.ico +0 -0
- eagleplot-3.0.0/eagleplot/assets/logo.png +0 -0
- eagleplot-3.0.0/eagleplot/assets/nccu-horiz-logo.png +0 -0
- eagleplot-3.0.0/eagleplot/assets/nccu-wings.png +0 -0
- eagleplot-3.0.0/eagleplot/batch.py +446 -0
- eagleplot-3.0.0/eagleplot/cli.py +719 -0
- eagleplot-3.0.0/eagleplot/data_tools.py +849 -0
- eagleplot-3.0.0/eagleplot/example-data/Artificial/bimodal_distribution.csv +501 -0
- eagleplot-3.0.0/eagleplot/example-data/Artificial/correlation_matrix.npy +0 -0
- eagleplot-3.0.0/eagleplot/example-data/Artificial/gaussian_surface.npy +0 -0
- eagleplot-3.0.0/eagleplot/example-data/Artificial/grouped_categorical.csv +241 -0
- eagleplot-3.0.0/eagleplot/example-data/Artificial/ir_spectrum.csv +1802 -0
- eagleplot-3.0.0/eagleplot/example-data/Artificial/molecular_properties.csv +121 -0
- eagleplot-3.0.0/eagleplot/example-data/Artificial/normal_distribution.csv +401 -0
- eagleplot-3.0.0/eagleplot/example-data/Artificial/reaction_kinetics.csv +121 -0
- eagleplot-3.0.0/eagleplot/example-data/Artificial/scatter_correlation.csv +201 -0
- eagleplot-3.0.0/eagleplot/example-data/Artificial/sine_cosine_waves.csv +301 -0
- eagleplot-3.0.0/eagleplot/gallery/box_plot.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/contour_plot.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/distribution_plot.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/heatmap.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/histogram.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/interactive_3d_surface.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/interactive_heatmap.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/interactive_histogram.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/interactive_line.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/interactive_scatter.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/line_plot.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/manifest.json +196 -0
- eagleplot-3.0.0/eagleplot/gallery/regression_plot.png +0 -0
- eagleplot-3.0.0/eagleplot/gallery/scatter_plot.png +0 -0
- eagleplot-3.0.0/eagleplot/io.py +1008 -0
- eagleplot-3.0.0/eagleplot/math.py +1210 -0
- eagleplot-3.0.0/eagleplot/molecular/__init__.py +21 -0
- eagleplot-3.0.0/eagleplot/molecular/atom_data.py +287 -0
- eagleplot-3.0.0/eagleplot/molecular/parsers.py +747 -0
- eagleplot-3.0.0/eagleplot/nist.py +241 -0
- eagleplot-3.0.0/eagleplot/pages/10_Molecular_Viz.py +225 -0
- eagleplot-3.0.0/eagleplot/pages/11_Batch_Analysis.py +325 -0
- eagleplot-3.0.0/eagleplot/pages/12_Help.py +199 -0
- eagleplot-3.0.0/eagleplot/pages/13_Settings.py +388 -0
- eagleplot-3.0.0/eagleplot/pages/1_Data_Upload.py +521 -0
- eagleplot-3.0.0/eagleplot/pages/2_Quick_Plot.py +1693 -0
- eagleplot-3.0.0/eagleplot/pages/3_Analysis_Tools.py +2510 -0
- eagleplot-3.0.0/eagleplot/pages/4_Multi_Plot_Dashboard.py +791 -0
- eagleplot-3.0.0/eagleplot/pages/5_Advanced_Plotting.py +691 -0
- eagleplot-3.0.0/eagleplot/pages/6_Export_Results.py +442 -0
- eagleplot-3.0.0/eagleplot/pages/7_Gallery.py +201 -0
- eagleplot-3.0.0/eagleplot/pages/8_Data_Tools.py +434 -0
- eagleplot-3.0.0/eagleplot/pages/9_Spectroscopy.py +821 -0
- eagleplot-3.0.0/eagleplot/pages/__init__.py +8 -0
- eagleplot-3.0.0/eagleplot/peaks.py +513 -0
- eagleplot-3.0.0/eagleplot/plotting.py +2630 -0
- eagleplot-3.0.0/eagleplot/plugin_loader.py +208 -0
- eagleplot-3.0.0/eagleplot/report.py +448 -0
- eagleplot-3.0.0/eagleplot/signal.py +494 -0
- eagleplot-3.0.0/eagleplot/spectroscopy.py +830 -0
- eagleplot-3.0.0/eagleplot/utils/__init__.py +76 -0
- eagleplot-3.0.0/eagleplot/utils/access.py +77 -0
- eagleplot-3.0.0/eagleplot/utils/data_preview.py +352 -0
- eagleplot-3.0.0/eagleplot/utils/plot_config.py +2721 -0
- eagleplot-3.0.0/eagleplot/utils/session_state.py +535 -0
- eagleplot-3.0.0/eagleplot/utils/theming.py +312 -0
- eagleplot-3.0.0/eagleplot/utils/user_settings.py +294 -0
- eagleplot-3.0.0/eagleplot.egg-info/PKG-INFO +304 -0
- eagleplot-3.0.0/eagleplot.egg-info/SOURCES.txt +101 -0
- eagleplot-3.0.0/eagleplot.egg-info/dependency_links.txt +1 -0
- eagleplot-3.0.0/eagleplot.egg-info/entry_points.txt +2 -0
- eagleplot-3.0.0/eagleplot.egg-info/requires.txt +39 -0
- eagleplot-3.0.0/eagleplot.egg-info/top_level.txt +1 -0
- eagleplot-3.0.0/pyproject.toml +150 -0
- eagleplot-3.0.0/setup.cfg +4 -0
- eagleplot-3.0.0/tests/test_annotations.py +248 -0
- eagleplot-3.0.0/tests/test_batch.py +538 -0
- eagleplot-3.0.0/tests/test_cli.py +557 -0
- eagleplot-3.0.0/tests/test_data_tools.py +617 -0
- eagleplot-3.0.0/tests/test_docs_consistency.py +118 -0
- eagleplot-3.0.0/tests/test_docs_site.py +181 -0
- eagleplot-3.0.0/tests/test_gui_pages.py +44 -0
- eagleplot-3.0.0/tests/test_gui_paths.py +139 -0
- eagleplot-3.0.0/tests/test_gui_safety.py +163 -0
- eagleplot-3.0.0/tests/test_integration.py +360 -0
- eagleplot-3.0.0/tests/test_io.py +704 -0
- eagleplot-3.0.0/tests/test_math.py +700 -0
- eagleplot-3.0.0/tests/test_molecular_parsers.py +582 -0
- eagleplot-3.0.0/tests/test_nist.py +209 -0
- eagleplot-3.0.0/tests/test_peaks.py +455 -0
- eagleplot-3.0.0/tests/test_plotting.py +1101 -0
- eagleplot-3.0.0/tests/test_plotting_advanced.py +689 -0
- eagleplot-3.0.0/tests/test_plugin_loader.py +286 -0
- eagleplot-3.0.0/tests/test_rename_compat.py +86 -0
- eagleplot-3.0.0/tests/test_repo_hygiene.py +69 -0
- eagleplot-3.0.0/tests/test_report.py +396 -0
- eagleplot-3.0.0/tests/test_signal.py +365 -0
- eagleplot-3.0.0/tests/test_spectroscopy.py +648 -0
- eagleplot-3.0.0/tests/test_theming.py +275 -0
- eagleplot-3.0.0/tests/test_utils.py +1109 -0
eagleplot-3.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jonathan D. Schultz, North Carolina Central University
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
eagleplot-3.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: eagleplot
|
|
3
|
+
Version: 3.0.0
|
|
4
|
+
Summary: A general-purpose Python toolkit for scientific data visualization and analysis
|
|
5
|
+
Author-email: "Jonathan D. Schultz" <jschult3@nccu.edu>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/The-Schultz-Lab/eagleplot
|
|
8
|
+
Project-URL: Repository, https://github.com/The-Schultz-Lab/eagleplot
|
|
9
|
+
Project-URL: Documentation, https://the-schultz-lab.github.io/eagleplot/
|
|
10
|
+
Project-URL: Bug Tracker, https://github.com/The-Schultz-Lab/eagleplot/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/The-Schultz-Lab/eagleplot/blob/main/CHANGELOG.md
|
|
12
|
+
Keywords: visualization,plotting,science,chemistry,matplotlib,plotly,streamlit
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Intended Audience :: Education
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
23
|
+
Requires-Python: !=3.9.7,>=3.9
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: numpy>=1.24.0
|
|
27
|
+
Requires-Dist: scipy>=1.10.0
|
|
28
|
+
Requires-Dist: pandas>=2.0.0
|
|
29
|
+
Requires-Dist: matplotlib>=3.7.0
|
|
30
|
+
Requires-Dist: seaborn>=0.12.0
|
|
31
|
+
Requires-Dist: plotly>=5.14.0
|
|
32
|
+
Requires-Dist: streamlit>=1.49.0
|
|
33
|
+
Requires-Dist: openpyxl>=3.1.0
|
|
34
|
+
Requires-Dist: PyYAML>=6.0
|
|
35
|
+
Requires-Dist: tomli>=2.0.0; python_version < "3.11"
|
|
36
|
+
Provides-Extra: formats
|
|
37
|
+
Requires-Dist: h5py>=3.0.0; extra == "formats"
|
|
38
|
+
Requires-Dist: xarray>=0.20.0; extra == "formats"
|
|
39
|
+
Requires-Dist: netcdf4>=1.6.0; extra == "formats"
|
|
40
|
+
Provides-Extra: nist
|
|
41
|
+
Requires-Dist: requests>=2.28.0; extra == "nist"
|
|
42
|
+
Provides-Extra: docs
|
|
43
|
+
Requires-Dist: markdown>=3.5; extra == "docs"
|
|
44
|
+
Provides-Extra: test
|
|
45
|
+
Requires-Dist: pytest>=7.4.0; extra == "test"
|
|
46
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
|
|
47
|
+
Provides-Extra: dev
|
|
48
|
+
Requires-Dist: eagleplot[test]; extra == "dev"
|
|
49
|
+
Requires-Dist: ruff==0.17.3; extra == "dev"
|
|
50
|
+
Requires-Dist: mypy==2.4.1; extra == "dev"
|
|
51
|
+
Requires-Dist: types-PyYAML>=6.0.12.20250915; extra == "dev"
|
|
52
|
+
Requires-Dist: types-requests>=2.28.0; extra == "dev"
|
|
53
|
+
Requires-Dist: build>=1.4.3; extra == "dev"
|
|
54
|
+
Requires-Dist: twine>=5.0.0; extra == "dev"
|
|
55
|
+
Provides-Extra: all
|
|
56
|
+
Requires-Dist: eagleplot[formats,nist]; extra == "all"
|
|
57
|
+
Dynamic: license-file
|
|
58
|
+
|
|
59
|
+
# EaglePlot
|
|
60
|
+
|
|
61
|
+
[](https://github.com/The-Schultz-Lab/eagleplot/actions/workflows/tests.yml)
|
|
62
|
+
[](https://pypi.org/project/eagleplot/)
|
|
63
|
+
[](https://mybinder.org/v2/gh/The-Schultz-Lab/eagleplot/main)
|
|
64
|
+
|
|
65
|
+
A general-purpose Python toolkit for scientific data visualization and analysis, developed for research and teaching in computational science at North Carolina Central University.
|
|
66
|
+
|
|
67
|
+
> **EaglePlot was called Plottle until version 3.0.** If you used Plottle, change
|
|
68
|
+
> `import plottle` / `from plottle.… import …` to `eagleplot`, and run the `eagleplot`
|
|
69
|
+
> command instead of `plottle`. Session files saved by Plottle still load.
|
|
70
|
+
|
|
71
|
+
## Overview
|
|
72
|
+
|
|
73
|
+
EaglePlot provides a unified interface for scientific data work:
|
|
74
|
+
|
|
75
|
+
- **Data I/O** — 18 file formats (CSV, Excel, TSV, JSON, Parquet, NumPy, Pickle, JCAMP-DX, HDF5, NetCDF, SPC, ASC, mzML/mzXML, and more)
|
|
76
|
+
- **Mathematical analysis** — statistics, curve fitting, signal processing, peak analysis, hypothesis testing, optimization, linear algebra
|
|
77
|
+
- **Multi-library plotting** — 27 plot types across Matplotlib (static), Seaborn (statistical), and Plotly (interactive)
|
|
78
|
+
- **14-page Streamlit GUI** — exploratory data analysis without writing code
|
|
79
|
+
- **CLI** — batch processing and scripted workflows
|
|
80
|
+
- **Plugin system** — drop `plugin_*.py` into `plugins/` for custom plot types and tools
|
|
81
|
+
|
|
82
|
+
## Quick Start
|
|
83
|
+
|
|
84
|
+
### Clone the repository
|
|
85
|
+
|
|
86
|
+
#### 1 — Clone and enter the repository
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
git clone https://github.com/The-Schultz-Lab/eagleplot.git
|
|
90
|
+
cd eagleplot
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### 2 — Set up and launch (double-click, no terminal needed)
|
|
94
|
+
|
|
95
|
+
**Windows:**
|
|
96
|
+
1. Double-click **`setup.bat`** — creates the virtual environment and installs all dependencies.
|
|
97
|
+
2. Double-click **`launch.bat`** — starts EaglePlot. Use this every time you want to open the app.
|
|
98
|
+
|
|
99
|
+
**macOS:**
|
|
100
|
+
1. Double-click **`setup.command`** — creates the virtual environment and installs all dependencies.
|
|
101
|
+
*(If macOS asks "Are you sure you want to open it?", click Open.)*
|
|
102
|
+
2. Double-click **`launch.command`** — starts EaglePlot. Use this every time you want to open the app.
|
|
103
|
+
|
|
104
|
+
**Linux:**
|
|
105
|
+
1. Run **`./setup.sh`** in a terminal — creates the virtual environment and installs all dependencies.
|
|
106
|
+
*(On Debian/Ubuntu you may first need `sudo apt install python3-venv`.)*
|
|
107
|
+
2. Run **`./launch.sh`** — starts EaglePlot.
|
|
108
|
+
|
|
109
|
+
After the app starts, open **`http://localhost:8501`** in your browser (Streamlit usually opens it automatically).
|
|
110
|
+
|
|
111
|
+
#### 2 (alternative) — Set up and launch from the terminal
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
python -m venv .venv
|
|
115
|
+
|
|
116
|
+
# Windows
|
|
117
|
+
.venv\Scripts\activate
|
|
118
|
+
|
|
119
|
+
# macOS / Linux
|
|
120
|
+
source .venv/bin/activate
|
|
121
|
+
|
|
122
|
+
# Install EaglePlot and its dependencies. The editable install is what puts the
|
|
123
|
+
# `eagleplot` command on your PATH.
|
|
124
|
+
pip install -e ".[formats,nist]"
|
|
125
|
+
|
|
126
|
+
streamlit run eagleplot/Home.py
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### 3 — Or use the CLI
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
eagleplot --help
|
|
133
|
+
eagleplot plot data.csv --plot scatter --x-column x --y-column y
|
|
134
|
+
eagleplot stats data.csv
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
The `eagleplot` command comes from the `pip install` above. From a source checkout
|
|
138
|
+
without installing, use `python -m eagleplot.cli` instead.
|
|
139
|
+
|
|
140
|
+
## GUI Pages
|
|
141
|
+
|
|
142
|
+
| Page | Description |
|
|
143
|
+
| --- | --- |
|
|
144
|
+
| **Home** | Dashboard overview and help tabs |
|
|
145
|
+
| **1 — Data Upload** | Upload files in 18 formats; preview shape, column types, and summary statistics; batch folder import |
|
|
146
|
+
| **2 — Quick Plot** | 27 plot types with live style controls, annotation panel, and Convert to Plotly toggle |
|
|
147
|
+
| **3 — Analysis Tools** | 8 tabs: Statistics, Distribution, Curve Fit, Optimization, Linear Algebra, Signal Processing, Peak Analysis, Statistical Tests |
|
|
148
|
+
| **4 — Multi-Plot Dashboard** | Up to 4×4 grid layouts with axis sharing and combined PNG/PDF export |
|
|
149
|
+
| **5 — Advanced Plotting** | Seaborn statistical plots and Plotly interactive charts with HTML export |
|
|
150
|
+
| **7 — Export Results** | Export plots, data, and analyses; save/load full sessions; generate PDF reports |
|
|
151
|
+
| **8 — Gallery** | Pre-generated figure gallery with Load this config buttons |
|
|
152
|
+
| **9 — Data Tools** | 10 operation tabs: formula columns, normalization, transpose, pivot/melt, filter, sort, merge, fill/drop NaN, resample, rolling transforms |
|
|
153
|
+
| **10 — Spectroscopy** | IR/Raman, NMR, UV-Vis, Mass Spec tools; NIST WebBook spectral lookup by CAS number |
|
|
154
|
+
| **11 — Molecular Viz** | Upload Gaussian/ORCA/Molden output files; 3D molecular structure and vibrational mode display |
|
|
155
|
+
| **12 — Batch Analysis** | Batch statistics, curve fitting, and peak analysis with workflow presets |
|
|
156
|
+
| **13 — Help** | Getting Started, Plot Types, Analysis Tools, Supported Formats, Tips |
|
|
157
|
+
| **14 — Settings** | Theme, DPI, plot defaults, named preset CRUD, plugin status |
|
|
158
|
+
|
|
159
|
+
## Supported File Formats (18)
|
|
160
|
+
|
|
161
|
+
| Category | Formats |
|
|
162
|
+
| --- | --- |
|
|
163
|
+
| Tabular | `.csv`, `.tsv`, `.xlsx`, `.xls`, `.json`, `.parquet` |
|
|
164
|
+
| Array | `.npy`, `.npz`, `.pkl` |
|
|
165
|
+
| Instrument / Spectral | `.jdx` / `.dx` (JCAMP-DX), `.h5` / `.hdf5` (HDF5), `.nc` / `.cdf` (NetCDF), `.spc` (Thermo Fisher), `.asc` (generic text), `.mzml` / `.mzxml` (mass spectrometry, optional) |
|
|
166
|
+
|
|
167
|
+
## CLI
|
|
168
|
+
|
|
169
|
+
EaglePlot includes a command-line interface with 5 subcommands:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
eagleplot plot <file> --plot <type> --x-column X --y-column Y [--output out.png]
|
|
173
|
+
eagleplot stats <file>
|
|
174
|
+
eagleplot batch <config.json> [--verbose]
|
|
175
|
+
eagleplot compare <file1> <file2> --plot line [--output comparison.png]
|
|
176
|
+
eagleplot convert <input> <output>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
See the [CLI Tutorial](docs/tutorials/cli_guide.md) for full usage and examples.
|
|
180
|
+
|
|
181
|
+
## Python API
|
|
182
|
+
|
|
183
|
+
EaglePlot's modules can be used directly in scripts or Jupyter notebooks:
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
from eagleplot.io import load_data
|
|
187
|
+
from eagleplot.plotting import line_plot, save_figure
|
|
188
|
+
import numpy as np
|
|
189
|
+
|
|
190
|
+
wavelength = np.linspace(400, 800, 200)
|
|
191
|
+
absorbance = 0.8 * np.exp(-((wavelength - 520) ** 2) / (2 * 30**2))
|
|
192
|
+
|
|
193
|
+
fig, ax, info = line_plot(
|
|
194
|
+
wavelength,
|
|
195
|
+
[absorbance],
|
|
196
|
+
xlabel="Wavelength (nm)",
|
|
197
|
+
ylabel="Absorbance",
|
|
198
|
+
title="UV-Vis Spectrum",
|
|
199
|
+
labels=["Sample A"],
|
|
200
|
+
)
|
|
201
|
+
save_figure(fig, "spectrum.png", dpi=300)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Key modules
|
|
205
|
+
|
|
206
|
+
| Module | Description |
|
|
207
|
+
| --- | --- |
|
|
208
|
+
| `eagleplot.io` | `load_data()` / `save_data()` — auto-detects format from extension |
|
|
209
|
+
| `eagleplot.math` | 25 functions — statistics, curve fitting, hypothesis tests, optimization, linear algebra |
|
|
210
|
+
| `eagleplot.plotting` | 27 plot types; Matplotlib → `(fig, ax, info)`, Plotly → `(fig, info)` |
|
|
211
|
+
| `eagleplot.signal` | 16 functions — smoothing, filtering, FFT, derivatives, baseline correction, interpolation |
|
|
212
|
+
| `eagleplot.peaks` | 5 functions — find, integrate, FWHM, fit (Gaussian/Lorentzian/Voigt/pseudo-Voigt) |
|
|
213
|
+
| `eagleplot.data_tools` | 12 non-destructive DataFrame operations |
|
|
214
|
+
| `eagleplot.spectroscopy` | 18 functions — IR/Raman, UV-Vis, NMR, MS |
|
|
215
|
+
| `eagleplot.nist` | NIST WebBook integration — fetch IR spectra by CAS number |
|
|
216
|
+
| `eagleplot.batch` | Batch load, statistics, curve fit, peak analysis |
|
|
217
|
+
| `eagleplot.annotations` | 7 overlay types (hline, vline, hspan, vspan, text, rectangle, ellipse) |
|
|
218
|
+
| `eagleplot.report` | PDF report generation via `matplotlib.PdfPages` |
|
|
219
|
+
| `eagleplot.molecular` | CPK atom data, Gaussian/ORCA/Molden parsers, Plotly 3D molecule builder |
|
|
220
|
+
|
|
221
|
+
## Plugin System
|
|
222
|
+
|
|
223
|
+
Drop a `plugin_*.py` file into `plugins/` to add custom plot types or analysis tools.
|
|
224
|
+
See [`plugins/plugin_example.py`](plugins/plugin_example.py) for the starter template.
|
|
225
|
+
|
|
226
|
+
## Dependencies
|
|
227
|
+
|
|
228
|
+
| Package | Purpose |
|
|
229
|
+
| --- | --- |
|
|
230
|
+
| `numpy` | Numerical computing |
|
|
231
|
+
| `scipy` | Scientific algorithms, curve fitting, signal processing |
|
|
232
|
+
| `pandas` | Tabular data |
|
|
233
|
+
| `matplotlib` | Static plotting |
|
|
234
|
+
| `seaborn` | Statistical visualizations |
|
|
235
|
+
| `plotly` | Interactive plots |
|
|
236
|
+
| `streamlit` | GUI framework |
|
|
237
|
+
| `openpyxl` | Excel file support |
|
|
238
|
+
| `requests` | NIST WebBook HTTP integration |
|
|
239
|
+
| `h5py` | HDF5 file support |
|
|
240
|
+
| `xarray` / `netcdf4` | NetCDF file support |
|
|
241
|
+
|
|
242
|
+
**Optional:**
|
|
243
|
+
|
|
244
|
+
| Package | Purpose |
|
|
245
|
+
| --- | --- |
|
|
246
|
+
| `statsmodels` | Two-way ANOVA (`anova_twoway` in `eagleplot.math`) |
|
|
247
|
+
| `pymzml` | mzML/mzXML mass spectrometry files |
|
|
248
|
+
| `jcamp` | Alternative JCAMP-DX parser |
|
|
249
|
+
|
|
250
|
+
See [`requirements.txt`](requirements.txt) for pinned version ranges.
|
|
251
|
+
|
|
252
|
+
## Project Structure
|
|
253
|
+
|
|
254
|
+
```text
|
|
255
|
+
eagleplot/ ← repository root
|
|
256
|
+
├── eagleplot/ ← the installable package
|
|
257
|
+
│ ├── Home.py ← Streamlit entry point
|
|
258
|
+
│ ├── cli.py ← CLI entry point (5 subcommands)
|
|
259
|
+
│ ├── io.py ← 18-format data loader/saver
|
|
260
|
+
│ ├── math.py ← 25 analysis functions
|
|
261
|
+
│ ├── plotting.py ← 27 plot types (Matplotlib, Seaborn, Plotly)
|
|
262
|
+
│ ├── signal.py ← 16 signal processing functions
|
|
263
|
+
│ ├── peaks.py ← 5 peak analysis functions
|
|
264
|
+
│ ├── data_tools.py ← 12 non-destructive DataFrame operations
|
|
265
|
+
│ ├── annotations.py ← 7 Matplotlib overlay types
|
|
266
|
+
│ ├── spectroscopy.py ← 18 spectroscopy functions
|
|
267
|
+
│ ├── nist.py ← NIST WebBook integration
|
|
268
|
+
│ ├── batch.py ← 5 batch processing functions
|
|
269
|
+
│ ├── report.py ← PDF report generation
|
|
270
|
+
│ ├── plugin_loader.py ← plugin discovery and loading
|
|
271
|
+
│ ├── molecular/ ← CPK atom data + vibrational parsers
|
|
272
|
+
│ ├── pages/ ← 13 Streamlit pages (1_*.py – 13_*.py)
|
|
273
|
+
│ ├── utils/ ← session state, plot config, user settings
|
|
274
|
+
│ ├── assets/ ← logo + NCCU branding (shipped in the wheel)
|
|
275
|
+
│ ├── gallery/ ← pre-rendered gallery PNGs + manifest.json
|
|
276
|
+
│ └── example-data/Artificial/ ← built-in sample datasets
|
|
277
|
+
├── tests/ ← pytest suite, 1,000+ tests
|
|
278
|
+
├── plugins/ ← plugin_example.py starter template
|
|
279
|
+
├── examples/ ← 15+ standalone scripts + batch_config.json
|
|
280
|
+
├── docs/ ← tutorials, cheatsheet, site built by build_docs.py
|
|
281
|
+
├── generate_gallery.py ← regenerates eagleplot/gallery/
|
|
282
|
+
├── requirements.txt
|
|
283
|
+
├── pyproject.toml
|
|
284
|
+
├── setup.bat / .command / .sh ← First-run setup (Windows / macOS / Linux)
|
|
285
|
+
└── launch.bat / .command / .sh ← App launcher (Windows / macOS / Linux)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Runtime assets (`assets/`, `gallery/`, `example-data/`) live **inside** the package
|
|
289
|
+
rather than at the repository root, so they are present after `pip install`.
|
|
290
|
+
|
|
291
|
+
## Documentation
|
|
292
|
+
|
|
293
|
+
- [Getting Started](docs/getting_started.md) — installation walkthrough and API examples
|
|
294
|
+
- [Cheatsheet](docs/cheatsheet.md) — quick reference for all plot functions
|
|
295
|
+
- [CLI Tutorial](docs/tutorials/cli_guide.md) — step-by-step guide to all 5 CLI commands
|
|
296
|
+
- [GUI Tutorial](docs/tutorials/gui_guide.md) — page-by-page walkthrough of the Streamlit app
|
|
297
|
+
- [Examples](examples/) — 15+ standalone runnable scripts covering all major workflows
|
|
298
|
+
|
|
299
|
+
## About
|
|
300
|
+
|
|
301
|
+
**Author:** Jonathan D. Schultz, PhD — NCCU Department of Chemistry and Biochemistry
|
|
302
|
+
**Institution:** North Carolina Central University
|
|
303
|
+
**Use:** Research and teaching in computational science
|
|
304
|
+
**License:** See [LICENSE](LICENSE)
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# EaglePlot
|
|
2
|
+
|
|
3
|
+
[](https://github.com/The-Schultz-Lab/eagleplot/actions/workflows/tests.yml)
|
|
4
|
+
[](https://pypi.org/project/eagleplot/)
|
|
5
|
+
[](https://mybinder.org/v2/gh/The-Schultz-Lab/eagleplot/main)
|
|
6
|
+
|
|
7
|
+
A general-purpose Python toolkit for scientific data visualization and analysis, developed for research and teaching in computational science at North Carolina Central University.
|
|
8
|
+
|
|
9
|
+
> **EaglePlot was called Plottle until version 3.0.** If you used Plottle, change
|
|
10
|
+
> `import plottle` / `from plottle.… import …` to `eagleplot`, and run the `eagleplot`
|
|
11
|
+
> command instead of `plottle`. Session files saved by Plottle still load.
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
EaglePlot provides a unified interface for scientific data work:
|
|
16
|
+
|
|
17
|
+
- **Data I/O** — 18 file formats (CSV, Excel, TSV, JSON, Parquet, NumPy, Pickle, JCAMP-DX, HDF5, NetCDF, SPC, ASC, mzML/mzXML, and more)
|
|
18
|
+
- **Mathematical analysis** — statistics, curve fitting, signal processing, peak analysis, hypothesis testing, optimization, linear algebra
|
|
19
|
+
- **Multi-library plotting** — 27 plot types across Matplotlib (static), Seaborn (statistical), and Plotly (interactive)
|
|
20
|
+
- **14-page Streamlit GUI** — exploratory data analysis without writing code
|
|
21
|
+
- **CLI** — batch processing and scripted workflows
|
|
22
|
+
- **Plugin system** — drop `plugin_*.py` into `plugins/` for custom plot types and tools
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
### Clone the repository
|
|
27
|
+
|
|
28
|
+
#### 1 — Clone and enter the repository
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
git clone https://github.com/The-Schultz-Lab/eagleplot.git
|
|
32
|
+
cd eagleplot
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
#### 2 — Set up and launch (double-click, no terminal needed)
|
|
36
|
+
|
|
37
|
+
**Windows:**
|
|
38
|
+
1. Double-click **`setup.bat`** — creates the virtual environment and installs all dependencies.
|
|
39
|
+
2. Double-click **`launch.bat`** — starts EaglePlot. Use this every time you want to open the app.
|
|
40
|
+
|
|
41
|
+
**macOS:**
|
|
42
|
+
1. Double-click **`setup.command`** — creates the virtual environment and installs all dependencies.
|
|
43
|
+
*(If macOS asks "Are you sure you want to open it?", click Open.)*
|
|
44
|
+
2. Double-click **`launch.command`** — starts EaglePlot. Use this every time you want to open the app.
|
|
45
|
+
|
|
46
|
+
**Linux:**
|
|
47
|
+
1. Run **`./setup.sh`** in a terminal — creates the virtual environment and installs all dependencies.
|
|
48
|
+
*(On Debian/Ubuntu you may first need `sudo apt install python3-venv`.)*
|
|
49
|
+
2. Run **`./launch.sh`** — starts EaglePlot.
|
|
50
|
+
|
|
51
|
+
After the app starts, open **`http://localhost:8501`** in your browser (Streamlit usually opens it automatically).
|
|
52
|
+
|
|
53
|
+
#### 2 (alternative) — Set up and launch from the terminal
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
python -m venv .venv
|
|
57
|
+
|
|
58
|
+
# Windows
|
|
59
|
+
.venv\Scripts\activate
|
|
60
|
+
|
|
61
|
+
# macOS / Linux
|
|
62
|
+
source .venv/bin/activate
|
|
63
|
+
|
|
64
|
+
# Install EaglePlot and its dependencies. The editable install is what puts the
|
|
65
|
+
# `eagleplot` command on your PATH.
|
|
66
|
+
pip install -e ".[formats,nist]"
|
|
67
|
+
|
|
68
|
+
streamlit run eagleplot/Home.py
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### 3 — Or use the CLI
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
eagleplot --help
|
|
75
|
+
eagleplot plot data.csv --plot scatter --x-column x --y-column y
|
|
76
|
+
eagleplot stats data.csv
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
The `eagleplot` command comes from the `pip install` above. From a source checkout
|
|
80
|
+
without installing, use `python -m eagleplot.cli` instead.
|
|
81
|
+
|
|
82
|
+
## GUI Pages
|
|
83
|
+
|
|
84
|
+
| Page | Description |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
| **Home** | Dashboard overview and help tabs |
|
|
87
|
+
| **1 — Data Upload** | Upload files in 18 formats; preview shape, column types, and summary statistics; batch folder import |
|
|
88
|
+
| **2 — Quick Plot** | 27 plot types with live style controls, annotation panel, and Convert to Plotly toggle |
|
|
89
|
+
| **3 — Analysis Tools** | 8 tabs: Statistics, Distribution, Curve Fit, Optimization, Linear Algebra, Signal Processing, Peak Analysis, Statistical Tests |
|
|
90
|
+
| **4 — Multi-Plot Dashboard** | Up to 4×4 grid layouts with axis sharing and combined PNG/PDF export |
|
|
91
|
+
| **5 — Advanced Plotting** | Seaborn statistical plots and Plotly interactive charts with HTML export |
|
|
92
|
+
| **7 — Export Results** | Export plots, data, and analyses; save/load full sessions; generate PDF reports |
|
|
93
|
+
| **8 — Gallery** | Pre-generated figure gallery with Load this config buttons |
|
|
94
|
+
| **9 — Data Tools** | 10 operation tabs: formula columns, normalization, transpose, pivot/melt, filter, sort, merge, fill/drop NaN, resample, rolling transforms |
|
|
95
|
+
| **10 — Spectroscopy** | IR/Raman, NMR, UV-Vis, Mass Spec tools; NIST WebBook spectral lookup by CAS number |
|
|
96
|
+
| **11 — Molecular Viz** | Upload Gaussian/ORCA/Molden output files; 3D molecular structure and vibrational mode display |
|
|
97
|
+
| **12 — Batch Analysis** | Batch statistics, curve fitting, and peak analysis with workflow presets |
|
|
98
|
+
| **13 — Help** | Getting Started, Plot Types, Analysis Tools, Supported Formats, Tips |
|
|
99
|
+
| **14 — Settings** | Theme, DPI, plot defaults, named preset CRUD, plugin status |
|
|
100
|
+
|
|
101
|
+
## Supported File Formats (18)
|
|
102
|
+
|
|
103
|
+
| Category | Formats |
|
|
104
|
+
| --- | --- |
|
|
105
|
+
| Tabular | `.csv`, `.tsv`, `.xlsx`, `.xls`, `.json`, `.parquet` |
|
|
106
|
+
| Array | `.npy`, `.npz`, `.pkl` |
|
|
107
|
+
| Instrument / Spectral | `.jdx` / `.dx` (JCAMP-DX), `.h5` / `.hdf5` (HDF5), `.nc` / `.cdf` (NetCDF), `.spc` (Thermo Fisher), `.asc` (generic text), `.mzml` / `.mzxml` (mass spectrometry, optional) |
|
|
108
|
+
|
|
109
|
+
## CLI
|
|
110
|
+
|
|
111
|
+
EaglePlot includes a command-line interface with 5 subcommands:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
eagleplot plot <file> --plot <type> --x-column X --y-column Y [--output out.png]
|
|
115
|
+
eagleplot stats <file>
|
|
116
|
+
eagleplot batch <config.json> [--verbose]
|
|
117
|
+
eagleplot compare <file1> <file2> --plot line [--output comparison.png]
|
|
118
|
+
eagleplot convert <input> <output>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
See the [CLI Tutorial](docs/tutorials/cli_guide.md) for full usage and examples.
|
|
122
|
+
|
|
123
|
+
## Python API
|
|
124
|
+
|
|
125
|
+
EaglePlot's modules can be used directly in scripts or Jupyter notebooks:
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
from eagleplot.io import load_data
|
|
129
|
+
from eagleplot.plotting import line_plot, save_figure
|
|
130
|
+
import numpy as np
|
|
131
|
+
|
|
132
|
+
wavelength = np.linspace(400, 800, 200)
|
|
133
|
+
absorbance = 0.8 * np.exp(-((wavelength - 520) ** 2) / (2 * 30**2))
|
|
134
|
+
|
|
135
|
+
fig, ax, info = line_plot(
|
|
136
|
+
wavelength,
|
|
137
|
+
[absorbance],
|
|
138
|
+
xlabel="Wavelength (nm)",
|
|
139
|
+
ylabel="Absorbance",
|
|
140
|
+
title="UV-Vis Spectrum",
|
|
141
|
+
labels=["Sample A"],
|
|
142
|
+
)
|
|
143
|
+
save_figure(fig, "spectrum.png", dpi=300)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Key modules
|
|
147
|
+
|
|
148
|
+
| Module | Description |
|
|
149
|
+
| --- | --- |
|
|
150
|
+
| `eagleplot.io` | `load_data()` / `save_data()` — auto-detects format from extension |
|
|
151
|
+
| `eagleplot.math` | 25 functions — statistics, curve fitting, hypothesis tests, optimization, linear algebra |
|
|
152
|
+
| `eagleplot.plotting` | 27 plot types; Matplotlib → `(fig, ax, info)`, Plotly → `(fig, info)` |
|
|
153
|
+
| `eagleplot.signal` | 16 functions — smoothing, filtering, FFT, derivatives, baseline correction, interpolation |
|
|
154
|
+
| `eagleplot.peaks` | 5 functions — find, integrate, FWHM, fit (Gaussian/Lorentzian/Voigt/pseudo-Voigt) |
|
|
155
|
+
| `eagleplot.data_tools` | 12 non-destructive DataFrame operations |
|
|
156
|
+
| `eagleplot.spectroscopy` | 18 functions — IR/Raman, UV-Vis, NMR, MS |
|
|
157
|
+
| `eagleplot.nist` | NIST WebBook integration — fetch IR spectra by CAS number |
|
|
158
|
+
| `eagleplot.batch` | Batch load, statistics, curve fit, peak analysis |
|
|
159
|
+
| `eagleplot.annotations` | 7 overlay types (hline, vline, hspan, vspan, text, rectangle, ellipse) |
|
|
160
|
+
| `eagleplot.report` | PDF report generation via `matplotlib.PdfPages` |
|
|
161
|
+
| `eagleplot.molecular` | CPK atom data, Gaussian/ORCA/Molden parsers, Plotly 3D molecule builder |
|
|
162
|
+
|
|
163
|
+
## Plugin System
|
|
164
|
+
|
|
165
|
+
Drop a `plugin_*.py` file into `plugins/` to add custom plot types or analysis tools.
|
|
166
|
+
See [`plugins/plugin_example.py`](plugins/plugin_example.py) for the starter template.
|
|
167
|
+
|
|
168
|
+
## Dependencies
|
|
169
|
+
|
|
170
|
+
| Package | Purpose |
|
|
171
|
+
| --- | --- |
|
|
172
|
+
| `numpy` | Numerical computing |
|
|
173
|
+
| `scipy` | Scientific algorithms, curve fitting, signal processing |
|
|
174
|
+
| `pandas` | Tabular data |
|
|
175
|
+
| `matplotlib` | Static plotting |
|
|
176
|
+
| `seaborn` | Statistical visualizations |
|
|
177
|
+
| `plotly` | Interactive plots |
|
|
178
|
+
| `streamlit` | GUI framework |
|
|
179
|
+
| `openpyxl` | Excel file support |
|
|
180
|
+
| `requests` | NIST WebBook HTTP integration |
|
|
181
|
+
| `h5py` | HDF5 file support |
|
|
182
|
+
| `xarray` / `netcdf4` | NetCDF file support |
|
|
183
|
+
|
|
184
|
+
**Optional:**
|
|
185
|
+
|
|
186
|
+
| Package | Purpose |
|
|
187
|
+
| --- | --- |
|
|
188
|
+
| `statsmodels` | Two-way ANOVA (`anova_twoway` in `eagleplot.math`) |
|
|
189
|
+
| `pymzml` | mzML/mzXML mass spectrometry files |
|
|
190
|
+
| `jcamp` | Alternative JCAMP-DX parser |
|
|
191
|
+
|
|
192
|
+
See [`requirements.txt`](requirements.txt) for pinned version ranges.
|
|
193
|
+
|
|
194
|
+
## Project Structure
|
|
195
|
+
|
|
196
|
+
```text
|
|
197
|
+
eagleplot/ ← repository root
|
|
198
|
+
├── eagleplot/ ← the installable package
|
|
199
|
+
│ ├── Home.py ← Streamlit entry point
|
|
200
|
+
│ ├── cli.py ← CLI entry point (5 subcommands)
|
|
201
|
+
│ ├── io.py ← 18-format data loader/saver
|
|
202
|
+
│ ├── math.py ← 25 analysis functions
|
|
203
|
+
│ ├── plotting.py ← 27 plot types (Matplotlib, Seaborn, Plotly)
|
|
204
|
+
│ ├── signal.py ← 16 signal processing functions
|
|
205
|
+
│ ├── peaks.py ← 5 peak analysis functions
|
|
206
|
+
│ ├── data_tools.py ← 12 non-destructive DataFrame operations
|
|
207
|
+
│ ├── annotations.py ← 7 Matplotlib overlay types
|
|
208
|
+
│ ├── spectroscopy.py ← 18 spectroscopy functions
|
|
209
|
+
│ ├── nist.py ← NIST WebBook integration
|
|
210
|
+
│ ├── batch.py ← 5 batch processing functions
|
|
211
|
+
│ ├── report.py ← PDF report generation
|
|
212
|
+
│ ├── plugin_loader.py ← plugin discovery and loading
|
|
213
|
+
│ ├── molecular/ ← CPK atom data + vibrational parsers
|
|
214
|
+
│ ├── pages/ ← 13 Streamlit pages (1_*.py – 13_*.py)
|
|
215
|
+
│ ├── utils/ ← session state, plot config, user settings
|
|
216
|
+
│ ├── assets/ ← logo + NCCU branding (shipped in the wheel)
|
|
217
|
+
│ ├── gallery/ ← pre-rendered gallery PNGs + manifest.json
|
|
218
|
+
│ └── example-data/Artificial/ ← built-in sample datasets
|
|
219
|
+
├── tests/ ← pytest suite, 1,000+ tests
|
|
220
|
+
├── plugins/ ← plugin_example.py starter template
|
|
221
|
+
├── examples/ ← 15+ standalone scripts + batch_config.json
|
|
222
|
+
├── docs/ ← tutorials, cheatsheet, site built by build_docs.py
|
|
223
|
+
├── generate_gallery.py ← regenerates eagleplot/gallery/
|
|
224
|
+
├── requirements.txt
|
|
225
|
+
├── pyproject.toml
|
|
226
|
+
├── setup.bat / .command / .sh ← First-run setup (Windows / macOS / Linux)
|
|
227
|
+
└── launch.bat / .command / .sh ← App launcher (Windows / macOS / Linux)
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Runtime assets (`assets/`, `gallery/`, `example-data/`) live **inside** the package
|
|
231
|
+
rather than at the repository root, so they are present after `pip install`.
|
|
232
|
+
|
|
233
|
+
## Documentation
|
|
234
|
+
|
|
235
|
+
- [Getting Started](docs/getting_started.md) — installation walkthrough and API examples
|
|
236
|
+
- [Cheatsheet](docs/cheatsheet.md) — quick reference for all plot functions
|
|
237
|
+
- [CLI Tutorial](docs/tutorials/cli_guide.md) — step-by-step guide to all 5 CLI commands
|
|
238
|
+
- [GUI Tutorial](docs/tutorials/gui_guide.md) — page-by-page walkthrough of the Streamlit app
|
|
239
|
+
- [Examples](examples/) — 15+ standalone runnable scripts covering all major workflows
|
|
240
|
+
|
|
241
|
+
## About
|
|
242
|
+
|
|
243
|
+
**Author:** Jonathan D. Schultz, PhD — NCCU Department of Chemistry and Biochemistry
|
|
244
|
+
**Institution:** North Carolina Central University
|
|
245
|
+
**Use:** Research and teaching in computational science
|
|
246
|
+
**License:** See [LICENSE](LICENSE)
|