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.
@@ -57,60 +57,7 @@ def mira2nc(
57
57
  """
58
58
 
59
59
  with TemporaryDirectory() as temp_dir:
60
- if isinstance(raw_mira, list) or os.path.isdir(raw_mira):
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 _miraignorevar(filetype: str) -> list | None:
186
- """Returns the vars to ignore for METEK MIRA-35 cloud radar concat.
187
-
188
- This function return the nc variable names that should be ignored when
189
- concatenating several files, a requirement needed when a path/list of files
190
- can be passed in to mira2nc, at the moment (08.2023) only relevant for znc.
191
-
192
- Args:
193
- filetype: Either znc or mmclx
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
- Examples:
203
- not meant to be called directly by user
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
- known_filetypes = ["znc", "mmclx"]
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
- if filetype.lower() not in known_filetypes:
211
- raise ValueError(f"Filetype must be one of {known_filetypes}")
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
- # faster this way than previous patch as spectra are not being used in
214
- # cloudnetpy anyway and we therefore also do not need the Doppler dimension
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 _mirakeymap(filetype: str) -> dict:
224
- """Returns the ncvariables to cloudnetpy mapping for METEK MIRA-35 cloud radar.
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
- This function return the appropriate keymap (even for STSR polarimetric
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
- Args:
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("-")[0]
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
- d = date.strftime("%y.%m.%d")
169
- attributes = {}
170
- attributes["time"] = MetaData(units=f"hours since {d} 00:00:00", long_name="")
171
- return attributes
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
- units="decimal hours since midnight",
16
- long_name="Time UTC",
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.get_water_continent(var) for var in ["iwc", "lwc"]]
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.get_water_continent("iwc")
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.get_water_continent("lwc")
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 get_water_continent(self, var: str) -> np.ndarray:
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 == "cf_ecmwf"
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 == "iwc_ecmwf"
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 == "lwc_ecmwf"
20
+ assert nc.cloudnet_file_type == "l3-lwc"
21
21
  assert nc.Conventions == "CF-1.8"
22
22
  assert (
23
23
  nc.source
@@ -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"
@@ -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
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
2
  MINOR = 55
3
- PATCH = 14
3
+ PATCH = 16
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.55.14
3
+ Version: 1.55.16
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -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=assqVpMbhzX8LXztadXOBOe5AB61yBNOPUr2-kf-knM,73
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=LAWViPrjvAG8oxJCFvDrPy-dM0WaVLkJewcBn-BqzpE,10838
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=Zqp1pe0Om0VHyPMHxm9BbeCKtAw8HvzB0-G0ZjsQAxQ,6379
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=xYEkCsgwpF1kQNkG3ydxGM6DjFd-tryZ9ULlA9HUIAE,6321
55
- cloudnetpy/model_evaluation/metadata.py,sha256=4w7rzkxYLO-ihpC4xeqRvHJEOPwM68_LBINHBWXTV8k,8404
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=y4nzuLgOaCqmvMR4wWgie7KiWWz7FcyBMOtdx1iuE-U,8697
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=NidddlJsS6tqPbHiEgCDcY6cwXVXedi_Zp8iQKwx2Os,6629
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=4LqTCSmNmmexLSWHc_-q0XRiFoihh1Y3xuxhkYtSRMc,1754
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=oQvYZYOPo5NuDYgxoD4kOQILLeWQbGHol3gtcDPlPzk,1870
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=it6wqbC7kGbd2DokKUiNggAAPpGCb-vDhrGUtF4iD80,1692
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=2MUB3jVt2EzXFYaoUggUmH0TofenC0vHJlue0ULkdqI,10561
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=8G8pJppEsLZjXOvX5xvXEqEVSCMZZLfIeOoAMX6Gnu8,18642
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.14.dist-info/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
111
- cloudnetpy-1.55.14.dist-info/METADATA,sha256=yVKZakmB_lQoe9EiTjboGehJoe_Vdf54DlF5K2vgfpw,5784
112
- cloudnetpy-1.55.14.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
113
- cloudnetpy-1.55.14.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
114
- cloudnetpy-1.55.14.dist-info/RECORD,,
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,,