You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
3.6 KiB
Python

# -*- coding:utf-8 -*-
"""
Created on 5. aug. 2010
@author: pab
"""
import unittest
from numpy.testing import TestCase, assert_array_almost_equal
import wafo.data # @UnusedImport
import numpy as np # @UnusedImport
import wafo.objects as wo
import wafo.spectrum.models as sm
import wafo.transform.models as tm
class TestObjects(TestCase):
def test_timeseries(self):
x = wafo.data.sea()
ts = wo.mat2timeseries(x)
assert_array_almost_equal(ts.sampling_period(), 0.25)
S = ts.tospecdata()
assert_array_almost_equal(S.data[:10],
[0.00913087, 0.00881073, 0.00791944,
0.00664244, 0.00522429, 0.00389816,
0.00282753, 0.00207843, 0.00162678,
0.0013916])
rf = ts.tocovdata(lag=150)
assert_array_almost_equal(rf.data[:10],
[0.22368637, 0.20838473, 0.17110733,
0.12237803, 0.07024054, 0.02064859,
-0.02218831, -0.0555993, -0.07859847,
-0.09166187])
def test_timeseries_trdata(self):
Hs = 7.0
Sj = sm.Jonswap(Hm0=Hs)
S = Sj.tospecdata() # Make spectrum object from numerical values
S.tr = tm.TrOchi(mean=0, skew=0.16, kurt=0, sigma=Hs/4, ysigma=Hs/4)
xs = S.sim(ns=2**20, iseed=10)
ts = wo.mat2timeseries(xs)
g0, _gemp = ts.trdata(monitor=False) # Not Monitor the development
# Equal weight on all points
g1, _gemp = ts.trdata(method='mnonlinear', gvar=0.5)
# Less weight on the ends
g2, _gemp = ts.trdata(method='nonlinear', gvar=[3.5, 0.5, 3.5])
self.assert_(1.2 < S.tr.dist2gauss() < 1.6)
self.assert_(1.65 < g0.dist2gauss() < 2.05)
self.assert_(0.54 < g1.dist2gauss() < 0.95)
self.assert_(1.5 < g2.dist2gauss() < 1.9)
def test_cycles_and_levelcrossings(self):
x = wafo.data.sea()
ts = wo.mat2timeseries(x)
tp = ts.turning_points()
assert_array_almost_equal(tp.data[:10],
[-1.200495, 0.839505, -0.090495, -0.020495,
-0.090495, -0.040495, -0.160495, 0.259505,
-0.430495, -0.080495]
)
mm = tp.cycle_pairs()
assert_array_almost_equal(mm.data[:10],
[0.839505, -0.020495, -0.040495, 0.259505,
-0.080495, -0.080495, 0.349505, 0.859505,
0.009505, 0.319505])
lc = mm.level_crossings()
assert_array_almost_equal(lc.data[:10],
[0., 1., 2., 2., 3., 4.,
5., 6., 7., 9.])
def test_levelcrossings_extrapolate(self):
x = wafo.data.sea()
ts = wo.mat2timeseries(x)
tp = ts.turning_points()
mm = tp.cycle_pairs()
lc = mm.level_crossings()
s = x[:, 1].std()
lc_gpd = lc.extrapolate(-2 * s, 2 * s, dist='rayleigh')
assert_array_almost_equal(lc_gpd.data[:10],
[1.789254e-37, 2.610988e-37,
3.807130e-37, 5.546901e-37,
8.075384e-37, 1.174724e-36,
1.707531e-36, 2.480054e-36,
3.599263e-36, 5.219466e-36])
if __name__ == "__main__":
# import sys;sys.argv = ['', 'Test.testName']
unittest.main()