cloudnetpy 1.55.20__py3-none-any.whl → 1.55.22__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.
Files changed (95) hide show
  1. cloudnetpy/categorize/atmos.py +46 -14
  2. cloudnetpy/categorize/atmos_utils.py +11 -1
  3. cloudnetpy/categorize/categorize.py +38 -21
  4. cloudnetpy/categorize/classify.py +31 -9
  5. cloudnetpy/categorize/containers.py +19 -7
  6. cloudnetpy/categorize/droplet.py +24 -8
  7. cloudnetpy/categorize/falling.py +17 -7
  8. cloudnetpy/categorize/freezing.py +19 -5
  9. cloudnetpy/categorize/insects.py +27 -14
  10. cloudnetpy/categorize/lidar.py +38 -36
  11. cloudnetpy/categorize/melting.py +19 -9
  12. cloudnetpy/categorize/model.py +28 -9
  13. cloudnetpy/categorize/mwr.py +4 -2
  14. cloudnetpy/categorize/radar.py +58 -22
  15. cloudnetpy/cloudnetarray.py +15 -6
  16. cloudnetpy/concat_lib.py +39 -16
  17. cloudnetpy/constants.py +7 -0
  18. cloudnetpy/datasource.py +39 -19
  19. cloudnetpy/instruments/basta.py +6 -2
  20. cloudnetpy/instruments/campbell_scientific.py +33 -16
  21. cloudnetpy/instruments/ceilo.py +30 -13
  22. cloudnetpy/instruments/ceilometer.py +76 -37
  23. cloudnetpy/instruments/cl61d.py +8 -3
  24. cloudnetpy/instruments/cloudnet_instrument.py +2 -1
  25. cloudnetpy/instruments/copernicus.py +27 -14
  26. cloudnetpy/instruments/disdrometer/common.py +51 -32
  27. cloudnetpy/instruments/disdrometer/parsivel.py +79 -48
  28. cloudnetpy/instruments/disdrometer/thies.py +10 -6
  29. cloudnetpy/instruments/galileo.py +23 -12
  30. cloudnetpy/instruments/hatpro.py +27 -11
  31. cloudnetpy/instruments/instruments.py +4 -1
  32. cloudnetpy/instruments/lufft.py +20 -11
  33. cloudnetpy/instruments/mira.py +60 -49
  34. cloudnetpy/instruments/mrr.py +31 -20
  35. cloudnetpy/instruments/nc_lidar.py +15 -6
  36. cloudnetpy/instruments/nc_radar.py +31 -22
  37. cloudnetpy/instruments/pollyxt.py +36 -21
  38. cloudnetpy/instruments/radiometrics.py +32 -18
  39. cloudnetpy/instruments/rpg.py +48 -22
  40. cloudnetpy/instruments/rpg_reader.py +39 -30
  41. cloudnetpy/instruments/vaisala.py +39 -27
  42. cloudnetpy/instruments/weather_station.py +15 -11
  43. cloudnetpy/metadata.py +3 -1
  44. cloudnetpy/model_evaluation/file_handler.py +31 -21
  45. cloudnetpy/model_evaluation/metadata.py +3 -1
  46. cloudnetpy/model_evaluation/model_metadata.py +1 -1
  47. cloudnetpy/model_evaluation/plotting/plot_tools.py +20 -15
  48. cloudnetpy/model_evaluation/plotting/plotting.py +114 -64
  49. cloudnetpy/model_evaluation/products/advance_methods.py +48 -28
  50. cloudnetpy/model_evaluation/products/grid_methods.py +44 -19
  51. cloudnetpy/model_evaluation/products/model_products.py +22 -18
  52. cloudnetpy/model_evaluation/products/observation_products.py +15 -9
  53. cloudnetpy/model_evaluation/products/product_resampling.py +14 -4
  54. cloudnetpy/model_evaluation/products/tools.py +16 -7
  55. cloudnetpy/model_evaluation/statistics/statistical_methods.py +28 -15
  56. cloudnetpy/model_evaluation/tests/e2e/conftest.py +3 -3
  57. cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +9 -5
  58. cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +14 -13
  59. cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +9 -5
  60. cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +14 -13
  61. cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +9 -5
  62. cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +14 -13
  63. cloudnetpy/model_evaluation/tests/unit/conftest.py +11 -11
  64. cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +33 -27
  65. cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +83 -83
  66. cloudnetpy/model_evaluation/tests/unit/test_model_products.py +23 -21
  67. cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +24 -25
  68. cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +40 -39
  69. cloudnetpy/model_evaluation/tests/unit/test_plotting.py +12 -11
  70. cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +30 -30
  71. cloudnetpy/model_evaluation/tests/unit/test_tools.py +18 -17
  72. cloudnetpy/model_evaluation/utils.py +3 -2
  73. cloudnetpy/output.py +45 -19
  74. cloudnetpy/plotting/plot_meta.py +35 -11
  75. cloudnetpy/plotting/plotting.py +172 -104
  76. cloudnetpy/products/classification.py +20 -8
  77. cloudnetpy/products/der.py +25 -10
  78. cloudnetpy/products/drizzle.py +41 -26
  79. cloudnetpy/products/drizzle_error.py +10 -5
  80. cloudnetpy/products/drizzle_tools.py +43 -24
  81. cloudnetpy/products/ier.py +10 -5
  82. cloudnetpy/products/iwc.py +16 -9
  83. cloudnetpy/products/lwc.py +34 -12
  84. cloudnetpy/products/mwr_multi.py +4 -1
  85. cloudnetpy/products/mwr_single.py +4 -1
  86. cloudnetpy/products/product_tools.py +33 -10
  87. cloudnetpy/utils.py +175 -74
  88. cloudnetpy/version.py +1 -1
  89. {cloudnetpy-1.55.20.dist-info → cloudnetpy-1.55.22.dist-info}/METADATA +11 -10
  90. cloudnetpy-1.55.22.dist-info/RECORD +114 -0
  91. docs/source/conf.py +2 -2
  92. cloudnetpy-1.55.20.dist-info/RECORD +0 -114
  93. {cloudnetpy-1.55.20.dist-info → cloudnetpy-1.55.22.dist-info}/LICENSE +0 -0
  94. {cloudnetpy-1.55.20.dist-info → cloudnetpy-1.55.22.dist-info}/WHEEL +0 -0
  95. {cloudnetpy-1.55.20.dist-info → cloudnetpy-1.55.22.dist-info}/top_level.txt +0 -0
@@ -13,7 +13,7 @@ PRODUCT = "cf"
13
13
 
14
14
 
15
15
  @pytest.mark.parametrize("name", ("ecmwf_cf_cirrus",))
16
- def test_cf_cirrus_filter(obs_file, model_file, name):
16
+ def test_cf_cirrus_filter(obs_file, model_file, name) -> None:
17
17
  obs = ObservationManager(PRODUCT, str(obs_file))
18
18
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
19
19
  AdvanceProductMethods(model, str(model_file), obs)
@@ -27,7 +27,7 @@ def test_cf_cirrus_filter(obs_file, model_file, name):
27
27
  ("h", np.array([[10, 14], [8, 14], [9, 15]])),
28
28
  ],
29
29
  )
30
- def test_getvar_from_object(obs_file, model_file, name, data):
30
+ def test_getvar_from_object(obs_file, model_file, name, data) -> None:
31
31
  obs = ObservationManager(PRODUCT, str(obs_file))
32
32
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
33
33
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -36,7 +36,7 @@ def test_getvar_from_object(obs_file, model_file, name, data):
36
36
 
37
37
 
38
38
  @pytest.mark.parametrize("name", ("T",))
39
- def test_getvar_from_object_None(obs_file, model_file, name):
39
+ def test_getvar_from_object_None(obs_file, model_file, name) -> None:
40
40
  obs = ObservationManager(PRODUCT, str(obs_file))
41
41
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
42
42
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -51,7 +51,7 @@ def test_getvar_from_object_None(obs_file, model_file, name):
51
51
  (95, (0.00058, -0.00706, 0.0923, -0.992)),
52
52
  ],
53
53
  )
54
- def test_set_frequency_parameters(obs_file, model_file, radar_f, values):
54
+ def test_set_frequency_parameters(obs_file, model_file, radar_f, values) -> None:
55
55
  obs = ObservationManager(PRODUCT, str(obs_file))
56
56
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
57
57
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -60,7 +60,7 @@ def test_set_frequency_parameters(obs_file, model_file, radar_f, values):
60
60
  assert x == values
61
61
 
62
62
 
63
- def test_fit_z_sensitivity(obs_file, model_file):
63
+ def test_fit_z_sensitivity(obs_file, model_file) -> None:
64
64
  obs = ObservationManager(PRODUCT, str(obs_file))
65
65
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
66
66
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -70,7 +70,7 @@ def test_fit_z_sensitivity(obs_file, model_file):
70
70
  testing.assert_array_almost_equal(x, compare)
71
71
 
72
72
 
73
- def test_filter_high_iwc_low_cf(obs_file, model_file):
73
+ def test_filter_high_iwc_low_cf(obs_file, model_file) -> None:
74
74
  obs = ObservationManager(PRODUCT, str(obs_file))
75
75
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
76
76
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -82,18 +82,18 @@ def test_filter_high_iwc_low_cf(obs_file, model_file):
82
82
  testing.assert_array_almost_equal(x, compare)
83
83
 
84
84
 
85
- @pytest.mark.xfail(raises=ValueError)
86
- def test_filter_high_iwc_low_cf_no_ice(obs_file, model_file):
85
+ def test_filter_high_iwc_low_cf_no_ice(obs_file, model_file) -> None:
87
86
  obs = ObservationManager(PRODUCT, str(obs_file))
88
87
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
89
88
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
90
89
  cf = ma.array([0.0001, 0.0002, 0, 0, 0, 0.0006])
91
90
  iwc = np.array([0.0, 0, 0, 0.2, 0.4, 0])
92
91
  lwc = np.array([0.0, 0.02, 0.01, 0, 0.01, 0.01])
93
- adv_pro.filter_high_iwc_low_cf(cf, iwc, lwc)
92
+ with pytest.raises(ValueError):
93
+ adv_pro.filter_high_iwc_low_cf(cf, iwc, lwc)
94
94
 
95
95
 
96
- def test_mask_weird_indices(obs_file, model_file):
96
+ def test_mask_weird_indices(obs_file, model_file) -> None:
97
97
  obs = ObservationManager(PRODUCT, str(obs_file))
98
98
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
99
99
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -108,7 +108,7 @@ def test_mask_weird_indices(obs_file, model_file):
108
108
  testing.assert_array_almost_equal(x, compare)
109
109
 
110
110
 
111
- def test_mask_weird_indices_values(obs_file, model_file):
111
+ def test_mask_weird_indices_values(obs_file, model_file) -> None:
112
112
  obs = ObservationManager(PRODUCT, str(obs_file))
113
113
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
114
114
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -120,7 +120,7 @@ def test_mask_weird_indices_values(obs_file, model_file):
120
120
  testing.assert_array_almost_equal(x, compare)
121
121
 
122
122
 
123
- def test_find_ice_in_clouds(obs_file, model_file):
123
+ def test_find_ice_in_clouds(obs_file, model_file) -> None:
124
124
  obs = ObservationManager(PRODUCT, str(obs_file))
125
125
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
126
126
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -128,26 +128,26 @@ def test_find_ice_in_clouds(obs_file, model_file):
128
128
  [
129
129
  [-1, 0, 2, 3],
130
130
  [-1, 1, 2, 3],
131
- ]
131
+ ],
132
132
  )
133
133
  iwc = np.array(
134
134
  [
135
135
  [-1, 0, 2, 31],
136
136
  [-1, 1, 200, 3],
137
- ]
137
+ ],
138
138
  )
139
139
  lwc = np.array(
140
140
  [
141
141
  [0, 1, 2, 3],
142
142
  [0, 1, 2, 3],
143
- ]
143
+ ],
144
144
  )
145
145
  expected = np.array([31 / 3 * 1000, 200 / 2 * 1000])
146
146
  x, _ = adv_pro.find_ice_in_clouds(cf_f, iwc, lwc)
147
147
  testing.assert_array_almost_equal(x, expected)
148
148
 
149
149
 
150
- def test_get_ice_indices(obs_file, model_file):
150
+ def test_get_ice_indices(obs_file, model_file) -> None:
151
151
  obs = ObservationManager(PRODUCT, str(obs_file))
152
152
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
153
153
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -155,19 +155,19 @@ def test_get_ice_indices(obs_file, model_file):
155
155
  [
156
156
  [-1, 0, 2, 3],
157
157
  [-1, 1, 2, 3],
158
- ]
158
+ ],
159
159
  )
160
160
  iwc = np.array(
161
161
  [
162
162
  [-1, 0, 2, 31],
163
163
  [-1, 1, 200, 3],
164
- ]
164
+ ],
165
165
  )
166
166
  lwc = np.array(
167
167
  [
168
168
  [0, 1, 2, 3],
169
169
  [0, 1, 2, 3],
170
- ]
170
+ ],
171
171
  )
172
172
  x = np.array([0, 1])
173
173
  y = np.array([3, 2])
@@ -176,7 +176,7 @@ def test_get_ice_indices(obs_file, model_file):
176
176
  testing.assert_array_almost_equal(result, expected)
177
177
 
178
178
 
179
- def test_iwc_variance(obs_file, model_file):
179
+ def test_iwc_variance(obs_file, model_file) -> None:
180
180
  obs = ObservationManager(PRODUCT, str(obs_file))
181
181
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
182
182
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -188,7 +188,7 @@ def test_iwc_variance(obs_file, model_file):
188
188
  assert len(x) == 3
189
189
 
190
190
 
191
- def test_calculate_variance_iwc(obs_file, model_file):
191
+ def test_calculate_variance_iwc(obs_file, model_file) -> None:
192
192
  obs = ObservationManager(PRODUCT, str(obs_file))
193
193
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
194
194
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -200,7 +200,7 @@ def test_calculate_variance_iwc(obs_file, model_file):
200
200
  testing.assert_array_almost_equal(x, compare)
201
201
 
202
202
 
203
- def test_calculate_wind_shear(obs_file, model_file):
203
+ def test_calculate_wind_shear(obs_file, model_file) -> None:
204
204
  obs = ObservationManager(PRODUCT, str(obs_file))
205
205
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
206
206
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -213,7 +213,7 @@ def test_calculate_wind_shear(obs_file, model_file):
213
213
  testing.assert_array_almost_equal(np.round(x, 2), compare)
214
214
 
215
215
 
216
- def test_calculate_iwc_distribution(obs_file, model_file):
216
+ def test_calculate_iwc_distribution(obs_file, model_file) -> None:
217
217
  obs = ObservationManager(PRODUCT, str(obs_file))
218
218
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
219
219
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -227,7 +227,7 @@ def test_calculate_iwc_distribution(obs_file, model_file):
227
227
  testing.assert_array_almost_equal(x, compare)
228
228
 
229
229
 
230
- def test_gamma_distribution(obs_file, model_file):
230
+ def test_gamma_distribution(obs_file, model_file) -> None:
231
231
  obs = ObservationManager(PRODUCT, str(obs_file))
232
232
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
233
233
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -248,7 +248,7 @@ def test_gamma_distribution(obs_file, model_file):
248
248
  testing.assert_array_almost_equal(x, compare)
249
249
 
250
250
 
251
- def test_get_observation_index(obs_file, model_file):
251
+ def test_get_observation_index(obs_file, model_file) -> None:
252
252
  obs = ObservationManager(PRODUCT, str(obs_file))
253
253
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
254
254
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)
@@ -262,12 +262,18 @@ def test_get_observation_index(obs_file, model_file):
262
262
  iwc_dist = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6])
263
263
  compare = iwc_dist > min_iwc
264
264
  x = adv_pro.get_observation_index(
265
- iwc_dist, tZT, tT, tZ, np.array([t]), temperature, z_sen
265
+ iwc_dist,
266
+ tZT,
267
+ tT,
268
+ tZ,
269
+ np.array([t]),
270
+ temperature,
271
+ z_sen,
266
272
  )
267
273
  testing.assert_array_almost_equal(x, compare)
268
274
 
269
275
 
270
- def test_filter_cirrus(obs_file, model_file):
276
+ def test_filter_cirrus(obs_file, model_file) -> None:
271
277
  obs = ObservationManager(PRODUCT, str(obs_file))
272
278
  model = ModelManager(str(model_file), MODEL, OUTPUT_FILE, PRODUCT)
273
279
  adv_pro = AdvanceProductMethods(model, str(model_file), obs)