From ffc5e5b51fd659c635dc6c6535bf256edf52143d Mon Sep 17 00:00:00 2001 From: Oliver Beckstein Date: Tue, 26 Nov 2024 15:56:23 -0700 Subject: [PATCH] release 2.8.0 blog post (#411) * release 2.8.0 blog post * changelog 280 * Update _posts/2024-11-22-release-2.8.0.md Co-authored-by: Irfan Alibay * added more recognition * links + fixes * finalized blog post - all deprecations - links to role list instead of role description - MDAKits with links * untabified * no cf package for py13 Co-authored-by: Irfan Alibay --------- Co-authored-by: Irfan Alibay --- _posts/2024-11-22-release-2.8.0.md | 290 +++++++++++++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 _posts/2024-11-22-release-2.8.0.md diff --git a/_posts/2024-11-22-release-2.8.0.md b/_posts/2024-11-22-release-2.8.0.md new file mode 100644 index 00000000..e35b3313 --- /dev/null +++ b/_posts/2024-11-22-release-2.8.0.md @@ -0,0 +1,290 @@ +--- +layout: post +title: Release 2.8.0 of MDAnalysis +--- + +We are happy to release version 2.8.0 of MDAnalysis! + +This is a minor release of the MDAnalysis library, which means that it +contains enhancements, bug fixes, deprecations, and other +backwards-compatible changes. + +However, in this case *minor* does not quite do justice to what is +happening in this release, given that we have (at least) three big +changes/additions: + +1. The [license was changed](#license-change-to-lgpl) to the **GNU + Lesser General Public License** so that MDAnalysis can be used by + packages under *any* license while keeping the source code itself + free and protected. +2. We introduce the **[Guesser][guesser modules docs] API** for + guessing missing topology attributes such as element or mass in a + *context-dependent* manner. Until release 3.0, you should not + notice any differences but under the hood we are getting ready to + make it easier to work with simulations in a different *context* + (e.g., with the MARTINI force field or experimental PDB + files). With consistent attributes, such as elements, it becomes a + lot easier to interface with tools like the cheminformatics RDKit + (via the [converters][converter modules docs]). + + The guessers are the [GSoC 2022 project][] of @aya9aladdin with + help from @lilyminium, @IAlibay, and @jbarnoud.[^guesserPR] +3. We are introducing **[parallel analysis][]** for tools in + [MDAnalysis.analysis][] following the simple + *split-apply-combine* paradigm that we originally prototyped in + [PMDA][] [^PMDApaper]. What's really exciting is that *any* analysis code + that is based on [MDAnalysis.analysis.base.AnalysisBase][] can + enable parallelization with a few lines of extra code---all the + hard work is done behind the scenes in the base class (in a way + that is fully backwards compatible!). + + This new feature is the work of @marinegor who brought his + [GSoC 2023 project][] to completion, with great contributions by + @p-j-smith, @yuxuanzhuang and @RMeli [^parallelizationPR]. + + Not all MDAnalysis analysis classes have parallelization enabled + yet but @talagayev has been working tirelessly on already updating + `GNMAnalysis`, `BAT`, `Dihedral`, `Ramachandran`, `Janin`, `DSSP` + (yes, MDAnalysis has _finally_ got DSSP, based on [pydssp][], also + thanks to @marinegor), `HydrogenBondAnalysis`, in addition to + `RMSD`. + +Read on for more details on the license change and the usual +information on [supported environments](#supported-environments), +[upgrading](#upgrading-to-mdanalysis-version-280) your version of MDAnalysis, and a +[summary of the most important changes](#notable-changes). + + +## License change to LGPL + + +LGPLv3 logo + + +This is the first release of MDAnalysis under the **Lesser General +Public License**. We have been working towards this license change for +the last 3 years; this release (almost) concludes the process that we +described in our [licensing update blog post][licensing update]. + + +* **All code** is now under [LGPLv2.1 + license](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) + or any higher version. +* The package is under the [LGPLv3 + license](https://www.gnu.org/licenses/lgpl-3.0.html) or any higher + version. However, once we have removed dependencies that prevent + licensing under LGPLv2.1+ at the moment, we will also license the + package under the same **LGPLv2.1+** as the code itself. + +We would like to thank all our contributors who granted us permission to +change the license. We would also like to thank a number of +institutions who were especially supportive of our open source +efforts, namely Arizona State University, Australian National +University, Johns Hopkins University, and the Open Molecular Science +Foundation. We are also grateful to [NumFOCUS][] for legal +support. The [relicensing team][roles] was lead by @IAlibay and @orbeckst. + +## Supported environments + +The minimum required NumPy version is 1.23.3; MDAnalysis now builds +against NumPy 2.0. + +Supported Python versions: **3.10, 3.11, 3.12, 3.13**. Support for version +3.13 has been added in this release and support for 3.9 has been +dropped (following [SPEC 0][]). + +Please note that Python 3.13 is limited to [PyPi][] for now, the [conda-forge channel][] installs only provide support for Python 3.10 to 3.12. + +Supported Operating Systems: + - **Linux** (on [x86-64][]) + - **Windows** (on [x86-64][]) + - **MacOS** (on [x86-64][] and [ARM64][]) + + +## Upgrading to MDAnalysis version 2.8.0 + +To update with `mamba` (or `conda`) from the [conda-forge channel][] run + +```bash +mamba update -c conda-forge mdanalysis +``` + +To update from [PyPi][] with `pip` run + +```bash +python -m pip install --upgrade MDAnalysis +``` + +For more help with installation see the [installation instructions in the User Guide][]. +Make sure you are using a Python version compatible with MDAnalysis +before upgrading (Python >= 3.10). + + +## Notable changes + +For a full list of changes, bugfixes and deprecations see the [CHANGELOG][]. + +#### Enhancements: + +* Added `guess_TopologyAttrs()` API to the Universe to handle attribute + guessing (PR #3753) +* Added the `DefaultGuesser` class, which is a general-purpose guesser with + the same functionalities as the existing guesser.py methods (PR #3753) +* Introduce parallelization API to `AnalysisBase` and to `analysis.rms.RMSD` class + (Issue #4158, PR #4304) +* Add `analysis.DSSP` module for protein secondary structure assignment, based on [pydssp](https://github.com/ShintaroMinami/PyDSSP) +* Improved performance of PDBWriter (Issue #2785, PR #4472) +* Added parsing of arbitrary columns of the LAMMPS dump parser. (Issue #3504) +* Implement average structures with iterative algorithm from + DOI 10.1021/acs.jpcb.7b11988. (Issue #2039, PR #4524) +* Add support for TPR files produced by Gromacs 2024.1 (PR #4523) + +#### Fixes: + + * Fix Bohrium (Bh) atomic mass in tables.py (PR #3753) + * Catch higher dimensional indexing in GroupBase & ComponentBase (Issue #4647) + * Do not raise an Error reading H5MD files with datasets like + `observables//` (part of Issue #4598, PR #4615) + * Fix failure in double-serialization of TextIOPicklable file reader. + (Issue #3723, PR #3722) + * Fix failure to preserve modification of coordinates after serialization, + e.g. with transformations + (Issue #4633, PR #3722) + * Fix PSFParser error when encountering string-like resids + (Issue #2053, Issue #4189 PR #4582) + * Convert openmm Quantity to raw value for KE and PE in OpenMMSimulationReader. + * Atomname methods can handle empty groups (Issue #2879, PR #4529) + * Fix bug in PCA preventing use of `frames=...` syntax (PR #4423) + * Fix `analysis/diffusionmap.py` iteration through trajectory to iteration + over `self._sliced_trajectory`, hence supporting + `DistanceMatrix.run(frames=...)` (PR #4433) + + +#### Changes: + + * Relicense code contributions from GPLv2+ to LGPLv2.1+ + and the package from GPLv3+ to LGPLv3+ (PR #4794) + * only use distopia < 0.3.0 due to API changes (Issue #4739) + * The `fetch_mmtf` method has been removed as the REST API service + for MMTF files has ceased to exist (Issue #4634) + * MDAnalysis now builds against numpy 2.0 rather than the + minimum supported numpy version (PR #4620) + + + +#### Deprecations: + +* Deprecations of old guessing functionality (in favor of the new + Guesser API) + * `MDAnalysis.topology.guessers` is deprecated in favour of the new + Guessers API and will be removed in version 3.0 (PR #4752) + * The `guess_bonds`, `vdwradii`, `fudge_factor`, and `lower_bound` + kwargs are deprecated for bond guessing during Universe + creation. Instead, pass `("bonds", "angles", "dihedrals")` into + `to_guess` or `force_guess` during Universe creation, and the + associated `vdwradii`, `fudge_factor`, and `lower_bound` kwargs + into `Guesser` creation. Alternatively, if `vdwradii`, + `fudge_factor`, and `lower_bound` are passed into + `Universe.guess_TopologyAttrs`, they will override the previous + values of those kwargs. (Issue #4756, PR #4757) + * `MDAnalysis.topology.tables` is deprecated in favour of + `MDAnalysis.guesser.tables` and will be removed in version 3.0 (PR #4752) + * Element guessing in the `ITPParser` is deprecated and will be removed in version 3.0 + (Issue #4698) + * **Unknown masses are still set to 0.0 for current version**, this + will be changed **in version 3.0.0 and replaced by + `Masses` "no_value_label" attribute (`np.nan`)** (PR #3753) +* A number of analysis modules have been moved into their own + [MDAKits][], following the [3.0 roadmap towards a trimmed down core + library][roadmap]. Until release 3.0, these modules are still + available through `MDAnalysis.analysis` (either as an import of the + MDAKit as an automatically installed dependency of the MDAnalysis + package or as the original code) but from 3.0 onwards, users must + install the MDAKit explicitly and then import it by themselves. + + * The `MDAnalysis.analysis.encore` module has been deprecated in + favour of the [mdaencore]() MDAKit and will be removed in version + 3.0.0 (PR #4737) + * The `MDAnalysis.analysis.waterdynamics` module has been deprecated in favour + of the [waterdynamics][] MDAKit and will be removed in version 3.0.0 (PR #4404) + * The `MDAnalysis.analysis.psa` module has been deprecated in favour of + the [PathSimAnalysis][] MDAKit and will be removed in version 3.0.0 + (PR #4403) +* The MMTF Reader is deprecated and will be removed in version 3.0 as + the MMTF format is no longer supported (Issue #4634). + + + +## Author statistics + +This release was the work of 22 contributors, **10** of which are **new contributors**. + +Our **new contributors** are: +- @aditya292002 +- @pstaerk +- @kainszs +- @SampurnaM +- @leonwehrhan +- @PythonFZ +- @kurtmckee +- @laksh-krishna-sharma +- @MattTDavies, +- @talagayev + +## Acknowledgements + +MDAnalysis thanks [NumFOCUS][] for its continued support as our fiscal sponsor and +the [Chan Zuckerberg Initiative][] for supporting MDAnalysis under EOSS4 and EOSS5 awards. + +— @IAlibay ([release manager][roles]) on behalf of the [MDAnalysis Team][] + + +---- + + +[^guesserPR]: The Guesser API was a _big_ undertaking: Her merged [PR + #3753][] totalled 668 (!) comments. We look forward to the + community providing Guessers for specific context. + +[^PMDApaper]: Shujie Fan, Max Linke, Ioannis Paraskevakos, Richard + J. Gowers, Michael Gecht, and Oliver Beckstein. *PMDA - Parallel + Molecular Dynamics Analysis.* In Chris Calloway, David Lippa, + Dillon Niederhut, and David Shupe, editors, *Proceedings of the + 18th Python in Science Conference*, 134 – 142. Austin, + TX, 2019. SciPy. doi:[10.25080/Majora-7ddc1dd1-013](https://doi.org/10.25080/Majora-7ddc1dd1-013). + +[^parallelizationPR]: Adding parallelization in a transparent manner + was quite a difficult undertaking that touched many parts of the + analysis code and required a lot of thought. Feedback is very + welcome! See [PR #4162][] with 713 (!) comments. + +[guesser modules docs]: https://docs.mdanalysis.org/stable/documentation_pages/guesser_modules.html +[converter modules docs]: https://docs.mdanalysis.org/stable/documentation_pages/converters.html + +[GSoC 2022 project]: {{ site.baseurl }}{% post_url 2022-12-9-Aya-gsoc-final-report %} +[GSoC 2023 project]: {{ site.baseurl }}{% post_url 2024-01-18-gsoc2023_marinegor %} +[parallel analysis]: https://docs.mdanalysis.org/stable/documentation_pages/analysis/parallelization.html +[MDAnalysis.analysis.base.AnalysisBase]: https://docs.mdanalysis.org/stable/documentation_pages/analysis/base.html#MDAnalysis.analysis.base.AnalysisBase +[PR #3753]: https://github.com/MDAnalysis/mdanalysis/pull/3753 +[PR #4162]: https://github.com/MDAnalysis/mdanalysis/pull/4162 +[pydssp]: https://github.com/ShintaroMinami/PyDSSP +[MDAnalysis.analysis]: https://docs.mdanalysis.org/stable/documentation_pages/analysis_modules.html +[PMDA]: https://github.com/mdanalysis/pmda +[SPEC 0]: https://scientific-python.org/specs/spec-0000/ +[x86-64]: https://en.wikipedia.org/wiki/X86-64 +[ARM64]: https://en.wikipedia.org/wiki/Apple_M1 +[installation instructions in the User Guide]: https://userguide.mdanalysis.org/stable/installation.html +[conda-forge channel]: https://anaconda.org/conda-forge/mdanalysis +[PyPi]: https://pypi.org/project/MDAnalysis/ +[NumFOCUS]: https://www.numfocus.org +[CHANGELOG]: https://github.com/MDAnalysis/mdanalysis/blob/release-2.8.0/package/CHANGELOG +[Chan Zuckerberg Initiative]: https://chanzuckerberg.com/ +[licensing update]: {{ site.baseurl }}{% post_url 2023-09-22-licensing-update %} +[roles]: {{ site.baseurl }}/pages/team/#roles +[MDAnalysis Team]: {{ site.baseurl }}/pages/team +[MDAKits]: https://mdakits.mdanalysis.org/ +[roadmap]: {{ site.baseurl }}{% post_url 2023-10-25-towards_3.0 %}#a-trimmed-down-core-library +[mdaencore]: https://mdakits.mdanalysis.org/mdaencore.html +[waterdynamics]: https://mdakits.mdanalysis.org/waterdynamics.html +[PathSimAnalysis]: https://mdakits.mdanalysis.org/PathSimAnalysis.html