Skip to content

Commit 0e0f8de

Browse files
authored
Merge pull request #4 from comet-toolkit/small_fixes
Small fixes
2 parents e8039d0 + 978f789 commit 0e0f8de

File tree

5 files changed

+76
-10
lines changed

5 files changed

+76
-10
lines changed

obsarray/err_corr.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ def expand_dim_matrix(self, submatrix, sli):
7575
in_dim=self.dims,
7676
out_dim=list(self._obj[self._unc_var_name][sli].dims),
7777
dim_sizes={
78-
dim: self._obj.dims[dim] for dim in self._obj[self._unc_var_name][sli].dims
78+
dim: self._obj.dims[dim]
79+
for dim in self._obj[self._unc_var_name][sli].dims
7980
},
8081
)
8182

@@ -167,7 +168,7 @@ def build_matrix(self, sli):
167168
dims_matrix = np.ones((n_elems, n_elems))
168169

169170
# expand to correlation matrix over all variable dims
170-
return self.expand_dim_matrix(dims_matrix,sli)
171+
return self.expand_dim_matrix(dims_matrix, sli)
171172

172173
# subset to slice
173174
# return self.slice_full_cov(full_matrix, sli)
@@ -189,7 +190,7 @@ def build_matrix(self, sli):
189190
"""
190191

191192
# expand to correlation matrix over all variable dims
192-
return self.expand_dim_matrix(self._obj[self.params[0]],sli)
193+
return self.expand_dim_matrix(self._obj[self.params[0]], sli)
193194

194195
# # subset to slice
195196
# return self.slice_full_cov(full_matrix, sli)

obsarray/templater/dswriter.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"""
44

55
import os
6-
6+
from obsarray.templater.template_util import DatasetUtil
77

88
__author__ = "Sam Hunt <sam.hunt@npl.co.uk>"
99

@@ -73,6 +73,15 @@ def _write_netcdf(ds, path, compression_level=None):
7373
for var_name in ds.data_vars:
7474
var_encoding = dict(comp)
7575
var_encoding.update(ds[var_name].encoding)
76+
if "dtype" in var_encoding.keys():
77+
var_encoding.update(
78+
{
79+
"_FillValue": DatasetUtil.get_default_fill_value(
80+
var_encoding["dtype"]
81+
)
82+
}
83+
)
84+
ds[var_name].attrs.pop("_FillValue")
7685
encoding.update({var_name: var_encoding})
7786

7887
ds.to_netcdf(path, format="netCDF4", engine="netcdf4", encoding=encoding)

obsarray/templater/template_util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def _create_var(
129129
)
130130

131131
# Create variable and add to dataset
132-
if isinstance(dtype,str):
132+
if isinstance(dtype, str):
133133
if dtype == "flag":
134134
flag_meanings = attributes.pop("flag_meanings")
135135
variable = du.create_flags_variable(

obsarray/test/test_err_corr_forms.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,11 @@ def build_matrix_3ddim(self):
146146
return ecrm
147147

148148
def test_build_matrix(self):
149-
x=self.build_matrix_1stdim()
150-
y=self.build_matrix_2nddim()
151-
time=self.build_matrix_3ddim()
149+
x = self.build_matrix_1stdim()
150+
y = self.build_matrix_2nddim()
151+
time = self.build_matrix_3ddim()
152152
np.testing.assert_equal((x.dot(y)).dot(time), np.ones((12, 12)))
153153

154+
154155
if __name__ == "main":
155156
unittest.main()

obsarray/unc_accessor.py

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,55 @@ def is_systematic(self) -> bool:
276276

277277
return all(e[1].is_systematic is True for e in self.err_corr)
278278

279+
def err_corr_dict(self) -> dict:
280+
"""
281+
Error-correlation dictionary for uncertainty effect.
282+
283+
:return: dictionary with error-correlation for each dimension
284+
"""
285+
286+
# initialise error-correlation dictionary
287+
err_corr_dict = {}
288+
289+
# populate with error-correlation matrices built be each error-correlation
290+
# parameterisation object
291+
for dim_err_corr in self.err_corr:
292+
if np.all(
293+
[
294+
dim in self._obj[self._unc_var_name][self._sli].dims
295+
for dim in dim_err_corr[1].dims
296+
]
297+
):
298+
if dim_err_corr[1].form in ["random", "systematic"]:
299+
err_corr_dict[dim_err_corr[0]] = dim_err_corr[1].form
300+
301+
elif dim_err_corr[1].form == "err_corr_matrix":
302+
err_corr_dict[dim_err_corr[0]] = self._obj[
303+
dim_err_corr[1].params[0]
304+
].values
305+
306+
else:
307+
raise NotImplementedError(
308+
"this correlation form is not implemented for err_corr_dict()"
309+
)
310+
return err_corr_dict
311+
312+
def err_corr_dict_numdim(self) -> dict:
313+
"""
314+
Error-correlation dictionary for uncertainty effect, where the keys are the dimension index rather than dimension name.
315+
316+
:return: dictionary with error-correlation for each dimension
317+
"""
318+
# initialise error-correlation dictionary
319+
err_corr_dict = self.err_corr_dict()
320+
err_corr_dict_numdim = {}
321+
322+
for idim, dim in enumerate(self._obj.dims):
323+
if dim in err_corr_dict.keys():
324+
err_corr_dict_numdim[str(idim)] = err_corr_dict[dim]
325+
326+
return err_corr_dict_numdim
327+
279328
def err_corr_matrix(self) -> xr.DataArray:
280329
"""
281330
Error-correlation matrix for uncertainty effect.
@@ -291,7 +340,12 @@ def err_corr_matrix(self) -> xr.DataArray:
291340
# populate with error-correlation matrices built be each error-correlation
292341
# parameterisation object
293342
for dim_err_corr in self.err_corr:
294-
if np.all([dim in self._obj[self._unc_var_name][self._sli].dims for dim in dim_err_corr[1].dims]):
343+
if np.all(
344+
[
345+
dim in self._obj[self._unc_var_name][self._sli].dims
346+
for dim in dim_err_corr[1].dims
347+
]
348+
):
295349
err_corr_matrix.values = err_corr_matrix.values.dot(
296350
dim_err_corr[1].build_matrix(self._sli)
297351
)
@@ -583,7 +637,8 @@ def structured_err_cov_matrix(self):
583637

584638
covs_sum = np.zeros(structured_err_cov_matrix.shape)
585639
for unc in self:
586-
covs_sum += unc[self._sli].err_cov_matrix().values
640+
if unc.is_structured:
641+
covs_sum += unc[self._sli].err_cov_matrix().values
587642

588643
structured_err_cov_matrix.values = covs_sum
589644

0 commit comments

Comments
 (0)