Source code for roentgen.tests.test_util

import numpy as np
import pytest

import astropy.units as u
from astropy.units import cds, imperial

import roentgen
import roentgen.util as util

# this enables the atm unit
cds.enable()

all_materials = list(roentgen.elements["symbol"]) + list(roentgen.compounds["symbol"])
not_real_materials = ["adamantium", "ice-nine", "kryptonite", "redstone", "unobtainium"]


[docs] @pytest.mark.parametrize("element", roentgen.elements["symbol"]) def test_is_an_element_symbol(element): assert util.is_an_element(element)
[docs] @pytest.mark.parametrize("element", roentgen.elements["name"]) def test_is_an_element_name(element): assert util.is_an_element(element)
[docs] @pytest.mark.parametrize("element", not_real_materials) def test_is_not_an_element(element): assert util.is_an_element(element) is False
[docs] @pytest.mark.parametrize("name,symbol", zip(roentgen.elements["name"], roentgen.elements["symbol"])) def test_get_element_symbol(name, symbol): assert util.get_element_symbol(name) == symbol
[docs] @pytest.mark.parametrize("symbol", roentgen.elements["symbol"]) def test_get_element_symbol_same_return(symbol): assert util.get_element_symbol(symbol) == symbol
[docs] @pytest.mark.parametrize("element", not_real_materials) def test_get_element_symbol_error(element): with pytest.raises(ValueError): util.get_element_symbol(element)
[docs] @pytest.mark.parametrize("z", np.arange(91, dtype="int") + 1) def test_get_element_symbol_int(z): assert util.get_element_symbol(z) == roentgen.elements["symbol"][z - 1]
[docs] def test_get_element_symbol__badnum_error(): with pytest.raises(ValueError): util.get_element_symbol(0.1) with pytest.raises(ValueError): util.get_element_symbol(-1)
[docs] @pytest.mark.parametrize("symbol,z", zip(roentgen.elements["symbol"], roentgen.elements["z"])) def test_get_atomic_number_symbol(symbol, z): assert util.get_atomic_number(symbol) == z
[docs] @pytest.mark.parametrize("name,z", zip(roentgen.elements["name"], roentgen.elements["z"])) def test_get_atomic_number_name(name, z): assert util.get_atomic_number(name) == z
[docs] @pytest.mark.parametrize("element", not_real_materials) def test_get_atomic_number_error(element): with pytest.raises(ValueError): util.get_atomic_number(element)
[docs] @pytest.mark.parametrize("symbol", roentgen.compounds["symbol"]) def test_is_in_known_compounds_symbol(symbol): assert util.is_in_known_compounds(symbol)
[docs] @pytest.mark.parametrize("name", roentgen.compounds["name"]) def test_is_in_known_compounds_name(name): assert util.is_in_known_compounds(name)
[docs] @pytest.mark.parametrize("element", not_real_materials) def test_is_in_known_compounds_not(element): assert util.is_in_known_compounds(element) is False
[docs] @pytest.mark.parametrize("symbol", roentgen.compounds["symbol"]) def test_get_compound_index_symbol(symbol): assert util.get_compound_index(symbol) == roentgen.compounds.loc_indices[symbol]
[docs] @pytest.mark.parametrize("name", roentgen.compounds["name"]) def test_get_compound_index_name(name): assert util.get_compound_index(name) == roentgen.compounds["name"].tolist().index(name)
[docs] @pytest.mark.parametrize("element", not_real_materials) def test_get_compound_index_error(element): with pytest.raises(ValueError): util.get_compound_index(element)
[docs] @pytest.mark.parametrize("element", not_real_materials) def test_get_symbol_error(element): with pytest.raises(ValueError): util.get_material_symbol(element)
[docs] @pytest.mark.parametrize("element", not_real_materials) def test_get_material_name(element): with pytest.raises(ValueError): util.get_material_name(element)
[docs] @pytest.mark.parametrize("element", not_real_materials) def test_get_density_error(element): with pytest.raises(ValueError): util.get_material_density(element)
[docs] @pytest.mark.parametrize( "symbol,density", zip(roentgen.elements["symbol"], roentgen.elements["density"]) ) def test_get_density_element(symbol, density): assert util.get_material_density(symbol) == density
[docs] @pytest.mark.parametrize( "compound,density", zip(roentgen.compounds["symbol"], roentgen.compounds["density"]) ) def test_get_density_compound(compound, density): assert util.get_material_density(compound) == density
[docs] @pytest.mark.parametrize( "material", list(roentgen.compounds["symbol"]) + list(roentgen.compounds["symbol"]) ) def test_get_density_quantity(material): assert isinstance(util.get_material_density(material), u.Quantity)
[docs] @pytest.mark.parametrize( "pressure,temperature,result", [ (1 * cds.atm, 15 * u.Celsius, 1.225 * u.kg / u.m**3), (101325 * u.pascal, 15 * u.Celsius, 1.225 * u.kg / u.m**3), (1 * cds.atm, 288.15 * u.K, 1.225 * u.kg / u.m**3), (1 * cds.atm, 59 * imperial.deg_F, 1.225 * u.kg / u.m**3), (5 * cds.atm, 20 * u.Celsius, 6.020 * u.kg / u.m**3), ], ) def test_density_ideal_gas(pressure, temperature, result): assert np.isclose(util.density_ideal_gas(pressure, temperature), result, rtol=1e-4)
[docs] @pytest.mark.parametrize( "pressure,temperature", [ (5 * u.m, 15 * u.Celsius), (5 * u.s, 15 * u.Celsius), (1 * cds.atm, 5 * u.m), (1 * cds.atm, 5 * u.gauss), ], ) def test_density_ideal_gas_bad_units(pressure, temperature): with pytest.raises(u.UnitsError): util.density_ideal_gas(pressure, temperature)