Skip to content

Commit c8a104d

Browse files
authored
HOUSEKEEPING: Small improvements (#160)
* deps: Add h5py as an extras as it is no longer a dependency * housekeeping: Add override typing decorator * deps: Updated pre-commit packages * housekeeping: Added more override decorators
1 parent 3b35f63 commit c8a104d

File tree

8 files changed

+97
-10
lines changed

8 files changed

+97
-10
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ repos:
1111
- id: mixed-line-ending
1212
- repo: https://github.com/astral-sh/ruff-pre-commit
1313
# Ruff version.
14-
rev: v0.15.0
14+
rev: v0.15.4
1515
hooks:
1616
# Run the linter.
1717
- id: ruff
@@ -20,7 +20,7 @@ repos:
2020
- id: ruff-format
2121
- repo: https://github.com/astral-sh/uv-pre-commit
2222
# uv version.
23-
rev: 0.10.0
23+
rev: 0.10.7
2424
hooks:
2525
- id: uv-lock
2626
- repo: local

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ dependencies = [
2626
"crick", # necessary for dask.percentile method
2727
"dask",
2828
"distributed",
29-
"h5netcdf",
29+
"h5netcdf[h5py]",
3030
"pydantic",
3131
"pyproj",
3232
"pyyaml",

src/rojak/atmosphere/jet_stream.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from abc import ABC, abstractmethod
2-
from typing import TYPE_CHECKING, ClassVar, assert_never
2+
from typing import TYPE_CHECKING, ClassVar, assert_never, override
33

44
import numpy as np
55
import scipy.ndimage as ndi
@@ -60,6 +60,7 @@ def _alpha_vel_field(self) -> xr.DataArray:
6060
* self._wind_speed.integrate(self._pressure_coord_name).rename("alpha_vel")
6161
) # pyright: ignore[reportReturnType]
6262

63+
@override
6364
def identify_jet_stream(self) -> "xr.DataArray":
6465
identified_jet_stream: xr.DataArray = self._alpha_vel_field() > self._ALPHA_VEL_THRESHOLD
6566
return (
@@ -170,6 +171,7 @@ def _local_maxima(self) -> xr.DataArray:
170171
kwargs={"threshold": self._MINIMUM_WIND_SPEED_THRESHOLD},
171172
)
172173

174+
@override
173175
def identify_jet_stream(self) -> "xr.DataArray":
174176
return (self._local_maxima() & (self._u_wind >= 0)).rename("jet_stream_schiemann")
175177

src/rojak/datalib/ecmwf/era5.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
import logging
16-
from typing import TYPE_CHECKING, ClassVar, Literal
16+
from typing import TYPE_CHECKING, ClassVar, Literal, override
1717

1818
import cdsapi
1919
from rich.progress import track
@@ -91,6 +91,7 @@ def __init__(
9191
self.request_dataset_name = reanalysis_dataset_names[dataset_name]
9292
self.cds_client: cdsapi.Client = cdsapi.Client()
9393

94+
@override
9495
def download_files(
9596
self,
9697
years: list[int],
@@ -103,6 +104,7 @@ def download_files(
103104
for date in track(dates):
104105
self._download_file(date, base_output_dir)
105106

107+
@override
106108
def _download_file(self, date: "Date", base_output_dir: "Path") -> None:
107109
this_request = self.request_body
108110
this_request["year"] = date.year
@@ -134,6 +136,7 @@ def __init__(self, on_pressure_level: "xr.Dataset") -> None:
134136
super().__init__()
135137
self._on_pressure_level = on_pressure_level
136138

139+
@override
137140
def to_clear_air_turbulence_data(self, domain: "SpatialDomain") -> CATData:
138141
logger.debug("Converting data to CATData")
139142
target_variables: list[DataVarSchema] = [

src/rojak/datalib/madis/amdar.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from collections.abc import Container, Hashable, Iterable
2020
from ftplib import FTP
2121
from pathlib import Path
22-
from typing import TYPE_CHECKING, Any, ClassVar
22+
from typing import TYPE_CHECKING, Any, ClassVar, override
2323

2424
import dask.array as da
2525
import dask.dataframe as dd
@@ -226,6 +226,7 @@ def drop_invalid_error_data(self, dataset: xr.Dataset) -> xr.Dataset:
226226
dataset = self.__mask_invalid_error_var(dataset, str(var))
227227
return dataset.dropna(self.dimension_name, subset=error_vars_present)
228228

229+
@override
229230
def apply_preprocessor(self, output_directory: Path) -> None:
230231
# Filters and exports data to parquet
231232
output_directory.mkdir(parents=True, exist_ok=True)
@@ -279,6 +280,7 @@ def __init__(self, file_pattern: str | None = None) -> None:
279280
else:
280281
self.file_pattern = file_pattern
281282

283+
@override
282284
def _download_file(self, date: Date, base_output_dir: Path) -> None:
283285
output_dir: Path = (base_output_dir / f"{date.year:02d}" / f"{date.month:02d}").resolve()
284286
output_dir.mkdir(parents=True, exist_ok=True)
@@ -293,6 +295,7 @@ def _download_file(self, date: Date, base_output_dir: Path) -> None:
293295
with target_file_path.open(mode="wb") as f_out:
294296
ftp.retrbinary(f"RETR {file}", f_out.write)
295297

298+
@override
296299
def download_files(
297300
self,
298301
years: list[int],
@@ -327,6 +330,7 @@ class AcarsAmdarRepository(AmdarDataRepository):
327330
def __init__(self, path_to_files: str | list) -> None:
328331
super().__init__(path_to_files, True)
329332

333+
@override
330334
def load(self) -> "dd.DataFrame":
331335
target_columns: list[str] | None = (
332336
list(AcarsAmdarRepository._MINIMAL_DATA_VARS) if self._use_min_turbulence_vars else None
@@ -342,20 +346,23 @@ def load(self) -> "dd.DataFrame":
342346

343347
return amdar_data
344348

349+
@override
345350
def _call_compute_closest_pressure_level(
346351
self,
347352
data_frame: "dd.DataFrame",
348353
pressure_levels: "np.ndarray[Any, np.dtype[np.float64]]",
349354
) -> "dd.Series":
350355
return self._compute_closest_pressure_level(data_frame, pressure_levels, "altitude")
351356

357+
@override
352358
def _instantiate_amdar_turbulence_data_class(
353359
self,
354360
data_frame: "dd.DataFrame",
355361
grid: "dgpd.GeoDataFrame",
356362
) -> "AmdarTurbulenceData":
357363
return AcarsAmdarTurbulenceData(data_frame, grid)
358364

365+
@override
359366
def _time_column_rename_mapping(self) -> dict[str, str]:
360367
return {"timeObs": "datetime"}
361368

@@ -364,9 +371,11 @@ class AcarsAmdarTurbulenceData(AmdarTurbulenceData):
364371
def __init__(self, data_frame: "dd.DataFrame", grid: "dgpd.GeoDataFrame") -> None:
365372
super().__init__(data_frame, grid)
366373

374+
@override
367375
def _minimum_altitude_qc(self, data_frame: "dd.DataFrame") -> "dd.DataFrame":
368376
return data_frame[data_frame["altitude"] >= self.MINIMUM_ALTITUDE]
369377

378+
@override
370379
def _drop_manoeuvre_data_qc(self, data_frame: "dd.DataFrame") -> "dd.DataFrame":
371380
# Attributes:
372381
# long_name: Aircraft roll angle flag

src/rojak/datalib/ukmo/amdar.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
from collections.abc import Iterable
16-
from typing import TYPE_CHECKING, Any, ClassVar
16+
from typing import TYPE_CHECKING, Any, ClassVar, override
1717

1818
import dask.dataframe as dd
1919
import numpy as np
@@ -111,20 +111,23 @@ def load(
111111

112112
return data.optimize()
113113

114+
@override
114115
def _call_compute_closest_pressure_level(
115116
self,
116117
data_frame: "dd.DataFrame",
117118
pressure_levels: "np.ndarray[Any, np.dtype[np.float64]]",
118119
) -> "dd.Series":
119120
return self._compute_closest_pressure_level(data_frame, pressure_levels, "altitude")
120121

122+
@override
121123
def _instantiate_amdar_turbulence_data_class(
122124
self,
123125
data_frame: "dd.DataFrame",
124126
grid: "dgpd.GeoDataFrame",
125127
) -> "AmdarTurbulenceData":
126128
return UkmoAmdarTurbulenceData(data_frame, grid)
127129

130+
@override
128131
def _time_column_rename_mapping(self) -> dict[str, str]:
129132
return {}
130133

@@ -133,9 +136,11 @@ class UkmoAmdarTurbulenceData(AmdarTurbulenceData):
133136
def __init__(self, data_frame: "dd.DataFrame", grid: "dgpd.GeoDataFrame") -> None:
134137
super().__init__(data_frame, grid)
135138

139+
@override
136140
def _minimum_altitude_qc(self, data_frame: "dd.DataFrame") -> "dd.DataFrame":
137141
return data_frame[data_frame["altitude"] >= self.MINIMUM_ALTITUDE]
138142

143+
@override
139144
def _drop_manoeuvre_data_qc(self, data_frame: "dd.DataFrame") -> "dd.DataFrame":
140145
# roll_angle is NA in entire month of Jan and May in 2024
141146
return data_frame

0 commit comments

Comments
 (0)