From 475043e18331bc0e668e241bc31883084743c88c Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Tue, 9 Aug 2022 08:42:58 -0400 Subject: [PATCH 01/15] Add `plasma_critical_density` function body --- plasmapy/formulary/frequencies.py | 56 ++++++++++++++++++++++++++++++- plasmapy/formulary/parameters.py | 1 + 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/plasmapy/formulary/frequencies.py b/plasmapy/formulary/frequencies.py index 54bb2961a4..113d969399 100644 --- a/plasmapy/formulary/frequencies.py +++ b/plasmapy/formulary/frequencies.py @@ -4,6 +4,7 @@ "lower_hybrid_frequency", "plasma_frequency", "upper_hybrid_frequency", + "plasma_critical_density", ] __aliases__ = ["oc_", "wc_", "wlh_", "wp_", "wuh_"] __lite_funcs__ = ["plasma_frequency_lite"] @@ -12,7 +13,7 @@ import numbers import numpy as np -from astropy.constants.si import e, eps0 +from astropy.constants.si import e, eps0, m_e from numba import njit from plasmapy import particles @@ -519,3 +520,56 @@ def upper_hybrid_frequency(B: u.T, n_e: u.m**-3) -> u.rad / u.s: wuh_ = upper_hybrid_frequency """Alias to `~plasmapy.formulary.frequencies.upper_hybrid_frequency`.""" + + +@validate_quantities( + omega_p={"can_be_negative": False}, + validations_on_return={ + "units": [u.m**-3], + "equivalencies": [ + (u.F * u.kg * u.rad**2 / (u.C**2 * u.m * u.s**2), u.m**-3) + ], + }, +) +def plasma_critical_density(omega_p: u.rad / u.s) -> u.m**-3: + r"""Calculate the plasma critical density. + + Parameters + ---------- + omega_p : `~astropy.units.Quantity` + The plasma frequency in radians per second. + + Returns + ------- + n_c : `~astropy.units.Quantity` + The plasma critical density. + + Raises + ------ + `TypeError` + If ``omega_p`` is not a `~astropy.units.Quantity`. + + `~astropy.units.UnitConversionError` + If ``omega_p`` is not in correct units. + + `ValueError` + If ``omega_p`` is an invalid value. + + Warns + ----- + : `~astropy.units.UnitsWarning` + If units are not provided, SI units are assumed. + + Notes + ----- + + + Examples + -------- + >>> from astropy import units as u + >>> plasma_critical_density(1 * u.rad/u.s) + + + """ + + return m_e * eps0 * omega_p**2 / (e**2) diff --git a/plasmapy/formulary/parameters.py b/plasmapy/formulary/parameters.py index 8c33e647c6..5b500177a1 100644 --- a/plasmapy/formulary/parameters.py +++ b/plasmapy/formulary/parameters.py @@ -77,6 +77,7 @@ ("frequencies", "wlh_"), ("frequencies", "upper_hybrid_frequency"), ("frequencies", "wuh_"), + ("frequencies", "plasma_critical_density"), ("lengths", "Debye_length"), ("lengths", "lambdaD_"), ("lengths", "gyroradius"), From 48a23a6d7df318719da79f34a2c4542ad67dd09f Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Tue, 9 Aug 2022 10:59:08 -0400 Subject: [PATCH 02/15] Add changelog --- changelog/1664.feature.rst | 2 ++ docs/about/credits.rst | 1 + 2 files changed, 3 insertions(+) create mode 100644 changelog/1664.feature.rst diff --git a/changelog/1664.feature.rst b/changelog/1664.feature.rst new file mode 100644 index 0000000000..00c880fed3 --- /dev/null +++ b/changelog/1664.feature.rst @@ -0,0 +1,2 @@ +Added the `~plasmapy.formulary.frequencies.plasma_critical_density` +function to the `~plasmapy.formulary.frequencies` module. This function calculates the critical density of the plasma for a given plasma frequency. diff --git a/docs/about/credits.rst b/docs/about/credits.rst index f19a25db77..0e611fbdc0 100644 --- a/docs/about/credits.rst +++ b/docs/about/credits.rst @@ -68,6 +68,7 @@ in parentheses are `ORCID author identifiers `__. * Jakub Polak * :user:`James Kent ` * :user:`Jasper Beckers ` +* :user:`Jayden Roberts ` * :user:`Joao Victor Martinelli ` * :user:`Joshua Munn ` * :user:`Isaias McHardy ` (:orcid:`0000-0001-5394-9445`) From e1500d272d85f1666949cec0999a53938f806088 Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Thu, 11 Aug 2022 13:44:27 -0400 Subject: [PATCH 03/15] Add `test_densities.py` & `test_plasma_critical_density()` Add `densities.py` & move `plasma_critical_density()` from `frequencies.py` to `densities.py` Revise changelog entry --- changelog/1664.feature.rst | 4 +- plasmapy/formulary/__init__.py | 1 + plasmapy/formulary/densities.py | 63 ++++++++++++++++++++++ plasmapy/formulary/frequencies.py | 54 ------------------- plasmapy/formulary/parameters.py | 1 - plasmapy/formulary/tests/test_densities.py | 30 +++++++++++ 6 files changed, 96 insertions(+), 57 deletions(-) create mode 100644 plasmapy/formulary/densities.py create mode 100644 plasmapy/formulary/tests/test_densities.py diff --git a/changelog/1664.feature.rst b/changelog/1664.feature.rst index 00c880fed3..fd6c253db9 100644 --- a/changelog/1664.feature.rst +++ b/changelog/1664.feature.rst @@ -1,2 +1,2 @@ -Added the `~plasmapy.formulary.frequencies.plasma_critical_density` -function to the `~plasmapy.formulary.frequencies` module. This function calculates the critical density of the plasma for a given plasma frequency. +Add the `~plasmapy.formulary.densities` submodule +Add the `~plasmapy.formulary.densities.plasma_critical_density` function to the `~plasmapy.formulary.densities` module. This function calculates the critical density of a plasma for a given frequency of radiation. diff --git a/plasmapy/formulary/__init__.py b/plasmapy/formulary/__init__.py index 18385e4530..3a0f518400 100644 --- a/plasmapy/formulary/__init__.py +++ b/plasmapy/formulary/__init__.py @@ -37,6 +37,7 @@ for modname in ( "braginskii", "collisions", + "densities", "dielectric", "dimensionless", "distribution", diff --git a/plasmapy/formulary/densities.py b/plasmapy/formulary/densities.py new file mode 100644 index 0000000000..51312f339d --- /dev/null +++ b/plasmapy/formulary/densities.py @@ -0,0 +1,63 @@ +"""Functions to calculate plasma density parameters.""" +__all__ = [ + "plasma_critical_density", +] + +import astropy.units as u + +from astropy.constants.si import e, eps0, m_e + +from plasmapy.utils.decorators import validate_quantities + + +@validate_quantities( + omega_p={"can_be_negative": False}, + validations_on_return={ + "units": [u.m**-3], + "equivalencies": [ + (u.F * u.kg * u.rad**2 / (u.C**2 * u.m * u.s**2), u.m**-3) + ], + }, +) +def plasma_critical_density(omega_p: u.rad / u.s) -> u.m**-3: + r"""Calculate the plasma critical density. + + Parameters + ---------- + omega_p : `~astropy.units.Quantity` + The plasma frequency in units of angular frequency. + + Returns + ------- + n_c : `~astropy.units.Quantity` + The plasma critical density. + + Raises + ------ + `TypeError` + If ``omega_p`` is not a `~astropy.units.Quantity`. + + `~astropy.units.UnitTypeError` + If ``omega_p`` is not in correct units. + + `ValueError` + If ``omega_p`` is an invalid value. + + Warns + ----- + : `~astropy.units.UnitsWarning` + If units are not provided, SI units are assumed. + + Notes + ----- + + + Examples + -------- + >>> from astropy import units as u + >>> plasma_critical_density(1 * u.rad/u.s) + + + """ + + return m_e * eps0 * omega_p**2 / (e**2) diff --git a/plasmapy/formulary/frequencies.py b/plasmapy/formulary/frequencies.py index 113d969399..11f640a0f1 100644 --- a/plasmapy/formulary/frequencies.py +++ b/plasmapy/formulary/frequencies.py @@ -4,7 +4,6 @@ "lower_hybrid_frequency", "plasma_frequency", "upper_hybrid_frequency", - "plasma_critical_density", ] __aliases__ = ["oc_", "wc_", "wlh_", "wp_", "wuh_"] __lite_funcs__ = ["plasma_frequency_lite"] @@ -520,56 +519,3 @@ def upper_hybrid_frequency(B: u.T, n_e: u.m**-3) -> u.rad / u.s: wuh_ = upper_hybrid_frequency """Alias to `~plasmapy.formulary.frequencies.upper_hybrid_frequency`.""" - - -@validate_quantities( - omega_p={"can_be_negative": False}, - validations_on_return={ - "units": [u.m**-3], - "equivalencies": [ - (u.F * u.kg * u.rad**2 / (u.C**2 * u.m * u.s**2), u.m**-3) - ], - }, -) -def plasma_critical_density(omega_p: u.rad / u.s) -> u.m**-3: - r"""Calculate the plasma critical density. - - Parameters - ---------- - omega_p : `~astropy.units.Quantity` - The plasma frequency in radians per second. - - Returns - ------- - n_c : `~astropy.units.Quantity` - The plasma critical density. - - Raises - ------ - `TypeError` - If ``omega_p`` is not a `~astropy.units.Quantity`. - - `~astropy.units.UnitConversionError` - If ``omega_p`` is not in correct units. - - `ValueError` - If ``omega_p`` is an invalid value. - - Warns - ----- - : `~astropy.units.UnitsWarning` - If units are not provided, SI units are assumed. - - Notes - ----- - - - Examples - -------- - >>> from astropy import units as u - >>> plasma_critical_density(1 * u.rad/u.s) - - - """ - - return m_e * eps0 * omega_p**2 / (e**2) diff --git a/plasmapy/formulary/parameters.py b/plasmapy/formulary/parameters.py index 5b500177a1..8c33e647c6 100644 --- a/plasmapy/formulary/parameters.py +++ b/plasmapy/formulary/parameters.py @@ -77,7 +77,6 @@ ("frequencies", "wlh_"), ("frequencies", "upper_hybrid_frequency"), ("frequencies", "wuh_"), - ("frequencies", "plasma_critical_density"), ("lengths", "Debye_length"), ("lengths", "lambdaD_"), ("lengths", "gyroradius"), diff --git a/plasmapy/formulary/tests/test_densities.py b/plasmapy/formulary/tests/test_densities.py new file mode 100644 index 0000000000..c29c86d2ca --- /dev/null +++ b/plasmapy/formulary/tests/test_densities.py @@ -0,0 +1,30 @@ +"""Tests for functionality contained in `plasmapy.formulary.frequencies`.""" +import astropy.units as u +import pytest + +from plasmapy.formulary.densities import plasma_critical_density +from plasmapy.formulary.frequencies import plasma_frequency + +n_i = 5e19 * u.m**-3 +ion = "e-" + + +def test_plasma_critical_density(): + r"""Test the plasma_critical_density function in frequencies.py.""" + + omega_p = plasma_frequency(n=n_i, particle=ion) + n_c = plasma_critical_density(omega_p) + + assert n_c.unit.is_equivalent(1 / u.m**3) + + with pytest.raises(TypeError): + plasma_critical_density("Lorem Ipsum") + + with pytest.raises(u.UnitTypeError): + plasma_critical_density(1 * u.Hz) + + with pytest.raises(ValueError): + plasma_critical_density(-1 * u.rad / u.s) + + with pytest.warns(u.UnitsWarning): + plasma_critical_density(1) From 4334b2a3c2fe4ddf61f28edab0999e75f07c413f Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Thu, 11 Aug 2022 13:58:50 -0400 Subject: [PATCH 04/15] Add `densities` to `formulary/__init__` --- plasmapy/formulary/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plasmapy/formulary/__init__.py b/plasmapy/formulary/__init__.py index 3a0f518400..c9d18f8437 100644 --- a/plasmapy/formulary/__init__.py +++ b/plasmapy/formulary/__init__.py @@ -8,6 +8,7 @@ from plasmapy.formulary.braginskii import * from plasmapy.formulary.collisions import * +from plasmapy.formulary.densities import * from plasmapy.formulary.dielectric import * from plasmapy.formulary.dimensionless import * from plasmapy.formulary.distribution import * From d6313e48f7f2a45189c42a4615059e5678182a55 Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Thu, 11 Aug 2022 16:16:42 -0400 Subject: [PATCH 05/15] Update `test_densities` to include `isclose()` test --- plasmapy/formulary/tests/test_densities.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plasmapy/formulary/tests/test_densities.py b/plasmapy/formulary/tests/test_densities.py index c29c86d2ca..9b0627fa8c 100644 --- a/plasmapy/formulary/tests/test_densities.py +++ b/plasmapy/formulary/tests/test_densities.py @@ -1,5 +1,6 @@ """Tests for functionality contained in `plasmapy.formulary.frequencies`.""" import astropy.units as u +import numpy as np import pytest from plasmapy.formulary.densities import plasma_critical_density @@ -15,7 +16,9 @@ def test_plasma_critical_density(): omega_p = plasma_frequency(n=n_i, particle=ion) n_c = plasma_critical_density(omega_p) - assert n_c.unit.is_equivalent(1 / u.m**3) + assert n_c.unit.is_equivalent(u.m**-3) + + assert np.isclose(n_c, 5e19 * u.m**-3) with pytest.raises(TypeError): plasma_critical_density("Lorem Ipsum") From b3e711e836e5350d10050071f4125b4002523b7d Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Thu, 11 Aug 2022 17:11:15 -0400 Subject: [PATCH 06/15] Add module page for `densities` --- docs/formulary/densities.rst | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 docs/formulary/densities.rst diff --git a/docs/formulary/densities.rst b/docs/formulary/densities.rst new file mode 100644 index 0000000000..43372de6d6 --- /dev/null +++ b/docs/formulary/densities.rst @@ -0,0 +1,9 @@ +.. _densities: + +****************************************************************** +Density related functionality (`plasmapy.formulary.densities`) +****************************************************************** + +.. currentmodule:: plasmapy.formulary.densities + +.. automodapi:: plasmapy.formulary.densities From 952320327dedf98e65e40b5b06932d0f588c5a17 Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Fri, 12 Aug 2022 12:53:21 -0400 Subject: [PATCH 07/15] Remove decorator errors from docstring Separate tests Add `densities` to toctree --- docs/formulary/densities.rst | 2 +- docs/formulary/index.rst | 3 ++ plasmapy/formulary/densities.py | 27 +++++++---------- plasmapy/formulary/tests/test_densities.py | 34 ++++++++++------------ 4 files changed, 30 insertions(+), 36 deletions(-) diff --git a/docs/formulary/densities.rst b/docs/formulary/densities.rst index 43372de6d6..fa3484a164 100644 --- a/docs/formulary/densities.rst +++ b/docs/formulary/densities.rst @@ -1,7 +1,7 @@ .. _densities: ****************************************************************** -Density related functionality (`plasmapy.formulary.densities`) +Density Plasma Parameters (`plasmapy.formulary.densities`) ****************************************************************** .. currentmodule:: plasmapy.formulary.densities diff --git a/docs/formulary/index.rst b/docs/formulary/index.rst index 48d1636c63..2ebc848351 100644 --- a/docs/formulary/index.rst +++ b/docs/formulary/index.rst @@ -17,6 +17,9 @@ physical quantities helpful for plasma physics. | .. toctree:: Collisions | `plasmapy.formulary.collisions` | | :maxdepth: 1 | | +--------------------------------------------------------+-----------------------------------------+ + | .. toctree:: Densities | `plasmapy.formulary.densities` | + | :maxdepth: 1 | | + +--------------------------------------------------------+-----------------------------------------+ | .. toctree:: Dielectrics | `plasmapy.formulary.dielectric` | | :maxdepth: 1 | | +--------------------------------------------------------+-----------------------------------------+ diff --git a/plasmapy/formulary/densities.py b/plasmapy/formulary/densities.py index 51312f339d..169109e429 100644 --- a/plasmapy/formulary/densities.py +++ b/plasmapy/formulary/densities.py @@ -32,25 +32,16 @@ def plasma_critical_density(omega_p: u.rad / u.s) -> u.m**-3: n_c : `~astropy.units.Quantity` The plasma critical density. - Raises - ------ - `TypeError` - If ``omega_p`` is not a `~astropy.units.Quantity`. - - `~astropy.units.UnitTypeError` - If ``omega_p`` is not in correct units. - - `ValueError` - If ``omega_p`` is an invalid value. - - Warns - ----- - : `~astropy.units.UnitsWarning` - If units are not provided, SI units are assumed. - Notes ----- + The plasma critical density is given by the formula + + .. math:: + n_{c}=\frac{m_{e}\varepsilon_0\omega_{p}^{2}}{e^{2}} + where :math:`m_{e}` is the mass of an electron, + :math:`\varepsilon_0` is the permittivity of free space, :math:`\omega_{p}` + is the plasma frequency, and :math:`e` is the elementary charge. Examples -------- @@ -60,4 +51,6 @@ def plasma_critical_density(omega_p: u.rad / u.s) -> u.m**-3: """ - return m_e * eps0 * omega_p**2 / (e**2) + n_c = m_e * eps0 * omega_p**2 / (e**2) + + return n_c diff --git a/plasmapy/formulary/tests/test_densities.py b/plasmapy/formulary/tests/test_densities.py index 9b0627fa8c..1e459d5d5e 100644 --- a/plasmapy/formulary/tests/test_densities.py +++ b/plasmapy/formulary/tests/test_densities.py @@ -6,28 +6,26 @@ from plasmapy.formulary.densities import plasma_critical_density from plasmapy.formulary.frequencies import plasma_frequency -n_i = 5e19 * u.m**-3 -ion = "e-" +class TestPlasmaCriticalDensity: + """Test the plasma_critical_density function in densities.py.""" -def test_plasma_critical_density(): - r"""Test the plasma_critical_density function in frequencies.py.""" + n_i = 5e19 * u.m**-3 + omega_p = plasma_frequency(n=n_i, particle="e-") - omega_p = plasma_frequency(n=n_i, particle=ion) - n_c = plasma_critical_density(omega_p) + @pytest.fixture() + def get_return(self): + """Get the critical density for the example frequency""" + return plasma_critical_density(self.omega_p) - assert n_c.unit.is_equivalent(u.m**-3) + def test_units(self, get_return): + """Test the return units""" + n_c = get_return - assert np.isclose(n_c, 5e19 * u.m**-3) + assert n_c.unit.is_equivalent(u.m ** -3) - with pytest.raises(TypeError): - plasma_critical_density("Lorem Ipsum") + def test_value(self, get_return): + """Compare the calculated critical density with the expected value""" + n_c = get_return - with pytest.raises(u.UnitTypeError): - plasma_critical_density(1 * u.Hz) - - with pytest.raises(ValueError): - plasma_critical_density(-1 * u.rad / u.s) - - with pytest.warns(u.UnitsWarning): - plasma_critical_density(1) + assert np.isclose(n_c.value, self.n_i.value) From 4c475d24ebd3caeca0c457e688e926c78afbc424 Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Fri, 12 Aug 2022 13:34:36 -0400 Subject: [PATCH 08/15] Appease black --- plasmapy/formulary/tests/test_densities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plasmapy/formulary/tests/test_densities.py b/plasmapy/formulary/tests/test_densities.py index 1e459d5d5e..0f65782dea 100644 --- a/plasmapy/formulary/tests/test_densities.py +++ b/plasmapy/formulary/tests/test_densities.py @@ -22,7 +22,7 @@ def test_units(self, get_return): """Test the return units""" n_c = get_return - assert n_c.unit.is_equivalent(u.m ** -3) + assert n_c.unit.is_equivalent(u.m**-3) def test_value(self, get_return): """Compare the calculated critical density with the expected value""" From 7898135b99be7f888399b9d55c1cd18be8046e53 Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Fri, 12 Aug 2022 15:17:04 -0400 Subject: [PATCH 09/15] Clarify tests --- plasmapy/formulary/tests/test_densities.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/plasmapy/formulary/tests/test_densities.py b/plasmapy/formulary/tests/test_densities.py index 0f65782dea..e8a8364d43 100644 --- a/plasmapy/formulary/tests/test_densities.py +++ b/plasmapy/formulary/tests/test_densities.py @@ -14,18 +14,21 @@ class TestPlasmaCriticalDensity: omega_p = plasma_frequency(n=n_i, particle="e-") @pytest.fixture() - def get_return(self): + def n_c(self): """Get the critical density for the example frequency""" return plasma_critical_density(self.omega_p) - def test_units(self, get_return): + def test_units(self, n_c): """Test the return units""" - n_c = get_return assert n_c.unit.is_equivalent(u.m**-3) - def test_value(self, get_return): - """Compare the calculated critical density with the expected value""" - n_c = get_return + def test_value(self, n_c): + """ + Compare the calculated critical density with the expected value. + + The plasma critical density is defined as the value at which the plasma frequency + equals the frequency of radiation. + """ assert np.isclose(n_c.value, self.n_i.value) From 1204282110dea0a8a77551be0eeb4c51fd69067f Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Fri, 12 Aug 2022 16:53:30 -0400 Subject: [PATCH 10/15] Clean up return unit conversion --- plasmapy/formulary/densities.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/plasmapy/formulary/densities.py b/plasmapy/formulary/densities.py index 169109e429..4ec51fd5c6 100644 --- a/plasmapy/formulary/densities.py +++ b/plasmapy/formulary/densities.py @@ -14,9 +14,6 @@ omega_p={"can_be_negative": False}, validations_on_return={ "units": [u.m**-3], - "equivalencies": [ - (u.F * u.kg * u.rad**2 / (u.C**2 * u.m * u.s**2), u.m**-3) - ], }, ) def plasma_critical_density(omega_p: u.rad / u.s) -> u.m**-3: @@ -53,4 +50,4 @@ def plasma_critical_density(omega_p: u.rad / u.s) -> u.m**-3: n_c = m_e * eps0 * omega_p**2 / (e**2) - return n_c + return (n_c/u.rad**2).to(u.m**-3) From 0e629ac544310a0cfc98a90df139c45bd6305667 Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Fri, 12 Aug 2022 16:55:15 -0400 Subject: [PATCH 11/15] Appease black x2 --- plasmapy/formulary/densities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plasmapy/formulary/densities.py b/plasmapy/formulary/densities.py index 4ec51fd5c6..e8109955e8 100644 --- a/plasmapy/formulary/densities.py +++ b/plasmapy/formulary/densities.py @@ -50,4 +50,4 @@ def plasma_critical_density(omega_p: u.rad / u.s) -> u.m**-3: n_c = m_e * eps0 * omega_p**2 / (e**2) - return (n_c/u.rad**2).to(u.m**-3) + return (n_c / u.rad**2).to(u.m**-3) From 5d319f4522511ec8a7e692ce370bcea84fdeab59 Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Fri, 12 Aug 2022 17:04:48 -0400 Subject: [PATCH 12/15] Change `omega_p` to `omega` Add relevant example to docstring Clarify docstring --- plasmapy/formulary/densities.py | 26 +++++++++++++--------- plasmapy/formulary/tests/test_densities.py | 9 ++++---- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/plasmapy/formulary/densities.py b/plasmapy/formulary/densities.py index e8109955e8..983da67424 100644 --- a/plasmapy/formulary/densities.py +++ b/plasmapy/formulary/densities.py @@ -11,18 +11,18 @@ @validate_quantities( - omega_p={"can_be_negative": False}, + omega={"can_be_negative": False}, validations_on_return={ "units": [u.m**-3], }, ) -def plasma_critical_density(omega_p: u.rad / u.s) -> u.m**-3: - r"""Calculate the plasma critical density. +def plasma_critical_density(omega: u.rad / u.s) -> u.m**-3: + r"""Calculate the plasma critical density for a radiation of a given frequency. Parameters ---------- - omega_p : `~astropy.units.Quantity` - The plasma frequency in units of angular frequency. + omega: `~astropy.units.Quantity` + The radiation frequency in units of angular frequency. Returns ------- @@ -31,23 +31,27 @@ def plasma_critical_density(omega_p: u.rad / u.s) -> u.m**-3: Notes ----- + The plasma critical density for a given frequency of radiation is + defined as the value at which the electron plasma frequency equals + the frequency of the radiation. + The plasma critical density is given by the formula .. math:: - n_{c}=\frac{m_{e}\varepsilon_0\omega_{p}^{2}}{e^{2}} + n_{c}=\frac{m_{e}\varepsilon_0\omega^{2}}{e^{2}} where :math:`m_{e}` is the mass of an electron, - :math:`\varepsilon_0` is the permittivity of free space, :math:`\omega_{p}` - is the plasma frequency, and :math:`e` is the elementary charge. + :math:`\varepsilon_0` is the permittivity of free space, :math:`\omega` + is the radiation frequency, and :math:`e` is the elementary charge. Examples -------- >>> from astropy import units as u - >>> plasma_critical_density(1 * u.rad/u.s) - + >>> plasma_critical_density(5e15 * u.rad/u.s) + """ - n_c = m_e * eps0 * omega_p**2 / (e**2) + n_c = m_e * eps0 * omega**2 / (e**2) return (n_c / u.rad**2).to(u.m**-3) diff --git a/plasmapy/formulary/tests/test_densities.py b/plasmapy/formulary/tests/test_densities.py index e8a8364d43..ba73137a64 100644 --- a/plasmapy/formulary/tests/test_densities.py +++ b/plasmapy/formulary/tests/test_densities.py @@ -11,12 +11,12 @@ class TestPlasmaCriticalDensity: """Test the plasma_critical_density function in densities.py.""" n_i = 5e19 * u.m**-3 - omega_p = plasma_frequency(n=n_i, particle="e-") + omega = plasma_frequency(n=n_i, particle="e-") @pytest.fixture() def n_c(self): """Get the critical density for the example frequency""" - return plasma_critical_density(self.omega_p) + return plasma_critical_density(self.omega) def test_units(self, n_c): """Test the return units""" @@ -27,8 +27,9 @@ def test_value(self, n_c): """ Compare the calculated critical density with the expected value. - The plasma critical density is defined as the value at which the plasma frequency - equals the frequency of radiation. + The plasma critical density for a given frequency of radiation is + defined as the value at which the electron plasma frequency equals + the frequency of the radiation. """ assert np.isclose(n_c.value, self.n_i.value) From 4cd51947607d578bdeb797bb35697d42d800b552 Mon Sep 17 00:00:00 2001 From: Jayden Roberts Date: Sat, 13 Aug 2022 06:13:41 -0400 Subject: [PATCH 13/15] Fix examples output --- plasmapy/formulary/densities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plasmapy/formulary/densities.py b/plasmapy/formulary/densities.py index 983da67424..499a177667 100644 --- a/plasmapy/formulary/densities.py +++ b/plasmapy/formulary/densities.py @@ -48,7 +48,7 @@ def plasma_critical_density(omega: u.rad / u.s) -> u.m**-3: -------- >>> from astropy import units as u >>> plasma_critical_density(5e15 * u.rad/u.s) - + """ From 23c1413fbb52c4d38b29e1a1fe6248c97cf21366 Mon Sep 17 00:00:00 2001 From: Jayden Roberts Date: Sat, 13 Aug 2022 07:46:32 -0400 Subject: [PATCH 14/15] Use dimensionless_angles for return --- plasmapy/formulary/densities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plasmapy/formulary/densities.py b/plasmapy/formulary/densities.py index 499a177667..5632f98b0f 100644 --- a/plasmapy/formulary/densities.py +++ b/plasmapy/formulary/densities.py @@ -54,4 +54,4 @@ def plasma_critical_density(omega: u.rad / u.s) -> u.m**-3: n_c = m_e * eps0 * omega**2 / (e**2) - return (n_c / u.rad**2).to(u.m**-3) + return n_c.to(u.m**-3, equivalencies=u.dimensionless_angles()) From 984c336b1d5d89333b975ff5cb75f7e0b05a1f81 Mon Sep 17 00:00:00 2001 From: JaydenR2305 Date: Tue, 16 Aug 2022 14:09:58 -0400 Subject: [PATCH 15/15] Rename `plasma_critical_density` to `critical_density` Clean up imports --- changelog/1664.feature.rst | 2 +- plasmapy/formulary/densities.py | 10 +++++----- plasmapy/formulary/frequencies.py | 2 +- plasmapy/formulary/tests/test_densities.py | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/changelog/1664.feature.rst b/changelog/1664.feature.rst index fd6c253db9..203787bad2 100644 --- a/changelog/1664.feature.rst +++ b/changelog/1664.feature.rst @@ -1,2 +1,2 @@ Add the `~plasmapy.formulary.densities` submodule -Add the `~plasmapy.formulary.densities.plasma_critical_density` function to the `~plasmapy.formulary.densities` module. This function calculates the critical density of a plasma for a given frequency of radiation. +Add the `~plasmapy.formulary.densities.critical_density` function to the `~plasmapy.formulary.densities` module. This function calculates the critical density of a plasma for a given frequency of radiation. diff --git a/plasmapy/formulary/densities.py b/plasmapy/formulary/densities.py index 5632f98b0f..42299a192e 100644 --- a/plasmapy/formulary/densities.py +++ b/plasmapy/formulary/densities.py @@ -1,6 +1,6 @@ """Functions to calculate plasma density parameters.""" __all__ = [ - "plasma_critical_density", + "critical_density", ] import astropy.units as u @@ -16,7 +16,7 @@ "units": [u.m**-3], }, ) -def plasma_critical_density(omega: u.rad / u.s) -> u.m**-3: +def critical_density(omega: u.rad / u.s) -> u.m**-3: r"""Calculate the plasma critical density for a radiation of a given frequency. Parameters @@ -31,11 +31,11 @@ def plasma_critical_density(omega: u.rad / u.s) -> u.m**-3: Notes ----- - The plasma critical density for a given frequency of radiation is + The critical density for a given frequency of radiation is defined as the value at which the electron plasma frequency equals the frequency of the radiation. - The plasma critical density is given by the formula + The critical density is given by the formula .. math:: n_{c}=\frac{m_{e}\varepsilon_0\omega^{2}}{e^{2}} @@ -47,7 +47,7 @@ def plasma_critical_density(omega: u.rad / u.s) -> u.m**-3: Examples -------- >>> from astropy import units as u - >>> plasma_critical_density(5e15 * u.rad/u.s) + >>> critical_density(5e15 * u.rad/u.s) """ diff --git a/plasmapy/formulary/frequencies.py b/plasmapy/formulary/frequencies.py index 11f640a0f1..54bb2961a4 100644 --- a/plasmapy/formulary/frequencies.py +++ b/plasmapy/formulary/frequencies.py @@ -12,7 +12,7 @@ import numbers import numpy as np -from astropy.constants.si import e, eps0, m_e +from astropy.constants.si import e, eps0 from numba import njit from plasmapy import particles diff --git a/plasmapy/formulary/tests/test_densities.py b/plasmapy/formulary/tests/test_densities.py index ba73137a64..e5352cf65a 100644 --- a/plasmapy/formulary/tests/test_densities.py +++ b/plasmapy/formulary/tests/test_densities.py @@ -3,11 +3,11 @@ import numpy as np import pytest -from plasmapy.formulary.densities import plasma_critical_density +from plasmapy.formulary.densities import critical_density from plasmapy.formulary.frequencies import plasma_frequency -class TestPlasmaCriticalDensity: +class TestCriticalDensity: """Test the plasma_critical_density function in densities.py.""" n_i = 5e19 * u.m**-3 @@ -16,7 +16,7 @@ class TestPlasmaCriticalDensity: @pytest.fixture() def n_c(self): """Get the critical density for the example frequency""" - return plasma_critical_density(self.omega) + return critical_density(self.omega) def test_units(self, n_c): """Test the return units"""