cloudnetpy 1.65.4__tar.gz → 1.65.6__tar.gz

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 (121) hide show
  1. {cloudnetpy-1.65.4/cloudnetpy.egg-info → cloudnetpy-1.65.6}/PKG-INFO +1 -1
  2. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/hatpro.py +1 -1
  3. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/plotting/plotting.py +46 -32
  4. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/version.py +1 -1
  5. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6/cloudnetpy.egg-info}/PKG-INFO +1 -1
  6. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/LICENSE +0 -0
  7. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/MANIFEST.in +0 -0
  8. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/README.md +0 -0
  9. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/__init__.py +0 -0
  10. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/__init__.py +0 -0
  11. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/atmos.py +0 -0
  12. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/atmos_utils.py +0 -0
  13. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/categorize.py +0 -0
  14. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/classify.py +0 -0
  15. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/containers.py +0 -0
  16. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/disdrometer.py +0 -0
  17. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/droplet.py +0 -0
  18. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/falling.py +0 -0
  19. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/freezing.py +0 -0
  20. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/insects.py +0 -0
  21. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/lidar.py +0 -0
  22. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/melting.py +0 -0
  23. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/model.py +0 -0
  24. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/mwr.py +0 -0
  25. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/categorize/radar.py +0 -0
  26. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/cloudnetarray.py +0 -0
  27. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/concat_lib.py +0 -0
  28. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/constants.py +0 -0
  29. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/datasource.py +0 -0
  30. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/exceptions.py +0 -0
  31. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/__init__.py +0 -0
  32. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/basta.py +0 -0
  33. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/campbell_scientific.py +0 -0
  34. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/ceilo.py +0 -0
  35. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/ceilometer.py +0 -0
  36. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/cl61d.py +0 -0
  37. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
  38. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/copernicus.py +0 -0
  39. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/disdrometer/__init__.py +0 -0
  40. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/disdrometer/common.py +0 -0
  41. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/disdrometer/parsivel.py +0 -0
  42. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/disdrometer/thies.py +0 -0
  43. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/galileo.py +0 -0
  44. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/instruments.py +0 -0
  45. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/lufft.py +0 -0
  46. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/mira.py +0 -0
  47. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/mrr.py +0 -0
  48. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/nc_lidar.py +0 -0
  49. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/nc_radar.py +0 -0
  50. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/pollyxt.py +0 -0
  51. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/radiometrics.py +0 -0
  52. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/rpg.py +0 -0
  53. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/rpg_reader.py +0 -0
  54. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/toa5.py +0 -0
  55. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/vaisala.py +0 -0
  56. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/instruments/weather_station.py +0 -0
  57. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/metadata.py +0 -0
  58. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/__init__.py +0 -0
  59. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/file_handler.py +0 -0
  60. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/metadata.py +0 -0
  61. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
  62. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
  63. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
  64. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
  65. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
  66. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
  67. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
  68. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
  69. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
  70. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
  71. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
  72. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/products/tools.py +0 -0
  73. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
  74. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
  75. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
  76. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
  77. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
  78. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
  79. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
  80. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
  81. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
  82. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
  83. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
  84. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
  85. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
  86. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
  87. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
  88. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
  89. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
  90. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
  91. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
  92. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
  93. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
  94. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
  95. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
  96. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
  97. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/model_evaluation/utils.py +0 -0
  98. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/output.py +0 -0
  99. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/plotting/__init__.py +0 -0
  100. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/plotting/plot_meta.py +0 -0
  101. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/__init__.py +0 -0
  102. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/classification.py +0 -0
  103. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/der.py +0 -0
  104. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/drizzle.py +0 -0
  105. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/drizzle_error.py +0 -0
  106. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/drizzle_tools.py +0 -0
  107. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/ier.py +0 -0
  108. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/iwc.py +0 -0
  109. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/lwc.py +0 -0
  110. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/mie_lu_tables.nc +0 -0
  111. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/mwr_tools.py +0 -0
  112. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/products/product_tools.py +0 -0
  113. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/py.typed +0 -0
  114. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy/utils.py +0 -0
  115. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy.egg-info/SOURCES.txt +0 -0
  116. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy.egg-info/dependency_links.txt +0 -0
  117. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy.egg-info/requires.txt +0 -0
  118. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/cloudnetpy.egg-info/top_level.txt +0 -0
  119. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/docs/source/conf.py +0 -0
  120. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/pyproject.toml +0 -0
  121. {cloudnetpy-1.65.4 → cloudnetpy-1.65.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.65.4
3
+ Version: 1.65.6
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -56,7 +56,7 @@ def hatpro2l1c(
56
56
  instrument_config=site_meta,
57
57
  )
58
58
  except MissingInputData as err:
59
- raise HatproDataError from err
59
+ raise HatproDataError(str(err)) from err
60
60
 
61
61
  hatpro = HatproL1c(hatpro_raw, site_meta)
62
62
 
@@ -550,7 +550,7 @@ class Plot2D(Plot):
550
550
 
551
551
 
552
552
  class Plot1D(Plot):
553
- def plot(self, figure_data: FigureData) -> None:
553
+ def plot(self, figure_data: FigureData, hacky_freq_ind: int | None = None) -> None:
554
554
  units = self._convert_units()
555
555
  self._mark_gaps(figure_data)
556
556
  self._ax.plot(
@@ -561,7 +561,7 @@ class Plot1D(Plot):
561
561
  zorder=_get_zorder("data"),
562
562
  )
563
563
  if self._plot_meta.moving_average:
564
- self._plot_moving_average(figure_data)
564
+ self._plot_moving_average(figure_data, hacky_freq_ind)
565
565
  if self._plot_meta.zero_line:
566
566
  self._ax.axhline(0, color="black", alpha=0.5, label="_nolegend_")
567
567
  self._fill_between_data_gaps(figure_data)
@@ -594,7 +594,7 @@ class Plot1D(Plot):
594
594
  self._plot_flag_data(figure_data.time[flags], self._data_orig[flags])
595
595
  self._add_legend()
596
596
  self._show_frequency(figure_data, freq_ind)
597
- self.plot(figure_data)
597
+ self.plot(figure_data, freq_ind)
598
598
 
599
599
  def _show_frequency(self, figure_data: FigureData, freq_ind: int) -> None:
600
600
  if self.sub_plot.variable.name == "tb":
@@ -675,32 +675,47 @@ class Plot1D(Plot):
675
675
 
676
676
  return default_options
677
677
 
678
- def _plot_moving_average(self, figure_data: FigureData) -> None:
678
+ def _plot_moving_average(
679
+ self, figure_data: FigureData, hacky_freq_ind: int | None = None
680
+ ) -> None:
679
681
  time = figure_data.time.copy()
680
682
  data = self._data_orig.copy()
681
- good_values = ~ma.getmaskarray(data)
682
- data = data[good_values]
683
- time = time[good_values]
684
- if self.sub_plot.variable.name == "wind_direction":
685
- wind_speed = figure_data.file["wind_speed"][good_values]
686
- sma = self._calculate_average_wind_direction(
687
- wind_speed, data, time, window=15
688
- )
689
- else:
690
- sma = self._calculate_moving_average(data, time, window=5)
691
- gap_time = _get_max_gap_in_minutes(figure_data)
692
- gaps = self._find_time_gap_indices(time, max_gap_min=gap_time)
693
- if len(gaps) > 0:
694
- sma[gaps] = np.nan
695
- if len(sma) == len(time):
696
- self._ax.plot(
697
- time,
698
- sma,
699
- color="slateblue",
700
- lw=2,
701
- label="_nolegend_",
702
- zorder=_get_zorder("mean_curve"),
703
- )
683
+ flags = self._read_flagged_data(figure_data)
684
+ if hacky_freq_ind is not None:
685
+ flags = flags[:, hacky_freq_ind]
686
+ is_invalid = ma.getmaskarray(data)
687
+ if np.any(flags):
688
+ is_invalid |= flags
689
+
690
+ is_wind_direction = self.sub_plot.variable.name == "wind_direction"
691
+ if is_wind_direction:
692
+ data = np.stack([figure_data.file["wind_speed"], data])
693
+
694
+ block_ind = np.where(np.diff(is_invalid))[0] + 1
695
+ valid_time_blocks = np.split(time, block_ind)[is_invalid[0] :: 2]
696
+ valid_data_blocks = np.split(data, block_ind)[is_invalid[0] :: 2]
697
+
698
+ for time1, data1 in zip(valid_time_blocks, valid_data_blocks, strict=False):
699
+ if is_wind_direction:
700
+ sma = self._calculate_average_wind_direction(
701
+ data1[0], data1[1], time1, window=15
702
+ )
703
+ else:
704
+ sma = self._calculate_moving_average(data1, time1, window=5)
705
+ gap_time = _get_max_gap_in_minutes(figure_data)
706
+ gaps = self._find_time_gap_indices(time1, max_gap_min=gap_time) + 1
707
+
708
+ for time2, data2 in zip(
709
+ np.split(time1, gaps), np.split(sma, gaps), strict=False
710
+ ):
711
+ self._ax.plot(
712
+ time2,
713
+ data2,
714
+ color="slateblue",
715
+ lw=2,
716
+ label="_nolegend_",
717
+ zorder=_get_zorder("mean_curve"),
718
+ )
704
719
 
705
720
  @staticmethod
706
721
  def _get_line_width(time: ndarray) -> float:
@@ -736,12 +751,11 @@ class Plot1D(Plot):
736
751
  window_size = int(window / 60 / time_delta_hours)
737
752
  if window_size < 1:
738
753
  window_size = 1
739
- if (window_size % 2) != 0:
754
+ if window_size % 2 == 0:
740
755
  window_size += 1
741
- weights = np.repeat(1.0, window_size) / window_size
742
- sma = np.convolve(data, weights, "valid")
743
- edge = window_size // 2
744
- return np.pad(sma, (edge, edge - 1), mode="constant", constant_values=np.nan)
756
+ weights = np.repeat(1 / window_size, window_size)
757
+ padded_data = np.pad(data, window_size // 2, mode="edge")
758
+ return np.convolve(padded_data, weights, "valid")
745
759
 
746
760
  @classmethod
747
761
  def _calculate_average_wind_direction(
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
2
  MINOR = 65
3
- PATCH = 4
3
+ PATCH = 6
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.65.4
3
+ Version: 1.65.6
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
File without changes
File without changes
File without changes
File without changes
File without changes