"""
Tests for the continuum class
"""
import numpy as np
import pytest
from ChiantiPy.core import Continuum
# test ion
test_ion = 'fe_15'
# set some wavelength and temperature arrays
temperature_scalar = 1e+6
temperature_array = np.logspace(5,8,10)
wavelength_array = np.linspace(10,100,100)
# create continuum object for testing
tmp_cont_scalar = Continuum.continuum(test_ion, temperature_scalar)
tmp_cont_array = Continuum.continuum(test_ion, temperature_array)
# create continuum object for which there is no free-bound information available
tmp_cont_no_fb = Continuum.continuum('fe_3', temperature_array)
[docs]def test_temperature():
_tmp_cont = Continuum.continuum(test_ion, temperature_scalar)
assert np.all(np.atleast_1d(temperature_scalar) == _tmp_cont.Temperature)
_tmp_cont = Continuum.continuum(test_ion, temperature_array)
assert np.all(temperature_array == _tmp_cont.Temperature)
[docs]def test_free_free_scalar():
# call free-free emission and loss rate methods for scalar temperature
# emission--wavelength array
tmp_cont_scalar.freeFree(wavelength_array)
assert hasattr(tmp_cont_scalar, 'FreeFree')
assert tmp_cont_scalar.FreeFree['intensity'].shape == wavelength_array.shape
# loss
tmp_cont_scalar.freeFreeLoss()
assert hasattr(tmp_cont_scalar, 'FreeFreeLoss')
assert tmp_cont_scalar.FreeFreeLoss['rate'].shape == (1,)
[docs]def test_free_free_array():
# call free-free emission and loss rate methods for scalar temperature
# emission--wavelength array
tmp_cont_array.freeFree(wavelength_array)
assert hasattr(tmp_cont_array, 'FreeFree')
assert tmp_cont_array.FreeFree['intensity'].shape == temperature_array.shape+wavelength_array.shape
# loss
tmp_cont_array.freeFreeLoss()
assert hasattr(tmp_cont_array, 'FreeFreeLoss')
assert tmp_cont_array.FreeFreeLoss['rate'].shape == temperature_array.shape
[docs]def test_free_bound_scalar():
# free-bound emission and loss rate methods for scalar temperature
# emiss--wavelength array
tmp_cont_scalar.freeBound(wavelength_array)
assert hasattr(tmp_cont_scalar,'FreeBound')
assert tmp_cont_scalar.FreeBound['intensity'].shape == wavelength_array.shape
# loss
tmp_cont_scalar.freeBoundLoss()
assert hasattr(tmp_cont_scalar, 'FreeBoundLoss')
assert tmp_cont_scalar.FreeBoundLoss['rate'].shape == (1,)
[docs]def test_free_bound_array():
# free-bound emission and loss rate methods for temperature array
# emiss--wavelength array
tmp_cont_array.freeBound(wavelength_array)
assert hasattr(tmp_cont_array,'FreeBound')
assert tmp_cont_array.FreeBound['intensity'].shape == temperature_array.shape+wavelength_array.shape
# loss
tmp_cont_array.freeBoundLoss()
assert hasattr(tmp_cont_array, 'FreeBoundLoss')
assert tmp_cont_array.FreeBoundLoss['rate'].shape == temperature_array.shape
[docs]def test_free_bound_no_info():
# raise error if no free-bound information is available
tmp_cont_no_fb.freeBound(wavelength_array)
assert 'errorMessage' in list(tmp_cont_no_fb.FreeBound.keys())