cloudnetpy 1.55.14__py3-none-any.whl → 1.55.16__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cloudnetpy/instruments/mira.py +63 -110
- cloudnetpy/instruments/nc_radar.py +3 -1
- cloudnetpy/model_evaluation/file_handler.py +6 -7
- cloudnetpy/model_evaluation/metadata.py +4 -7
- cloudnetpy/model_evaluation/products/advance_methods.py +1 -1
- cloudnetpy/model_evaluation/products/model_products.py +3 -3
- cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +1 -1
- cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +1 -1
- cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +1 -1
- cloudnetpy/products/drizzle.py +2 -0
- cloudnetpy/products/lwc.py +1 -0
- cloudnetpy/version.py +1 -1
- {cloudnetpy-1.55.14.dist-info → cloudnetpy-1.55.16.dist-info}/METADATA +1 -1
- {cloudnetpy-1.55.14.dist-info → cloudnetpy-1.55.16.dist-info}/RECORD +17 -17
- {cloudnetpy-1.55.14.dist-info → cloudnetpy-1.55.16.dist-info}/LICENSE +0 -0
- {cloudnetpy-1.55.14.dist-info → cloudnetpy-1.55.16.dist-info}/WHEEL +0 -0
- {cloudnetpy-1.55.14.dist-info → cloudnetpy-1.55.16.dist-info}/top_level.txt +0 -0
cloudnetpy/instruments/mira.py
CHANGED
@@ -57,60 +57,7 @@ def mira2nc(
|
|
57
57
|
"""
|
58
58
|
|
59
59
|
with TemporaryDirectory() as temp_dir:
|
60
|
-
|
61
|
-
# better naming would be concat_filename but to be directly
|
62
|
-
# compatible with the opening of the output we stick to input_filename
|
63
|
-
input_filename = f"{temp_dir}/tmp.nc"
|
64
|
-
# passed in is a list of files
|
65
|
-
if isinstance(raw_mira, list):
|
66
|
-
valid_files = sorted(raw_mira)
|
67
|
-
else:
|
68
|
-
# passed in is a path with potentially files
|
69
|
-
valid_files = utils.get_sorted_filenames(raw_mira, ".znc")
|
70
|
-
if not valid_files:
|
71
|
-
valid_files = utils.get_sorted_filenames(raw_mira, ".mmclx")
|
72
|
-
|
73
|
-
if not valid_files:
|
74
|
-
raise FileNotFoundError(
|
75
|
-
"Neither znc nor mmclx files found "
|
76
|
-
+ f"{raw_mira}. Please check your input."
|
77
|
-
)
|
78
|
-
|
79
|
-
valid_files = utils.get_files_with_common_range(valid_files)
|
80
|
-
|
81
|
-
# get unique filetypes
|
82
|
-
filetypes = list({f.split(".")[-1].lower() for f in valid_files})
|
83
|
-
|
84
|
-
if len(filetypes) > 1:
|
85
|
-
raise TypeError(
|
86
|
-
"mira2nc only supports a singlefile type as input",
|
87
|
-
"either mmclx or znc",
|
88
|
-
)
|
89
|
-
|
90
|
-
keymap = _mirakeymap(filetypes[0])
|
91
|
-
|
92
|
-
variables = list(keymap.keys())
|
93
|
-
concat_lib.concatenate_files(
|
94
|
-
valid_files,
|
95
|
-
input_filename,
|
96
|
-
variables=variables,
|
97
|
-
ignore=_miraignorevar(filetypes[0]),
|
98
|
-
# somewhat risky to allow varying nfft as the vel resolution
|
99
|
-
# will be different, but this allows for concatenating when
|
100
|
-
# processing switched between different nffts without a hitch
|
101
|
-
# doppler is the third dimensions (other than time and height)
|
102
|
-
# that is relevant in znc files as they contain the spectra
|
103
|
-
# but it should be dropped rather than concatted
|
104
|
-
allow_difference=[
|
105
|
-
"nave",
|
106
|
-
"ovl",
|
107
|
-
# "doppler",
|
108
|
-
"nfft",
|
109
|
-
],
|
110
|
-
)
|
111
|
-
else:
|
112
|
-
input_filename = raw_mira
|
113
|
-
keymap = _mirakeymap(input_filename.split(".")[-1])
|
60
|
+
input_filename, keymap = _parse_input_files(raw_mira, temp_dir)
|
114
61
|
|
115
62
|
with Mira(input_filename, site_meta) as mira:
|
116
63
|
mira.init_data(keymap)
|
@@ -165,7 +112,7 @@ class Mira(NcRadar):
|
|
165
112
|
|
166
113
|
def _init_mira_date(self) -> list[str]:
|
167
114
|
time_stamps = self.getvar("time")
|
168
|
-
return utils.seconds2date(time_stamps[0], self.epoch)[:3]
|
115
|
+
return utils.seconds2date(float(time_stamps[0]), self.epoch)[:3]
|
169
116
|
|
170
117
|
def screen_invalid_ldr(self):
|
171
118
|
"""Masks LDR in MIRA STSR mode data.
|
@@ -182,36 +129,59 @@ class Mira(NcRadar):
|
|
182
129
|
self.data["ldr"].data[:] = ma.masked
|
183
130
|
|
184
131
|
|
185
|
-
def
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
Returns:
|
196
|
-
Appropriate list of variables to ignore for the file type
|
197
|
-
|
198
|
-
Raises:
|
199
|
-
TypeError: Not a valid filetype given, must be string.
|
200
|
-
ValueError: Not a known filetype given, must be znc or mmclx
|
132
|
+
def _parse_input_files(input_files: str | list[str], temp_dir: str) -> tuple:
|
133
|
+
if isinstance(input_files, list) or os.path.isdir(input_files):
|
134
|
+
input_filename = f"{temp_dir}/tmp.nc"
|
135
|
+
if isinstance(input_files, list):
|
136
|
+
valid_files = sorted(input_files)
|
137
|
+
else:
|
138
|
+
valid_files = utils.get_sorted_filenames(input_files, ".znc")
|
139
|
+
if not valid_files:
|
140
|
+
valid_files = utils.get_sorted_filenames(input_files, ".mmclx")
|
201
141
|
|
202
|
-
|
203
|
-
|
142
|
+
if not valid_files:
|
143
|
+
raise FileNotFoundError(
|
144
|
+
"Neither znc nor mmclx files found "
|
145
|
+
+ f"{input_files}. Please check your input."
|
146
|
+
)
|
204
147
|
|
205
|
-
|
206
|
-
|
207
|
-
if not isinstance(filetype, str):
|
208
|
-
raise TypeError("Filetype must be string")
|
148
|
+
valid_files = utils.get_files_with_common_range(valid_files)
|
149
|
+
filetypes = list({f.split(".")[-1].lower() for f in valid_files})
|
209
150
|
|
210
|
-
|
211
|
-
|
151
|
+
if len(filetypes) > 1:
|
152
|
+
raise TypeError(
|
153
|
+
"mira2nc only supports a singlefile type as input",
|
154
|
+
"either mmclx or znc",
|
155
|
+
)
|
212
156
|
|
213
|
-
|
214
|
-
|
157
|
+
keymap = _get_keymap(filetypes[0])
|
158
|
+
|
159
|
+
variables = list(keymap.keys())
|
160
|
+
concat_lib.concatenate_files(
|
161
|
+
valid_files,
|
162
|
+
input_filename,
|
163
|
+
variables=variables,
|
164
|
+
ignore=_get_ignored_variables(filetypes[0]),
|
165
|
+
# It's somewhat risky to use varying nfft values as the velocity resolution
|
166
|
+
# may differ, but this enables concatenation when switching between
|
167
|
+
# different nfft configurations. Spectral data is ignored anyway for now.
|
168
|
+
allow_difference=[
|
169
|
+
"nave",
|
170
|
+
"ovl",
|
171
|
+
"nfft",
|
172
|
+
],
|
173
|
+
)
|
174
|
+
else:
|
175
|
+
input_filename = input_files
|
176
|
+
keymap = _get_keymap(input_filename.split(".")[-1])
|
177
|
+
|
178
|
+
return input_filename, keymap
|
179
|
+
|
180
|
+
|
181
|
+
def _get_ignored_variables(filetype: str) -> list | None:
|
182
|
+
"""Returns variables to ignore for METEK MIRA-35 cloud radar concat."""
|
183
|
+
_check_file_type(filetype)
|
184
|
+
# Ignore spectral variables for now
|
215
185
|
keymaps = {
|
216
186
|
"znc": ["DropSize", "SPCco", "SPCcx", "SPCcocxRe", "SPCcocxIm", "doppler"],
|
217
187
|
"mmclx": None,
|
@@ -220,37 +190,13 @@ def _miraignorevar(filetype: str) -> list | None:
|
|
220
190
|
return keymaps.get(filetype.lower(), keymaps.get("mmclx"))
|
221
191
|
|
222
192
|
|
223
|
-
def
|
224
|
-
"""Returns the
|
193
|
+
def _get_keymap(filetype: str) -> dict:
|
194
|
+
"""Returns a dictionary mapping the variables in the raw data to the processed
|
195
|
+
Cloudnet file."""
|
225
196
|
|
226
|
-
|
227
|
-
config) for cloudnetpy to take the appropriate variables from the netCDF
|
228
|
-
whether mmclx (old format) or znc (new format).
|
197
|
+
_check_file_type(filetype)
|
229
198
|
|
230
|
-
|
231
|
-
filetype: Either znc or mmclx
|
232
|
-
|
233
|
-
Returns:
|
234
|
-
Appropriate keymap for the file type
|
235
|
-
|
236
|
-
Raises:
|
237
|
-
TypeError: Not a valid filetype given, must be string.
|
238
|
-
ValueError: Not a known filetype given, must be znc or mmclx
|
239
|
-
|
240
|
-
Examples:
|
241
|
-
not meant to be called directly by user
|
242
|
-
|
243
|
-
"""
|
244
|
-
known_filetypes = ["znc", "mmclx"]
|
245
|
-
if not isinstance(filetype, str):
|
246
|
-
raise TypeError("Filetype must be string")
|
247
|
-
|
248
|
-
if filetype.lower() not in known_filetypes:
|
249
|
-
raise ValueError(f"Filetype must be one of {known_filetypes}")
|
250
|
-
|
251
|
-
# ordered dict here because that way the order is kept, which means
|
252
|
-
# we will get Zh2l over as Zh over Zg, which is relevant for the new
|
253
|
-
# znc files of an STSR radar
|
199
|
+
# Order is relevant with the new znc files from STSR radar
|
254
200
|
keymaps = {
|
255
201
|
"znc": OrderedDict(
|
256
202
|
[
|
@@ -286,12 +232,19 @@ def _mirakeymap(filetype: str) -> dict:
|
|
286
232
|
"nave": "nave",
|
287
233
|
"prf": "prf",
|
288
234
|
"rg0": "rg0",
|
235
|
+
"NyquistVelocity": "NyquistVelocity", # variable in some mmclx files
|
289
236
|
},
|
290
237
|
}
|
291
238
|
|
292
239
|
return keymaps.get(filetype.lower(), keymaps["mmclx"])
|
293
240
|
|
294
241
|
|
242
|
+
def _check_file_type(filetype: str):
|
243
|
+
known_filetypes = ["znc", "mmclx"]
|
244
|
+
if filetype.lower() not in known_filetypes:
|
245
|
+
raise ValueError(f"Filetype must be one of {known_filetypes}")
|
246
|
+
|
247
|
+
|
295
248
|
ATTRIBUTES = {
|
296
249
|
"nfft": MetaData(
|
297
250
|
long_name="Number of FFT points",
|
@@ -134,7 +134,9 @@ class NcRadar(DataSource, CloudnetInstrument):
|
|
134
134
|
possible_nyquist_names = ("ambiguous_velocity", "NyquistVelocity")
|
135
135
|
data = self.getvar(*possible_nyquist_names)
|
136
136
|
key = "nyquist_velocity"
|
137
|
-
self.data[key] = CloudnetArray(np.array(data), key)
|
137
|
+
self.data[key] = CloudnetArray(np.median(np.array(data)), key)
|
138
|
+
if "NyquistVelocity" in self.data:
|
139
|
+
del self.data["NyquistVelocity"]
|
138
140
|
except RuntimeError:
|
139
141
|
logging.warning("Unable to find nyquist_velocity")
|
140
142
|
|
@@ -10,7 +10,6 @@ from .metadata import (
|
|
10
10
|
MODEL_ATTRIBUTES,
|
11
11
|
MODEL_L3_ATTRIBUTES,
|
12
12
|
REGRID_PRODUCT_ATTRIBUTES,
|
13
|
-
MetaData,
|
14
13
|
)
|
15
14
|
from .products.model_products import ModelManager
|
16
15
|
|
@@ -86,7 +85,7 @@ def save_downsampled_file(
|
|
86
85
|
root_group = output.init_file(file_name, dimensions, obj.data, uuid)
|
87
86
|
_augment_global_attributes(root_group)
|
88
87
|
uuid = root_group.file_uuid
|
89
|
-
root_group.cloudnet_file_type = id_mark.split("
|
88
|
+
root_group.cloudnet_file_type = "l3-" + id_mark.split("_")[0]
|
90
89
|
root_group.title = (
|
91
90
|
f"Downsampled {id_mark.capitalize().replace('_', ' of ')} "
|
92
91
|
f"from {obj.dataset.location}"
|
@@ -139,7 +138,6 @@ def _write_vars2nc(rootgrp: netCDF4.Dataset, cloudnet_variables: dict):
|
|
139
138
|
|
140
139
|
def _augment_global_attributes(root_group: netCDF4.Dataset):
|
141
140
|
root_group.Conventions = "CF-1.8"
|
142
|
-
# root_group.cloudnetme_version = version.__version__
|
143
141
|
|
144
142
|
|
145
143
|
def _add_source(root_ground: netCDF4.Dataset, objects: tuple, files: tuple):
|
@@ -165,7 +163,8 @@ def add_time_attribute(date: datetime) -> dict:
|
|
165
163
|
Returns:
|
166
164
|
dict: Same attributes with 'time' attribute added.
|
167
165
|
"""
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
166
|
+
return {
|
167
|
+
"time": MODEL_ATTRIBUTES["time"]._replace(
|
168
|
+
units=f"hours since {date:%Y-%m-%d} 00:00:00 +00:00"
|
169
|
+
)
|
170
|
+
}
|
@@ -8,16 +8,13 @@ class MetaData(NamedTuple):
|
|
8
8
|
standard_name: str | None = None
|
9
9
|
axis: str | None = None
|
10
10
|
positive: str | None = None
|
11
|
+
calendar: str | None = None
|
11
12
|
|
12
13
|
|
13
14
|
MODEL_ATTRIBUTES = {
|
14
|
-
"time": MetaData(
|
15
|
-
|
16
|
-
|
17
|
-
axis="T",
|
18
|
-
),
|
19
|
-
"latitude": MetaData(long_name="Latitude of grid point", units="dergees_north"),
|
20
|
-
"longitude": MetaData(long_name="Longitude of grid point", units="degrees_east"),
|
15
|
+
"time": MetaData(units="", long_name="Time UTC", axis="T", calendar="standard"),
|
16
|
+
"latitude": MetaData(long_name="Latitude of grid point", units="degree_north"),
|
17
|
+
"longitude": MetaData(long_name="Longitude of grid point", units="degree_east"),
|
21
18
|
"horizontal_resolution": MetaData(
|
22
19
|
long_name="Horizontal resolution of model",
|
23
20
|
units="km",
|
@@ -54,7 +54,7 @@ class AdvanceProductMethods(DataSource):
|
|
54
54
|
h = self.getvar_from_object("h")
|
55
55
|
temperature = self.getvar("temperature")
|
56
56
|
t_screened = self.remove_extra_levels(temperature - 273.15)
|
57
|
-
iwc, lwc = [self._model_obj.
|
57
|
+
iwc, lwc = [self._model_obj.get_water_content(var) for var in ["iwc", "lwc"]]
|
58
58
|
tZT, tT, tZ, t = self.set_frequency_parameters()
|
59
59
|
z_sen = self.fit_z_sensitivity(h)
|
60
60
|
cf_filtered = self.filter_high_iwc_low_cf(cf, iwc, lwc)
|
@@ -86,13 +86,13 @@ class ModelManager(DataSource):
|
|
86
86
|
self.keys[self._product] = f"{self.model}{self.cycle}_cf"
|
87
87
|
|
88
88
|
def _get_iwc(self):
|
89
|
-
iwc = self.
|
89
|
+
iwc = self.get_water_content("iwc")
|
90
90
|
iwc[iwc < 1e-7] = ma.masked
|
91
91
|
self.append_data(iwc, f"{self.model}{self.cycle}_iwc")
|
92
92
|
self.keys[self._product] = f"{self.model}{self.cycle}_iwc"
|
93
93
|
|
94
94
|
def _get_lwc(self):
|
95
|
-
lwc = self.
|
95
|
+
lwc = self.get_water_content("lwc")
|
96
96
|
lwc[lwc < 1e-5] = ma.masked
|
97
97
|
self.append_data(lwc, f"{self.model}{self.cycle}_lwc")
|
98
98
|
self.keys[self._product] = f"{self.model}{self.cycle}_lwc"
|
@@ -104,7 +104,7 @@ class ModelManager(DataSource):
|
|
104
104
|
var.append(VARIABLES[arg].long_name)
|
105
105
|
return var
|
106
106
|
|
107
|
-
def
|
107
|
+
def get_water_content(self, var: str) -> np.ndarray:
|
108
108
|
p_name = self.get_model_var_names(("p",))[0]
|
109
109
|
t_name = self.get_model_var_names(("T",))[0]
|
110
110
|
lwc_name = self.get_model_var_names((var,))[0]
|
@@ -17,7 +17,7 @@ class TestCloudFractionProcessing:
|
|
17
17
|
assert nc.month == "05"
|
18
18
|
assert nc.day == "17"
|
19
19
|
assert nc.title == "Downsampled Cf of ecmwf from Mace-Head"
|
20
|
-
assert nc.cloudnet_file_type == "
|
20
|
+
assert nc.cloudnet_file_type == "l3-cf"
|
21
21
|
assert nc.Conventions == "CF-1.8"
|
22
22
|
assert (
|
23
23
|
nc.source
|
@@ -17,7 +17,7 @@ class TestCloudFractionProcessing:
|
|
17
17
|
assert nc.month == "05"
|
18
18
|
assert nc.day == "17"
|
19
19
|
assert nc.title == "Downsampled Iwc of ecmwf from Mace-Head"
|
20
|
-
assert nc.cloudnet_file_type == "
|
20
|
+
assert nc.cloudnet_file_type == "l3-iwc"
|
21
21
|
assert nc.Conventions == "CF-1.8"
|
22
22
|
assert (
|
23
23
|
nc.source
|
@@ -17,7 +17,7 @@ class TestCloudFractionProcessing:
|
|
17
17
|
assert nc.month == "05"
|
18
18
|
assert nc.day == "17"
|
19
19
|
assert nc.title == "Downsampled Lwc of ecmwf from Mace-Head"
|
20
|
-
assert nc.cloudnet_file_type == "
|
20
|
+
assert nc.cloudnet_file_type == "l3-lwc"
|
21
21
|
assert nc.Conventions == "CF-1.8"
|
22
22
|
assert (
|
23
23
|
nc.source
|
cloudnetpy/products/drizzle.py
CHANGED
@@ -210,6 +210,7 @@ DRIZZLE_ATTRIBUTES = {
|
|
210
210
|
long_name="Drizzle liquid water content",
|
211
211
|
units="kg m-3",
|
212
212
|
ancillary_variables="drizzle_lwc_error drizzle_lwc_bias",
|
213
|
+
standard_name="mass_concentration_of_drizzle_in_air",
|
213
214
|
),
|
214
215
|
"drizzle_lwc_error": MetaData(
|
215
216
|
long_name="Random error in drizzle liquid water content",
|
@@ -250,6 +251,7 @@ DRIZZLE_ATTRIBUTES = {
|
|
250
251
|
units="m s-1",
|
251
252
|
ancillary_variables="v_air_error",
|
252
253
|
comment="Positive values are towards the sky.",
|
254
|
+
standard_name="upward_air_velocity",
|
253
255
|
),
|
254
256
|
"v_air_error": MetaData(
|
255
257
|
long_name="Random error in vertical air velocity", units="dB"
|
cloudnetpy/products/lwc.py
CHANGED
@@ -433,6 +433,7 @@ LWC_ATTRIBUTES = {
|
|
433
433
|
long_name="Liquid water content",
|
434
434
|
comment=COMMENTS["lwc"],
|
435
435
|
ancillary_variables="lwc_error",
|
436
|
+
standard_name="mass_concentration_of_liquid_water_in_air",
|
436
437
|
),
|
437
438
|
"lwc_error": MetaData(
|
438
439
|
long_name="Random error in liquid water content, one standard deviation",
|
cloudnetpy/version.py
CHANGED
@@ -8,7 +8,7 @@ cloudnetpy/metadata.py,sha256=-oRmr4HWjG_-P8jOjdBYMgRkOYnJKr6jmGIF-38Tno8,5023
|
|
8
8
|
cloudnetpy/output.py,sha256=mOjbCGCHF13vJTFMx9Q9wuOxONCybLxc9zznWKRRRIA,14426
|
9
9
|
cloudnetpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
cloudnetpy/utils.py,sha256=pJugU9q-MEG2KX24EQ4QXaAI-pRq9aM-RwtTOWYnBsw,26860
|
11
|
-
cloudnetpy/version.py,sha256=
|
11
|
+
cloudnetpy/version.py,sha256=vwAnRMnSRRQ2nquDW6Yk-I5rpV8sczjsTY4JhtcvdpI,73
|
12
12
|
cloudnetpy/categorize/__init__.py,sha256=gP5q3Vis1y9u9OWgA_idlbjfWXYN_S0IBSWdwBhL_uU,69
|
13
13
|
cloudnetpy/categorize/atmos.py,sha256=rpXaqttyX3aSx7K_UBmIS5b9uTuDJOne2fnOfprRhEU,12412
|
14
14
|
cloudnetpy/categorize/atmos_utils.py,sha256=xjgSdyzyvz5poh7tCdltj9C19jHwpDlNTBhtSC3CXlg,3756
|
@@ -36,10 +36,10 @@ cloudnetpy/instruments/galileo.py,sha256=F_XyoAb9PR-ifGhqhXziKnv0KfyOh-yEBaE1NgR
|
|
36
36
|
cloudnetpy/instruments/hatpro.py,sha256=1u751jC7FStVnW-h2EjKfCRSrxTIDYf2OO5aewZqTUg,7710
|
37
37
|
cloudnetpy/instruments/instruments.py,sha256=kUm0SbOEnKqj6seu_YE8EAL5SFyNjFbThmA2nA7zYFU,3120
|
38
38
|
cloudnetpy/instruments/lufft.py,sha256=lZr_fz2vWQdPr4ZiWW7_wT7WlrMmPsQ2ko6MKygZv50,3332
|
39
|
-
cloudnetpy/instruments/mira.py,sha256=
|
39
|
+
cloudnetpy/instruments/mira.py,sha256=oAY1PSoVOpFgbi-O0GjZ04Jrds7tidce5dXa1FbSBI8,8928
|
40
40
|
cloudnetpy/instruments/mrr.py,sha256=dNY0k9xncsb0MEI8_Gh5Uaxngq15BDz_ilCXRjnV5wE,5607
|
41
41
|
cloudnetpy/instruments/nc_lidar.py,sha256=ypJn4H6s2ZQfnulUhdjm3hxAE90bPJEH6FAL-hBYWrw,1418
|
42
|
-
cloudnetpy/instruments/nc_radar.py,sha256=
|
42
|
+
cloudnetpy/instruments/nc_radar.py,sha256=6AlVyEvhs20DUBo1gDDaYqU_QGOz5nEeTno_I5DGRD0,6486
|
43
43
|
cloudnetpy/instruments/pollyxt.py,sha256=W9ol2rcbN_IN1vrNqXUlxH0EYYUjizFwIsqhkLONnnk,8146
|
44
44
|
cloudnetpy/instruments/radiometrics.py,sha256=r73gDsB6ZSVRfMPkkf2mnhVSX8MxGTOuTjQyVmaQ5v8,7304
|
45
45
|
cloudnetpy/instruments/rpg.py,sha256=ApF-3Vp2HtgtZrOREggD3ZVgwzkMZMBWHUdLMFFGgHs,16619
|
@@ -51,8 +51,8 @@ cloudnetpy/instruments/disdrometer/common.py,sha256=6vmnNSZBUEPtqF8fmmXaa-pBfIc2
|
|
51
51
|
cloudnetpy/instruments/disdrometer/parsivel.py,sha256=LqJLhSA0ubjuld9fiUkdGDxGkhGueXGs6jlBwILdR_U,17677
|
52
52
|
cloudnetpy/instruments/disdrometer/thies.py,sha256=YB328052yqlkOW7sGZSfUUCwLS3GPzYrWDiSg8C3C-s,5022
|
53
53
|
cloudnetpy/model_evaluation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
|
-
cloudnetpy/model_evaluation/file_handler.py,sha256=
|
55
|
-
cloudnetpy/model_evaluation/metadata.py,sha256=
|
54
|
+
cloudnetpy/model_evaluation/file_handler.py,sha256=9FiHZydMQG_QS5Ofa3bkV2ZCl8Krh8ZyJnpA7D3wyOA,6243
|
55
|
+
cloudnetpy/model_evaluation/metadata.py,sha256=J81xFTcNDgEpHvkYN2vEVraYEh3TeL2ojimxO22z-88,8396
|
56
56
|
cloudnetpy/model_evaluation/model_metadata.py,sha256=4W9qvJMCWqIgvRdI3coWq_dFCCVCsF59qemxGM4iJ1w,1411
|
57
57
|
cloudnetpy/model_evaluation/utils.py,sha256=PjaqKkpsSotRY91u_louWENibqaZ9dnE5Az1EsNWN6U,117
|
58
58
|
cloudnetpy/model_evaluation/plotting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -60,9 +60,9 @@ cloudnetpy/model_evaluation/plotting/plot_meta.py,sha256=K18Ugohh24uVAIxjZgJsmK8
|
|
60
60
|
cloudnetpy/model_evaluation/plotting/plot_tools.py,sha256=HJmzb2B8fv2O9456b_hQ_VARnefJV7voVDcg1LglCX4,5211
|
61
61
|
cloudnetpy/model_evaluation/plotting/plotting.py,sha256=IAzfnIuQ6P8RmWvxCFkNrzijkjysf3qxRBJGNFjAWLI,26795
|
62
62
|
cloudnetpy/model_evaluation/products/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
|
-
cloudnetpy/model_evaluation/products/advance_methods.py,sha256=
|
63
|
+
cloudnetpy/model_evaluation/products/advance_methods.py,sha256=b7GKLjiHpge7ocIc1ZQthQD542rkI4bYCs-A12_wrPc,8695
|
64
64
|
cloudnetpy/model_evaluation/products/grid_methods.py,sha256=qxWqXspanTg1CmFgr2cwLFXmwE48DaWPJugsgExf6zI,9231
|
65
|
-
cloudnetpy/model_evaluation/products/model_products.py,sha256=
|
65
|
+
cloudnetpy/model_evaluation/products/model_products.py,sha256=hNoJQ0x6W0Udv0np9Uc-Wv2NavVXABhZ7qcairrwaSA,6623
|
66
66
|
cloudnetpy/model_evaluation/products/observation_products.py,sha256=RtUqvf11iUXYd5iRnUVlkJKM288YXpYHUgQ0E0ccvTw,5344
|
67
67
|
cloudnetpy/model_evaluation/products/product_resampling.py,sha256=5IXwDjzK_SuL0ITNHcl7Q_GR1WPagWr37CWapfSOmRw,3568
|
68
68
|
cloudnetpy/model_evaluation/products/tools.py,sha256=Q1jh_KsBt_ZAy7uKki-svA1h5k0TUs_i1gL4wT41-50,2835
|
@@ -73,13 +73,13 @@ cloudnetpy/model_evaluation/tests/e2e/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
73
73
|
cloudnetpy/model_evaluation/tests/e2e/conftest.py,sha256=oEpiAOZnoaNTWsx2wSWD7YUp5HwjwFGv1fevz_o-Tq8,287
|
74
74
|
cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
75
|
cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py,sha256=LE_nz4Ir44P5hjKzdFJde1m4w69h0MZXMoEdpk6AucQ,1238
|
76
|
-
cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py,sha256=
|
76
|
+
cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py,sha256=g31dj44E7IS21AjDQvryFsx1YBLAz7XVY-VISdaS36Y,1751
|
77
77
|
cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
78
|
cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py,sha256=VbONC12QLu2iYL9HsAXFkgwEgtKZPMXQUmoXnGBaO7k,1317
|
79
|
-
cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py,sha256=
|
79
|
+
cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py,sha256=rGPqdn_DbdffbPogiIr_VMU_edpfFAJGU1RlVCcBA1Y,1867
|
80
80
|
cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
81
81
|
cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py,sha256=_VpfClNdcdUI8kcQkBTH9wQCrfKNf6Tyiq9X-Gom3FM,1255
|
82
|
-
cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py,sha256=
|
82
|
+
cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py,sha256=BR3-Nn5aNsU_b7EKHuQ0KJafwxb-6As8m0s4IR8TDPg,1689
|
83
83
|
cloudnetpy/model_evaluation/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
84
84
|
cloudnetpy/model_evaluation/tests/unit/conftest.py,sha256=-m1VSVoQ_l6qZbwULW0z2rr4bJvvvdn8Iyn2MqtfQNU,7382
|
85
85
|
cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py,sha256=wOGD8e8bTZ1dR1RSCi0rTtTkVs1x9U-NOwjl3oBDJ3g,10608
|
@@ -96,19 +96,19 @@ cloudnetpy/plotting/plotting.py,sha256=YrlTuRfIJrLcK5D4iLPrAqfV5ihNBX8v3QDgA8ArP
|
|
96
96
|
cloudnetpy/products/__init__.py,sha256=hGkngQT-YAC5cmDiHkSkQw2ZBrg0hN2z40Fizz0QU5Y,210
|
97
97
|
cloudnetpy/products/classification.py,sha256=0Y5dEVDZFbq3UcFnyHomml5Au12SSMVznQTgAMyqh2I,7701
|
98
98
|
cloudnetpy/products/der.py,sha256=zDehcsSCwDTADmxrK4Dmy5VcsrJmDbb-t_SiSU-C3M0,12241
|
99
|
-
cloudnetpy/products/drizzle.py,sha256=
|
99
|
+
cloudnetpy/products/drizzle.py,sha256=hm7xDeZribsuLh9NqyoMGMXMg5mbZtULoKseuYZ_eHw,10668
|
100
100
|
cloudnetpy/products/drizzle_error.py,sha256=RBMtEmuOjiplgdpK0o_6KF6cQlheB1WlJ-x2l-Ig2yw,6123
|
101
101
|
cloudnetpy/products/drizzle_tools.py,sha256=oksgyS_Nlj5PRdpWaNxek3KSXiaw4AEMeDt1bTqnCiU,10570
|
102
102
|
cloudnetpy/products/ier.py,sha256=z0g0VKtnow9QlD492f6z1jPtslqvfmBBuITTrLYH3cI,7775
|
103
103
|
cloudnetpy/products/iwc.py,sha256=0sAGYcTGOJcVH3MxqGxuwxiUpiEG0NuPg49gPsI0wLo,10076
|
104
|
-
cloudnetpy/products/lwc.py,sha256=
|
104
|
+
cloudnetpy/products/lwc.py,sha256=Vz1-GmNDsRQ-o1lwj30veWJs5yI84PvU4tVMw2-kKWM,18709
|
105
105
|
cloudnetpy/products/mie_lu_tables.nc,sha256=It4fYpqJXlqOgL8jeZ-PxGzP08PMrELIDVe55y9ob58,16637951
|
106
106
|
cloudnetpy/products/mwr_multi.py,sha256=WDZ_3kAbRsyvhmARdeH1nTBJCCkoSYo5aGhiEgrOGOc,3267
|
107
107
|
cloudnetpy/products/mwr_single.py,sha256=3Mpy4KXw7YARgKiGJi0Ab5-7Rq7ko6LK-3wGP0xhSGk,3134
|
108
108
|
cloudnetpy/products/product_tools.py,sha256=KLvQKRkPrzZXT4_mFh2O5oJ14kf6nEyYd0sCaWlR0gY,10119
|
109
109
|
docs/source/conf.py,sha256=baQlgkkUGJi4952W6NRhLkIBbRtwFgqrIOBuEeSCLfk,1488
|
110
|
-
cloudnetpy-1.55.
|
111
|
-
cloudnetpy-1.55.
|
112
|
-
cloudnetpy-1.55.
|
113
|
-
cloudnetpy-1.55.
|
114
|
-
cloudnetpy-1.55.
|
110
|
+
cloudnetpy-1.55.16.dist-info/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
|
111
|
+
cloudnetpy-1.55.16.dist-info/METADATA,sha256=Cz1a8ZX0ZXVjeCEpF72UhaM6j62MCgmnfqkC541VxcU,5784
|
112
|
+
cloudnetpy-1.55.16.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
113
|
+
cloudnetpy-1.55.16.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
|
114
|
+
cloudnetpy-1.55.16.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|