def test_keeps_arguments_unchanged(self):
        Vperp1 = u.Quantity([np.nan, 1], unit=u.m / u.s)
        Vperp2 = u.Quantity([np.nan, 1], unit=u.m / u.s)  # an exact copy
        T_i = u.Quantity([1, np.nan], unit=u.K)

        gyroradius(B_arr, "e-", Vperp=Vperp1, T_i=T_i)
        assert_quantity_allclose(Vperp1, Vperp2)
Exemple #2
0
 def test_handle_mixed_Qarrays(self):
     # If both Vperp or Ti are input as Qarrays, but only one of the two is valid
     # at each element, then that's fine, the function should work:
     assert gyroradius(B_arr, Vperp=V_nanarr,
                       T_i=T_nanarr2)[0] == gyroradius(B_arr[0],
                                                       Vperp=V_nanarr[0],
                                                       T_i=T_nanarr2[0])
 def test_scalar_and_nan_qarray(self):
     # If either Vperp or Ti is a valid scalar and the other is a Qarray of all nans,
     # should do something valid and not raise a ValueError
     assert np.all(
         np.isfinite(gyroradius(B_arr, "e-", Vperp=V, T_i=T_allnanarr)))
     assert np.all(
         np.isfinite(gyroradius(B_arr, "e-", Vperp=V_allnanarr, T_i=T_i)))
Exemple #4
0
 def test_handle_numpy_array(self):
     # Tests to verify that can handle Quantities with numpy array as the value:
     assert gyroradius(B_arr, "e-", Vperp=V_arr)[0] == gyroradius(
         B_arr[0], "e-", Vperp=V_arr[0]
     )
     assert gyroradius(B_arr, "e-", T_i=T_arr)[0] == gyroradius(
         B_arr[0], "e-", T_i=T_arr[0]
     )
 def test_all_valid_and_one_valid(self):
     # If one of (Vperp, Ti) is a valid and one is Qarray with at least one valid, ValueError:
     with pytest.raises(ValueError):
         gyroradius(B_arr, "e-", Vperp=V, T_i=T_nanarr)
     with pytest.raises(ValueError):
         gyroradius(B_arr, "e-", Vperp=V_nanarr, T_i=T_i)
 def test_raise_two_valid_inputs(self):
     # If both Vperp or Ti are nan-less, Qarrays or not, should raise ValueError:
     with pytest.raises(ValueError):
         gyroradius(B_arr, "e-", Vperp=V, T_i=T_arr)
     with pytest.raises(ValueError):
         gyroradius(B_arr, "e-", Vperp=V_arr, T_i=T_i)
def test_gyroradius():
    r"""Test the gyroradius function in parameters.py."""

    assert gyroradius(B, "e-", T_i=T_e).unit.is_equivalent(u.m)

    assert gyroradius(B, "e-", Vperp=25 * u.m / u.s).unit.is_equivalent(u.m)

    Vperp = 1e6 * u.m / u.s
    Bmag = 1 * u.T
    omega_ce = gyrofrequency(Bmag, "e-")
    analytical_result = (Vperp / omega_ce).to(
        u.m, equivalencies=u.dimensionless_angles())
    assert gyroradius(Bmag, "e-", Vperp=Vperp) == analytical_result

    with pytest.raises(TypeError):
        gyroradius(u.T, "e-")

    with pytest.raises(u.UnitTypeError):
        gyroradius(5 * u.A, "e-", Vperp=8 * u.m / u.s)

    with pytest.raises(u.UnitTypeError):
        gyroradius(5 * u.T, "e-", Vperp=8 * u.m)

    with pytest.raises(ValueError):
        gyroradius(np.array([5, 6]) * u.T,
                   "e-",
                   Vperp=np.array([5, 6, 7]) * u.m / u.s)

    assert np.isnan(gyroradius(np.nan * u.T, "e-", Vperp=1 * u.m / u.s))

    with pytest.raises(ValueError):
        gyroradius(3.14159 * u.T, "e-", T_i=-1 * u.K)

    with pytest.warns(u.UnitsWarning):
        assert gyroradius(1.0, "e-",
                          Vperp=1.0) == gyroradius(1.0 * u.T,
                                                   "e-",
                                                   Vperp=1.0 * u.m / u.s)

    with pytest.warns(u.UnitsWarning):
        assert gyroradius(1.1, "e-", T_i=1.2) == gyroradius(1.1 * u.T,
                                                            "e-",
                                                            T_i=1.2 * u.K)

    with pytest.raises(ValueError):
        gyroradius(1.1 * u.T, "e-", Vperp=1 * u.m / u.s, T_i=1.2 * u.K)

    with pytest.raises(u.UnitTypeError):
        gyroradius(1.1 * u.T, "e-", Vperp=1.1 * u.m, T_i=1.2 * u.K)

    assert gyroradius(B, particle="p", T_i=T_i).unit.is_equivalent(u.m)

    assert gyroradius(B, particle="p",
                      Vperp=25 * u.m / u.s).unit.is_equivalent(u.m)

    # Case when Z=1 is assumed
    assert np.isclose(
        gyroradius(B, particle="p", T_i=T_i),
        gyroradius(B, particle="H+", T_i=T_i),
        atol=1e-6 * u.m,
    )

    gyroPos = gyroradius(B, particle="p", Vperp=V)
    gyroNeg = gyroradius(B, particle="p", Vperp=-V)
    assert gyroPos == gyroNeg

    Vperp = 1e6 * u.m / u.s
    Bmag = 1 * u.T
    omega_ci = gyrofrequency(Bmag, particle="p")
    analytical_result = (Vperp / omega_ci).to(
        u.m, equivalencies=u.dimensionless_angles())
    assert gyroradius(Bmag, particle="p", Vperp=Vperp) == analytical_result

    T2 = 1.2 * u.MK
    B2 = 123 * u.G
    particle2 = "alpha"
    Vperp2 = thermal_speed(T2, particle=particle2)
    gyro_by_vperp = gyroradius(B2, particle="alpha", Vperp=Vperp2)
    assert gyro_by_vperp == gyroradius(B2, particle="alpha", T_i=T2)

    explicit_positron_gyro = gyroradius(1 * u.T,
                                        particle="positron",
                                        T_i=1 * u.MK)
    assert explicit_positron_gyro == gyroradius(1 * u.T, "e-", T_i=1 * u.MK)

    with pytest.raises(TypeError):
        gyroradius(u.T, particle="p", Vperp=8 * u.m / u.s)

    with pytest.raises(ValueError):
        gyroradius(B, particle="p", T_i=-1 * u.K)

    with pytest.warns(u.UnitsWarning):
        gyro_without_units = gyroradius(1.0, particle="p", Vperp=1.0)
        gyro_with_units = gyroradius(1.0 * u.T,
                                     particle="p",
                                     Vperp=1.0 * u.m / u.s)
        assert gyro_without_units == gyro_with_units

    with pytest.warns(u.UnitsWarning):
        gyro_t_without_units = gyroradius(1.1, particle="p", T_i=1.2)
        gyro_t_with_units = gyroradius(1.1 * u.T, particle="p", T_i=1.2 * u.K)
        assert gyro_t_with_units == gyro_t_without_units

    with pytest.raises(ValueError):
        gyroradius(1.1 * u.T, particle="p", Vperp=1 * u.m / u.s, T_i=1.2 * u.K)

    with pytest.raises(u.UnitTypeError):
        gyroradius(1.1 * u.T, particle="p", Vperp=1.1 * u.m, T_i=1.2 * u.K)

    with pytest.raises(u.UnitTypeError):
        gyroradius(1.1 * u.T, particle="p", Vperp=1.2 * u.m, T_i=1.1 * u.K)
Exemple #8
0
 def time_gyroradius(self):
     gyroradius(0.2 * u.T, particle='p+', T_i=1e5 * u.K)