PLEP | 7 |
---|---|
author(s) | Erik T. Everson
Tulasi Parashar
Stephen Vincena
Nicholas A. Murphy
|
contact email | eeverson@ucla.edu |
date created | 2019-10-27 |
date last revised | 2021-04-27 |
type | Standard |
status | Accepted |
DOI | 10.5281/zenodo.3774573 |
Contents
- Abstract
- Detailed Description
- Extensible Packages are Exempt
- Implementation
- Issues, Pull Requests, and Branches
- Backward Compatibility
- Decision Rationale
This PLEP defines the top-level structure of PlasmaPy
(i.e.
plasmapy.<subpackage>
). Its intent is to name the top-level
sub-packages and define the general scope of each package.
Sub-package details are left to be defined in package focused PLEPs,
which should NOT conflict with this PLEP. Defining the top-level
structure should:
- keep the top-level namespace from getting bloated
- help developers decided where new code should be placed
- help navigate users to the functionality they need
If new code does NOT fall within the current framework after a thorough and exhaustive review, then this PLEP needs to be modified/updated accordingly before any new top-level sub-packages are created.
By defining the top-level sub-package namespace developers are better
directed to where code should be added, the PlasmaPy
Coordinating Committee
can better manage package bloat, and users are better directed to the code
they need.
The following sub-packages are outlined in this PLEP, with brief synopses given in the tables below. The details of each package are left to be fully defined by their respective package PLEPs.
addons | |
---|---|
directory: | ./plasmapy/addons/ |
access: | plasmapy.addons |
PLEP: | |
scope: | The
addons sub-package is intended to be a plugin
location to allow 3rd party users to extend the
capabilities of PlasmaPy.PlasmaPy's primary goal is to provide common
functionality to the plasma community as a whole and
avoids getting too focused on resources/functionality
that are specific to a research group, instrument,
laboratory, etc. However, we do see the benefit of
having this functionality available in the PlasmaPy
ecosystem. This
addons entry point allows for the
PlasmaPy community to develop separate open-source
distributions that extend the functionality of
plasmapy .Note:
Extending PlasmaPy by adding to
plasmapy.addons
will be covered in a future PLEP. |
analysis | |
---|---|
directory: | ./plasmapy/analysis/ |
access: | plasmapy.analysis |
PLEP: | |
scope: | A sub-package focused on providing analysis techniques
that can be applied to data collected from a variety of
sources (simulation, experimental, space, etc.).
The focus of an analysis routine should be made as broad
as possible. When the routine's functionality becomes
highly-tailored to its application, then it should be
placed into an explicitly appropriate namespace. For
example, linear, langmuir, magnetic-flux, etc. analysis
tools should be placed in their respective namespaces
within
plasmapy.analysis . |
diagnostics | |
---|---|
directory: | ./plasmapy/diagnostics/ |
access: | plasmapy.diagnostics |
PLEP: | |
scope: | A sub-package that fully defines the parameters of a
"diagnostic." A "diagnostic" is any data collecting
instrument ranging from experimental probes, like
Langmuir and magnetic flux probes, to analogous
synthetic diagnostics for simulations.
Tools in this package do not define any analysis
routines, but focus on defining probe
characteristics/calibrations that can be seamlessly
passed to
plasmapy.analysis routines.A "
Diagnostic " class should fully define its
diagnostic characteristics and provide access to its
most relevant analysis tools found in
plasmapy.analysis . |
dispersion | |
---|---|
directory: | ./plasmapy/dispersion/ |
access: | plasmapy.dispersion |
PLEP: | |
scope: | A sub-package containing tools to work with plasma dispersion relations. This includes, but is not limited to, solving dispersion relations, defining dispersion functions, plotting dispersion relations, etc. |
formulary | |
---|---|
directory: | ./plasmapy/formulary/ |
access: | plasmapy.formulary |
PLEP: | |
scope: | A sub-package that provides mathematical and scientific formulas for calculating physical parameters of various plasmas. This is inspired by, and akin to, the NRL Plasma Formulary. |
particles | |
---|---|
directory: | ./plasmapy/particles/ |
access: | plasmapy.particles |
PLEP: | |
scope: | A sub-package that fully defines the properties of a "particle." A "particle" can come in many forms ranging from a traditional particle (electron, ion, atom, etc.) to more exotic types like dust particles, dimensionless particles for simulations, super-particles for simulations, etc. |
plasma | |
---|---|
directory: | ./plasmapy/plasma/ |
access: | plasmapy.plasma |
PLEP: | |
scope: | A sub-package that fully defines a plasma. This would
include the plasma's species constituents and physical
parameters (like temperature, boundary conditions,
magnetic fields, distribution functions, etc.).
Any tools that go into defining a plasma or its
environment (e.g. a field solver) should be included in
a sub-package within
plasmapy.plasma . |
simulation | |
---|---|
directory: | ./plasmapy/simulation/ |
access: | plasmapy.simulation |
PLEP: | |
scope: | A sub-package focused on interfacing with simulations
and/or running simulations.
If a new feature falls under the scope of the
analysis and/or diagnostics sub-packages, then
the new feature should be included in one of those
sub-packages. For example, a synthetic diagnostic
should be included in the plasmapy.diagnostics
sub-package. |
tests | |
---|---|
directory: | ./plasmapy/tests/ |
access: | plasmapy.tests |
PLEP: | |
scope: | A collection of tests for top-level modules (i.e.
functions and classes defined in top-level
.py
files).Note:
Utilities associated with running and developing tests
(e.g. "pytest helpers") should also be included here over
plasmapy.utils . |
transport | |
---|---|
directory: | ./plasmapy/transport/ |
access: | plasmapy.transport |
PLEP: | |
scope: | This sub-package will contain functionality for
calculating plasma transport coefficients and/or modeling
plasma transport.
Note:
Simulations that focus on calculating transport
coefficients should be included in this sub-package and
not
plasmapy.simulation . |
utils | |
---|---|
directory: | ./plasmapy/utils/ |
access: | plasmapy.utils |
PLEP: | |
scope: | A collection of "utility" functions and classes to help
us write (what we try to think of as) clean, readable,
and informative code.
This collection does not provide any physics tools,
instead it is focused on providing package development
tools.
Note:
Utilities focused on running and developing tests should
be placed in
plasmapy.tests instead. |
Any package separately distributed from plasmapy
does not need to go through a
PLEP-7 review to add a top-level package to plasmapy
. For example, a
plasmapy-foo
distribution does not require a PLEP-7 review to create the extensible
sub-package plasmapy.foo
. The reasoning here is (1) this top-level sub-package
plasmapy.foo
is not distributed with the main plasmapy
package and (2) any
user is purposefully installing the extensible package plasmapy-foo
.
Implementing this PLEP requires creation of new sub-packages and refactoring (renaming and/or moving) of existing modules and sub-packages into the outlined structure.
Implementation of this PLEP was started during the development of plasmapy
v0.3.0
.
All issues and pull requests were managed under the GitHub project PLEP-0007 Implementation. The key pull requests were:
- PR #692: "plasmapy.formulary - reshuffle"
- PR #742: "Rename plasmapy.atomic to plasmapy.particles"
- PR #728: "Refactor pytest helper functionality"
This PLEP will NOT maintain backward compatibility.
Defining a top-level namespace for plasmapy
will (1) prevent namespace
pollution, (2) help guide developers on where to place new code, and (3) help
navigate users to the functionality they need.