예제 #1
0
    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, Vperp=Vperp1, T_i=T_i)
        assert_quantity_allclose(Vperp1, Vperp2)
예제 #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])
예제 #3
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, Vperp=V, T_i=T_allnanarr)))
     assert np.all(
         np.isfinite(gyroradius(B_arr, Vperp=V_allnanarr, T_i=T_i)))
예제 #4
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, Vperp=V, T_i=T_nanarr)
     with pytest.raises(ValueError):
         gyroradius(B_arr, Vperp=V_nanarr, T_i=T_i)
예제 #5
0
 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, Vperp=V, T_i=T_arr)
     with pytest.raises(ValueError):
         gyroradius(B_arr, Vperp=V_arr, T_i=T_i)
예제 #6
0
 def test_handle_numpy_array(self):
     # Tests to verify that can handle Quantities with numpy array as the value:
     assert gyroradius(B_arr, Vperp=V_arr)[0] == gyroradius(B_arr[0],
                                                            Vperp=V_arr[0])
     assert gyroradius(B_arr, T_i=T_arr)[0] == gyroradius(B_arr[0],
                                                          T_i=T_arr[0])
예제 #7
0
def test_gyroradius():
    r"""Test the gyroradius function in parameters.py."""

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

    assert gyroradius(B, 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)
    analytical_result = (Vperp / omega_ce).to(
        u.m, equivalencies=u.dimensionless_angles())
    assert gyroradius(Bmag, Vperp=Vperp) == analytical_result

    with pytest.raises(TypeError):
        gyroradius(u.T)

    with pytest.raises(u.UnitConversionError):
        gyroradius(5 * u.A, Vperp=8 * u.m / u.s)

    with pytest.raises(u.UnitConversionError):
        gyroradius(5 * u.T, Vperp=8 * u.m)

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

    with pytest.raises(ValueError):
        gyroradius(np.nan * u.T, Vperp=1 * u.m / u.s)

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

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

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

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

    with pytest.raises(ValueError):
        gyroradius(1.1 * u.T, 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, 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(ValueError):
        gyroradius(1.1 * u.T, particle="p", Vperp=1.1 * u.m, T_i=1.2 * u.K)

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