Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
229a69f
Working on adding the option to import several variables with model o…
fcollas Nov 13, 2025
097d42c
Added possibility to collocate several variables from a model to obse…
fcollas Nov 25, 2025
53ace15
Variables in the observations objects that are not in varalias are no…
fcollas Nov 26, 2025
209426b
Fixed filtermod with multiple variables
fcollas Dec 4, 2025
ea3e525
Fixed collocation distlim + comment ais tests
fcollas Dec 4, 2025
f2d6fb6
Added variables to variable_def default file
fcollas Dec 8, 2025
cce5b45
Adapted get_cmems reader such that DEPTH level on which to fetch the …
fcollas Dec 8, 2025
8e29f5a
Removed duplicate from variable_def default file
fcollas Dec 8, 2025
e3bd956
Modified read_local_20Hz_files satellite reader to deal with ncfiles …
fcollas Dec 9, 2025
5737519
Fixed model_time attributes causing netcdf error in cco.vars
fcollas Dec 11, 2025
c207cd6
Corrected error in triple_collocation module
fcollas Dec 12, 2025
6c48932
Fixed arguments in collocation module with regridded method
fcollas Dec 12, 2025
a76fdc0
Improved function to calculate the power spectra in triple collocatio…
fcollas Dec 18, 2025
e5e4573
Added tests for insit, satellite, model, collocation and filter modul…
fcollas Jan 6, 2026
37ceee2
Completed tests for triple collocation module
fcollas Jan 6, 2026
946b05a
Added test for consalidate module
fcollas Jan 7, 2026
7f66cdc
Added test for multivariables with multisat module
fcollas Jan 27, 2026
11b5480
Fix test multisat
fcollas Jan 27, 2026
e768a1c
Fix test_multisat 2
fcollas Jan 27, 2026
15c5686
Fix multisat test 3
fcollas Jan 27, 2026
f63a842
Merge branch 'master' into tmp
fcollas Jan 27, 2026
61e6336
Update tests/test_collocmod.py
fcollas Jan 27, 2026
a891148
Update tests/test_collocmod.py
fcollas Jan 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion tests/test_aismod.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

#@pytest.mark.need_credentials
#def test_get_ais_data():

#
# bbox = ['5.89', '62.3', '6.5', '62.7']
# sd = '2017-01-03 08'
# ed = '2017-01-03 09'
Expand Down
37 changes: 29 additions & 8 deletions tests/test_collocmod.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,32 @@ def test_sat_collocation_and_validation(test_data, tmpdir):

# collocate
cco = cc(oco=sco, model=model, leadtime='best', distlim=6).populate()
assert len(vars(cco).keys()) == 19
assert len(cco.vars.keys()) == 9
assert len(vars(cco).keys()) == 21
assert len(cco.vars.keys()) == 10

# validate

def test_cco_multivar(test_data):
sd = "2022-2-1 12"
ed = "2022-2-1 12"
name = 's3a'
varalias = 'Hs'
twin = 30
nID = 'cmems_L3_NRT'
model = 'ww3_4km'
# init satellite_object and check for polygon region
sco = sc(sd=sd, ed=ed, nID=nID, name=name,
varalias=varalias, twin=twin)
# read data
sco = sco.populate(reader='read_local_ncfiles',
path=str(test_data/"L3/s3a"))
# crop to region
sco = sco.crop_to_region(model)

# collocate
cco = cc(oco=sco, model=model, leadtime='best', distlim=6, varalias=['Hs','Tm01']).populate()
assert len(vars(cco).keys()) == 21
assert len(cco.vars.keys()) == 11

def test_insitu_collocation_and_validation(test_data, tmpdir):
sd = "2022-2-1 12"
Expand All @@ -51,8 +72,8 @@ def test_insitu_collocation_and_validation(test_data, tmpdir):

# collocate
cco = cc(oco=ico, model=model, leadtime='best', distlim=6).populate()
assert len(vars(cco).keys()) == 19
assert len(cco.vars.keys()) == 9
assert len(vars(cco).keys()) == 21
assert len(cco.vars.keys()) == 10

# validate

Expand All @@ -74,8 +95,8 @@ def test_insitu_collocation_leadtime(test_data, tmpdir):

# collocate
cco = cc(oco=ico, model=model, leadtime=10, twin=9).populate()
assert len(vars(cco).keys()) == 19
assert len(cco.vars.keys()) == 9
assert len(vars(cco).keys()) == 21
assert len(cco.vars.keys()) == 10
assert len(cco.vars.time) == 2

def test_poi_collocation():
Expand All @@ -90,8 +111,8 @@ def test_poi_collocation():

# collocate
cco = cc(oco=pco, model='ww3_4km', leadtime='best').populate()
assert len(vars(cco).keys()) == 19
assert len(cco.vars.keys()) == 9
assert len(vars(cco).keys()) == 21
assert len(cco.vars.keys()) == 10


# # write to nc
Expand Down
49 changes: 33 additions & 16 deletions tests/test_consolidate.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,34 @@
#import sys
#import os
#import numpy as np
#from datetime import datetime
#import pytest
#
#from wavy.consolidate import consolidate_class as cs
#from wavy.satmod import satellite_class as sc
import sys
import os
import numpy as np
from datetime import datetime
import pytest
from wavy.satellite_module import satellite_class as sc
from wavy.consolidate import consolidate_class as cs

#def test_consolidate_scos(test_data, benchmark):
# sco1 = sc(sdate="2020-11-1 12",region="NordicSeas",
# mission='s3a', path_local=str(test_data/"L3"))
# sco2 = sc(sdate="2020-11-1 13",region="NordicSeas",
# mission='s3b', path_local=str(test_data/"L3"))
# cso = cs([sco1,sco2])
# assert len(list(vars(cso).keys())) >= 8
# assert len(list(cso.vars.keys())) == 6
def test_consolidate_satellite(test_data):
# satellite consolidate
sco1 = sc(sd="2022-2-1",ed ="2022-2-3",region="NordicSeas", nID="cmems_L3_NRT",
name='s3a').populate(path=str(test_data/"L3/s3a"))
sco2 = sc(sd="2022-2-1",ed ="2022-2-3",region="NordicSeas", nID="cmems_L3_NRT",
name='s3b').populate(path=str(test_data/"L3/s3b"))

cso = cs([sco1,sco2])

len(list(vars(cso).keys())) >= 8
len(list(cso.vars.keys())) == 3

def test_consolidate_satellite_multivar(test_data):

varalias = ['Hs','U']

# satellite consolidate
sco1 = sc(sd="2022-2-1",ed ="2022-2-3",region="NordicSeas", nID="cmems_L3_NRT",
name='s3a', varalias=varalias).populate(path=str(test_data/"L3/s3a"))
sco2 = sc(sd="2022-2-1",ed ="2022-2-3",region="NordicSeas", nID="cmems_L3_NRT",
name='s3b', varalias=varalias).populate(path=str(test_data/"L3/s3b"))

cso = cs([sco1,sco2])

len(list(vars(cso).keys())) >= 8
len(list(cso.vars.keys())) == 3
70 changes: 70 additions & 0 deletions tests/test_filtermod.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,76 @@ def test_filter_distance_to_coast(test_data):
assert type(sco.vars == 'xarray.core.dataset.Dataset')
assert not 'error' in vars(sco).keys()

def test_filter_ico_multivar(test_data):

varalias = ['Hs','U'] # default
sd = "2023-7-2 00"
ed = "2023-7-3 00"
nID = 'MO_Draugen_monthly'
name = 'Draugen'
ico = ic(nID=nID, sd=sd, ed=ed, varalias=varalias, name=name)
ico = ico.populate(path=str(test_data/"insitu/monthly/Draugen"))

assert len(ico.vars['time']) > 0
assert len(ico.vars.keys()) == 4
assert not all(np.isnan(v) for v in ico.vars['Hs'])
assert not all(np.isnan(v) for v in ico.vars['U'])

filter_1 = ico.filter_runmean(window=3,
chunk_min=3,
sampling_rate_Hz=1/600,
varalias='Hs')

assert len(filter_1.vars['time']) > 0
assert len(filter_1.vars.keys()) == 4
assert not all(np.isnan(v) for v in filter_1.vars['Hs'])
assert not all(np.isnan(v) for v in filter_1.vars['U'])

filter_2 = filter_1.apply_limits(llim=1, ulim=3,
varalias='Hs')

assert len(filter_2.vars['time']) > 0
assert len(filter_2.vars.keys()) == 4
assert not all(np.isnan(v) for v in filter_2.vars['Hs'])
assert not all(np.isnan(v) for v in filter_2.vars['U'])

def test_filter_sco_multivar(test_data):

sd = "2022-2-1 12"
ed = "2022-2-1 12"
name = 's3a'
varalias = ['Hs','U']
twin = 30
nID = 'cmems_L3_NRT'
# init satellite_object
sco = sc(sd=sd, ed=ed, nID=nID, name=name,
varalias=varalias,
twin=twin)
# read data
sco = sco.populate(path=str(test_data/"L3/s3a"))

assert len(sco.vars['time']) > 0
assert len(sco.vars.keys()) == 4
assert not all(np.isnan(v) for v in sco.vars['Hs'])
assert not all(np.isnan(v) for v in sco.vars['U'])

filter_1 = sco.filter_runmean(window=3,
chunk_min=3,
sampling_rate_Hz=1/600,
varalias='Hs')

assert len(filter_1.vars['time']) > 0
assert len(filter_1.vars.keys()) == 4
assert not all(np.isnan(v) for v in filter_1.vars['Hs'])
assert not all(np.isnan(v) for v in filter_1.vars['U'])

filter_2 = filter_1.apply_limits(llim=1, ulim=3,
varalias='Hs')

assert len(filter_2.vars['time']) > 0
assert len(filter_2.vars.keys()) == 4
assert not all(np.isnan(v) for v in filter_2.vars['Hs'])
assert not all(np.isnan(v) for v in filter_2.vars['U'])
def test_filter_landMask_ms(test_data):
sd = "2022-2-1 12"
ed = "2022-2-1 12"
Expand Down
23 changes: 23 additions & 0 deletions tests/test_insitumod.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,29 @@ def test_cmems_insitu_daily(test_data):
# if '.nc' in filelist[i]]
# assert len(nclist) >= 1

def test_cmems_insitu_multivar(test_data):
varalias = ['Hs','U'] # default
sd = "2023-7-2 00"
ed = "2023-7-3 00"
nID = 'MO_Draugen_monthly'
name = 'Draugen'
ico = ic(nID=nID, sd=sd, ed=ed, varalias=varalias, name=name)
print(ico)
print(vars(ico).keys())
assert ico.__class__.__name__ == 'insitu_class'
assert len(vars(ico).keys()) == 12
ico.list_input_files(show=True)
new = ico.populate(path=str(test_data/"insitu/monthly/Draugen"))
assert len(new.vars.keys()) == 4
# check if some data was imported
assert len(new.vars['time']) > 0
# check that not all data is nan
assert not all(np.isnan(v) for v in new.vars['time'])
assert not all(np.isnan(v) for v in new.vars['Hs'])
assert not all(np.isnan(v) for v in new.vars['U'])
assert not all(np.isnan(v) for v in new.vars['lons'])
assert not all(np.isnan(v) for v in new.vars['lats'])


def test_insitu_poi(tmpdir):
# define poi dictionary for track
Expand Down
9 changes: 9 additions & 0 deletions tests/test_modelmod.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,15 @@ def test_NORA3_hc_waves():
assert len(vars(mco).keys()) == 18
assert len(mco.vars.keys()) == 3

def test_mco_multivar():
#get_model
mco = mc(nID='ww3_4km', sd="2023-6-1", ed="2023-6-1 00", varalias=['Hs', 'U'])
assert mco.__class__.__name__ == 'model_class'
mco.populate()
print(mco.vars)
assert len(vars(mco).keys()) == 18
assert len(mco.vars.keys()) == 4

# Fails
#def test_MY_L4_thredds():
# """
Expand Down
26 changes: 26 additions & 0 deletions tests/test_multisat.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,29 @@ def test_multisat(test_data):
assert len(flst) >= 27
assert type(mso.vars == 'xarray.core.dataset.Dataset')
assert not 'error' in vars(mso).keys()

def test_multisat_multivar(test_data):
sd = "2022-2-1 12"
ed = "2022-2-1 12"
name = ['s3a','s3b']
varalias = ['Hs','U']

# init multisat_object
mso = ms(sd=sd,
ed=ed,
name=name,
varalias = varalias,
path = [str(test_data/"L3/s3a"),
str(test_data/"L3/s3b")])
# read data
assert mso.__class__.__name__ == 'multisat_class'
# compare number of available variables
vlst = list(vars(mso).keys())
assert len(vlst) == 17
# compare number of available functions
dlst = dir(mso)
flst = [n for n in dlst if n not in vlst if '__' not in n]
assert len(flst) >= 27
assert len(list(mso.vars.variables)) == 5
assert type(mso.vars == 'xarray.core.dataset.Dataset')
assert not 'error' in vars(mso).keys()
29 changes: 29 additions & 0 deletions tests/test_satellite_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,35 @@ def test_default_reader(test_data):
assert not 'error' in vars(sco).keys()


def test_sco_multivar(test_data):
sd = "2022-2-1 12"
ed = "2022-2-1 12"
name = 's3a'
varalias = ['Hs','U']
twin = 30
nID = 'cmems_L3_NRT'
# init satellite_object
sco = sc(sd=sd, ed=ed, nID=nID, name=name,
varalias=varalias,
twin=twin)
# read data
sco = sco.populate(path=str(test_data/"L3/s3a"))
assert sco.__class__.__name__ == 'satellite_class'
# compare number of available variables
vlst = list(vars(sco).keys())
assert len(vlst) == 19
# compare number of available functions
dlst = dir(sco)
flst = [n for n in dlst if n not in vlst if '__' not in n]
assert len(flst) >= 47
assert type(sco.vars == 'xarray.core.dataset.Dataset')
assert not 'error' in vars(sco).keys()
assert len(sco.vars['time']) > 0
assert len(sco.vars.keys()) == 4
assert not all(np.isnan(v) for v in sco.vars['Hs'])
assert not all(np.isnan(v) for v in sco.vars['U'])


def test_polygon_region(test_data):
sd = "2022-2-01 01"
ed = "2022-2-03 23"
Expand Down
Loading
Loading