anemoi-utils 0.4.5__py3-none-any.whl → 0.4.6__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.

Potentially problematic release.


This version of anemoi-utils might be problematic. Click here for more details.

anemoi/utils/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.4.5'
16
- __version_tuple__ = version_tuple = (0, 4, 5)
15
+ __version__ = version = '0.4.6'
16
+ __version_tuple__ = version_tuple = (0, 4, 6)
anemoi/utils/hindcasts.py CHANGED
@@ -27,16 +27,16 @@ class HindcastDatesTimes:
27
27
 
28
28
  self.reference_dates = reference_dates
29
29
 
30
- if isinstance(years, list):
31
- self.years = years
32
- else:
33
- self.years = range(1, years + 1)
30
+ assert isinstance(years, int), f"years must be an integer, got {years}"
31
+ assert years > 0, f"years must be greater than 0, got {years}"
32
+ self.years = years
34
33
 
35
34
  def __iter__(self):
36
35
  for reference_date in self.reference_dates:
37
- for year in self.years:
38
- if reference_date.month == 2 and reference_date.day == 29:
39
- date = datetime.datetime(reference_date.year - year, 2, 28)
40
- else:
41
- date = datetime.datetime(reference_date.year - year, reference_date.month, reference_date.day)
36
+ year, month, day = reference_date.year, reference_date.month, reference_date.day
37
+ if (month, day) == (2, 29):
38
+ day = 28
39
+
40
+ for i in range(1, self.years + 1):
41
+ date = datetime.datetime(year - i, month, day)
42
42
  yield (date, reference_date)
anemoi/utils/registry.py CHANGED
@@ -30,6 +30,9 @@ class Wrapper:
30
30
  return factory
31
31
 
32
32
 
33
+ _BY_KIND = {}
34
+
35
+
33
36
  class Registry:
34
37
  """A registry of factories"""
35
38
 
@@ -39,6 +42,11 @@ class Registry:
39
42
  self.registered = {}
40
43
  self.kind = package.split(".")[-1]
41
44
  self.key = key
45
+ _BY_KIND[self.kind] = self
46
+
47
+ @classmethod
48
+ def lookup_kind(cls, kind: str):
49
+ return _BY_KIND.get(kind)
42
50
 
43
51
  def register(self, name: str, factory: callable = None):
44
52
 
@@ -47,6 +55,9 @@ class Registry:
47
55
 
48
56
  self.registered[name] = factory
49
57
 
58
+ # def registered(self, name: str):
59
+ # return name in self.registered
60
+
50
61
  def _load(self, file):
51
62
  name, _ = os.path.splitext(file)
52
63
  try:
@@ -54,7 +65,9 @@ class Registry:
54
65
  except Exception:
55
66
  LOG.warning(f"Error loading filter '{self.package}.{name}'", exc_info=True)
56
67
 
57
- def lookup(self, name: str) -> callable:
68
+ def lookup(self, name: str, *, return_none=False) -> callable:
69
+
70
+ # print('✅✅✅✅✅✅✅✅✅✅✅✅✅', name, self.registered)
58
71
  if name in self.registered:
59
72
  return self.registered[name]
60
73
 
@@ -87,8 +100,12 @@ class Registry:
87
100
  self.registered[name] = entry_point.load()
88
101
 
89
102
  if name not in self.registered:
103
+ if return_none:
104
+ return None
105
+
90
106
  for e in self.registered:
91
107
  LOG.info(f"Registered: {e}")
108
+
92
109
  raise ValueError(f"Cannot load '{name}' from {self.package}")
93
110
 
94
111
  return self.registered[name]
@@ -97,8 +114,8 @@ class Registry:
97
114
  factory = self.lookup(name)
98
115
  return factory(*args, **kwargs)
99
116
 
100
- def __call__(self, name: str, *args, **kwargs):
101
- return self.create(name, *args, **kwargs)
117
+ # def __call__(self, name: str, *args, **kwargs):
118
+ # return self.create(name, *args, **kwargs)
102
119
 
103
120
  def from_config(self, config, *args, **kwargs):
104
121
  if isinstance(config, str):
@@ -125,5 +142,5 @@ class Registry:
125
142
  return self.create(key, *args, value, **kwargs)
126
143
 
127
144
  raise ValueError(
128
- f"Entry '{config}' must either be a string, a dictionray with a single entry, or a dictionary with a '{self.key}' key"
145
+ f"Entry '{config}' must either be a string, a dictionary with a single entry, or a dictionary with a '{self.key}' key"
129
146
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: anemoi-utils
3
- Version: 0.4.5
3
+ Version: 0.4.6
4
4
  Summary: A package to hold various functions to support training of ML models on ECMWF data.
5
5
  Author-email: "European Centre for Medium-Range Weather Forecasts (ECMWF)" <software.support@ecmwf.int>
6
6
  License: Apache License
@@ -1,6 +1,6 @@
1
1
  anemoi/utils/__init__.py,sha256=0u0eIdu5-H1frf6V4KHpNmlh_SS-bJnxjzIejlsLqdw,702
2
2
  anemoi/utils/__main__.py,sha256=5NW2A3OgTimB4ptwYThivIRSeCrvabMuvnr8mmnVx0E,715
3
- anemoi/utils/_version.py,sha256=XyejXnBNtqNdR37CiSnJ022K8vUHKAlzN9lbcpmmftA,411
3
+ anemoi/utils/_version.py,sha256=zpZoWJd6Ckmo0bRYgkjKcEXS2EIwkKGRgif5PN8gs6Y,411
4
4
  anemoi/utils/caching.py,sha256=0cznpvaaox14NSVi-Q3PqumfuGtXo0YNcEFwDPxvMZw,1948
5
5
  anemoi/utils/checkpoints.py,sha256=q8QqKlZ6qChjzEfq7KM1gVXuyqgsVRGIb4dJFtkGk58,7774
6
6
  anemoi/utils/cli.py,sha256=rmMP60VY3em99rQP6TCrKibMngWwVe5h_0GDcf16c5U,4117
@@ -8,10 +8,10 @@ anemoi/utils/compatibility.py,sha256=0_nIcbdQbNMrS6AkqrBgJGJlSJXW8R23ncaZaDwdJ4c
8
8
  anemoi/utils/config.py,sha256=Fpy4wzj3dahTwwO75Iet6zmQQFGmTvhXml6-EsTEvgk,9873
9
9
  anemoi/utils/dates.py,sha256=wwYD5_QI7EWY_jhpENNYtL5O7fjwYkzmqHkNoayvmrY,12452
10
10
  anemoi/utils/grib.py,sha256=zBICyOsYtR_9px1C5UDT6wL_D6kiIhUi_00kjFmas5c,3047
11
- anemoi/utils/hindcasts.py,sha256=OUOY2nDa3LBnzJ3ncgANzJDapouh82KgVyofDAu7K_Q,1426
11
+ anemoi/utils/hindcasts.py,sha256=TEYDmrZUajuhp_dfWeg6z5c6XfntE-mwugUQJyAgUco,1419
12
12
  anemoi/utils/humanize.py,sha256=tSQkiUHiDj3VYk-DeruHp9P79sJO1b0whsPBphqy9qA,16627
13
13
  anemoi/utils/provenance.py,sha256=SqOiNoY1y36Zec83Pjt7OhihbwxMyknscfmogHCuriA,10894
14
- anemoi/utils/registry.py,sha256=I1r7grsIEsqAoJ9LPxfWMj10EoMazxRb4d8FPWdHsqk,3903
14
+ anemoi/utils/registry.py,sha256=Iit_CfTGuoVffXkZA2A5mUXb4AdGIUX9TpnUqWT4HJ0,4291
15
15
  anemoi/utils/s3.py,sha256=UOEETko08hnIXeFy8u10eQbqpcape9d-L6IgsjFMe18,2473
16
16
  anemoi/utils/sanitise.py,sha256=MqEMLwVZ1jSemLDBoQXuJyXKIfyR0gzYi7DoITBcir8,2866
17
17
  anemoi/utils/sanitize.py,sha256=43ZKDcfVpeXSsJ9TFEc9aZnD6oe2cUh151XnDspM98M,462
@@ -24,9 +24,9 @@ anemoi/utils/mars/mars.yaml,sha256=R0dujp75lLA4wCWhPeOQnzJ45WZAYLT8gpx509cBFlc,6
24
24
  anemoi/utils/remote/__init__.py,sha256=nLoXHj0Jp3YrGSwb0xkGyeuquDolWiiSBtGPJJX8gbM,11481
25
25
  anemoi/utils/remote/s3.py,sha256=CNEYq8P7o7lSB1acUp_GPU8c-WrEa7Cduv3rGw4Kba0,11924
26
26
  anemoi/utils/remote/ssh.py,sha256=0Kj-W6U5pSK60pIiAiDUzqNPH7_dVnebrajWrew-Ye0,4546
27
- anemoi_utils-0.4.5.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
28
- anemoi_utils-0.4.5.dist-info/METADATA,sha256=aXZNFOuPiRupLvAWEINzyR16otaX3ycg69xqBh1ikuI,15222
29
- anemoi_utils-0.4.5.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
30
- anemoi_utils-0.4.5.dist-info/entry_points.txt,sha256=LENOkn88xzFQo-V59AKoA_F_cfYQTJYtrNTtf37YgHY,60
31
- anemoi_utils-0.4.5.dist-info/top_level.txt,sha256=DYn8VPs-fNwr7fNH9XIBqeXIwiYYd2E2k5-dUFFqUz0,7
32
- anemoi_utils-0.4.5.dist-info/RECORD,,
27
+ anemoi_utils-0.4.6.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
28
+ anemoi_utils-0.4.6.dist-info/METADATA,sha256=VkNVI8JM7Sqbllhp3afhI6CWZ6MD-X1YcMgDf7A6L40,15222
29
+ anemoi_utils-0.4.6.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
30
+ anemoi_utils-0.4.6.dist-info/entry_points.txt,sha256=LENOkn88xzFQo-V59AKoA_F_cfYQTJYtrNTtf37YgHY,60
31
+ anemoi_utils-0.4.6.dist-info/top_level.txt,sha256=DYn8VPs-fNwr7fNH9XIBqeXIwiYYd2E2k5-dUFFqUz0,7
32
+ anemoi_utils-0.4.6.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.5.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5