|
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 not Version(_minimum_vn) <= _cfdm_version < Version(_maximum_vn): |
| 128 | + raise RuntimeError( |
| 129 | + "Bad cfdm version: cf requires " |
| 130 | + f"{_minimum_vn}<=cfdm<{_maximum_vn}. " |
| 131 | + f"Got {cfdm.__version__} at {cfdm.__file__}" |
| 132 | + ) |
| 133 | + |
| 134 | +__cf_version__ = cfdm.__cf_version__ |
| 135 | +__Conventions__ = f"CF-{__cf_version__}" |
118 | 136 |
|
119 | 137 | try:
|
120 | 138 | import netCDF4
|
121 | 139 | except ImportError as error1:
|
122 | 140 | raise ImportError(_error0 + str(error1))
|
| 141 | +else: |
| 142 | + _minimum_vn = "1.7.2" |
| 143 | + if Version(netCDF4.__version__) < Version(_minimum_vn): |
| 144 | + raise RuntimeError( |
| 145 | + f"Bad netCDF4 version: cf requires netCDF4>={_minimum_vn}. " |
| 146 | + f"Got {netCDF4.__version__} at {netCDF4.__file__}" |
| 147 | + ) |
123 | 148 |
|
124 | 149 | try:
|
125 | 150 | import numpy as np
|
126 | 151 | except ImportError as error1:
|
127 | 152 | raise ImportError(_error0 + str(error1))
|
| 153 | +else: |
| 154 | + _minimum_vn = "2.0.0" |
| 155 | + if not Version(_minimum_vn) < Version(np.__version__): |
| 156 | + raise ValueError( |
| 157 | + f"Bad numpy version: cf requires numpy>={_minimum_vn} " |
| 158 | + f"Got {np.__version__} at {np.__file__}" |
| 159 | + ) |
128 | 160 |
|
129 | 161 | try:
|
130 | 162 | import cftime
|
131 | 163 | except ImportError as error1:
|
132 | 164 | raise ImportError(_error0 + str(error1))
|
| 165 | +else: |
| 166 | + _minimum_vn = "1.6.4" |
| 167 | + if Version(cftime.__version__) < Version(_minimum_vn): |
| 168 | + raise RuntimeError( |
| 169 | + f"Bad cftime version: cf requires cftime>={_minimum_vn}. " |
| 170 | + f"Got {cftime.__version__} at {cftime.__file__}" |
| 171 | + ) |
133 | 172 |
|
134 | 173 | try:
|
135 | 174 | import cfunits
|
136 | 175 | except ImportError as error1:
|
137 | 176 | raise ImportError(_error0 + str(error1))
|
| 177 | +else: |
| 178 | + _minimum_vn = "3.3.7" |
| 179 | + if Version(cfunits.__version__) < Version(_minimum_vn): |
| 180 | + raise RuntimeError( |
| 181 | + f"Bad cfunits version: cf requires cfunits>={_minimum_vn}. " |
| 182 | + f"Got {cfunits.__version__} at {cfunits.__file__}" |
| 183 | + ) |
138 | 184 |
|
139 | 185 | try:
|
140 | 186 | import psutil
|
141 | 187 | except ImportError as error1:
|
142 | 188 | raise ImportError(_error0 + str(error1))
|
| 189 | +else: |
| 190 | + _minimum_vn = "0.6.0" |
| 191 | + if Version(psutil.__version__) < Version(_minimum_vn): |
| 192 | + raise RuntimeError( |
| 193 | + f"Bad psutil version: cf requires psutil>={_minimum_vn}. " |
| 194 | + f"Got {psutil.__version__} at {psutil.__file__}" |
| 195 | + ) |
143 | 196 |
|
144 | 197 | try:
|
145 | 198 | import dask
|
146 | 199 | except ImportError as error1:
|
147 | 200 | raise ImportError(_error0 + str(error1))
|
148 |
| - |
149 |
| -try: |
150 |
| - import packaging |
151 |
| -except ImportError as error1: |
152 |
| - raise ImportError(_error0 + str(error1)) |
| 201 | +else: |
| 202 | + _minimum_vn = "2024.6.1" |
| 203 | + _maximum_vn = "2024.7.1" |
| 204 | + if ( |
| 205 | + not Version(_minimum_vn) |
| 206 | + <= Version(dask.__version__) |
| 207 | + <= Version(_maximum_vn) |
| 208 | + ): |
| 209 | + raise ValueError( |
| 210 | + "Bad dask version: cf requires " |
| 211 | + f"{_minimum_vn}<=dask<={_maximum_vn}. " |
| 212 | + f"Got {dask.__version__} at {dask.__file__}" |
| 213 | + ) |
153 | 214 |
|
154 | 215 | try:
|
155 | 216 | import scipy
|
156 | 217 | except ImportError as error1:
|
157 | 218 | 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.7.2" |
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.4" |
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 = "2.0.0" |
193 |
| -if not Version(_minimum_vn) < Version(np.__version__): |
194 |
| - raise ValueError( |
195 |
| - "Bad numpy version: cfdm requires {_minimum_vn}<=numpy. " |
196 |
| - f"Got {Version(np.__version__)} at {np.__file__}" |
197 |
| - ) |
198 |
| - |
199 |
| -# Check the version of cfunits |
200 |
| -_minimum_vn = "3.3.7" |
201 |
| -if Version(cfunits.__version__) < Version(_minimum_vn): |
202 |
| - raise RuntimeError( |
203 |
| - f"Bad cfunits version: cf requires cfunits>={_minimum_vn}. " |
204 |
| - f"Got {cfunits.__version__} at {cfunits.__file__}" |
205 |
| - ) |
206 |
| - |
207 |
| -# Check the version of cfdm |
208 |
| -_minimum_vn = "1.12.0.0" |
209 |
| -_maximum_vn = "1.12.1.0" |
210 |
| -_cfdm_version = Version(cfdm.__version__) |
211 |
| -if not Version(_minimum_vn) <= _cfdm_version < Version(_maximum_vn): |
212 |
| - raise RuntimeError( |
213 |
| - f"Bad cfdm version: cf requires {_minimum_vn}<=cfdm<{_maximum_vn}. " |
214 |
| - f"Got {cfdm.__version__} at {cfdm.__file__}" |
215 |
| - ) |
216 |
| - |
217 |
| -# Check the version of dask |
218 |
| - |
219 |
| -_minimum_vn = "2024.6.1" |
220 |
| -_maximum_vn = "2024.7.1" |
221 |
| -if ( |
222 |
| - not Version(_minimum_vn) |
223 |
| - <= Version(dask.__version__) |
224 |
| - <= Version(_maximum_vn) |
225 |
| -): |
| 219 | +else: |
| 220 | + _minimum_vn = "1.10.0" |
| 221 | + if Version(scipy.__version__) < Version(_minimum_vn): |
| 222 | + raise RuntimeError( |
| 223 | + f"Bad scipy version: cf requires scipy>={_minimum_vn}. " |
| 224 | + f"Got {scipy.__version__} at {scipy.__file__}" |
| 225 | + ) |
| 226 | + |
| 227 | +_minimum_vn = "3.9.0" |
| 228 | +if Version(python_version()) < Version(_minimum_vn): |
226 | 229 | raise ValueError(
|
227 |
| - "Bad dask version: cf requires {_minimum_vn}<=dask<={_maximum_vn}. " |
228 |
| - f"Got {dask.__version__} at {dask.__file__}" |
229 |
| - ) |
230 |
| - |
231 |
| -# Check the version of Python |
232 |
| -_minimum_vn = "3.8.0" |
233 |
| -if Version(platform.python_version()) < Version(_minimum_vn): |
234 |
| - raise ValueError( |
235 |
| - f"Bad python version: cf requires python version {_minimum_vn} " |
236 |
| - f"or later. Got {platform.python_version()}" |
237 |
| - ) |
238 |
| - |
239 |
| -# Check the version of scipy |
240 |
| -_minimum_vn = "1.10.0" |
241 |
| -if Version(scipy.__version__) < Version(_minimum_vn): |
242 |
| - raise RuntimeError( |
243 |
| - f"Bad scipy version: cf requires scipy>={_minimum_vn}. " |
244 |
| - f"Got {scipy.__version__} at {scipy.__file__}" |
| 230 | + f"Bad python version: cf requires python>={_minimum_vn}. " |
| 231 | + f"Got {python_version()}" |
245 | 232 | )
|
246 | 233 |
|
247 | 234 | del _minimum_vn, _maximum_vn
|
|
0 commit comments