pycontrails 0.54.11__cp312-cp312-macosx_11_0_arm64.whl → 0.54.12__cp312-cp312-macosx_11_0_arm64.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 pycontrails might be problematic. Click here for more details.

pycontrails/_version.py CHANGED
@@ -1,7 +1,14 @@
1
1
  # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
3
 
4
- __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
4
+ __all__ = [
5
+ "__version__",
6
+ "__version_tuple__",
7
+ "version",
8
+ "version_tuple",
9
+ "__commit_id__",
10
+ "commit_id",
11
+ ]
5
12
 
6
13
  TYPE_CHECKING = False
7
14
  if TYPE_CHECKING:
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
9
16
  from typing import Union
10
17
 
11
18
  VERSION_TUPLE = Tuple[Union[int, str], ...]
19
+ COMMIT_ID = Union[str, None]
12
20
  else:
13
21
  VERSION_TUPLE = object
22
+ COMMIT_ID = object
14
23
 
15
24
  version: str
16
25
  __version__: str
17
26
  __version_tuple__: VERSION_TUPLE
18
27
  version_tuple: VERSION_TUPLE
28
+ commit_id: COMMIT_ID
29
+ __commit_id__: COMMIT_ID
19
30
 
20
- __version__ = version = '0.54.11'
21
- __version_tuple__ = version_tuple = (0, 54, 11)
31
+ __version__ = version = '0.54.12'
32
+ __version_tuple__ = version_tuple = (0, 54, 12)
33
+
34
+ __commit_id__ = commit_id = 'g5920a0c98'
@@ -155,6 +155,7 @@ class HRES(ECMWFAPI):
155
155
  - "scda" = short cut-off high resolution forecast, atmospheric fields,
156
156
  run at hours 06Z and 18Z
157
157
  - "enfo" = ensemble forecast, atmospheric fields, run at hours 00Z, 06Z, 12Z, and 18Z
158
+
158
159
  Defaults to "oper" (HRES).
159
160
  If the stream is incompatible with a provided forecast_time, a ``ValueError`` is raised.
160
161
  See the `ECMWF documentation <https://confluence.ecmwf.int/display/DAC/ECMWF+open+data%3A+real-time+forecasts+from+IFS+and+AIFS>`_
@@ -593,10 +593,10 @@ class GOES:
593
593
  da = da_dict.popitem()[1]
594
594
  elif "C02" in da_dict:
595
595
  da2 = da_dict.pop("C02")
596
- da1 = xr.concat(da_dict.values(), dim="band_id")
597
- da = _concat_c02(da1, da2)
596
+ da = xr.concat(da_dict.values(), dim="band_id", coords="different", compat="equals")
597
+ da = _concat_c02(da, da2)
598
598
  else:
599
- da = xr.concat(da_dict.values(), dim="band_id")
599
+ da = xr.concat(da_dict.values(), dim="band_id", coords="different", compat="equals")
600
600
 
601
601
  else:
602
602
  ds = _load_via_tempfile(data)
@@ -134,7 +134,7 @@ class ISSR(Model):
134
134
  if scale_humidity:
135
135
  humidity_scaling.eval(self.source, copy_source=False)
136
136
 
137
- self.source["issr"] = issr(
137
+ self.source["issr"] = issr( # type: ignore[type-var]
138
138
  air_temperature=self.source.data["air_temperature"],
139
139
  specific_humidity=self.source.data["specific_humidity"],
140
140
  air_pressure=self.source.data["air_pressure"],
pycontrails/models/pcr.py CHANGED
@@ -90,7 +90,7 @@ class PCR(Model):
90
90
  sac_model = sac.SAC(met=None, params=sac_params, copy_source=False)
91
91
  sac_model.eval(self.source)
92
92
 
93
- pcr_ = _pcr_from_issr_and_sac(self.source.data["issr"], self.source.data["sac"])
93
+ pcr_ = _pcr_from_issr_and_sac(self.source.data["issr"], self.source.data["sac"]) # type: ignore[type-var]
94
94
  self.source["pcr"] = pcr_
95
95
 
96
96
  return self.source
pycontrails/models/sac.py CHANGED
@@ -17,7 +17,7 @@ from pycontrails.core.models import Model, ModelParams
17
17
  from pycontrails.core.vector import GeoVectorDataset
18
18
  from pycontrails.models.humidity_scaling import HumidityScaling
19
19
  from pycontrails.physics import constants, thermo
20
- from pycontrails.utils.types import ArrayLike, ArrayScalarLike, apply_nan_mask_to_arraylike
20
+ from pycontrails.utils.types import ArrayLike, apply_nan_mask_to_arraylike
21
21
 
22
22
  # -----------------
23
23
  # Models as classes
@@ -133,8 +133,8 @@ class SAC(Model):
133
133
 
134
134
  G = slope_mixing_line(specific_humidity, air_pressure, engine_efficiency, ei_h2o, q_fuel)
135
135
  T_sat_liquid_ = T_sat_liquid(G)
136
- rh_crit_sac = rh_critical_sac(air_temperature, T_sat_liquid_, G)
137
- rh = thermo.rh(specific_humidity, air_temperature, air_pressure)
136
+ rh_crit_sac = rh_critical_sac(air_temperature, T_sat_liquid_, G) # type: ignore[type-var]
137
+ rh = thermo.rh(specific_humidity, air_temperature, air_pressure) # type: ignore[type-var]
138
138
  sac_ = sac(rh, rh_crit_sac)
139
139
 
140
140
  # Attaching some intermediate artifacts onto the source
@@ -239,23 +239,6 @@ def T_sat_liquid(G: ArrayLike) -> ArrayLike:
239
239
  return -46.46 - constants.absolute_zero + 9.43 * log_ + 0.72 * log_**2 # type: ignore[return-value]
240
240
 
241
241
 
242
- def _e_sat_liquid_prime(T: ArrayScalarLike) -> ArrayScalarLike:
243
- r"""Calculate derivative of :func:`thermo.e_sat_liquid`.
244
-
245
- Parameters
246
- ----------
247
- T : ArrayScalarLike
248
- Temperature, [:math:`K`].
249
-
250
- Returns
251
- -------
252
- ArrayScalarLike
253
- Derivative of :func:`thermo.e_sat_liquid`, [:math:``Pa \ K^{-1}`].
254
- """
255
- d_inside = 6096.9385 / (T**2) - 0.02711193 + 1.673952 * 1e-5 * 2 * T + 2.433502 / T
256
- return thermo.e_sat_liquid(T) * d_inside
257
-
258
-
259
242
  def T_sat_liquid_high_accuracy(
260
243
  G: ArrayLike,
261
244
  maxiter: int = 5,
@@ -293,7 +276,7 @@ def T_sat_liquid_high_accuracy(
293
276
 
294
277
  def func(T: ArrayLike) -> ArrayLike:
295
278
  """Equation (10) from Schumann 1996."""
296
- return _e_sat_liquid_prime(T) - G
279
+ return thermo.e_sat_liquid_prime(T) - G
297
280
 
298
281
  return scipy.optimize.newton(func, init_guess, maxiter=maxiter)
299
282
 
@@ -441,7 +424,7 @@ def T_critical_sac(
441
424
  return T - T_LM_filt + (e_L_of_T_LM_filt - U_filt * thermo.e_sat_liquid(T)) / G_filt
442
425
 
443
426
  def fprime(T: ArrayLike) -> ArrayLike:
444
- return 1.0 - U_filt * _e_sat_liquid_prime(T) / G_filt
427
+ return 1.0 - U_filt * thermo.e_sat_liquid_prime(T) / G_filt
445
428
 
446
429
  # This initial guess should be less than T_LM.
447
430
  # For relative_humidity away from 1, Newton's method converges quickly, and so
@@ -7,7 +7,7 @@ import numpy.typing as npt
7
7
  import xarray as xr
8
8
 
9
9
  from pycontrails.physics import constants, units
10
- from pycontrails.utils.types import ArrayLike
10
+ from pycontrails.utils.types import ArrayLike, ArrayOrFloat
11
11
 
12
12
  # ------------------
13
13
  # Spherical Geometry
@@ -373,8 +373,8 @@ def segment_length(
373
373
  def forward_azimuth(
374
374
  lons: npt.NDArray[np.floating],
375
375
  lats: npt.NDArray[np.floating],
376
- az: npt.NDArray[np.floating] | float,
377
- dist: npt.NDArray[np.floating] | float,
376
+ az: ArrayOrFloat,
377
+ dist: ArrayOrFloat,
378
378
  ) -> tuple[npt.NDArray[np.floating], npt.NDArray[np.floating]]:
379
379
  r"""Calculate coordinates along forward azimuth.
380
380
 
@@ -87,6 +87,42 @@ def p_vapor(q: ArrayScalarLike, p: ArrayScalarLike) -> ArrayScalarLike:
87
87
  return q * p * (constants.R_v / constants.R_d)
88
88
 
89
89
 
90
+ def water_vapor_partial_pressure_along_mixing_line(
91
+ specific_humidity: ArrayScalarLike,
92
+ air_pressure: ArrayScalarLike,
93
+ T_plume: ArrayScalarLike,
94
+ T_ambient: ArrayScalarLike,
95
+ G: ArrayScalarLike,
96
+ ) -> ArrayScalarLike:
97
+ """
98
+ Calculate water vapor partial pressure along mixing line.
99
+
100
+ Parameters
101
+ ----------
102
+ specific_humidity : ArrayScalarLike
103
+ Specific humidity at each waypoint, [:math:`kg_{H_{2}O} / kg_{air}`]
104
+ air_pressure : ArrayScalarLike
105
+ Pressure altitude at each waypoint, [:math:`Pa`]
106
+ T_plume : ArrayScalarLike
107
+ Plume temperature evolution along mixing line, [:math:`K`]
108
+ T_ambient : ArrayScalarLike
109
+ Ambient temperature for each waypoint, [:math:`K`]
110
+ G : ArrayScalarLike
111
+ Slope of the mixing line in a temperature-humidity diagram.
112
+
113
+ Returns
114
+ -------
115
+ ArrayScalarLike
116
+ Water vapor partial pressure along mixing line (p_mw), [:math:`Pa`]
117
+
118
+ References
119
+ ----------
120
+ Eq. (2) of Karcher et al. (2015).
121
+ """
122
+ p_wa = p_vapor(specific_humidity, air_pressure)
123
+ return p_wa + G * (T_plume - T_ambient)
124
+
125
+
90
126
  # -------------------
91
127
  # Saturation Pressure
92
128
  # -------------------
@@ -142,8 +178,8 @@ def e_sat_ice(T: ArrayScalarLike) -> ArrayScalarLike:
142
178
  )
143
179
 
144
180
 
145
- def e_sat_liquid(T: ArrayScalarLike) -> ArrayScalarLike:
146
- r"""Calculate saturation pressure of water vapor over liquid water.
181
+ def sonntag_e_sat_liquid(T: ArrayScalarLike) -> ArrayScalarLike:
182
+ """Calculate saturation pressure of water vapor over liquid water using Sonntag (1994).
147
183
 
148
184
  Parameters
149
185
  ----------
@@ -154,35 +190,99 @@ def e_sat_liquid(T: ArrayScalarLike) -> ArrayScalarLike:
154
190
  -------
155
191
  ArrayScalarLike
156
192
  Saturation pressure of water vapor over liquid water, [:math:`Pa`]
193
+ """
194
+ return 100.0 * np.exp( # type: ignore[return-value]
195
+ -6096.9385 / T + 16.635794 - 0.02711193 * T + 1.673952 * 1e-5 * T**2 + 2.433502 * np.log(T)
196
+ )
157
197
 
158
- References
198
+
199
+ def mk05_e_sat_liquid(T: ArrayScalarLike) -> ArrayScalarLike:
200
+ """Calculate saturation pressure of water vapor over liquid water using Murphy and Koop (2005).
201
+
202
+ Parameters
159
203
  ----------
160
- - :cite:`sonntag1994`
204
+ T : ArrayScalarLike
205
+ Temperature, [:math:`K`]
206
+
207
+ Returns
208
+ -------
209
+ ArrayScalarLike
210
+ Saturation pressure of water vapor over liquid water, [:math:`Pa`]
211
+
212
+ Notes
213
+ -----
214
+ Several formulations exist for the saturation vapor pressure over liquid water.
215
+
216
+ Buck (Buck Research Manual 1996)..
217
+
218
+ 6.1121 * np.exp((18.678 * (T - 273.15) / 234.5) * (T - 273.15) / (257.14 + (T - 273.15)))
219
+
220
+ Magnus Tetens (Murray, 1967)..
221
+
222
+ 6.1078 * np.exp(17.269388 * (T - 273.16) / (T - 35.86))
223
+
224
+ Guide to Meteorological Instruments and Methods of Observation (CIMO Guide) (WMO, 2008)..
225
+
226
+ 6.112 * np.exp(17.62 * (T - 273.15) / (243.12 + T - 273.15))
227
+
228
+ Sonntag (1994) (see :func:`sonntag_e_sat_liquid`) is used in older versions of CoCiP.
161
229
  """
162
- # Buck (Buck Research Manual 1996)
163
- # 6.1121 * np.exp((18.678 * (T - 273.15) / 234.5) * (T - 273.15) / (257.14 + (T - 273.15)))
164
230
 
165
- # Magnus Tetens (Murray, 1967)
166
- # 6.1078 * np.exp(17.269388 * (T - 273.16) / (T - 35.86))
231
+ return np.exp( # type: ignore[return-value]
232
+ 54.842763
233
+ - 6763.22 / T
234
+ - 4.21 * np.log(T)
235
+ + 0.000367 * T
236
+ + np.tanh(0.0415 * (T - 218.8))
237
+ * (53.878 - 1331.22 / T - 9.44523 * np.log(T) + 0.014025 * T)
238
+ )
167
239
 
168
- # Guide to Meteorological Instruments and Methods of Observation (CIMO Guide) (WMO, 2008)
169
- # 6.112 * np.exp(17.62 * (T - 273.15) / (243.12 + T - 273.15))
170
240
 
171
- # Sonntag (1994) is used in CoCiP
241
+ def sonntag_e_sat_liquid_prime(T: ArrayScalarLike) -> ArrayScalarLike:
242
+ """Calculate the derivative of :func:`sonntag_e_sat_liquid`.
172
243
 
173
- # FIXME: Presently, mypy is not aware that numpy ufuncs will return `xr.DataArray``
174
- # when xr.DataArray is passed in. This will get fixed at some point in the future
175
- # as `numpy` their typing patterns, after which the "type: ignore" comment can
176
- # get ripped out.
177
- # We could explicitly check for `xr.DataArray` then use `xr.apply_ufunc`, but
178
- # this only renders our code more boilerplate and less performant.
179
- # This comment is pasted several places in `pycontrails` -- they should all be
180
- # addressed at the same time.
181
- return 100.0 * np.exp( # type: ignore[return-value]
182
- -6096.9385 / T + 16.635794 - 0.02711193 * T + 1.673952 * 1e-5 * T**2 + 2.433502 * np.log(T)
244
+ Parameters
245
+ ----------
246
+ T : ArrayScalarLike
247
+ Temperature, [:math:`K`].
248
+
249
+ Returns
250
+ -------
251
+ ArrayScalarLike
252
+ Derivative of :func:`sonntag_e_sat_liquid`
253
+ """
254
+ d_inside = 6096.9385 / (T**2) - 0.02711193 + 1.673952 * 1e-5 * 2 * T + 2.433502 / T
255
+ return sonntag_e_sat_liquid(T) * d_inside
256
+
257
+
258
+ def mk05_e_sat_liquid_prime(T: ArrayScalarLike) -> ArrayScalarLike:
259
+ """Calculate the derivative of :func:`mk05_e_sat_liquid`.
260
+
261
+ Parameters
262
+ ----------
263
+ T : ArrayScalarLike
264
+ Temperature, [:math:`K`].
265
+
266
+ Returns
267
+ -------
268
+ ArrayScalarLike
269
+ Derivative of :func:`mk05_e_sat_liquid`
270
+ """
271
+ tanh_term = np.tanh(0.0415 * (T - 218.8))
272
+ return mk05_e_sat_liquid(T) * ( # type: ignore[return-value]
273
+ 6763.22 / T**2
274
+ - 4.21 / T
275
+ + 0.000367
276
+ + 0.0415 * (1 - tanh_term**2) * (53.878 - 1331.22 / T - 9.44523 * np.log(T) + 0.014025 * T)
277
+ + tanh_term * (1331.22 / T**2 - 9.44523 / T + 0.014025)
183
278
  )
184
279
 
185
280
 
281
+ # Set aliases. These could be swapped out or made configurable.
282
+ e_sat_liquid = mk05_e_sat_liquid
283
+ e_sat_liquid_prime = mk05_e_sat_liquid_prime
284
+
285
+
186
286
  @support_arraylike
187
287
  def _e_sat_piecewise(T: np.ndarray) -> np.ndarray:
188
288
  """Calculate `e_sat_liquid` when T is above freezing otherwise `e_sat_ice`.
@@ -14,20 +14,13 @@ import pandas as pd
14
14
  import xarray as xr
15
15
 
16
16
  #: Array like (np.ndarray, xr.DataArray)
17
- ArrayLike = TypeVar("ArrayLike", np.ndarray, xr.DataArray, xr.DataArray | np.ndarray)
17
+ ArrayLike = TypeVar("ArrayLike", np.ndarray, xr.DataArray)
18
18
 
19
19
  #: Array or Float (np.ndarray, float)
20
- ArrayOrFloat = TypeVar("ArrayOrFloat", npt.NDArray[np.floating], float)
20
+ ArrayOrFloat = TypeVar("ArrayOrFloat", np.ndarray, float)
21
21
 
22
22
  #: Array like input (np.ndarray, xr.DataArray, float)
23
- ArrayScalarLike = TypeVar(
24
- "ArrayScalarLike",
25
- np.ndarray,
26
- xr.DataArray,
27
- float,
28
- np.ndarray | float,
29
- xr.DataArray | np.ndarray,
30
- )
23
+ ArrayScalarLike = TypeVar("ArrayScalarLike", np.ndarray, xr.DataArray, float)
31
24
 
32
25
  #: Datetime like input (datetime, pd.Timestamp, np.datetime64)
33
26
  DatetimeLike = TypeVar("DatetimeLike", datetime, pd.Timestamp, np.datetime64, str)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycontrails
3
- Version: 0.54.11
3
+ Version: 0.54.12
4
4
  Summary: Python library for modeling aviation climate impacts
5
5
  Author-email: "Contrails.org" <py@contrails.org>
6
6
  License-Expression: Apache-2.0
@@ -1,10 +1,10 @@
1
- pycontrails-0.54.11.dist-info/RECORD,,
2
- pycontrails-0.54.11.dist-info/WHEEL,sha256=V1loQ6TpxABu1APUg0MoTRBOzSKT5xVc3skizX-ovCU,136
3
- pycontrails-0.54.11.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
4
- pycontrails-0.54.11.dist-info/METADATA,sha256=ji2DnLEhspmnd-F0I7pEKUpBkTmmz4hd8-03MkLXvu4,9037
5
- pycontrails-0.54.11.dist-info/licenses/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
6
- pycontrails-0.54.11.dist-info/licenses/NOTICE,sha256=fiBPdjYibMpDzf8hqcn7TvAQ-yeK10q_Nqq24DnskYg,1962
7
- pycontrails/_version.py,sha256=29bQvK7ihNGFDKGpvLyBBYr5UGAm2ZLeme6yi4GyFoM,515
1
+ pycontrails-0.54.12.dist-info/RECORD,,
2
+ pycontrails-0.54.12.dist-info/WHEEL,sha256=V1loQ6TpxABu1APUg0MoTRBOzSKT5xVc3skizX-ovCU,136
3
+ pycontrails-0.54.12.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
4
+ pycontrails-0.54.12.dist-info/METADATA,sha256=UaUC4O8LMv-iJ_7xbgDskuRMX_GjT6dTodRHeda75Zc,9037
5
+ pycontrails-0.54.12.dist-info/licenses/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
6
+ pycontrails-0.54.12.dist-info/licenses/NOTICE,sha256=fiBPdjYibMpDzf8hqcn7TvAQ-yeK10q_Nqq24DnskYg,1962
7
+ pycontrails/_version.py,sha256=UTr-0gLpdmG3tPVgS4kgxnF4fjydZpe2yN5_iKvXWmU,716
8
8
  pycontrails/__init__.py,sha256=9ypSB2fKZlKghTvSrjWo6OHm5qfASwiTIvlMew3Olu4,2037
9
9
  pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  pycontrails/core/vector.py,sha256=X_g8lzY6plJ6oeUHigSjt9qcPv34a3m1DeK1pqocrDw,73627
@@ -21,9 +21,9 @@ pycontrails/core/met.py,sha256=O9W6RaEwUsg7ZERR47Q-6fYjg13BzOZtcQdw92444xg,10398
21
21
  pycontrails/core/aircraft_performance.py,sha256=Kk_Rb61jDOWPmCQHwn2jR5vMPmB8b3aq1iTWfiUMj9U,28232
22
22
  pycontrails/core/airports.py,sha256=ubYo-WvxKPd_dUcADx6yew9Tqh1a4VJDgX7aFqLYwB8,6775
23
23
  pycontrails/core/met_var.py,sha256=lAbp3cko_rzMk_u0kq-F27sUXUxUKikUvCNycwp9ILY,12020
24
- pycontrails/core/rgi_cython.cpython-312-darwin.so,sha256=PRBpIMzFPal9KIEwpzcw-Np56ZYGoWkay0pefkzxL74,315088
24
+ pycontrails/core/rgi_cython.cpython-312-darwin.so,sha256=v_ht-5-BFREneDU0LmtlfiQjbRCDBkZFo6W-pe6q8sM,315040
25
25
  pycontrails/core/coordinates.py,sha256=0ySsHtqTon7GMbuwmmxMbI92j3ueMteJZh4xxNm5zto,5391
26
- pycontrails/datalib/goes.py,sha256=2FqpepeNb1w-nwhlDAOQZdWT7hJmpMwiJFrEkJ_9CAM,34286
26
+ pycontrails/datalib/goes.py,sha256=_TB32tGWxumASOEZUQ_PwGWz8QMZPTJf8pG4jbPR-WY,34358
27
27
  pycontrails/datalib/landsat.py,sha256=r6366rEF7fOA7mT5KySCPGJplgGE5LvBw5fMqk-U1oM,19697
28
28
  pycontrails/datalib/__init__.py,sha256=hW9NWdFPC3y_2vHMteQ7GgQdop3917MkDaf5ZhU2RBY,369
29
29
  pycontrails/datalib/sentinel.py,sha256=hYSxIlQnyJHqtHWlKn73HOK_1pm-_IbGebmkHnh4UcA,17172
@@ -31,7 +31,7 @@ pycontrails/datalib/_met_utils/metsource.py,sha256=B4Gd9gkfMMlXe-xc_xcNNZAJ0gOeR
31
31
  pycontrails/datalib/ecmwf/arco_era5.py,sha256=7HXQU5S02PzX9Ew2ZrDKSp0tDEG1eeVAvbP3decmm20,12437
32
32
  pycontrails/datalib/ecmwf/era5.py,sha256=4ULNdDlUN0kP6Tbp8D_-Bc12nAsLf0iNfZaDoj_AoZU,18952
33
33
  pycontrails/datalib/ecmwf/era5_model_level.py,sha256=AO7ePIGZtavx5nQSPYP4p07RNZeg3bbzmoZC7RUC4Gg,19354
34
- pycontrails/datalib/ecmwf/hres.py,sha256=6DZc8gKhnKMXHYHxppRpJ3So5ZpjfncAqX1u_Rhj3d4,29679
34
+ pycontrails/datalib/ecmwf/hres.py,sha256=isRQkybVZyKxVvqpQyGQsMtePFfv_qqAMBQ98wDLYtc,29680
35
35
  pycontrails/datalib/ecmwf/variables.py,sha256=lU3BNe265XVhCXvdMwZqfkWQwtsetZxVRLSfPqHFKAE,9913
36
36
  pycontrails/datalib/ecmwf/hres_model_level.py,sha256=CcxMKiFJyLvM9njmBVywAXJxyWE7atsgHXBubKJQqHM,17779
37
37
  pycontrails/datalib/ecmwf/__init__.py,sha256=wdfhplEaW2UKTItIoshTtVEjbPyfDYoprTJNxbKZuvA,2021
@@ -54,18 +54,18 @@ pycontrails/ext/empirical_grid.py,sha256=FPNQA0x4nVwBXFlbs3DgIapSrXFYhoc8b8IX0M4
54
54
  pycontrails/ext/bada.py,sha256=YlQq4nnFyWza1Am2e2ZucpaICHDuUFRTrtVzIKMzf9s,1091
55
55
  pycontrails/utils/iteration.py,sha256=q_vb39VjxRr4hqTyPYko3gK4sboJOJf_Evq6m_2DL-g,319
56
56
  pycontrails/utils/__init__.py,sha256=Gt_57sBgfliFSxx9sDpuchykFDxmM11Wg9xAeSqPcnI,32
57
- pycontrails/utils/types.py,sha256=dN2oYVNNbekqvM89Lfs0FmmhavRQGC7NgGhi_7m6UBU,4984
57
+ pycontrails/utils/types.py,sha256=1AaY1x_qGlYAl08xg6PS0MPKm3OZwFBM7xLI_nHK7EY,4869
58
58
  pycontrails/utils/temp.py,sha256=lGU0b_R8ze4yKlsOusHIIBaoNFBrmrB3vBjgHRlfcXk,1109
59
59
  pycontrails/utils/json.py,sha256=oTiO8xh603esfBGaGVmA5eUzR0NhAqNpQCegMMgnSbg,5896
60
60
  pycontrails/utils/dependencies.py,sha256=ATP45xYdUbIyGFzgbOe5SbokMytvB84TcexUEFnEUZE,2559
61
61
  pycontrails/models/pcc.py,sha256=0Qdl4u8PmUEpNYd398glTChkbTwsh83wYPt0Bmi8qd8,11068
62
62
  pycontrails/models/tau_cirrus.py,sha256=2Z4egt-QFprkyITRgtarA5alOTTQRQbjzgmSqE49_1g,5778
63
63
  pycontrails/models/__init__.py,sha256=dQTOLQb7RdUdUwslt5se__5y_ymbInBexQmNrmAeOdE,33
64
- pycontrails/models/issr.py,sha256=AYLYLHxtG8je5UG6x1zLV0ul89MJPqe5Xk0oWIyZ7b0,7378
65
- pycontrails/models/sac.py,sha256=lV1Or0AaLxuS1Zo5V8h5c1fkSKC-hKEgiFm7bmmusWw,15946
64
+ pycontrails/models/issr.py,sha256=_qIKDgO0Owxeb0Q4WJlxcn1FJEvF3QDU-cqh2fpDsBo,7404
65
+ pycontrails/models/sac.py,sha256=8Vx5wg4-Kb8l4GK67wp7VNVpdFM4Wyux1xKuNrjZ_IQ,15516
66
66
  pycontrails/models/accf.py,sha256=_tunWpw1sYW8ES8RvpdhNahXwaf4LwdHMEdXhv7-cCI,13566
67
67
  pycontrails/models/dry_advection.py,sha256=8vkHesYx3rM858LrIpXCZ9xQ6GmL3tZeOhj5MJh42Q0,20483
68
- pycontrails/models/pcr.py,sha256=ZzbEuTOuDdUmmL5T3Wk3HL-O8XzX3HMnn98WcPbASaU,5348
68
+ pycontrails/models/pcr.py,sha256=Xde0aF8cMV9jTQ_uI2UvdHSLqotVUgPutb1Wgq7LtfY,5374
69
69
  pycontrails/models/emissions/__init__.py,sha256=CZB2zIkLUI3NGNmq2ddvRYjEtiboY6PWJjiEiXj_zII,478
70
70
  pycontrails/models/emissions/ffm2.py,sha256=mAvBHnp-p3hIn2fjKGq50eaMHi0jcb5hA5uXbJGeE9I,12068
71
71
  pycontrails/models/emissions/emissions.py,sha256=qt689n4MuWw4XZ0NneBTNR2RqVG3XRYafgkkdSc1yEw,47757
@@ -103,11 +103,11 @@ pycontrails/models/ps_model/static/ps-synonym-list-20250328.csv,sha256=phtrf0m-U
103
103
  pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=l4vBPrOKCJDz5Y1uMjmOGVyUcSWgfZtFWbjW968OPz8,5875
104
104
  pycontrails/models/cocipgrid/__init__.py,sha256=ar6bF_8Pusbb-myujz_q5ntFylQTNH8yiM8fxP7Zk30,262
105
105
  pycontrails/models/cocipgrid/cocip_grid.py,sha256=OTltSP9wWNEZbi0Pcr19sDeBlbRWssmJy085X5TZ-lo,91401
106
- pycontrails/physics/geo.py,sha256=5THIXgpaHBQdSYWLgtK4mV_8e1hWW9XeTsSHOShFMeA,36323
106
+ pycontrails/physics/geo.py,sha256=ITK23l1A2lzjNPTFC8ZKyQH59I5Cy_TvuvM_gbALo94,36297
107
107
  pycontrails/physics/units.py,sha256=p-6PzFLpVCMpvmfrhXVh3Hs-nMJw9Y1x-hvgnL9Lo9c,12281
108
108
  pycontrails/physics/constants.py,sha256=xWy7OkDOJNM6umq5dYiuzwG0aTEl5aECLxEpg3Z2SBQ,3202
109
109
  pycontrails/physics/__init__.py,sha256=_1eWbEy6evEWdfJCEkwDiSdpiDNzNWEPVqaPekHyhwU,44
110
- pycontrails/physics/thermo.py,sha256=sWGpKa12daSpqZYNgyXd8Ii5nfA_1Mm5mMbnM5GsW-E,12787
110
+ pycontrails/physics/thermo.py,sha256=v7-66PE31SJXz45MXAB9Iq9XfPg1Sn5FpOsTngLaDDI,15406
111
111
  pycontrails/physics/jet.py,sha256=Je1d3vgbBEaVIAL1WZ3C-4p2f9fy9dWOjP5vFVsGGh8,30358
112
112
  pycontrails/physics/static/iata-cargo-load-factors-20250221.csv,sha256=ixsnQk1DyGxHMo0pDy4aOoQIwgOyrGfhMRPumEwPMBc,3841
113
113
  pycontrails/physics/static/iata-passenger-load-factors-20250221.csv,sha256=Q2olRIqUpbOaavvM5ikG8m1v1YQAN3KLNHeFDPvM53Q,3835