pep8speaks: Hello @StanczakDominik! Thanks for submitting your pull request.

* In the file [`plasmapy/diagnostics/langmuir.py`](https://github.com/PlasmaPy/PlasmaPy/blob/cb8db4d47784148deccc8e055ca912216faaae60/plasmapy/diagnostics/langmuir.py):

> [Line 370:100](https://github.com/PlasmaPy/PlasmaPy/blob/cb8db4d47784148deccc8e055ca912216faaae60/plasmapy/diagnostics/langmuir.py#L370): [E501](https://duckduckgo.com/?q=pep8%20E501) line too long (102 > 99 characters)
> [Line 379:100](https://github.com/PlasmaPy/PlasmaPy/blob/cb8db4d47784148deccc8e055ca912216faaae60/plasmapy/diagnostics/langmuir.py#L379): [E501](https://duckduckgo.com/?q=pep8%20E501) line too long (103 > 99 characters)



PlasmaPy follows the [PEP8 style guide](https://www.python.org/dev/peps/pep-0008/), which may be checked locally using [pycodestyle](http://pycodestyle.pycqa.org/en/latest/intro.html)
codecov[bot]: # [Codecov](https://codecov.io/gh/PlasmaPy/PlasmaPy/pull/623?src=pr&el=h1) Report
> Merging [#623](https://codecov.io/gh/PlasmaPy/PlasmaPy/pull/623?src=pr&el=desc) into [master](https://codecov.io/gh/PlasmaPy/PlasmaPy/commit/efd7bff5bf34c64e70259886c9b4111b046f4d79?src=pr&el=desc) will **not change** coverage.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/PlasmaPy/PlasmaPy/pull/623/graphs/tree.svg?width=650&token=LzZ5mnXVad&height=150&src=pr)](https://codecov.io/gh/PlasmaPy/PlasmaPy/pull/623?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master     #623   +/-   ##
=======================================
  Coverage   96.49%   96.49%           
=======================================
  Files          51       51           
  Lines        4540     4540           
=======================================
  Hits         4381     4381           
  Misses        159      159
```


| [Impacted Files](https://codecov.io/gh/PlasmaPy/PlasmaPy/pull/623?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [plasmapy/diagnostics/langmuir.py](https://codecov.io/gh/PlasmaPy/PlasmaPy/pull/623/diff?src=pr&el=tree#diff-cGxhc21hcHkvZGlhZ25vc3RpY3MvbGFuZ211aXIucHk=) | `100% <ø> (ø)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/PlasmaPy/PlasmaPy/pull/623?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/PlasmaPy/PlasmaPy/pull/623?src=pr&el=footer). Last update [efd7bff...a77eec2](https://codecov.io/gh/PlasmaPy/PlasmaPy/pull/623?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

diff --git a/plasmapy/diagnostics/langmuir.py b/plasmapy/diagnostics/langmuir.py
index 5d8fff7b..e02209f1 100644
--- a/plasmapy/diagnostics/langmuir.py
+++ b/plasmapy/diagnostics/langmuir.py
@@ -350,13 +350,15 @@ def swept_probe_analysis(probe_characteristic, probe_area, gas_argument,
             fig, (ax1, ax2) = plt.subplots(2, 1)
             ax1.plot(probe_characteristic.bias,
                      probe_characteristic.current,
-                     marker='.', color='k', linestyle='')
+                     marker='.', color='k', linestyle='',
+                     label="Probe current")
             ax1.set_title("Probe characteristic")
             ax2.set_ylim(probe_characteristic.get_padded_limit(0.1))
 
             ax2.plot(probe_characteristic.bias,
                      np.abs(probe_characteristic.current),
-                     marker='.', color='k', linestyle='')
+                     marker='.', color='k', linestyle='',
+                     label="Probe current")
             ax2.set_title("Logarithmic")
             ax2.set_ylim(probe_characteristic.get_padded_limit(0.1, log=True))
 
@@ -364,8 +366,9 @@ def swept_probe_analysis(probe_characteristic, probe_area, gas_argument,
             ax1.axhline(y=I_es.value, color='grey', linestyle='--')
             ax1.axvline(x=V_F.value, color='k', linestyle='--')
             ax1.axhline(y=I_is.value, color='r', linestyle='--')
-            ax1.plot(ion_current.bias, ion_current.current, c='y')
-            ax1.plot(electron_current.bias, electron_current.current, c='c')
+            ax1.plot(ion_current.bias, ion_current.current, c='y', label="Ion current")
+            ax1.plot(electron_current.bias, electron_current.current,
+                     c='c', label="Electron current")
             tot_current = ion_current + electron_current
             ax1.plot(tot_current.bias, tot_current.current, c='g')
 
@@ -373,11 +376,14 @@ def swept_probe_analysis(probe_characteristic, probe_area, gas_argument,
             ax2.axhline(y=I_es.value, color='grey', linestyle='--')
             ax2.axvline(x=V_F.value, color='k', linestyle='--')
             ax2.axhline(y=np.abs(I_is.value), color='r', linestyle='--')
-            ax2.plot(ion_current.bias, np.abs(ion_current.current), c='y')
+            ax2.plot(ion_current.bias, np.abs(ion_current.current),
+                     label="Ion current", c='y')
             ax2.plot(electron_current.bias, np.abs(electron_current.current),
-                     c='c')
+                     label="Electron current", c='c')
             ax2.plot(tot_current.bias, np.abs(tot_current.current), c='g')
             ax2.set_yscale("log", nonposy='clip')
+            ax1.legend(loc='best')
+            ax2.legend(loc='best')
 
             fig.tight_layout()
 
@@ -869,7 +875,8 @@ def get_electron_temperature(exponential_section, bimaxwellian=False,
             plt.scatter(exponential_section.bias.to(u.V),
                         np.log(exponential_section.current.to(u.A).value),
                         color='k',
-                        marker='.')
+                        marker='.',
+                        label="Exponential section")
 
             if bimaxwellian:
                 plt.scatter(x0, y0, marker='o', c='g')
@@ -878,15 +885,19 @@ def get_electron_temperature(exponential_section, bimaxwellian=False,
                              exponential_section.bias.to(u.V).value,
                              fit[0], fit[1], fit[2] + fit[3]),
                          c='g',
-                         linestyle='--')
+                         linestyle='--',
+                         label="Bimaxwellian exponential section fit",
+                         )
 
             plt.plot(exponential_section.bias.to(u.V),
                      fit_func(exponential_section.bias.to(u.V).value,
                      *fit),
+                     label="Exponential fit",
                      c='g')
 
             plt.ylabel("Logarithmic current")
             plt.title("Exponential fit")
+            plt.legend(loc='best')
             plt.tight_layout()
 
     k = [T_e]
@@ -955,9 +966,12 @@ def extrapolate_electron_current(probe_characteristic, fit,
             plt.figure()
             plt.scatter(probe_characteristic.bias,
                         probe_characteristic.current.to(u.mA), marker='.',
+                        label="Probe characteristic",
                         c='k')
             plt.plot(electron_characteristic.bias,
-                     electron_characteristic.current.to(u.mA))
+                     electron_characteristic.current.to(u.mA),
+                     label="Estimated electron characteristic")
+            plt.legend()
 
     return electron_characteristic
 
@@ -1221,5 +1235,6 @@ def get_EEDF(probe_characteristic, visualize=False):
             plt.title("Electron Energy Distribution Function")
             plt.xlabel("Energy (eV)")
             plt.ylabel("Probability")
+            plt.grid()
 
     return energy, probability
diff --git a/plasmapy/examples/plot_langmuir_analysis.py b/plasmapy/examples/plot_langmuir_analysis.py
index 310e71bf..c509e9ef 100644
--- a/plasmapy/examples/plot_langmuir_analysis.py
+++ b/plasmapy/examples/plot_langmuir_analysis.py
@@ -9,9 +9,11 @@
 """
 
 from plasmapy.diagnostics.langmuir import Characteristic, swept_probe_analysis
+import matplotlib.pyplot as plt
 import astropy.units as u
 import numpy as np
 import os
+from pprint import pprint
 
 ######################################################
 # The first characteristic we analyze is a simple single-probe measurement in
@@ -25,8 +27,8 @@
 bias, current = np.load(path)
 
 # Create the Characteristic object, taking into account the correct units
-characteristic = Characteristic(np.array(bias) * u.V,
-                                np.array(current)*1e3 * u.mA)
+characteristic = Characteristic(u.Quantity(bias,  u.V),
+                                u.Quantity(current, u.A))
 
 # Calculate the cylindrical probe surface area
 probe_length = 1.145 * u.mm
@@ -38,7 +40,7 @@
 # Now we can actually perform the analysis. Since the plasma is in Helium an
 # ion mass number of 4 is entered. The results are visualized and the obtained
 # EEDF is also shown.
-print(swept_probe_analysis(characteristic,
+pprint(swept_probe_analysis(characteristic,
                            probe_area, 'He-4+',
                            visualize=True,
                            plot_EEDF=True))
@@ -55,8 +57,8 @@
 # Load the data from a file and create the Characteristic object
 path = os.path.join("langmuir_samples", "Pace2015.npy")
 bias, current = np.load(path)
-characteristic = Characteristic(np.array(bias) * u.V,
-                                np.array(current) * 1e3 * u.mA)
+characteristic = Characteristic(u.Quantity(bias, u.V),
+                                u.Quantity(current, u.A))
 
 ######################################################
 # Initially the electrons are assumed to be Maxwellian. To check this the fit
@@ -71,7 +73,7 @@
 # It can be seen that this plasma is slightly bi-Maxwellian, as there are two
 # distinct slopes in the exponential section. The analysis is now performed
 # with bimaxwellian set to True, which yields improved results.
-print(swept_probe_analysis(characteristic,
+pprint(swept_probe_analysis(characteristic,
                            0.738 * u.cm**2,
                            'Ar-40 1+',
                            bimaxwellian=True,
@@ -93,8 +95,8 @@
 # Import probe data and calculate probe surface area.
 path = os.path.join("langmuir_samples", "Beckers2017b.npy")
 bias, current = np.load(path)
-characteristic = Characteristic(np.array(bias) * u.V,
-                                np.array(current) * 1e3 * u.mA)
+characteristic = Characteristic(u.Quantity(bias, u.V),
+                                u.Quantity(current, u.A))
 probe_length = 1.145 * u.mm
 probe_diameter = 1.57 * u.mm
 probe_area = (probe_length * np.pi * probe_diameter +
@@ -103,7 +105,7 @@
 ######################################################
 # `plot_electron_fit` is set to True to check the bi-Maxwellian properties.
 # The fit converges nicely to the two slopes of the electron growth region.
-print(swept_probe_analysis(characteristic,
+pprint(swept_probe_analysis(characteristic,
                            probe_area,
                            'He-4+',
                            bimaxwellian=True,
diff --git a/plasmapy/physics/drifts.py b/plasmapy/physics/drifts.py
new file mode 100644
index 00000000..68595955
--- /dev/null
+++ b/plasmapy/physics/drifts.py
@@ -0,0 +1,106 @@
+import astropy.units as u
+from astropy.units.utils import np
+from plasmapy import utils
+
+
+@utils.check_quantity()
+def ExB_drift(E: u.V/u.m, B: u.T) -> u.m/u.s:
+    """
+    Calculate the "electric cross magnetic" particle drift.
+
+    Parameters
+    ----------
+    E : ~astropy.units.Quantity
+        Electric field vector
+    B : ~astropy.units.Quantity
+        Magnetic field vector
+
+    Returns
+    -------
+    v: ~astropy.units.Quantity
+        Drift velocity, in m/s
+
+    Examples
+    --------
+    >>> import astropy.units as u
+    >>> from astropy.constants.si import g0, e, m_e
+    >>> ex = np.array([1, 0, 0])
+    >>> ez = np.array([0, 0, 1])
+    >>> force_drift(-ez*g0*m_e, ex*0.01*u.T, e)
+    <Quantity [ 0.0000000e+00, -5.5756984e-09,  0.0000000e+00] m / s>
+    >>> force_drift(-ez*g0*m_e, ez*0.01*u.T, e)
+    <Quantity [ 0., -0.,  0.] m / s>
+    >>> force_drift(-ez*g0*m_e, ex*u.T, e)
+    <Quantity [ 0.0000000e+00, -5.5756984e-11,  0.0000000e+00] m / s>
+
+    Notes
+    -----
+    The E cross B drift is given by
+
+    .. math::
+
+        \vec{v} = \frac{\vec{E} \times \vec{B}}{|B|^2}
+
+    and is independent of particle charge.
+
+    References
+    ----------
+    - PM Bellan, Fundamentals of Plasma Physics, 3.57
+
+    """
+
+    # np.cross drops units right now, thus this hack: see
+    # https://github.com/PlasmaPy/PlasmaPy/issues/59 
+    cross = np.cross(E.si.value, B.si.value) * E.unit * B.unit
+    return (cross / (B*B).sum(-1)).to(u.m/u.s)
+
+
+@utils.check_quantity()
+def force_drift(F: u.N, B: u.T, q: u.C) -> u.m / u.s:
+    """
+    Calculate the general force drift for a particle in a magnetic field.
+
+    Parameters
+    ----------
+    F : ~astropy.units.Quantity
+        Force acting on particle
+    B : ~astropy.units.Quantity
+        Magnetic field
+    q : ~astropy.units.Quantity
+        Particle charge
+
+    Examples
+    --------
+    >>> import astropy.units as u
+    >>> ex = np.array([1, 0, 0])
+    >>> ey = np.array([0, 1, 0])
+    >>> ExB_drift(ex * u.V/u.m, ey * u.T)
+    <Quantity [0., 0., 1.] m / s>
+    >>> ExB_drift(ex * u.V/u.m, ex * u.T)
+    <Quantity [0., 0., 0.] m / s>
+    >>> ExB_drift(ex * u.V/u.m, 100 * ey * u.T)
+    <Quantity [0.  , 0.  , 0.01] m / s>
+
+    Returns
+    -------
+    v: ~astropy.units.Quantity
+        Drift velocity, in m/s
+
+    Notes
+    -----
+    The particle drift in a magnetic field and with a general
+    force (e.g. gravity) applied to it is given by
+
+    .. math::
+
+        \vec{v} = \frac{\vec{F} \times \vec{B}}{q |B|^2}
+
+    Note the charge dependency.
+
+    References
+    ----------
+    - PM Bellan, Fundamentals of Plasma Physics, 3.58
+
+    """
+    cross = np.cross(F.si.value, B.si.value) * F.unit * B.unit
+    return (cross / (q * (B*B).sum(-1))).to(u.m/u.s)

Add legends to Langmuir plot examples
The plots [here](http://docs.plasmapy.org/en/stable/auto_examples/plot_langmuir_analysis.html#sphx-glr-auto-examples-plot-langmuir-analysis-py) could use some nice legends.
diff --git a/plasmapy/physics/tests/test_drifts.py b/plasmapy/physics/tests/test_drifts.py
new file mode 100644
index 00000000..af79d677
--- /dev/null
+++ b/plasmapy/physics/tests/test_drifts.py
@@ -0,0 +1,91 @@
+import pytest
+
+from plasmapy.physics import drifts
+import astropy.units as u
+from astropy.tests.helper import assert_quantity_allclose
+
+
+class Test_ExB_drift:
+    def test_E_x_B_1d_arrays(self):
+        E = u.Quantity([1, 0, 0], unit=u.V/u.m)
+        B = u.Quantity([0, 1, 0], unit=u.T)
+        result = drifts.ExB_drift(2*E, 3*B)
+        assert_quantity_allclose(result, (2/3)*u.Quantity([0, 0, 1], u.m/u.s))
+
+    def test_ExB_2d_array(self):
+        E = u.Quantity([[1, 0, 0],
+                        [1, 0, 0],
+                        [1, 0, 0]], unit=u.V/u.m)
+        B = u.Quantity([[0, 1, 0],
+                        [0, 1, 0],
+                        [0, 1, 0]], unit=u.T)
+
+        result = drifts.ExB_drift(2*E, 3*B)
+        assert_quantity_allclose(result, (2/3)*u.Quantity([[0, 0, 1],
+                                                           [0, 0, 1],
+                                                           [0, 0, 1],
+                                                           ], unit=u.m/u.s))
+
+    def test_nonsensical_units(self):
+        E = u.Quantity([[1, 0, 0],
+                        [1, 0, 0],
+                        [1, 0, 0]], unit=u.mm)
+        B = u.Quantity([[0, 1, 0],
+                        [0, 1, 0],
+                        [0, 1, 0]], unit=u.kg)
+
+        with pytest.raises(u.UnitConversionError):
+            drifts.ExB_drift(E, B)
+
+    def test_ExB_3d_array(self):
+        E = u.Quantity([[[1, 0, 0]]], unit=u.V/u.m)
+        B = u.Quantity([[[0, 1, 0]]], unit=u.T)
+
+        result = drifts.ExB_drift(2*E, 3*B)
+        assert_quantity_allclose(result, (2/3)*u.Quantity([[[0, 0, 1]]],
+                                                          unit=u.m/u.s))
+
+
+class Test_force_drift:
+    def test_force_x_B_1d_arrays(self):
+        F = u.Quantity([1, 0, 0], unit=u.N)
+        B = u.Quantity([0, 1, 0], unit=u.T)
+        q = 1*u.C
+        result = drifts.force_drift(2*F, 3*B, q)
+        assert_quantity_allclose(result, (2/3)*u.Quantity([0, 0, 1], u.m/u.s))
+
+    def test_force_B_2d_array(self):
+        F = u.Quantity([[1, 0, 0],
+                        [1, 0, 0],
+                        [1, 0, 0]], unit=u.N)
+        B = u.Quantity([[0, 1, 0],
+                        [0, 1, 0],
+                        [0, 1, 0]], unit=u.T)
+        q = 1*u.C
+
+        result = drifts.force_drift(2*F, 3*B, q)
+        assert_quantity_allclose(result, (2/3)*u.Quantity([[0, 0, 1],
+                                                           [0, 0, 1],
+                                                           [0, 0, 1],
+                                                           ], unit=u.m/u.s))
+
+    def test_force_B_3d_array(self):
+        F = u.Quantity([[[1, 0, 0]]], unit=u.N)
+        B = u.Quantity([[[0, 1, 0]]], unit=u.T)
+        q = 1*u.C
+
+        result = drifts.force_drift(2*F, 3*B, q)
+        assert_quantity_allclose(result, (2/3)*u.Quantity([[[0, 0, 1]]],
+                                                          unit=u.m/u.s))
+
+    def test_nonsensical_units(self):
+        F = u.Quantity([[1, 0, 0],
+                        [1, 0, 0],
+                        [1, 0, 0]], unit=u.mm)
+        B = u.Quantity([[0, 1, 0],
+                        [0, 1, 0],
+                        [0, 1, 0]], unit=u.kg)
+        q = 1*u.C
+
+        with pytest.raises(u.UnitConversionError):
+            drifts.force_drift(F, B, q)

requirements/environment.yml
pip install -e .[optional]
parse_log_pytest
environment.yml
pytest
apt-get update apt-get install -y gcc
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
asteval==0.9.31
astropy @ file:///home/conda/feedstock_root/build_artifacts/astropy_1636583255099/work
attrs==24.2.0
Babel==2.14.0
cached-property @ file:///home/conda/feedstock_root/build_artifacts/cached_property_1615209429212/work
certifi @ file:///home/conda/feedstock_root/build_artifacts/certifi_1725278078093/work/certifi
charset-normalizer==3.4.1
colorama @ file:///home/conda/feedstock_root/build_artifacts/colorama_1666700638685/work
coverage==7.2.7
cycler @ file:///home/conda/feedstock_root/build_artifacts/cycler_1635519461629/work
Cython @ file:///home/conda/feedstock_root/build_artifacts/cython_1659101942790/work
docutils==0.19
exceptiongroup==1.2.2
fonttools @ file:///home/conda/feedstock_root/build_artifacts/fonttools_1666389892786/work
future==1.0.0
h5py @ file:///home/conda/feedstock_root/build_artifacts/h5py_1660488104552/work
hypothesis==6.79.4
idna==3.10
imagesize==1.4.1
importlib-metadata @ file:///home/conda/feedstock_root/build_artifacts/importlib-metadata_1653252814274/work
iniconfig==2.0.0
Jinja2==3.1.6
kiwisolver @ file:///home/conda/feedstock_root/build_artifacts/kiwisolver_1657953088445/work
lmfit==1.2.2
MarkupSafe==2.1.5
matplotlib @ file:///home/conda/feedstock_root/build_artifacts/matplotlib-suite_1661439848456/work
mpmath @ file:///home/conda/feedstock_root/build_artifacts/mpmath_1678228039184/work
munkres==1.1.4
numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1649806299270/work
numpydoc==1.5.0
packaging @ file:///home/conda/feedstock_root/build_artifacts/packaging_1696202382185/work
Pillow @ file:///home/conda/feedstock_root/build_artifacts/pillow_1660385854171/work
-e git+https://github.com/PlasmaPy/PlasmaPy.git@efd7bff5bf34c64e70259886c9b4111b046f4d79#egg=plasmapy
pluggy==1.2.0
ply @ file:///home/conda/feedstock_root/build_artifacts/ply_1712242996588/work
pyerfa @ file:///home/conda/feedstock_root/build_artifacts/pyerfa_1649586111662/work
Pygments==2.17.2
pyparsing @ file:///home/conda/feedstock_root/build_artifacts/pyparsing_1724616129934/work
PyQt5==5.15.7
PyQt5-sip==12.11.0
pytest==7.4.4
pytest-arraydiff==0.6.1
pytest-astropy==0.11.0
pytest-astropy-header==0.2.2
pytest-cov==4.1.0
pytest-doctestplus==1.0.0
pytest-filter-subpackage==0.1.2
pytest-mock==3.11.1
pytest-remotedata==0.4.1
python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1709299778482/work
pytz==2025.2
requests==2.31.0
scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy_1637806658031/work
sip @ file:///home/conda/feedstock_root/build_artifacts/sip_1665592359543/work
six @ file:///home/conda/feedstock_root/build_artifacts/six_1620240208055/work
snowballstemmer==2.2.0
sortedcontainers==2.4.0
Sphinx==5.3.0
sphinx-automodapi==0.16.0
sphinx-gallery==0.14.0
sphinx-rtd-theme==2.0.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jquery==4.1
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
toml @ file:///home/conda/feedstock_root/build_artifacts/toml_1604308577558/work
tomli==2.0.1
tornado @ file:///home/conda/feedstock_root/build_artifacts/tornado_1656937818679/work
typing_extensions @ file:///home/conda/feedstock_root/build_artifacts/typing_extensions_1688315532570/work
uncertainties==3.1.7
unicodedata2 @ file:///home/conda/feedstock_root/build_artifacts/unicodedata2_1649111917568/work
urllib3==2.0.7
zipp @ file:///home/conda/feedstock_root/build_artifacts/zipp_1677313463193/work

name: PlasmaPy
channels:
  - astropy
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=2_gnu
  - alsa-lib=1.2.8=h166bdaf_0
  - astropy=4.3.1=py37hb1e94ed_2
  - attr=2.5.1=h166bdaf_1
  - brotli=1.1.0=hb9d3cd8_2
  - brotli-bin=1.1.0=hb9d3cd8_2
  - bzip2=1.0.8=h4bc722e_7
  - c-ares=1.34.4=hb9d3cd8_0
  - ca-certificates=2025.1.31=hbcca054_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - cairo=1.16.0=ha61ee94_1012
  - certifi=2024.8.30=pyhd8ed1ab_0
  - colorama=0.4.6=pyhd8ed1ab_0
  - cycler=0.11.0=pyhd8ed1ab_0
  - cython=0.29.32=py37hd23a5d3_0
  - dbus=1.13.6=h5008d03_3
  - expat=2.7.0=h5888daf_0
  - fftw=3.3.10=nompi_hf1063bd_110
  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
  - font-ttf-inconsolata=3.000=h77eed37_0
  - font-ttf-source-code-pro=2.038=h77eed37_0
  - font-ttf-ubuntu=0.83=h77eed37_3
  - fontconfig=2.15.0=h7e30c49_1
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=0
  - fonttools=4.38.0=py37h540881e_0
  - freetype=2.13.3=h48d6fc4_0
  - gettext=0.23.1=h5888daf_0
  - gettext-tools=0.23.1=h5888daf_0
  - glib=2.84.0=h07242d1_0
  - glib-tools=2.84.0=h4833e2c_0
  - graphite2=1.3.13=h59595ed_1003
  - gst-plugins-base=1.22.0=h4243ec0_2
  - gstreamer=1.22.0=h25f0c4b_2
  - gstreamer-orc=0.4.41=h17648ed_0
  - h5py=3.7.0=nompi_py37hf1ce037_101
  - harfbuzz=6.0.0=h8e241bc_0
  - hdf5=1.12.2=nompi_h4df4325_101
  - icu=70.1=h27087fc_0
  - importlib-metadata=4.11.4=py37h89c1867_0
  - jack=1.9.22=h11f4161_0
  - jpeg=9e=h0b41bf4_3
  - keyutils=1.6.1=h166bdaf_0
  - kiwisolver=1.4.4=py37h7cecad7_0
  - krb5=1.20.1=h81ceb04_0
  - lame=3.100=h166bdaf_1003
  - lcms2=2.14=h6ed2654_0
  - ld_impl_linux-64=2.43=h712a8e2_4
  - lerc=4.0.0=h27087fc_0
  - libaec=1.1.3=h59595ed_0
  - libasprintf=0.23.1=h8e693c7_0
  - libasprintf-devel=0.23.1=h8e693c7_0
  - libblas=3.9.0=20_linux64_openblas
  - libbrotlicommon=1.1.0=hb9d3cd8_2
  - libbrotlidec=1.1.0=hb9d3cd8_2
  - libbrotlienc=1.1.0=hb9d3cd8_2
  - libcap=2.67=he9d0100_0
  - libcblas=3.9.0=20_linux64_openblas
  - libclang=15.0.7=default_h127d8a8_5
  - libclang13=15.0.7=default_h5d6823c_5
  - libcups=2.3.3=h36d4200_3
  - libcurl=8.1.2=h409715c_0
  - libdb=6.2.32=h9c3ff4c_0
  - libdeflate=1.14=h166bdaf_0
  - libedit=3.1.20250104=pl5321h7949ede_0
  - libev=4.33=hd590300_2
  - libevent=2.1.10=h28343ad_4
  - libexpat=2.7.0=h5888daf_0
  - libffi=3.4.6=h2dba641_1
  - libflac=1.4.3=h59595ed_0
  - libgcc=14.2.0=h767d61c_2
  - libgcc-ng=14.2.0=h69a702a_2
  - libgcrypt=1.11.0=ha770c72_2
  - libgcrypt-devel=1.11.0=hb9d3cd8_2
  - libgcrypt-lib=1.11.0=hb9d3cd8_2
  - libgcrypt-tools=1.11.0=hb9d3cd8_2
  - libgettextpo=0.23.1=h5888daf_0
  - libgettextpo-devel=0.23.1=h5888daf_0
  - libgfortran=14.2.0=h69a702a_2
  - libgfortran-ng=14.2.0=h69a702a_2
  - libgfortran5=14.2.0=hf1ad2bd_2
  - libglib=2.84.0=h2ff4ddf_0
  - libgomp=14.2.0=h767d61c_2
  - libgpg-error=1.51=hbd13f7d_1
  - libiconv=1.18=h4ce23a2_1
  - liblapack=3.9.0=20_linux64_openblas
  - libllvm15=15.0.7=hadd5161_1
  - libltdl=2.4.3a=h5888daf_0
  - liblzma=5.6.4=hb9d3cd8_0
  - liblzma-devel=5.6.4=hb9d3cd8_0
  - libnghttp2=1.58.0=h47da74e_0
  - libnsl=2.0.1=hd590300_0
  - libogg=1.3.5=h4ab18f5_0
  - libopenblas=0.3.25=pthreads_h413a1c8_0
  - libopus=1.3.1=h7f98852_1
  - libpng=1.6.47=h943b412_0
  - libpq=15.3=hbcd7760_1
  - libsndfile=1.2.2=hc60ed4a_1
  - libsqlite=3.49.1=hee588c1_2
  - libssh2=1.11.0=h0841786_0
  - libstdcxx=14.2.0=h8f9b012_2
  - libstdcxx-ng=14.2.0=h4852527_2
  - libsystemd0=253=h8c4010b_1
  - libtiff=4.4.0=h82bc61c_5
  - libtool=2.5.4=h5888daf_0
  - libudev1=253=h0b41bf4_1
  - libuuid=2.38.1=h0b41bf4_0
  - libvorbis=1.3.7=h9c3ff4c_0
  - libwebp-base=1.5.0=h851e524_0
  - libxcb=1.13=h7f98852_1004
  - libxkbcommon=1.5.0=h79f4944_1
  - libxml2=2.10.3=hca2bb57_4
  - libzlib=1.3.1=hb9d3cd8_2
  - lz4-c=1.9.4=hcb278e6_0
  - matplotlib=3.5.3=py37h89c1867_2
  - matplotlib-base=3.5.3=py37hf395dca_2
  - mpg123=1.32.9=hc50e24c_0
  - mpmath=1.3.0=pyhd8ed1ab_0
  - munkres=1.1.4=pyh9f0ad1d_0
  - mysql-common=8.0.33=hf1915f5_6
  - mysql-libs=8.0.33=hca2cd23_6
  - ncurses=6.5=h2d0b736_3
  - nspr=4.36=h5888daf_0
  - nss=3.110=h159eef7_0
  - numpy=1.21.6=py37h976b520_0
  - openjpeg=2.5.0=h7d73246_1
  - openssl=3.1.8=h7b32b05_0
  - packaging=23.2=pyhd8ed1ab_0
  - pcre2=10.44=hba22ea6_2
  - pillow=9.2.0=py37h850a105_2
  - pip=24.0=pyhd8ed1ab_0
  - pixman=0.44.2=h29eaf8c_0
  - ply=3.11=pyhd8ed1ab_2
  - pthread-stubs=0.4=hb9d3cd8_1002
  - pulseaudio=16.1=hcb278e6_3
  - pulseaudio-client=16.1=h5195f5e_3
  - pulseaudio-daemon=16.1=ha8d29e2_3
  - pyerfa=2.0.0.1=py37hda87dfa_2
  - pyparsing=3.1.4=pyhd8ed1ab_0
  - pyqt=5.15.7=py37hf30b843_1
  - pyqt5-sip=12.11.0=py37hd23a5d3_1
  - python=3.7.12=hf930737_100_cpython
  - python-dateutil=2.9.0=pyhd8ed1ab_0
  - python_abi=3.7=4_cp37m
  - qt-main=5.15.8=h5d23da1_6
  - readline=8.2=h8c095d6_2
  - scipy=1.7.3=py37hf2a6cf1_0
  - setuptools=69.0.3=pyhd8ed1ab_0
  - sip=6.7.2=py37hd23a5d3_0
  - six=1.16.0=pyh6c4a22f_0
  - sqlite=3.49.1=h9eae976_2
  - tk=8.6.13=noxft_h4845f30_101
  - toml=0.10.2=pyhd8ed1ab_0
  - tornado=6.2=py37h540881e_0
  - typing-extensions=4.7.1=hd8ed1ab_0
  - typing_extensions=4.7.1=pyha770c72_0
  - unicodedata2=14.0.0=py37h540881e_1
  - wheel=0.42.0=pyhd8ed1ab_0
  - xcb-util=0.4.0=h516909a_0
  - xcb-util-image=0.4.0=h166bdaf_0
  - xcb-util-keysyms=0.4.0=h516909a_0
  - xcb-util-renderutil=0.3.9=h166bdaf_0
  - xcb-util-wm=0.4.1=h516909a_0
  - xkeyboard-config=2.38=h0b41bf4_0
  - xorg-kbproto=1.0.7=hb9d3cd8_1003
  - xorg-libice=1.1.2=hb9d3cd8_0
  - xorg-libsm=1.2.6=he73a12e_0
  - xorg-libx11=1.8.4=h0b41bf4_0
  - xorg-libxau=1.0.12=hb9d3cd8_0
  - xorg-libxdmcp=1.1.5=hb9d3cd8_0
  - xorg-libxext=1.3.4=h0b41bf4_2
  - xorg-libxrender=0.9.10=h7f98852_1003
  - xorg-renderproto=0.11.1=hb9d3cd8_1003
  - xorg-xextproto=7.3.0=hb9d3cd8_1004
  - xorg-xproto=7.0.31=hb9d3cd8_1008
  - xz=5.6.4=hbcc6ac9_0
  - xz-gpl-tools=5.6.4=hbcc6ac9_0
  - xz-tools=5.6.4=hb9d3cd8_0
  - zipp=3.15.0=pyhd8ed1ab_0
  - zstd=1.5.7=hb8e6e7a_2
  - pip:
      - alabaster==0.7.13
      - asteval==0.9.31
      - attrs==24.2.0
      - babel==2.14.0
      - charset-normalizer==3.4.1
      - coverage==7.2.7
      - docutils==0.19
      - exceptiongroup==1.2.2
      - future==1.0.0
      - hypothesis==6.79.4
      - idna==3.10
      - imagesize==1.4.1
      - iniconfig==2.0.0
      - jinja2==3.1.6
      - lmfit==1.2.2
      - markupsafe==2.1.5
      - numpydoc==1.5.0
      - pluggy==1.2.0
      - pygments==2.17.2
      - pytest==7.4.4
      - pytest-arraydiff==0.6.1
      - pytest-astropy==0.11.0
      - pytest-astropy-header==0.2.2
      - pytest-cov==4.1.0
      - pytest-doctestplus==1.0.0
      - pytest-filter-subpackage==0.1.2
      - pytest-mock==3.11.1
      - pytest-remotedata==0.4.1
      - pytz==2025.2
      - requests==2.31.0
      - snowballstemmer==2.2.0
      - sortedcontainers==2.4.0
      - sphinx==5.3.0
      - sphinx-automodapi==0.16.0
      - sphinx-gallery==0.14.0
      - sphinx-rtd-theme==2.0.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jquery==4.1
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - tomli==2.0.1
      - uncertainties==3.1.7
      - urllib3==2.0.7
prefix: /opt/conda/envs/PlasmaPy

plasmapy/physics/tests/test_drifts.py::Test_ExB_drift::test_E_x_B_1d_arrays plasmapy/physics/tests/test_drifts.py::Test_ExB_drift::test_ExB_2d_array plasmapy/physics/tests/test_drifts.py::Test_ExB_drift::test_nonsensical_units plasmapy/physics/tests/test_drifts.py::Test_ExB_drift::test_ExB_3d_array plasmapy/physics/tests/test_drifts.py::Test_force_drift::test_force_x_B_1d_arrays plasmapy/physics/tests/test_drifts.py::Test_force_drift::test_force_B_2d_array plasmapy/physics/tests/test_drifts.py::Test_force_drift::test_force_B_3d_array plasmapy/physics/tests/test_drifts.py::Test_force_drift::test_nonsensical_units
plasmapy/physics/drifts.py plasmapy/diagnostics/langmuir.py plasmapy/examples/plot_langmuir_analysis.py
plasmapy/physics/drifts.py plasmapy/diagnostics/langmuir.py plasmapy/examples/plot_langmuir_analysis.py