cloudnetpy-qc 1.21.0__py3-none-any.whl → 1.23.0__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_qc/quality.py CHANGED
@@ -437,13 +437,14 @@ class TestGlobalAttributes(Test):
437
437
  Product.MWR_SINGLE,
438
438
  Product.MWR_MULTI,
439
439
  Product.DOPPLER_LIDAR_WIND,
440
+ Product.EPSILON_LIDAR,
440
441
  )
441
442
 
442
443
  def _required_attrs(self, product: Product):
443
444
  attrs = set(self.REQUIRED_ATTRS)
444
445
  if product == Product.MWR_L1C:
445
446
  attrs.add("mwrpy_coefficients")
446
- if product in (Product.MWR_SINGLE, Product.MWR_MULTI):
447
+ if product in (Product.MWR_SINGLE, Product.MWR_MULTI, Product.EPSILON_LIDAR):
447
448
  attrs.add("source_file_uuids")
448
449
  if product != Product.MODEL:
449
450
  attrs.add(
@@ -796,6 +797,21 @@ class TestModelData(Test):
796
797
  self._add_error(f"{noun} {values} {verb} missing from variable '{key}'.")
797
798
 
798
799
 
800
+ class TestCoordinateVariables(Test):
801
+ name = "Coordinate variables"
802
+ description = "Test dimensions of coordinate variables are correct."
803
+
804
+ def run(self):
805
+ for key, variable in self.nc.variables.items():
806
+ if key in self.nc.dimensions and (
807
+ len(variable.dimensions) != 1 or key != variable.dimensions[0]
808
+ ):
809
+ received = "', '".join(variable.dimensions)
810
+ self._add_error(
811
+ f"Expected variable '{key}' to have dimensions '{key}' but received '{received}'"
812
+ )
813
+
814
+
799
815
  # ------------------------------#
800
816
  # ------ Error / Warning ------ #
801
817
  # ----------------------------- #
@@ -36,6 +36,7 @@ class Product(Enum):
36
36
  DRIZZLE = "drizzle"
37
37
  MWR_SINGLE = "mwr-single"
38
38
  MWR_MULTI = "mwr-multi"
39
+ EPSILON_LIDAR= "epsilon-lidar"
39
40
  # Level 3
40
41
  L3_CF = "l3-cf"
41
42
  L3_IWC = "l3-iwc"
@@ -72,6 +73,7 @@ LEVELS: dict[Product, Level] = {
72
73
  Product.DRIZZLE: "2",
73
74
  Product.MWR_SINGLE: "2",
74
75
  Product.MWR_MULTI: "2",
76
+ Product.EPSILON_LIDAR: "2",
75
77
  Product.L3_CF: "3",
76
78
  Product.L3_IWC: "3",
77
79
  Product.L3_LWC: "3",
@@ -890,6 +892,23 @@ VARIABLES = {
890
892
  dtype=Dtype.FLOAT,
891
893
  required=[Product.CPR],
892
894
  ),
895
+ # ----------------------------------------
896
+ # Required in Epsilon (lidar)
897
+ # ----------------------------------------
898
+ "epsilon": Variable(
899
+ long_name="Dissipation rate of turbulent kinetic energy",
900
+ units="m2 s-3",
901
+ required=[
902
+ Product.EPSILON_LIDAR,
903
+ ],
904
+ ),
905
+ "rolling_window_period": Variable(
906
+ long_name="Rolling window period",
907
+ units="s",
908
+ required=[
909
+ Product.EPSILON_LIDAR,
910
+ ],
911
+ ),
893
912
  # -------------------------
894
913
  # Required in several files
895
914
  # -------------------------
@@ -1659,6 +1678,16 @@ VARIABLES = {
1659
1678
  "polariser_bleed_through": Variable(
1660
1679
  long_name="Polariser bleed-through",
1661
1680
  ),
1681
+ "pulses_per_ray": Variable(
1682
+ long_name="Pulses per ray",
1683
+ units="1",
1684
+ dtype=Dtype.INT
1685
+ ),
1686
+ "ray_accumulation_time": Variable(
1687
+ long_name="Ray accumulation time",
1688
+ units="s",
1689
+ dtype=Dtype.FLOAT
1690
+ ),
1662
1691
  "lifted_index": Variable(
1663
1692
  long_name="Lifted index",
1664
1693
  ),
cloudnetpy_qc/version.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Cloudnetpy-QC version."""
2
2
 
3
3
  MAJOR = 1
4
- MINOR = 21
4
+ MINOR = 23
5
5
  PATCH = 0
6
6
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: cloudnetpy_qc
3
- Version: 1.21.0
3
+ Version: 1.23.0
4
4
  Summary: Quality control routines for CloudnetPy products
5
5
  Author-email: Finnish Meteorological Institute <actris-cloudnet@fmi.fi>
6
6
  License: MIT License
@@ -49,6 +49,7 @@ Requires-Dist: types-requests; extra == "test"
49
49
  Provides-Extra: dev
50
50
  Requires-Dist: pre-commit; extra == "dev"
51
51
  Requires-Dist: release-version; extra == "dev"
52
+ Dynamic: license-file
52
53
 
53
54
  # CloudnetPy-QC
54
55
 
@@ -135,6 +136,7 @@ print(json_object)
135
136
  | `TestBrightnessTemperature` | Test that brightness temperature data are valid. |
136
137
  | `TestCFConvention` | Test compliance with the CF metadata conventions. |
137
138
  | `TestComment` | Check that variables have expected comments. |
139
+ | `TestCoordinateVariables` | Test dimensions of coordinate variables are correct. |
138
140
  | `TestDataCoverage` | Test that file contains enough data. |
139
141
  | `TestDataModel` | Test netCDF data model. |
140
142
  | `TestDataTypes` | Check that variables have expected data types. |
@@ -1,15 +1,15 @@
1
1
  cloudnetpy_qc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  cloudnetpy_qc/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- cloudnetpy_qc/quality.py,sha256=ToBErPLERhh08ZBFE-7-tOpHAr23lMI71upCpP5ezQI,34679
3
+ cloudnetpy_qc/quality.py,sha256=b0V0t0wyKhkHqsRQYx_RaR7xxI2rSvwgmNJB5OZ9Zhs,35313
4
4
  cloudnetpy_qc/utils.py,sha256=ssRqu8Auz7YpfZ79mTKmms4DkP9_ExLthbIpQGNq4jc,3270
5
- cloudnetpy_qc/variables.py,sha256=Jg1H-4yrqzuE0YLuj6PJI1NKIzKbyCnPyUcFePTN9Qs,50055
6
- cloudnetpy_qc/version.py,sha256=rWrguHf8ML_3gjxW3MeDMxnaSjhpNs88CWM3QPUDymE,102
5
+ cloudnetpy_qc/variables.py,sha256=xDNjk2urxULN8cbTlOCDysgtaqt4tzVouBC0adyFDWc,50862
6
+ cloudnetpy_qc/version.py,sha256=vcC-7aXpO_rnscCrcXHPgds8PHw_3OpsbpHgneXb03M,102
7
7
  cloudnetpy_qc/data/area-type-table.xml,sha256=F3lzCQR5LjmsB7qhlBt3CpZRNAH3UZoYJs6fmkvmCCM,17203
8
8
  cloudnetpy_qc/data/cf-standard-name-table.xml,sha256=BO6fEXQB6SRDeyP0wb7nyv3koKflM1s-0dIlgNF0KAI,4374043
9
9
  cloudnetpy_qc/data/data_quality_config.ini,sha256=URRc93Du2_YFX6Q7GxMHptKIVl6kwxXw-kVyftmsEJk,1242
10
10
  cloudnetpy_qc/data/standardized-region-list.xml,sha256=gLRE2G7RQLD9hmvW5dTzyK7XPhORxWv2bfbrvAp5Uto,6426
11
- cloudnetpy_qc-1.21.0.dist-info/LICENSE,sha256=P0wszB7Cq2M390SKaqT4DGvECfwGOMdTTdxsWBpEUUc,1094
12
- cloudnetpy_qc-1.21.0.dist-info/METADATA,sha256=gzSIXetl6_bRksEOmUl3emxK9oq6FiYd7hhiJco570w,7820
13
- cloudnetpy_qc-1.21.0.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
14
- cloudnetpy_qc-1.21.0.dist-info/top_level.txt,sha256=shrf8A1KyrrnhbHocc4gHmTl38YY-DHflgf-gXiKnKs,14
15
- cloudnetpy_qc-1.21.0.dist-info/RECORD,,
11
+ cloudnetpy_qc-1.23.0.dist-info/licenses/LICENSE,sha256=P0wszB7Cq2M390SKaqT4DGvECfwGOMdTTdxsWBpEUUc,1094
12
+ cloudnetpy_qc-1.23.0.dist-info/METADATA,sha256=8MugHHN6x-0FbGMnvx_QLkxEpAttD3MeKtIFshGB8ZY,7964
13
+ cloudnetpy_qc-1.23.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
14
+ cloudnetpy_qc-1.23.0.dist-info/top_level.txt,sha256=shrf8A1KyrrnhbHocc4gHmTl38YY-DHflgf-gXiKnKs,14
15
+ cloudnetpy_qc-1.23.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.2)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5