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