PlasmaPy v0.6.0 (2021-03-14) ============================ The people who have contributed to the code for this release are: * Anthony Vo * Dhawal Modi * * Dominik Stańczak * Drozdov David * * Erik Everson * Kevin Montes * * Nick Murphy * Peter Heuer * Ramiz Qudsi * Tiger Du An asterisk indicates that this release contains their first contribution to PlasmaPy. Backwards Incompatible Changes ------------------------------ - The ``State`` namedtuple was changed to the ``plasmapy.particles.IonicFraction`` class. (Note: #1046 subsequently changed that to `~plasmapy.particles.ionization_state.IonicLevel`). (`#796 `__) - Now, when the `~plasmapy.particles.ionization_state.IonizationState` class is provided with an ion, the ionic fraction for that ion is set to 100% for the corresponding element or isotope. (`#796 `__) - ``AtomicError`` was renamed to `~plasmapy.particles.exceptions.ParticleError` and ``MissingAtomicDataError`` was renamed to `~plasmapy.particles.exceptions.MissingParticleDataError`. (`#796 `__) - In `plasmapy.particles`, the ``IonizationStates`` class was renamed to `~plasmapy.particles.ionization_state_collection.IonizationStateCollection`. Argument ``n`` of ``IonizationStates`` was changed to ``n0`` in `~plasmapy.particles.ionization_state_collection.IonizationStateCollection`. (`#796 `__) - Moved and refactored error message formatting functionality from ``plasmapy.utils.error_messages`` to `plasmapy.utils.code_repr`. (`#920 `__) - Renamed the available "methods" for computing the Coulomb logarithm in an attempt to make the names more explicit. This is implemented using the ``method`` keyword for functions `~plasmapy.formulary.collisions.coulomb.Coulomb_logarithm` and `~plasmapy.formulary.collisions.lengths.impact_parameter`, and then propagated throughout the functionality in `plasmapy.formulary.collisions`. (`#962 `__) - Added dependency ``pandas >= 1.0.0``. Modified ``xarray`` dependency to be ``xarray >= 0.14.0``. (`#963 `__) - The `~plasmapy.plasma.grids.AbstractGrid` property `~plasmapy.plasma.grids.AbstractGrid.grid` is now dimensioned (has units) and cannot be accessed if all dimensions do not share the same units. (`#981 `__) - Renamed attribute ``is_uniform_grid`` on `~plasmapy.plasma.grids.AbstractGrid` to ``is_uniform``. (`#981 `__) - Dropped Python 3.6 support. (`#987 `__) - The ``__getitem__`` method of `~plasmapy.plasma.grids.AbstractGrid` now returns a |Quantity| array instead of a reference to a ``xarray.DataArray``. (`#1027 `__) - Renamed ``IonicFraction`` to `~plasmapy.particles.ionization_state.IonicLevel`. This lays groundwork for future changes, where that class is going to become more than a fraction. (`#1046 `__) Deprecations and Removals ------------------------- - The ``particle`` attribute of `~plasmapy.particles.particle_class.Particle` has been deprecated in favor of the new ``symbol`` attribute. The ``particle`` attribute now issues a `FutureWarning` to indicate that it will be removed in a future release. (`#984 `__) Features -------- - Created the `~plasmapy.simulation.abstractions.AbstractNormalizations` class to serve as an abstract interface for future classes that represent normalizations. (`#859 `__) - Create the analysis sub-package `plasmapy.analysis.swept_langmuir` for analysis code related to analyzing swept Langmuir traces. Subpackage is initiated with functionality for calculating the floating potential, `~plasmapy.analysis.swept_langmuir.floating_potential.find_floating_potential`. (`#889 `__) - Added a proton radiography diagnostic module containing a tool for generating synthetic proton radiographs from simulated or calculated fields using a particle tracking algorithm. (`#895 `__) - Created new grid objects for representing plasma quantities as functions of space. (`#909 `__) - Added functions in `plasmapy.utils.code_repr` to reproduce strings that represent a call to a method or attribute of an object. These functions are used, for example, in error messages. (`#920 `__) - Added the function ``plasmapy.dispersion.two_fluid_dispersion.two_fluid_dispersion_solution`` to `plasmapy.dispersion`, which gives an analytical solution to the dispersion relation as derived by :cite:t:`bellan:2012`\ . (`#932 `__) - Refactored out the ``plasmapy.simulation.particle_integrators.boris_push`` tracking integrator algorithm from ``plasmapy.simulation.particletracker.ParticleTracker``. (`#953 `__) - For `plasmapy.plasma.grids` functionality, added better support for recognizing and handling physical quantities (e.g., spatial position, magnetic field, etc.) added to a grid object. (`#963 `__) - For `plasmapy.plasma.grids` functionality, improve interpolation performance on non-uniform grids. (`#963 `__) - Added the `~plasmapy.formulary.drifts.diamagnetic_drift` function to `~plasmapy.formulary.drifts`. (`#972 `__) - Added properties ``grid_resolution`` and `~plasmapy.plasma.grids.AbstractGrid.quantities` to `~plasmapy.plasma.grids.AbstractGrid`. (`#981 `__) - Made several speed improvements to the functionality in `~plasmapy.plasma.grids`, including the addition of keyword ``persistent`` to `~plasmapy.plasma.grids.AbstractGrid` (and child class) methods `~plasmapy.plasma.grids.AbstractGrid.nearest_neighbor_interpolator` and ``volume_averaged_interpolator``. This keyword allows the interpolators to assume the last grid setup and contents if input arguments have not changed. (`#981 `__) - Added methods `~plasmapy.plasma.grids.AbstractGrid.on_grid` and `~plasmapy.plasma.grids.AbstractGrid.vector_intersects` to `~plasmapy.plasma.grids.AbstractGrid`. (`#981 `__) - The `~plasmapy.particles.particle_class.Particle` class now contains an attribute named ``symbol`` that is intended to replace ``particle``. The ``symbol`` attribute has been added as a property to `~plasmapy.particles.particle_class.AbstractParticle`, `~plasmapy.particles.particle_class.CustomParticle`, and `~plasmapy.particles.particle_class.DimensionlessParticle`. (`#984 `__) - Added new ``can_be_zero`` check parameter to `~plasmapy.utils.decorators.checks.CheckValues` and its dependents ( `~plasmapy.utils.decorators.checks.check_values`, `~plasmapy.utils.decorators.validators.ValidateQuantities`, `~plasmapy.utils.decorators.validators.validate_quantities`). (`#999 `__) - Both `plasmapy.particles.particle_class.CustomParticle` and `plasmapy.particles.particle_class.DimensionlessParticle` now allow users to define a custom symbol via the ``symbol`` keyword argument, which can then be accessed by the ``symbol`` attribute in each of these classes. (`#1015 `__) - The greater than (``>``) operator can now be used between `~plasmapy.particles.particle_class.Particle` and/or `~plasmapy.particles.particle_collections.ParticleList` instances to get the nuclear reaction energy. (`#1017 `__) - Created `plasmapy.particles.particle_collections.ParticleList` as a list-like collection for instances of `plasmapy.particles.particle_class.Particle` and `plasmapy.particles.particle_class.CustomParticle`. Adding `~plasmapy.particles.particle_class.Particle` and/or `~plasmapy.particles.particle_class.CustomParticle` instances will now create a `~plasmapy.particles.particle_collections.ParticleList`. (`#1017 `__) - Added method `~plasmapy.plasma.grids.AbstractGrid.require_quantities` to `~plasmapy.plasma.grids.AbstractGrid` that verifies a list of quantities is present on the grid. Method is also incorporated into ``plasmapy.diagnostics.proton_radiography.SyntheticProtonRadiograph``. (`#1027 `__) - Added the ``add_wire_mesh()`` method to ``plasmapy.diagnostics.proton_radiography.SyntheticProtonRadiograph`` to allow the creation of synthetic proton radiographs that include a wire mesh reference grid. (`#1049 `__) - Created a function, `~plasmapy.formulary.mathematics.rot_a_to_b`, that calculates the rotation matrix that will rotate one 3D vector onto another. (`#1054 `__) - Made `~plasmapy.plasma.grids.AbstractGrid.is_uniform` a properly-documented public attribute of `~plasmapy.plasma.grids.AbstractGrid`. (`#1072 `__) Bug Fixes --------- - Fixed a minus sign bug in the Particle Tracker simulation that caused the E×B drift to go in the incorrect direction. (`#953 `__) - Bugfix :meth:`plasmapy.analysis.fit_functions.Linear.root_solve` to handle the case where the slope is zero and no finite roots exist. (`#959 `__) - Fixed a bug that prevented nested iterations of a single `~plasmapy.particles.ionization_state.IonizationState` or `~plasmapy.particles.ionization_state_collection.IonizationStateCollection` instance. (`#1025 `__) - Fixed a bug in :file:`grids.py` for non-uniform grids that arose when ``xarray`` upgraded to ``v0.17.0`` (`#1027 `__) - In ``plasmapy.diagnostics.proton_radiography.SyntheticProtonRadiograph``, adaptive ``dt`` now calculates the cyclotron period using the provided particle charge and mass (previously assumed protons). (`#1035 `__) - In ``plasmapy.diagnostics.proton_radiography.SyntheticProtonRadiograph``, the adaptive timestep algorithm now works when particles are provided using ``plasmapy.diagnostics.proton_radiography.SyntheticProtonRadiograph.load_particles``. (`#1035 `__) - In ``plasmapy.diagnostics.proton_radiography.SyntheticProtonRadiograph``, removed highly deflected particles so the call of ``plasmapy.diagnostics.proton_radiography.SyntheticProtonRadiograph.max_deflection`` does not raise an exception. (`#1035 `__) Improved Documentation ---------------------- - Added narrative documentation on ionization state functionality. (`#796 `__) - Added description to ``plasmapy.formulary.parameters.Hall_parameter`` signature and equation in docstrings. (`#934 `__) - Updated documentation for the `plasmapy.particles` and `plasmapy.utils` subpackages. (`#942 `__) - Improved documentation of :file:`plasmapy/formulary/quantum.py` by cleaning up docstrings of contained functionality. (`#951 `__) - Updated all docstrings associated with computing the Coulomb logarithm and the possible methods of calculation. (`#962 `__) - Added two Jupyter notebooks for functionality contained in `plasmapy.plasma.grids`: :file:`grids_cartesian.ipynb` and :file:`grids_nonuniform.ipynb`. (`#963 `__) - Added the ExB drift notebook, which demonstrates the analytical solution for the drift and the implementation of the corresponding formulary drift functions, `~plasmapy.formulary.drifts.force_drift` and `~plasmapy.formulary.drifts.ExB_drift`. (`#971 `__) - Described what constitutes a valid representation of a particle in the docstring for the `plasmapy.particles.particle_class.ParticleLike` typing construct. (`#985 `__) - Put the docstring for `plasmapy.particles.particle_class.Particle.is_category` into ``numpydoc`` format. (`#1039 `__) - Added missing formulas to the docstrings of ``plasmapy.formulary.dimensionless.quantum_theta`` and `~plasmapy.formulary.dimensionless.beta`. (`#1041 `__) - Added live rendering of changelog entries on documentation builds, based on `sphinx-changelog `_. (`#1052 `__) - Created an example notebook demonstrating how the ``plasmapy.diagnostics.proton_radiography.SyntheticProtonRadiograph`` class can be used to generate synthetic proton radiographs with arbitrary source profiles. Add code documentation links to all proton radiograph notebooks. (`#1054 `__) - Updated formatting and broken `sphinx.ext.intersphinx` links in `plasmapy.formulary` docstrings. (`#1058 `__) - Made minor fixes in `plasmapy.particles` docstrings. (`#1064 `__) - Organized the layout of the example Jupyter notebooks on the Read the Docs example page. (`#1066 `__) - Fixed formatting and broken `sphinx.ext.intersphinx` links in docstrings in various places in the code base. Improved installation instructions in the docs; the subpackage stability matrix, and funding acknowledgments. (`#1076 `__) Trivial/Internal Changes ------------------------ - Removed ``colorama`` as a dependency. (`#920 `__) - Moved remaining CI from CircleCI to GitHub Actions. (`#996 `__) - Added notebook CI through ``nbqa``. (`#997 `__) - Removed ``lambda`` expressions from `plasmapy.particles` and `plasmapy.utils`. (`#1013 `__) - Added unicode particle aliases for electrons (``"β-"``, ``"β⁻"``), muons (``"μ-"``, ``"μ⁻"``), anti-muons (``"μ+"``, ``"μ⁺"``), tau particles (``"τ"``, ``"τ-"``, ``"τ⁻"``), anti-tau particles (``"τ+"``, ``"τ⁺"``) electron neutrinos (``"ν_e"``), muon neutrinos (``"ν_μ"``), tau neutrinos (``"ν_τ"``), and alpha particles (``"α"``). (`#1036 `__) - A set containing all valid particle categories may now be accessed via ``plasmapy.particles.particle_class.Particle.is_category.valid_categories``. (`#1039 `__) - Properly handled warnings in :file:`test_proton_radiography.py` (`#1050 `__)