mlde-utils 0.2.3__tar.gz → 0.2.4__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.
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/PKG-INFO +3 -2
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/pyproject.toml +1 -1
- mlde_utils-0.2.4/src/mlde_utils/data/select_domain.py +100 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/shift_lon_break.py +3 -1
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils.egg-info/PKG-INFO +3 -2
- mlde_utils-0.2.3/src/mlde_utils/data/select_domain.py +0 -67
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/LICENSE +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/MANIFEST.in +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/README.md +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/setup.cfg +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/__init__.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/__init__.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/coarsen.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/constrain.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/diff.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/regrid.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/remapcon.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/resample.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/select_gcm_domain.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/split_by_year.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/sum.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/2.2km/uk/moose_grid.nc +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/2.2km-coarsened-27x/uk/moose_grid.nc +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/2.2km-coarsened-2x/uk/moose_grid.nc +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/2.2km-coarsened-4x/uk/moose_grid.nc +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/2.2km-coarsened-8x/uk/moose_grid.nc +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/60km/global/pr/moose_grid.nc +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/60km/global/vorticity850/moose_grid.nc +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/vorticity.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/training/__init__.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/training/dataset.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/transforms.py +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils.egg-info/SOURCES.txt +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils.egg-info/dependency_links.txt +0 -0
- {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: mlde_utils
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: A package for shared code between ML downscaling repos
|
|
5
5
|
Author-email: Henry Addison <henry.addison@bristol.ac.uk>
|
|
6
6
|
Project-URL: Homepage, https://github.com/henryaddison/mlde_utils
|
|
@@ -11,5 +11,6 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: >=3.7
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
+
Dynamic: license-file
|
|
14
15
|
|
|
15
16
|
# Util code for ML downscaling emulator
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import math
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
from mlde_utils import cp_model_rotated_pole, platecarree
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger(__name__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class SelectDomain:
|
|
12
|
+
|
|
13
|
+
DOMAIN_CENTRES_LON_LAT = {
|
|
14
|
+
"london": (-0.118092, 51.509865),
|
|
15
|
+
"birmingham": (-1.898575, 52.489471),
|
|
16
|
+
"glasgow": (-4.25763000, 55.86515000),
|
|
17
|
+
"aberdeen": (-2.09814000, 57.14369000),
|
|
18
|
+
"scotland": (-4.20264580, 56.49067120),
|
|
19
|
+
"dublin": (-6.267494, 53.344105),
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
DOMAIN_CENTRES_RP_LONG_LAT = {
|
|
23
|
+
domain_name: cp_model_rotated_pole.transform_point(
|
|
24
|
+
*lon_lat, src_crs=platecarree
|
|
25
|
+
)
|
|
26
|
+
for domain_name, lon_lat in DOMAIN_CENTRES_LON_LAT.items()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
def __init__(self, subdomain, grid="cpm", size=64) -> None:
|
|
30
|
+
self.subdomain = subdomain
|
|
31
|
+
self.grid = grid
|
|
32
|
+
self.size = size
|
|
33
|
+
|
|
34
|
+
def run(self, ds):
|
|
35
|
+
logger.info(f"Selecting subdomain {self.subdomain}")
|
|
36
|
+
if self.grid == "cpm":
|
|
37
|
+
centre_xy = self.DOMAIN_CENTRES_RP_LONG_LAT[self.subdomain]
|
|
38
|
+
query = dict(
|
|
39
|
+
grid_longitude=360.0 + centre_xy[0],
|
|
40
|
+
grid_latitude=centre_xy[1],
|
|
41
|
+
)
|
|
42
|
+
elif self.grid == "gcm":
|
|
43
|
+
centre_xy = self.DOMAIN_CENTRES_LON_LAT[self.subdomain]
|
|
44
|
+
query = dict(
|
|
45
|
+
longitude=centre_xy[0],
|
|
46
|
+
latitude=centre_xy[1],
|
|
47
|
+
)
|
|
48
|
+
else:
|
|
49
|
+
raise ValueError(f"Unknown grid type: {self.grid}")
|
|
50
|
+
|
|
51
|
+
centre_ds = ds.sel(query, method="nearest")
|
|
52
|
+
if self.grid == "cpm":
|
|
53
|
+
centre_long_idx = np.where(
|
|
54
|
+
ds.grid_longitude.values == centre_ds.grid_longitude.values
|
|
55
|
+
)[0].item()
|
|
56
|
+
centre_lat_idx = np.where(
|
|
57
|
+
ds.grid_latitude.values == centre_ds.grid_latitude.values
|
|
58
|
+
)[0].item()
|
|
59
|
+
elif self.grid == "gcm":
|
|
60
|
+
centre_long_idx = np.where(
|
|
61
|
+
ds.longitude.values == centre_ds.longitude.values
|
|
62
|
+
)[0].item()
|
|
63
|
+
centre_lat_idx = np.where(ds.latitude.values == centre_ds.latitude.values)[
|
|
64
|
+
0
|
|
65
|
+
].item()
|
|
66
|
+
else:
|
|
67
|
+
raise ValueError(f"Unknown grid type: {self.grid}")
|
|
68
|
+
|
|
69
|
+
radius = self.size - 1
|
|
70
|
+
left_length = math.floor(radius / 2.0)
|
|
71
|
+
right_length = math.ceil(radius / 2.0)
|
|
72
|
+
down_length = math.floor(radius / 2.0)
|
|
73
|
+
up_length = math.ceil(radius / 2.0)
|
|
74
|
+
|
|
75
|
+
if self.grid == "cpm":
|
|
76
|
+
ds = ds.sel(
|
|
77
|
+
grid_longitude=slice(
|
|
78
|
+
ds.grid_longitude[centre_long_idx - left_length].values,
|
|
79
|
+
ds.grid_longitude[centre_long_idx + right_length].values,
|
|
80
|
+
),
|
|
81
|
+
grid_latitude=slice(
|
|
82
|
+
ds.grid_latitude[centre_lat_idx - down_length].values,
|
|
83
|
+
ds.grid_latitude[centre_lat_idx + up_length].values,
|
|
84
|
+
),
|
|
85
|
+
)
|
|
86
|
+
elif self.grid == "gcm":
|
|
87
|
+
ds = ds.sel(
|
|
88
|
+
longitude=slice(
|
|
89
|
+
ds.longitude[centre_long_idx - left_length].values,
|
|
90
|
+
ds.longitude[centre_long_idx + right_length].values,
|
|
91
|
+
),
|
|
92
|
+
latitude=slice(
|
|
93
|
+
ds.latitude[centre_lat_idx - down_length].values,
|
|
94
|
+
ds.latitude[centre_lat_idx + up_length].values,
|
|
95
|
+
),
|
|
96
|
+
)
|
|
97
|
+
else:
|
|
98
|
+
raise ValueError(f"Unknown grid type: {self.grid}")
|
|
99
|
+
|
|
100
|
+
return ds
|
|
@@ -10,7 +10,9 @@ class ShiftLonBreak:
|
|
|
10
10
|
|
|
11
11
|
def run(self, ds):
|
|
12
12
|
orig_lon_attrs = ds[self.lon_name].attrs
|
|
13
|
-
ds
|
|
13
|
+
ds = ds.assign_coords(
|
|
14
|
+
{self.lon_name: (((ds.coords[self.lon_name] + 180) % 360) - 180)}
|
|
15
|
+
)
|
|
14
16
|
ds = ds.sortby(ds[self.lon_name])
|
|
15
17
|
ds[self.lon_name].attrs = orig_lon_attrs
|
|
16
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: mlde_utils
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: A package for shared code between ML downscaling repos
|
|
5
5
|
Author-email: Henry Addison <henry.addison@bristol.ac.uk>
|
|
6
6
|
Project-URL: Homepage, https://github.com/henryaddison/mlde_utils
|
|
@@ -11,5 +11,6 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: >=3.7
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
+
Dynamic: license-file
|
|
14
15
|
|
|
15
16
|
# Util code for ML downscaling emulator
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import math
|
|
3
|
-
|
|
4
|
-
import numpy as np
|
|
5
|
-
|
|
6
|
-
from mlde_utils import cp_model_rotated_pole, platecarree
|
|
7
|
-
|
|
8
|
-
logger = logging.getLogger(__name__)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class SelectDomain:
|
|
12
|
-
|
|
13
|
-
DOMAIN_CENTRES_LON_LAT = {
|
|
14
|
-
"london": (-0.118092, 51.509865),
|
|
15
|
-
"birmingham": (-1.898575, 52.489471),
|
|
16
|
-
"glasgow": (-4.25763000, 55.86515000),
|
|
17
|
-
"aberdeen": (-2.09814000, 57.14369000),
|
|
18
|
-
"scotland": (-4.20264580, 56.49067120),
|
|
19
|
-
"dublin": (-6.267494, 53.344105),
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
DOMAIN_CENTRES_RP_LONG_LAT = {
|
|
23
|
-
domain_name: cp_model_rotated_pole.transform_point(
|
|
24
|
-
*lon_lat, src_crs=platecarree
|
|
25
|
-
)
|
|
26
|
-
for domain_name, lon_lat in DOMAIN_CENTRES_LON_LAT.items()
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
def __init__(self, subdomain, size=64) -> None:
|
|
30
|
-
self.subdomain = subdomain
|
|
31
|
-
self.size = size
|
|
32
|
-
|
|
33
|
-
def run(self, ds):
|
|
34
|
-
logger.info(f"Selecting subdomain {self.subdomain}")
|
|
35
|
-
|
|
36
|
-
centre_rp_lon_lat = self.DOMAIN_CENTRES_RP_LONG_LAT[self.subdomain]
|
|
37
|
-
centre_ds = ds.sel(
|
|
38
|
-
grid_longitude=360.0 + centre_rp_lon_lat[0],
|
|
39
|
-
grid_latitude=centre_rp_lon_lat[1],
|
|
40
|
-
method="nearest",
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
centre_long_idx = np.where(
|
|
44
|
-
ds.grid_longitude.values == centre_ds.grid_longitude.values
|
|
45
|
-
)[0].item()
|
|
46
|
-
centre_lat_idx = np.where(
|
|
47
|
-
ds.grid_latitude.values == centre_ds.grid_latitude.values
|
|
48
|
-
)[0].item()
|
|
49
|
-
|
|
50
|
-
radius = self.size - 1
|
|
51
|
-
left_length = math.floor(radius / 2.0)
|
|
52
|
-
right_length = math.ceil(radius / 2.0)
|
|
53
|
-
down_length = math.floor(radius / 2.0)
|
|
54
|
-
up_length = math.ceil(radius / 2.0)
|
|
55
|
-
|
|
56
|
-
ds = ds.sel(
|
|
57
|
-
grid_longitude=slice(
|
|
58
|
-
ds.grid_longitude[centre_long_idx - left_length].values,
|
|
59
|
-
ds.grid_longitude[centre_long_idx + right_length].values,
|
|
60
|
-
),
|
|
61
|
-
grid_latitude=slice(
|
|
62
|
-
ds.grid_latitude[centre_lat_idx - down_length].values,
|
|
63
|
-
ds.grid_latitude[centre_lat_idx + up_length].values,
|
|
64
|
-
),
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
return ds
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/2.2km/uk/moose_grid.nc
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/60km/global/pr/moose_grid.nc
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|