Source code for plasmapy.plasma.plasma_base

"""
Module for defining the base framework of the plasma classes.

.. attention::

   |expect-api-changes|
"""

__all__ = ["BasePlasma", "GenericPlasma"]

from abc import ABC, abstractmethod
from collections.abc import Callable
from typing import ClassVar


[docs] class BasePlasma(ABC): """ Registration class for `~plasmapy.plasma.plasma_base.GenericPlasma` and declares some abstract methods for data common in different kinds of plasmas. This class checks for the existence of a method named ``is_datasource_for`` when a subclass of `~plasmapy.plasma.plasma_base.GenericPlasma` is defined. If it exists it will add that class to the registry. .. attention:: |expect-api-changes| """ # GenericPlasma subclass registry _registry: ClassVar[dict[type, Callable]] = {} # type: ignore[type-arg] def __init_subclass__(cls, **kwargs) -> None: super().__init_subclass__(**kwargs) if hasattr(cls, "is_datasource_for"): cls._registry[cls] = cls.is_datasource_for # This class is supposed to declare abstract methods (@abstractmethod or # @abstractproperty as appropriate) that are common in most plasmas # (like `electronTemperature`, `ionTemperature`, # `electronDensity`, `ionDensity`, `averageIonization`, etc.) # whereas `GenericPlasma` class will hold the definitions for these # abstract methods. # For reference, see # https://github.com/sunpy/ndcube/blob/main/ndcube/ndcube.py#L26 @property @abstractmethod def electron_temperature(self): # noqa: D102 raise NotImplementedError @property @abstractmethod def ion_temperature(self): # noqa: D102 raise NotImplementedError @property @abstractmethod def electron_density(self): # noqa: D102 raise NotImplementedError @property @abstractmethod def ion_density(self): # noqa: D102 raise NotImplementedError @property @abstractmethod def average_ionization(self): # noqa: D102 raise NotImplementedError
[docs] class GenericPlasma(BasePlasma): """ A Generic Plasma class. This class contains definitions for abstract methods declared in the `~plasmapy.plasma.plasma_base.BasePlasma`. """ def __init__(self, **kwargs) -> None: pass # The definitions for the abstract methods declared in `BasePlasma` # goes here.
[docs] def electron_temperature(self): # noqa: D102 raise NotImplementedError
[docs] def ion_temperature(self): # noqa: D102 raise NotImplementedError
[docs] def electron_density(self): # noqa: D102 raise NotImplementedError
[docs] def ion_density(self): # noqa: D102 raise NotImplementedError
[docs] def average_ionization(self): # noqa: D102 raise NotImplementedError