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)
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, Vperp=V, T_i=T_allnanarr))) assert np.all( np.isfinite(gyroradius(B_arr, Vperp=V_allnanarr, T_i=T_i)))
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)
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)
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])
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)
def time_gyroradius(self): gyroradius(0.2*u.T, particle='p+', T_i=1e5*u.K)