pycontrails 0.54.11__cp313-cp313-win_amd64.whl → 0.54.12__cp313-cp313-win_amd64.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,5 +1,5 @@
1
1
  pycontrails/__init__.py,sha256=mKNmGUS5wW1n1PukeaOkmLwQVN24i1__mk0odjBzwEE,2107
2
- pycontrails/_version.py,sha256=3ZYGWQZfQ5wgpP3lg8ortMs3pMchQHAI8UBrkGV34P8,536
2
+ pycontrails/_version.py,sha256=kVYjdmRwKY-GlxrcXrYCMoYr9_qqWiV4n3nWPvp0EcI,750
3
3
  pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  pycontrails/core/__init__.py,sha256=kOAehIZBbvksSW3MuU2DfzsyeE4PaFnOTpYMeq2ZDPE,886
5
5
  pycontrails/core/aircraft_performance.py,sha256=dasanaqfm5eP9XUDhgoKGj-eQHTWwMZ_mN6_ZdFulT0,28911
@@ -15,10 +15,10 @@ pycontrails/core/met.py,sha256=NBboBTRKNt5WFSnKUdm2R_9N68EQTYii4P5A_hs79YQ,10689
15
15
  pycontrails/core/met_var.py,sha256=bFpBFpQnN6osVAuxNNhG6vG_NMThEIhDcL2B9VpXgww,12407
16
16
  pycontrails/core/models.py,sha256=MRDNYVr8WMTF5EJrwZ8zxPHKKMcU09apBcqycimCWwk,45236
17
17
  pycontrails/core/polygon.py,sha256=3_vYmlQoP3x3lmgwFyqQVgl9ziAQ5e160MCm2fwFou0,18619
18
- pycontrails/core/rgi_cython.cp313-win_amd64.pyd,sha256=jCH170ye57FBBIKYsBS5yiXTexObCMiqOn6VeQDmUoU,242688
18
+ pycontrails/core/rgi_cython.cp313-win_amd64.pyd,sha256=xHsLtqHIrAoT07rHxHd_CLZhjX42BZzUAf82_Nl7thw,242688
19
19
  pycontrails/core/vector.py,sha256=n9b_HxQSWOUbxvut7mNaK523JlISi3-TLd5YwrmeOwM,75883
20
20
  pycontrails/datalib/__init__.py,sha256=Q2RrnjwtFzfsmJ2tEojDCzDMkd8R0MYw4mQz3YwUsqI,381
21
- pycontrails/datalib/goes.py,sha256=llpiUakz2Jo9B86rafS6yrBIDn53mqWdTojplZdp3AU,35249
21
+ pycontrails/datalib/goes.py,sha256=HTjnh147GZQfYX7R0zGVddwMuCHZQJp4cWqthGLETHY,35321
22
22
  pycontrails/datalib/landsat.py,sha256=YrDpngF5HtvWFVwxN0FLFxCfZIEmeBMiifdkbH7fQTk,20263
23
23
  pycontrails/datalib/sentinel.py,sha256=ukzdSeHKC1UBWEYzehS2LqtKoCpKpaPobLfbZDGy6KU,17679
24
24
  pycontrails/datalib/_leo_utils/search.py,sha256=8JzT56ps3SH1W-5rwL8BWuxLLljwxa_5fjLAuZdL_Vg,8937
@@ -30,7 +30,7 @@ pycontrails/datalib/ecmwf/arco_era5.py,sha256=PojAfT0N12SLcgiecZtHiN96sbRWwFx3PT
30
30
  pycontrails/datalib/ecmwf/common.py,sha256=6fcZC_-3FvWJ3vtlZX89PiiS7-DSQhAOgxrLjwU4iW4,4138
31
31
  pycontrails/datalib/ecmwf/era5.py,sha256=TbZlOqn3fPmfvCUR1XrVBWxNgIBpSXgRx0S4M49TSeY,19506
32
32
  pycontrails/datalib/ecmwf/era5_model_level.py,sha256=NVquyG_3SzdmfoQl25Wvp4oB_pOe7K_AQOfNv7no14E,19844
33
- pycontrails/datalib/ecmwf/hres.py,sha256=JLLxv0O8UD8STT9gnlGPkjxAMdhAXzMV1O8bnmLEs9k,30482
33
+ pycontrails/datalib/ecmwf/hres.py,sha256=3RHmikpMj0BXHyD6m6iqz56x7R8zN0METezISG_sNic,30484
34
34
  pycontrails/datalib/ecmwf/hres_model_level.py,sha256=EfKbCLyib2aMfeeTFuop4dutB7FiVFhX7UWW_hKtESE,18245
35
35
  pycontrails/datalib/ecmwf/ifs.py,sha256=a5QmXuihBNGx1eNN7EJGjR5dL9dO142nqkDSkPYGGlc,11048
36
36
  pycontrails/datalib/ecmwf/model_levels.py,sha256=noLSx45AHZ0rFPiUh3aK3iaEueHgsg6mG_AplHqHeU8,17431
@@ -49,10 +49,10 @@ pycontrails/ext/synthetic_flight.py,sha256=dEWm9vrg6SAWieh6GLAE0m1orTrApav8HHP42
49
49
  pycontrails/models/__init__.py,sha256=TKhrXe1Pu1-mV1gctx8cUAMrVxCCAtBkbZi9olfWq8s,34
50
50
  pycontrails/models/accf.py,sha256=rbEn6oTqXsgDPA3Ky0y-bADHWTxGXixa8OwpHH_pXag,13991
51
51
  pycontrails/models/dry_advection.py,sha256=4oOCMhUkmHJiQDdkLJGoODw0ebE4avoMpMDoF-6L59M,21085
52
- pycontrails/models/issr.py,sha256=J6mh4pze31XpD2_zD9ujzYPXsZFrmSwNcRORCcLoOVI,7588
52
+ pycontrails/models/issr.py,sha256=1pqijM2ecEHhmclSRodyZNnj1f-rCn2H_d44SQYo25I,7614
53
53
  pycontrails/models/pcc.py,sha256=7k8kICqDeZ99O2n2Zpnu7EFNGjEpPka_9cu9nrmP44s,11394
54
- pycontrails/models/pcr.py,sha256=G_0yR5PsCMeJBP6tZFi3M7A6Wcq8s71UvosdA7ozUkI,5502
55
- pycontrails/models/sac.py,sha256=LhEwexJZnkxitj-x5eNVSCDGdkoCdj8Zh_I0WB8FWOY,16405
54
+ pycontrails/models/pcr.py,sha256=YI7kd7BRdkHt970LCg0DhAOj-Bfukw0jclfvXGNo1jE,5528
55
+ pycontrails/models/sac.py,sha256=5DZWCkHtJXpifWc0ltzecdPLVr1XgjctRuyn3w4zcQc,15958
56
56
  pycontrails/models/tau_cirrus.py,sha256=6hVeOahKX2MV8NNED7f5yej_2-z3ENPuTl3gjpKxzzI,5961
57
57
  pycontrails/models/apcemm/__init__.py,sha256=dDsRW3V6jjzKDd43Yoyc74m_Om1fccvftZgp3OFdAYE,183
58
58
  pycontrails/models/apcemm/apcemm.py,sha256=tbG57Vro7_vXwqE0YpXrimPTtvAXsurti2eBAVWGe-Y,40958
@@ -93,9 +93,9 @@ pycontrails/models/ps_model/static/ps-aircraft-params-20250328.csv,sha256=TKeDak
93
93
  pycontrails/models/ps_model/static/ps-synonym-list-20250328.csv,sha256=piFhytYtGMMF8bL64GKQausLiGUGQi30KBegknzjecE,1152
94
94
  pycontrails/physics/__init__.py,sha256=AScCMSMSZjKxfL6mssdSLwcja1ml7MzREThQp5PLr9U,45
95
95
  pycontrails/physics/constants.py,sha256=_MVuhk6GxxZhj5RL_ci6IAgSe4oJyxLZwBvpMuGcl3Q,3319
96
- pycontrails/physics/geo.py,sha256=WyZKLj-63yGCfjePEhiwxLp26be44VCdEiisu9tXtzE,37461
96
+ pycontrails/physics/geo.py,sha256=ceaOy9ffCRb8eu6LlOAvM04mVMKbmqNh1dvw6iXq5bI,37435
97
97
  pycontrails/physics/jet.py,sha256=nUJY-TVowCPYlhrTkEncDocoVKCeN2IAhvP-6vWP2dQ,31326
98
- pycontrails/physics/thermo.py,sha256=HAcg2wmNXW-vJbOF2kOXBoUyJiAosPY0nRWeM37otdY,13238
98
+ pycontrails/physics/thermo.py,sha256=Bm1ERIEYxRwdhkAVzO-xdsmEInp9WZAJNT1TLV0WTVQ,15957
99
99
  pycontrails/physics/units.py,sha256=r6ncLqhFi9Roi73SfGvfjuB_jpwtsjJ39L3yxr8ndIc,12753
100
100
  pycontrails/physics/static/iata-cargo-load-factors-20250221.csv,sha256=ePGCUak5noyY63aL1a8T7EJf8sWzIpeY95-sbaYKF5w,3915
101
101
  pycontrails/physics/static/iata-passenger-load-factors-20250221.csv,sha256=sK9caPg9MvRYBHm_HVvXGA90x4j4OVIxkxFHF1HOKnA,3909
@@ -104,10 +104,10 @@ pycontrails/utils/dependencies.py,sha256=SjEdbDDKfGmmYResWZndMCUySO0W0ptWAeY1aA_
104
104
  pycontrails/utils/iteration.py,sha256=En2YY4NiNwCNtAVO8HL6tv9byBGKs8MKSI7R8P-gZy4,332
105
105
  pycontrails/utils/json.py,sha256=Pqashwoupuf_GfrrSfHclwug9Hg-kYQ4WNxEqay_0Rc,6083
106
106
  pycontrails/utils/temp.py,sha256=5XXqQoEfWjz1OrhoOBZD5vkkCFeuq9LpZkyhc38gIeY,1159
107
- pycontrails/utils/types.py,sha256=hPqUwaeRLgga69nj7LVbPojPg1k7pUSvYzFlGAiPKIM,5154
108
- pycontrails-0.54.11.dist-info/licenses/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
109
- pycontrails-0.54.11.dist-info/licenses/NOTICE,sha256=VIhzKNYi4lQx6fpZyqiY6eMHpLuwp-_G0JQkmYYa7h0,2005
110
- pycontrails-0.54.11.dist-info/METADATA,sha256=ATxrKUPw9Q-7nbMQ7r3CFgRfgM3wuEn7OUSUWEUO2CM,9215
111
- pycontrails-0.54.11.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101
112
- pycontrails-0.54.11.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
113
- pycontrails-0.54.11.dist-info/RECORD,,
107
+ pycontrails/utils/types.py,sha256=WJS3rnYxU4l8eEJuJVWGBRD7-zvEBlRD8TQx-fxKbic,5032
108
+ pycontrails-0.54.12.dist-info/licenses/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
109
+ pycontrails-0.54.12.dist-info/licenses/NOTICE,sha256=VIhzKNYi4lQx6fpZyqiY6eMHpLuwp-_G0JQkmYYa7h0,2005
110
+ pycontrails-0.54.12.dist-info/METADATA,sha256=oRY_VTVNxUF9cfIQ2N9KWURowZDFnByNYoOAcqZQR2o,9215
111
+ pycontrails-0.54.12.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101
112
+ pycontrails-0.54.12.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
113
+ pycontrails-0.54.12.dist-info/RECORD,,