def test_ion_sound_speed():
    r"""Test the ion_sound_speed function in parameters.py."""

    assert np.isclose(
        ion_sound_speed(T_i=1.3232 * u.MK,
                        T_e=1.831 * u.MK,
                        ion='p',
                        gamma_e=1,
                        gamma_i=3).value, 218816.06086407552)

    assert np.isclose(
        ion_sound_speed(T_i=0.88 * u.MK,
                        T_e=1.28 * u.MK,
                        ion='p',
                        gamma_e=1.2,
                        gamma_i=3.4).value, 193328.52857788358)

    # case when Z=1 is assumed
    # assert ion_sound_speed(T_i=T_i, T_e=T_e, ion='p+') == ion_sound_speed(T_i=T_i, T_e=T_e,
    # ion='H-1')

    assert ion_sound_speed(T_i=T_i, T_e=0 * u.K,
                           ion='p+').unit.is_equivalent(u.m / u.s)

    with pytest.raises(RelativityError):
        ion_sound_speed(T_i=T_i, T_e=T_e, gamma_i=np.inf)

    with pytest.raises(ValueError):
        ion_sound_speed(T_i=np.array([5, 6, 5]) * u.K,
                        T_e=np.array([3, 4]) * u.K)

    with pytest.raises(TypeError):  # Is this test right??????
        ion_sound_speed(5 * u.T)

    with pytest.raises(TypeError):
        ion_sound_speed('p')

    with pytest.raises(PhysicsError):
        ion_sound_speed(T_i=T_i, T_e=0 * u.K, gamma_i=0.9999)

    with pytest.raises(PhysicsError):
        ion_sound_speed(T_i=T_i, T_e=0 * u.K, gamma_e=0.9999)

    with pytest.raises(TypeError):
        ion_sound_speed(T_i=T_i, T_e=0 * u.K, gamma_e='sdjklsf')

    with pytest.raises(TypeError):
        ion_sound_speed(T_i=T_i, T_e=0 * u.K, gamma_i='fsdfas')

    with pytest.raises(InvalidParticleError):
        ion_sound_speed(T_i=T_i, T_e=0 * u.K, ion='cupcakes')

    with pytest.raises(ValueError):
        ion_sound_speed(
            T_i=-np.abs(T_i),
            T_e=0 * u.K,
        )

    with pytest.warns(RelativityWarning):
        ion_sound_speed(T_i=5e11 * u.K, T_e=0 * u.K)

    with pytest.raises(RelativityError):
        ion_sound_speed(T_i=5e19 * u.K, T_e=0 * u.K)

    with pytest.raises(u.UnitConversionError):
        ion_sound_speed(T_i=5 * u.A, T_e=0 * u.K)

    with pytest.raises(ValueError):
        ion_sound_speed(T_i=T_nanarr, T_e=0 * u.K)

    with pytest.raises(ValueError):
        ion_sound_speed(T_e=T_nanarr, T_i=0 * u.K)

    with pytest.raises(ValueError):
        ion_sound_speed(T_i=T_negarr, T_e=0 * u.K)

    with pytest.raises(ValueError):
        ion_sound_speed(T_e=T_negarr, T_i=0 * u.K)

    with pytest.warns(u.UnitsWarning):
        assert ion_sound_speed(T_e=1.2e6,
                               T_i=0 * u.K) == ion_sound_speed(T_e=1.2e6 * u.K,
                                                               T_i=0 * u.K)

    with pytest.warns(u.UnitsWarning):
        assert ion_sound_speed(T_i=1.3e6,
                               T_e=0 * u.K) == ion_sound_speed(T_i=1.3e6 * u.K,
                                                               T_e=0 * u.K)

    ion_sound_speed(T_e=1.2e6 * u.K, T_i=0 * u.K)
    # testing for user input z_mean
    testMeth1 = ion_sound_speed(T_e=1.2e6 * u.K, T_i=0 * u.K,
                                z_mean=0.8).si.value
    testTrue1 = 89018.0944146141
    errStr = f"ion_sound_speed() gave {testMeth1}, should be {testTrue1}."
    assert np.isclose(testMeth1, testTrue1, atol=0.0, rtol=1e-15), errStr

    assert_can_handle_nparray(ion_sound_speed)
Example #2
0
 def time_ion_sound_speed(self):
     ion_sound_speed(T_i=1.3232 * u.MK,
                     T_e=1.831 * u.MK,
                     ion='p',
                     gamma_e=1,
                     gamma_i=3)