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.
Files changed (35) hide show
  1. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/PKG-INFO +3 -2
  2. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/pyproject.toml +1 -1
  3. mlde_utils-0.2.4/src/mlde_utils/data/select_domain.py +100 -0
  4. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/shift_lon_break.py +3 -1
  5. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils.egg-info/PKG-INFO +3 -2
  6. mlde_utils-0.2.3/src/mlde_utils/data/select_domain.py +0 -67
  7. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/LICENSE +0 -0
  8. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/MANIFEST.in +0 -0
  9. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/README.md +0 -0
  10. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/setup.cfg +0 -0
  11. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/__init__.py +0 -0
  12. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/__init__.py +0 -0
  13. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/coarsen.py +0 -0
  14. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/constrain.py +0 -0
  15. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/diff.py +0 -0
  16. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/regrid.py +0 -0
  17. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/remapcon.py +0 -0
  18. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/resample.py +0 -0
  19. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/select_gcm_domain.py +0 -0
  20. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/split_by_year.py +0 -0
  21. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/sum.py +0 -0
  22. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/2.2km/uk/moose_grid.nc +0 -0
  23. {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
  24. {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
  25. {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
  26. {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
  27. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/60km/global/pr/moose_grid.nc +0 -0
  28. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/target_grids/60km/global/vorticity850/moose_grid.nc +0 -0
  29. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/data/vorticity.py +0 -0
  30. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/training/__init__.py +0 -0
  31. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/training/dataset.py +0 -0
  32. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils/transforms.py +0 -0
  33. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils.egg-info/SOURCES.txt +0 -0
  34. {mlde_utils-0.2.3 → mlde_utils-0.2.4}/src/mlde_utils.egg-info/dependency_links.txt +0 -0
  35. {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.2
1
+ Metadata-Version: 2.4
2
2
  Name: mlde_utils
3
- Version: 0.2.3
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mlde_utils"
7
- version = "0.2.3"
7
+ version = "0.2.4"
8
8
  authors = [
9
9
  { name="Henry Addison", email="henry.addison@bristol.ac.uk" },
10
10
  ]
@@ -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.coords[self.lon_name] = (ds.coords[self.lon_name] + 180) % 360 - 180
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.2
1
+ Metadata-Version: 2.4
2
2
  Name: mlde_utils
3
- Version: 0.2.3
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