|
80 | 80 |
|
81 | 81 | """
|
82 | 82 |
|
83 |
| -__Conventions__ = "CF-1.11" |
84 | 83 | __date__ = "2025-01-28"
|
85 | 84 | __version__ = "3.16.3"
|
86 | 85 |
|
|
95 | 94 | "packaging",
|
96 | 95 | "scipy",
|
97 | 96 | )
|
98 |
| - |
99 | 97 | x = ", ".join(_requires)
|
100 | 98 | _error0 = f"cf v{__version__} requires the modules {x}. "
|
101 | 99 |
|
| 100 | +import importlib.util |
| 101 | +from platform import python_version |
| 102 | + |
| 103 | +_found_esmpy = bool(importlib.util.find_spec("esmpy")) |
| 104 | + |
102 | 105 | try:
|
103 |
| - import cfdm |
| 106 | + import packaging |
| 107 | + from packaging.version import Version |
104 | 108 | except ImportError as error1:
|
105 | 109 | raise ImportError(_error0 + str(error1))
|
| 110 | +else: |
| 111 | + _minimum_vn = "20.0" |
| 112 | + if Version(packaging.__version__) < Version(_minimum_vn): |
| 113 | + raise RuntimeError( |
| 114 | + f"Bad packaging version: cf requires packaging>={_minimum_vn}. " |
| 115 | + f"Got {packaging.__version__} at {packaging.__file__}" |
| 116 | + ) |
106 | 117 |
|
107 |
| -__cf_version__ = cfdm.core.__cf_version__ |
108 |
| - |
109 |
| -from packaging.version import Version |
110 |
| -import importlib.util |
111 |
| -import platform |
112 |
| - |
113 |
| -# ESMF renamed its Python module to `esmpy` at ESMF version 8.4.0. Allow |
114 |
| -# either for now for backwards compatibility. |
115 |
| -_found_esmpy = bool( |
116 |
| - importlib.util.find_spec("esmpy") or importlib.util.find_spec("ESMF") |
117 |
| -) |
| 118 | +try: |
| 119 | + import cfdm |
| 120 | +except ImportError as error1: |
| 121 | + raise ImportError(_error0 + str(error1)) |
| 122 | +else: |
| 123 | + # Check the version of cfdm |
| 124 | + _minimum_vn = "1.12.0.0" |
| 125 | + _maximum_vn = "1.12.1.0" |
| 126 | + _cfdm_version = Version(cfdm.__version__) |
| 127 | + if ( |
| 128 | + _cfdm_version < Version(_minimum_vn) or |
| 129 | + _cfdm_version >= Version(_maximum_vn) |
| 130 | + ): |
| 131 | + raise RuntimeError( |
| 132 | + "Bad cfdm version: cf requires " |
| 133 | + f"{_minimum_vn}<=cfdm<{_maximum_vn}. " |
| 134 | + f"Got {cfdm.__version__} at {cfdm.__file__}" |
| 135 | + ) |
| 136 | + |
| 137 | +__cf_version__ = cfdm.__cf_version__ |
| 138 | +__Conventions__ = f"CF-{__cf_version__}" |
118 | 139 |
|
119 | 140 | try:
|
120 | 141 | import netCDF4
|
121 | 142 | except ImportError as error1:
|
122 | 143 | raise ImportError(_error0 + str(error1))
|
| 144 | +else: |
| 145 | + _minimum_vn = "1.7.2" |
| 146 | + if Version(netCDF4.__version__) < Version(_minimum_vn): |
| 147 | + raise RuntimeError( |
| 148 | + f"Bad netCDF4 version: cf requires netCDF4>={_minimum_vn}. " |
| 149 | + f"Got {netCDF4.__version__} at {netCDF4.__file__}" |
| 150 | + ) |
123 | 151 |
|
124 | 152 | try:
|
125 | 153 | import numpy as np
|
126 | 154 | except ImportError as error1:
|
127 | 155 | raise ImportError(_error0 + str(error1))
|
| 156 | +else: |
| 157 | + _minimum_vn = "2.0.0" |
| 158 | + if Version(np.__version__) < Version(_minimum_vn): |
| 159 | + raise ValueError( |
| 160 | + f"Bad numpy version: cf requires numpy>={_minimum_vn} " |
| 161 | + f"Got {np.__version__} at {np.__file__}" |
| 162 | + ) |
128 | 163 |
|
129 | 164 | try:
|
130 | 165 | import cftime
|
131 | 166 | except ImportError as error1:
|
132 | 167 | raise ImportError(_error0 + str(error1))
|
| 168 | +else: |
| 169 | + _minimum_vn = "1.6.4" |
| 170 | + if Version(cftime.__version__) < Version(_minimum_vn): |
| 171 | + raise RuntimeError( |
| 172 | + f"Bad cftime version: cf requires cftime>={_minimum_vn}. " |
| 173 | + f"Got {cftime.__version__} at {cftime.__file__}" |
| 174 | + ) |
133 | 175 |
|
134 | 176 | try:
|
135 | 177 | import cfunits
|
136 | 178 | except ImportError as error1:
|
137 | 179 | raise ImportError(_error0 + str(error1))
|
| 180 | +else: |
| 181 | + _minimum_vn = "3.3.7" |
| 182 | + if Version(cfunits.__version__) < Version(_minimum_vn): |
| 183 | + raise RuntimeError( |
| 184 | + f"Bad cfunits version: cf requires cfunits>={_minimum_vn}. " |
| 185 | + f"Got {cfunits.__version__} at {cfunits.__file__}" |
| 186 | + ) |
138 | 187 |
|
139 | 188 | try:
|
140 | 189 | import psutil
|
141 | 190 | except ImportError as error1:
|
142 | 191 | raise ImportError(_error0 + str(error1))
|
| 192 | +else: |
| 193 | + _minimum_vn = "0.6.0" |
| 194 | + if Version(psutil.__version__) < Version(_minimum_vn): |
| 195 | + raise RuntimeError( |
| 196 | + f"Bad psutil version: cf requires psutil>={_minimum_vn}. " |
| 197 | + f"Got {psutil.__version__} at {psutil.__file__}" |
| 198 | + ) |
143 | 199 |
|
144 | 200 | try:
|
145 | 201 | import dask
|
146 | 202 | except ImportError as error1:
|
147 | 203 | raise ImportError(_error0 + str(error1))
|
148 |
| - |
149 |
| -try: |
150 |
| - import packaging |
151 |
| -except ImportError as error1: |
152 |
| - raise ImportError(_error0 + str(error1)) |
| 204 | +else: |
| 205 | + _minimum_vn = "2024.6.1" |
| 206 | + _maximum_vn = "2024.7.1" |
| 207 | + if ( |
| 208 | + Version(dask.__version__) < Version(_minimum_vn) or |
| 209 | + Version(dask.__version__) > Version(_maximum_vn) |
| 210 | + ): |
| 211 | + raise ValueError( |
| 212 | + "Bad dask version: cf requires " |
| 213 | + f"{_minimum_vn}<=dask<={_maximum_vn}. " |
| 214 | + f"Got {dask.__version__} at {dask.__file__}" |
| 215 | + ) |
153 | 216 |
|
154 | 217 | try:
|
155 | 218 | import scipy
|
156 | 219 | except ImportError as error1:
|
157 | 220 | raise ImportError(_error0 + str(error1))
|
158 |
| - |
159 |
| -# Check the version of packaging |
160 |
| -_minimum_vn = "20.0" |
161 |
| -if Version(packaging.__version__) < Version(_minimum_vn): |
162 |
| - raise RuntimeError( |
163 |
| - f"Bad packaging version: cf requires packaging>={_minimum_vn}. " |
164 |
| - f"Got {packaging.__version__} at {packaging.__file__}" |
165 |
| - ) |
166 |
| - |
167 |
| -# Check the version of psutil |
168 |
| -_minimum_vn = "0.6.0" |
169 |
| -if Version(psutil.__version__) < Version(_minimum_vn): |
170 |
| - raise RuntimeError( |
171 |
| - f"Bad psutil version: cf requires psutil>={_minimum_vn}. " |
172 |
| - f"Got {psutil.__version__} at {psutil.__file__}" |
173 |
| - ) |
174 |
| - |
175 |
| -# Check the version of netCDF4 |
176 |
| -_minimum_vn = "1.6.5" |
177 |
| -if Version(netCDF4.__version__) < Version(_minimum_vn): |
178 |
| - raise RuntimeError( |
179 |
| - f"Bad netCDF4 version: cf requires netCDF4>={_minimum_vn}. " |
180 |
| - f"Got {netCDF4.__version__} at {netCDF4.__file__}" |
181 |
| - ) |
182 |
| - |
183 |
| -# Check the version of cftime |
184 |
| -_minimum_vn = "1.6.2" |
185 |
| -if Version(cftime.__version__) < Version(_minimum_vn): |
186 |
| - raise RuntimeError( |
187 |
| - f"Bad cftime version: cf requires cftime>={_minimum_vn}. " |
188 |
| - f"Got {cftime.__version__} at {cftime.__file__}" |
189 |
| - ) |
190 |
| - |
191 |
| -# Check the version of numpy |
192 |
| -_minimum_vn = "1.22" |
193 |
| -_maximum_vn = "2.0" |
194 |
| -if not Version(_minimum_vn) <= Version(np.__version__) < Version(_maximum_vn): |
195 |
| - raise ValueError( |
196 |
| - "Bad numpy version: cf requires _minimum_vn}<=numpy<{_maximum_vn}. " |
197 |
| - f"Got {np.__version__} at {np.__file__}" |
198 |
| - ) |
199 |
| - |
200 |
| -# Check the version of cfunits |
201 |
| -_minimum_vn = "3.3.7" |
202 |
| -if Version(cfunits.__version__) < Version(_minimum_vn): |
203 |
| - raise RuntimeError( |
204 |
| - f"Bad cfunits version: cf requires cfunits>={_minimum_vn}. " |
205 |
| - f"Got {cfunits.__version__} at {cfunits.__file__}" |
206 |
| - ) |
207 |
| - |
208 |
| -# Check the version of cfdm |
209 |
| -_minimum_vn = "1.12.0.0" |
210 |
| -_maximum_vn = "1.12.1.0" |
211 |
| -_cfdm_version = Version(cfdm.__version__) |
212 |
| -if not Version(_minimum_vn) <= _cfdm_version < Version(_maximum_vn): |
213 |
| - raise RuntimeError( |
214 |
| - f"Bad cfdm version: cf requires {_minimum_vn}<=cfdm<{_maximum_vn}. " |
215 |
| - f"Got {cfdm.__version__} at {cfdm.__file__}" |
216 |
| - ) |
217 |
| - |
218 |
| -# Check the version of dask |
219 |
| - |
220 |
| -_minimum_vn = "2024.6.1" |
221 |
| -_maximum_vn = "2024.7.1" |
222 |
| -if ( |
223 |
| - not Version(_minimum_vn) |
224 |
| - <= Version(dask.__version__) |
225 |
| - <= Version(_maximum_vn) |
226 |
| -): |
| 221 | +else: |
| 222 | + _minimum_vn = "1.10.0" |
| 223 | + if Version(scipy.__version__) < Version(_minimum_vn): |
| 224 | + raise RuntimeError( |
| 225 | + f"Bad scipy version: cf requires scipy>={_minimum_vn}. " |
| 226 | + f"Got {scipy.__version__} at {scipy.__file__}" |
| 227 | + ) |
| 228 | + |
| 229 | +_minimum_vn = "3.9.0" |
| 230 | +if Version(python_version()) < Version(_minimum_vn): |
227 | 231 | raise ValueError(
|
228 |
| - "Bad dask version: cf requires {_minimum_vn}<=dask<={_maximum_vn}. " |
229 |
| - f"Got {dask.__version__} at {dask.__file__}" |
230 |
| - ) |
231 |
| - |
232 |
| -# Check the version of Python |
233 |
| -_minimum_vn = "3.8.0" |
234 |
| -if Version(platform.python_version()) < Version(_minimum_vn): |
235 |
| - raise ValueError( |
236 |
| - f"Bad python version: cf requires python version {_minimum_vn} " |
237 |
| - f"or later. Got {platform.python_version()}" |
238 |
| - ) |
239 |
| - |
240 |
| -# Check the version of scipy |
241 |
| -_minimum_vn = "1.10.0" |
242 |
| -if Version(scipy.__version__) < Version(_minimum_vn): |
243 |
| - raise RuntimeError( |
244 |
| - f"Bad scipy version: cf requires scipy>={_minimum_vn}. " |
245 |
| - f"Got {scipy.__version__} at {scipy.__file__}" |
| 232 | + f"Bad python version: cf requires python>={_minimum_vn}. " |
| 233 | + f"Got {python_version()}" |
246 | 234 | )
|
247 | 235 |
|
248 | 236 | del _minimum_vn, _maximum_vn
|
|
0 commit comments