import unittest import numpy as np from numpy.testing import assert_array_almost_equal from wafo.spectrum.models import (Bretschneider, Jonswap, OchiHubble, Tmaspec, Torsethaugen, McCormick, Wallop, Spreading) class TestCase(unittest.TestCase): def assertListAlmostEqual(self, list1, list2, decimal=5, msg=''): assert_array_almost_equal(list1, list2, decimal, msg) class TestSpectra(TestCase): def test_bretschneider(self): S = Bretschneider(Hm0=6.5, Tp=10) vals = S((0, 1, 2, 3)).tolist() true_vals = [0., 1.69350993, 0.06352698, 0.00844783] self.assertListAlmostEqual(vals, true_vals) def test_if_jonswap_with_gamma_one_equals_bretschneider(self): S = Jonswap(Hm0=7, Tp=11, gamma=1) vals = S((0, 1, 2, 3)) true_vals = np.array([0., 1.42694133, 0.05051648, 0.00669692]) self.assertListAlmostEqual(vals, true_vals) w = np.linspace(0, 5) S2 = Bretschneider(Hm0=7, Tp=11) # JONSWAP with gamma=1 should be equal to Bretscneider: self.assertListAlmostEqual(S(w), S2(w)) def test_tmaspec(self): S = Tmaspec(Hm0=7, Tp=11, gamma=1, h=10) vals = S((0, 1, 2, 3)) true_vals = np.array([0., 0.70106233, 0.05022433, 0.00669692]) self.assertListAlmostEqual(vals, true_vals) def test_torsethaugen(self): S = Torsethaugen(Hm0=7, Tp=11, gamma=1, h=10) vals = S((0, 1, 2, 3)) true_vals = np.array([0., 1.19989709, 0.05819794, 0.0093541]) self.assertListAlmostEqual(vals, true_vals) vals = S.wind(range(4)) true_vals = np.array([0., 1.13560528, 0.05529849, 0.00888989]) self.assertListAlmostEqual(vals, true_vals) vals = S.swell(range(4)) true_vals = np.array([0., 0.0642918, 0.00289946, 0.00046421]) self.assertListAlmostEqual(vals, true_vals) def test_ochihubble(self): S = OchiHubble(par=2) vals = S(range(4)) true_vals = np.array([0., 0.90155636, 0.04185445, 0.00583207]) self.assertListAlmostEqual(vals, true_vals) def test_mccormick(self): S = McCormick(Hm0=6.5, Tp=10) vals = S(range(4)) true_vals = np.array([0., 1.87865908, 0.15050447, 0.02994663]) self.assertListAlmostEqual(vals, true_vals) def test_wallop(self): S = Wallop(Hm0=6.5, Tp=10) vals = S(range(4)) true_vals = np.array([0.00000000e+00, 9.36921871e-01, 2.76991078e-03, 7.72996150e-05]) self.assertListAlmostEqual(vals, true_vals) class TestSpreading(TestCase): def test_cos2s(self): theta = np.linspace(0, 2 * np.pi) d = Spreading(type='cos2s') dvals = [[1.10168934e+00], [1.03576796e+00], [8.60302298e-01], [6.30309013e-01], [4.06280137e-01], [2.29514882e-01], [1.13052757e-01], [4.82339343e-02], [1.76754409e-02], [5.50490020e-03], [1.43800617e-03], [3.09907242e-04], [5.39672445e-05], [7.39553743e-06], [7.70796579e-07], [5.84247670e-08], [3.03264905e-09], [9.91950201e-11], [1.81442131e-12], [1.55028269e-14], [4.63223469e-17], [2.90526245e-20], [1.35842977e-24], [3.26077455e-31], [1.65021852e-45], [1.65021852e-45], [3.26077455e-31], [1.35842977e-24], [2.90526245e-20], [4.63223469e-17], [1.55028269e-14], [1.81442131e-12], [9.91950201e-11], [3.03264905e-09], [5.84247670e-08], [7.70796579e-07], [7.39553743e-06], [5.39672445e-05], [3.09907242e-04], [1.43800617e-03], [5.50490020e-03], [1.76754409e-02], [4.82339343e-02], [1.13052757e-01], [2.29514882e-01], [4.06280137e-01], [6.30309013e-01], [8.60302298e-01], [1.03576796e+00], [1.10168934e+00]] self.assertListAlmostEqual(d(theta)[0], dvals) if __name__ == '__main__': unittest.main()