Unreleased changes

PlasmaPy v0.1.dev50+gfebbe7ad5 (2026-10-13)

New Features

  • Updated ionization energies from NIST. (#3244)

  • Added the plasmapy.formulary.fusion module, which provides fusion_cross_section and fusion_reactivity for evaluating fusion cross sections and Maxwellian-averaged reactivities for nine common fusion reactions, including deuterium–tritium, deuterium–deuterium, and deuterium–helium-3. Both quantities are computed from the Bosch–Hale Padé (rational-function) parametrization of the astrophysical S-function. For the reactions tabulated by Bosch and Hale [1992] the published coefficients are used, while for the remaining reactions the same functional form is fit to evaluated cross sections from the ENDF/B library. The module also provides available_cross_section_reactions and available_reactivity_reactions, which return the reaction keys accepted by each function. (#3329)

Documentation Improvements

  • Updated documentation builds to use sphinx>=9.1. (#3201)

  • Fixed typos in thomson.py and mathematics.py. (#3226)

  • Corrected the changelog entry for #3202. (#3239)

  • Renamed the trivial changelog category to misc to represent miscellaneous changes. (#3241)

  • Added a section to the security policy to discuss access to project assets. (#3273)

  • Corrected and added a hyperlink to the reference for Bohm [1949]. (#3286)

  • Used the rest-example directive from sphinx-toolbox to de-duplicate reST examples in the documentation guide. (#3330)

  • Added an example Jupyter notebook to the documentation gallery demonstrating how to compute fusion cross sections and reactivities with fusion. (#3347)

  • Removed sphinx-codeautolink as an extension to the documentation build. (#3355)

  • Noted that contributions made with significant AI-generated content are currently unable to be accepted due to time constraints among code reviewers. (#3360)

  • Added a policy for AI based contributions and a pull request template. (#3373)

  • Added an Other Useful Projects page to the documentation. (#3375)

Deprecations and Planned Removals

  • Deprecated the internal @plasmapy.utils.decorators.deprecation.deprecated decorator in favor of warnings.deprecated, which was added to the standard library in Python 3.13. The internal @deprecated decorator will be removed in a future release. (#3300)

Bug Fixes

  • Fixed float precision issue in rot_a_to_b where anti-parallel vectors were not correctly detected. (#3227)

  • Enabled particle_input() and validate_quantities() to be used in either order when decorating an instance method. Previously, particle_input() had to be the outer decorator for instance methods (see #2035). (#3325)

  • The charged-particle-radiography Tracker now raises a clear ValueError when the source or detector is located at the grid origin, or when the source and detector are placed on the same side of the origin, instead of silently constructing the simulation with undefined (NaN/inf) plane-normal geometry or a meaningless magnification (see #2077). (#3328)

Internal Changes and Refactorings

  • Added dependency groups for multiple Nox sessions. (#3238)

  • Added in-line comments to suppress existing static type checking reports issued by ty. (#3240)

  • Added a pre-commit hook for bibtex-tidy to autoformat docs/bibliography.bib. (#3280)

  • Updated comments in GitHub workflow files to describe what each workflow does. (#3282)

  • Added AGENTS.md to provide instructions for AI coding assistants. (#3284)

  • Enabled more ruff rules, including most of the ANN rule set. (#3292)

  • Reduced frequency of running comprehensive tests. (#3294)

  • Enabled additional ruff linter rules. (#3295)

  • Added a GitHub workflow to perform quarterly updates of the minimum allowed versions of dependencies. (#3362)

  • Expanded AGENTS.md with guidance on units, particles, and their decorators. (#3388)

Updates to Software Testing

  • Switched from mypy to ty for static type checking. (#3240)

  • Updated the GitHub workflow that validates changelog entries to provide more diagnostic information. (#3241)

  • Replaced bare assert np.isclose(...) and assert np.allclose(...) calls across 41 test files with np.testing.assert_allclose(...), which produces informative failure messages showing actual vs. desired values and the tolerance used instead of a bare AssertionError. (#3327)

Miscellaneous Changes

  • Updated the script to export ionization energies from NIST by including inline script metadata (see PEP 723) and writing the resulting data file to its final location. (#3244)