All notable changes to this project will be documented in this file.
The format is inspired by Keep a Changelog and tries to adhere to Semantic Versioning as well as PEP 440.
Working towards a Version 1.0.0 release, the author interprets the terms below as follows:
- pre-alpha status: Working code, but every aspect of the project is in flux, including API and documentation.
- alpha status: The "broad strokes" of an API are in place. Code testing and optimization, API adjustments, addition of new features and tests, and creating packaging requirements will be ongoing.
- beta status: All anticipated Version 1.0.0 features are implemented and documented. However, breaking changes to the API are still possible. The package can be pip-installed.
- release candidate status: No further changes to the API are expected before the next release.
- Version 1.0.0 release: API is stable. The package is available on PyPI (and perhaps conda).
- Python 3.6 reached its End of Life, and is no longer supported.
- Requirement for the
sparse
library is now<=v0.10.0 or >=0.13.0. The library maintainers introduced bugs insparse 0.11
that brokenmrsim
, but they were fixed in0.13
.
- nmrsim.plt: the plot functions have the optional boolean argument
hidden
. The defaulthidden=False
retains previous behavior, where a plot is displayed when possible. Whenhidden=True
, the.show()
method is not executed, and the plot is not displayed. The main use for this is to allow automated tests to run in CI without hanging.
- Requirement for the sparse library capped at v0.10.0. Version 0.11.0+ results in numba errors. See sparse issue #499.
- unneccessary print statements removed rom qm.py (Issue #5)
- add_lorentzians moved from nmr.plt to nmr.math. Besides being more appropriate here, it fixes a problem where importing from nmrsim.plt also requires importing from matplotlib/Tkinter. Some environments (some Unix systems; BeeWare's Briefcase packaging tool) do not have Tkinter available.
- nmrsim.plt will substitute the matplotlib "Agg" backend for "TkAgg" if tkinter is not found on the users system, and print a warning message that plots will not be visible.
- nmrsim.qm now uses importlib.resources.path to find the nmrsim/bin folder, instead of relying on the use of __file__. For users, this means that if your application uses nmrsim as a dependency, and you want to freeze the application (e.g. with PyInstaller or PyOxidizer), the frozen app should now find the bin folder and contents.
- Documentation errors (Issues #2, #3, #4)
- nmrsim.Multiplet:
w
attribute added (peak width at half height).
- nmrsim.SpinSystem:
w
attribute added (peak width at half height).
- nmrsim.Spectrum:
- In-place addition modifies the Spectrum object in-place.
vmin
andvmax
attributes added, to set spectral width.default_limits
method added, to reset spectral width to default.lineshape()
method added, to return lineshape data for the spectrum.
- nmrsim.firstorder.multiplet now returns a sorted peaklist.
- nmrsim.Spectum:
- Addition of Spectrum objects is commutative, and returns a new Spectrum object.
- Binaries for accelerating qm calculations packaged in distribution.
Radical revisions (including a renaming of the project from "nmrtools" to "nmrsim") and migration to the sametz/nmrsim repo on GitHub). Includes:
- New API
- Faster second-order calculations using sparse matrices and cached partial solutions
- High-level class-based API for convenient simulation and plotting of NMR spectra and components
- Jupyter notebooks demonstrating key API features and mathematical underpinnings
Initial Commit