pycontrails 0.54.4__cp313-cp313-macosx_11_0_arm64.whl → 0.54.6__cp313-cp313-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.

Files changed (38) hide show
  1. pycontrails/_version.py +2 -2
  2. pycontrails/core/aircraft_performance.py +34 -16
  3. pycontrails/core/airports.py +3 -4
  4. pycontrails/core/fleet.py +30 -9
  5. pycontrails/core/flight.py +8 -5
  6. pycontrails/core/flightplan.py +11 -11
  7. pycontrails/core/interpolation.py +7 -4
  8. pycontrails/core/met.py +145 -86
  9. pycontrails/core/met_var.py +62 -0
  10. pycontrails/core/models.py +3 -2
  11. pycontrails/core/rgi_cython.cpython-313-darwin.so +0 -0
  12. pycontrails/core/vector.py +97 -74
  13. pycontrails/datalib/_met_utils/metsource.py +1 -1
  14. pycontrails/datalib/ecmwf/era5.py +5 -6
  15. pycontrails/datalib/ecmwf/era5_model_level.py +4 -5
  16. pycontrails/datalib/ecmwf/ifs.py +1 -3
  17. pycontrails/datalib/gfs/gfs.py +1 -3
  18. pycontrails/models/apcemm/apcemm.py +2 -2
  19. pycontrails/models/apcemm/utils.py +1 -1
  20. pycontrails/models/cocip/cocip.py +86 -27
  21. pycontrails/models/cocip/output_formats.py +1 -0
  22. pycontrails/models/cocipgrid/cocip_grid.py +8 -73
  23. pycontrails/models/dry_advection.py +99 -31
  24. pycontrails/models/emissions/emissions.py +2 -2
  25. pycontrails/models/humidity_scaling/humidity_scaling.py +1 -1
  26. pycontrails/models/issr.py +2 -2
  27. pycontrails/models/pcc.py +1 -2
  28. pycontrails/models/ps_model/ps_grid.py +2 -2
  29. pycontrails/models/ps_model/ps_model.py +4 -32
  30. pycontrails/models/ps_model/ps_operational_limits.py +2 -6
  31. pycontrails/models/tau_cirrus.py +13 -6
  32. pycontrails/physics/geo.py +3 -3
  33. {pycontrails-0.54.4.dist-info → pycontrails-0.54.6.dist-info}/METADATA +3 -4
  34. {pycontrails-0.54.4.dist-info → pycontrails-0.54.6.dist-info}/RECORD +38 -38
  35. {pycontrails-0.54.4.dist-info → pycontrails-0.54.6.dist-info}/WHEEL +1 -1
  36. {pycontrails-0.54.4.dist-info → pycontrails-0.54.6.dist-info}/LICENSE +0 -0
  37. {pycontrails-0.54.4.dist-info → pycontrails-0.54.6.dist-info}/NOTICE +0 -0
  38. {pycontrails-0.54.4.dist-info → pycontrails-0.54.6.dist-info}/top_level.txt +0 -0
@@ -19,7 +19,7 @@ from pycontrails.core.flight import Flight
19
19
  from pycontrails.core.fuel import Fuel, SAFBlend
20
20
  from pycontrails.core.interpolation import EmissionsProfileInterpolator
21
21
  from pycontrails.core.met import MetDataset
22
- from pycontrails.core.met_var import AirTemperature, SpecificHumidity
22
+ from pycontrails.core.met_var import AirTemperature, MetVariable, SpecificHumidity
23
23
  from pycontrails.core.models import Model, ModelParams
24
24
  from pycontrails.core.vector import GeoVectorDataset
25
25
  from pycontrails.models.emissions import black_carbon, ffm2
@@ -75,7 +75,7 @@ class Emissions(Model):
75
75
 
76
76
  name = "emissions"
77
77
  long_name = "ICAO Emissions Databank (EDB)"
78
- met_variables = AirTemperature, SpecificHumidity
78
+ met_variables: tuple[MetVariable, ...] = AirTemperature, SpecificHumidity
79
79
  default_params = EmissionsParams
80
80
 
81
81
  source: GeoVectorDataset
@@ -654,7 +654,7 @@ def histogram_matching(
654
654
  as a numpy array with the same shape and dtype as ``era5_rhi``.
655
655
  """
656
656
  if level_type not in ["pressure", "model"]:
657
- msg = f"Invalid 'level_type' value '{level_type}'. " "Must be one of ['pressure', 'model']."
657
+ msg = f"Invalid 'level_type' value '{level_type}'. Must be one of ['pressure', 'model']."
658
658
  raise ValueError(msg)
659
659
  df = _load_quantiles(level_type)
660
660
  iagos_quantiles = df[("iagos", "iagos")]
@@ -10,7 +10,7 @@ import numpy as np
10
10
  import pycontrails
11
11
  from pycontrails.core.flight import Flight
12
12
  from pycontrails.core.met import MetDataset
13
- from pycontrails.core.met_var import AirTemperature, SpecificHumidity
13
+ from pycontrails.core.met_var import AirTemperature, MetVariable, SpecificHumidity
14
14
  from pycontrails.core.models import Model, ModelParams
15
15
  from pycontrails.core.vector import GeoVectorDataset
16
16
  from pycontrails.models.humidity_scaling import HumidityScaling
@@ -70,7 +70,7 @@ class ISSR(Model):
70
70
 
71
71
  name = "issr"
72
72
  long_name = "Ice super-saturated regions"
73
- met_variables = AirTemperature, SpecificHumidity
73
+ met_variables: tuple[MetVariable, ...] = AirTemperature, SpecificHumidity
74
74
  default_params = ISSRParams
75
75
 
76
76
  @overload
pycontrails/models/pcc.py CHANGED
@@ -186,8 +186,7 @@ class PCC(Model):
186
186
 
187
187
  # issue recombining groups arises if "level" is in dims
188
188
  # convert "level" dimension to coordinate
189
- b_crit_potential = b_crit_potential.squeeze("level")
190
- return b_crit_potential
189
+ return b_crit_potential.squeeze("level")
191
190
 
192
191
  # apply calculation per pressure level
193
192
  return (
@@ -19,7 +19,7 @@ from pycontrails.core.aircraft_performance import (
19
19
  from pycontrails.core.flight import Flight
20
20
  from pycontrails.core.fuel import JetA
21
21
  from pycontrails.core.met import MetDataset
22
- from pycontrails.core.met_var import AirTemperature
22
+ from pycontrails.core.met_var import AirTemperature, MetVariable
23
23
  from pycontrails.core.vector import GeoVectorDataset
24
24
  from pycontrails.models.ps_model import ps_model, ps_operational_limits
25
25
  from pycontrails.models.ps_model.ps_aircraft_params import PSAircraftEngineParams
@@ -58,7 +58,7 @@ class PSGrid(AircraftPerformanceGrid):
58
58
 
59
59
  name = "PSGrid"
60
60
  long_name = "Poll-Schumann Aircraft Performance evaluated at arbitrary points"
61
- met_variables = (AirTemperature,)
61
+ met_variables: tuple[MetVariable, ...] = (AirTemperature,)
62
62
  default_params = PSGridParams
63
63
 
64
64
  met: MetDataset
@@ -7,7 +7,7 @@ import functools
7
7
  import pathlib
8
8
  import sys
9
9
  from collections.abc import Mapping
10
- from typing import Any, NoReturn, overload
10
+ from typing import Any
11
11
 
12
12
  if sys.version_info >= (3, 12):
13
13
  from typing import override
@@ -25,10 +25,9 @@ from pycontrails.core.aircraft_performance import (
25
25
  AircraftPerformanceData,
26
26
  AircraftPerformanceParams,
27
27
  )
28
- from pycontrails.core.fleet import Fleet
29
28
  from pycontrails.core.flight import Flight
30
29
  from pycontrails.core.met import MetDataset
31
- from pycontrails.core.met_var import AirTemperature, EastwardWind, NorthwardWind
30
+ from pycontrails.core.met_var import AirTemperature, EastwardWind, MetVariable, NorthwardWind
32
31
  from pycontrails.models.ps_model import ps_operational_limits as ps_lims
33
32
  from pycontrails.models.ps_model.ps_aircraft_params import (
34
33
  PSAircraftEngineParams,
@@ -71,7 +70,7 @@ class PSFlight(AircraftPerformance):
71
70
 
72
71
  name = "PSFlight"
73
72
  long_name = "Poll-Schumann Aircraft Performance Model"
74
- met_variables = (AirTemperature,)
73
+ met_variables: tuple[MetVariable, ...] = (AirTemperature,)
75
74
  optional_met_variables = EastwardWind, NorthwardWind
76
75
  default_params = PSFlightParams
77
76
 
@@ -118,35 +117,8 @@ class PSFlight(AircraftPerformance):
118
117
  raise KeyError(msg)
119
118
  return False
120
119
 
121
- @overload
122
- def eval(self, source: Fleet, **params: Any) -> Fleet: ...
123
-
124
- @overload
125
- def eval(self, source: Flight, **params: Any) -> Flight: ...
126
-
127
- @overload
128
- def eval(self, source: None = ..., **params: Any) -> NoReturn: ...
129
-
130
120
  @override
131
- def eval(self, source: Flight | None = None, **params: Any) -> Flight:
132
- self.update_params(params)
133
- self.set_source(source)
134
- self.source = self.require_source_type(Flight)
135
- self.downselect_met()
136
- self.set_source_met()
137
-
138
- # Calculate true airspeed if not included on source
139
- self.ensure_true_airspeed_on_source()
140
-
141
- if isinstance(self.source, Fleet):
142
- fls = [self._eval_flight(fl) for fl in self.source.to_flight_list()]
143
- self.source = Fleet.from_seq(fls, attrs=self.source.attrs, broadcast_numeric=False)
144
- return self.source
145
-
146
- self.source = self._eval_flight(self.source)
147
- return self.source
148
-
149
- def _eval_flight(self, fl: Flight) -> Flight:
121
+ def eval_flight(self, fl: Flight) -> Flight:
150
122
  # Ensure aircraft type is available
151
123
  try:
152
124
  aircraft_type = fl.attrs["aircraft_type"]
@@ -390,7 +390,7 @@ def minimum_mach_num(
390
390
  )
391
391
  return amass_max - aircraft_mass
392
392
 
393
- m = scipy.optimize.newton(
393
+ return scipy.optimize.newton(
394
394
  excess_mass,
395
395
  args=(
396
396
  air_pressure,
@@ -404,8 +404,6 @@ def minimum_mach_num(
404
404
  tol=1e-4,
405
405
  )
406
406
 
407
- return m
408
-
409
407
 
410
408
  def maximum_mach_num(
411
409
  altitude_ft: ArrayOrFloat,
@@ -450,7 +448,7 @@ def maximum_mach_num(
450
448
  atyp_param.p_inf_co,
451
449
  )
452
450
 
453
- max_mach = scipy.optimize.newton(
451
+ return scipy.optimize.newton(
454
452
  func=get_excess_thrust_available,
455
453
  args=(air_temperature, air_pressure, aircraft_mass, theta, atyp_param),
456
454
  x0=mach_num_op_lim,
@@ -458,8 +456,6 @@ def maximum_mach_num(
458
456
  tol=1e-4,
459
457
  ).clip(max=mach_num_op_lim)
460
458
 
461
- return max_mach
462
-
463
459
 
464
460
  # ----------------
465
461
  # Fuel flow limits
@@ -45,7 +45,8 @@ def tau_cirrus(met: MetDataset) -> xr.DataArray:
45
45
  met : MetDataset
46
46
  A MetDataset with the following variables:
47
47
  - "air_temperature"
48
- - "specific_cloud_ice_water_content" or "ice_water_mixing_ratio"
48
+ - "mass_fraction_of_cloud_ice_in_air", "specific_cloud_ice_water_content",
49
+ or "ice_water_mixing_ratio"
49
50
 
50
51
  Returns
51
52
  -------
@@ -64,15 +65,21 @@ def tau_cirrus(met: MetDataset) -> xr.DataArray:
64
65
  geopotential_height = _geopotential_height(met)
65
66
 
66
67
  # TODO: these are not *quite* the same, though we treat them the same for now
67
- # ECMWF "specific_cloud_ice_water_content" is mass ice per mass of *moist* air
68
- # GFS "ice_water_mixing_ratio" is mass ice per mass of *dry* air
68
+ # The generic "mass_fraction_of_cloud_ice_in_air" and ECMWF "specific_cloud_ice_water_content"
69
+ # are mass ice per mass of *moist* air,
70
+ # whereas GFS "ice_water_mixing_ratio" is mass ice per mass of *dry* air
69
71
  #
70
72
  # The method `cirrus_effective_extinction_coef` uses input of mass ice per mass of *dry* air,
71
- # so the ECMWF data is not quite right.
72
- try:
73
+ # so only the GFS data is exactly right.
74
+ if "mass_fraction_of_cloud_ice_in_air" in met.data:
75
+ ciwc = met.data["mass_fraction_of_cloud_ice_in_air"]
76
+ elif "specific_cloud_ice_water_content" in met.data:
73
77
  ciwc = met.data["specific_cloud_ice_water_content"]
74
- except KeyError:
78
+ elif "ice_water_mixing_ratio" in met.data:
75
79
  ciwc = met.data["ice_water_mixing_ratio"]
80
+ else:
81
+ msg = "Could not find cloud ice variable"
82
+ raise KeyError(msg)
76
83
 
77
84
  beta_e = cirrus_effective_extinction_coef(
78
85
  ciwc,
@@ -516,7 +516,7 @@ def solar_constant(theta_rad: ArrayLike) -> ArrayLike:
516
516
  + (0.000077 * np.sin(theta_rad * 2))
517
517
  )
518
518
 
519
- return constants.solar_constant * orbital_effect
519
+ return constants.solar_constant * orbital_effect # type: ignore[return-value]
520
520
 
521
521
 
522
522
  def cosine_solar_zenith_angle(
@@ -662,7 +662,7 @@ def solar_declination_angle(theta_rad: ArrayLike) -> ArrayLike:
662
662
  :func:`cosine_solar_zenith_angle`
663
663
  """
664
664
  return (
665
- 0.396372
665
+ 0.396372 # type: ignore[return-value]
666
666
  - (22.91327 * np.cos(theta_rad))
667
667
  + (4.02543 * np.sin(theta_rad))
668
668
  - (0.387205 * np.cos(2 * theta_rad))
@@ -729,7 +729,7 @@ def orbital_correction_for_solar_hour_angle(theta_rad: ArrayLike) -> ArrayLike:
729
729
  Tested against :cite:`noaaSolarCalculationDetails`
730
730
  """
731
731
  return (
732
- 0.004297
732
+ 0.004297 # type: ignore[return-value]
733
733
  + (0.107029 * np.cos(theta_rad))
734
734
  - (1.837877 * np.sin(theta_rad))
735
735
  - (0.837378 * np.cos(2 * theta_rad))
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: pycontrails
3
- Version: 0.54.4
3
+ Version: 0.54.6
4
4
  Summary: Python library for modeling aviation climate impacts
5
5
  Author-email: Breakthrough Energy <py@contrails.org>
6
6
  License: Apache-2.0
@@ -49,8 +49,7 @@ Requires-Dist: pyarrow>=5.0; extra == "dev"
49
49
  Requires-Dist: pytest>=8.2; extra == "dev"
50
50
  Requires-Dist: pytest-cov>=2.11; extra == "dev"
51
51
  Requires-Dist: requests>=2.25; extra == "dev"
52
- Requires-Dist: ruff==0.8.0; extra == "dev"
53
- Requires-Dist: setuptools; extra == "dev"
52
+ Requires-Dist: ruff>=0.9.0; extra == "dev"
54
53
  Provides-Extra: docs
55
54
  Requires-Dist: doc8>=1.1; extra == "docs"
56
55
  Requires-Dist: furo>=2023.3; extra == "docs"
@@ -1,49 +1,49 @@
1
- pycontrails-0.54.4.dist-info/RECORD,,
2
- pycontrails-0.54.4.dist-info/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
3
- pycontrails-0.54.4.dist-info/WHEEL,sha256=fAn_VQwWuH_rMRyKwhTwvKm9fx9GheRVEYtY-6ugsD8,109
4
- pycontrails-0.54.4.dist-info/NOTICE,sha256=TeY5lUhEbf5ouzABkrRUsUDJzS5v9jDEYADpwku4mgA,1929
5
- pycontrails-0.54.4.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
6
- pycontrails-0.54.4.dist-info/METADATA,sha256=284mIuqMUJd3IbNlLAQcXyoHHlXDfDVTA1XXj1FFTXg,9155
7
- pycontrails/_version.py,sha256=K1krGB4lhzC1Jsut-7Vsyk3SU0xYvsCQSVsvbKXz2pE,413
1
+ pycontrails-0.54.6.dist-info/RECORD,,
2
+ pycontrails-0.54.6.dist-info/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
3
+ pycontrails-0.54.6.dist-info/WHEEL,sha256=zEwrEM3mH_qOUQ9uk3aZI5DMOaUao9_e1G94mKtHrTY,109
4
+ pycontrails-0.54.6.dist-info/NOTICE,sha256=TeY5lUhEbf5ouzABkrRUsUDJzS5v9jDEYADpwku4mgA,1929
5
+ pycontrails-0.54.6.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
6
+ pycontrails-0.54.6.dist-info/METADATA,sha256=M7bIMAsry7V5uDqs2GHOi2g-gN3Q0L-24BywhVyTAeM,9113
7
+ pycontrails/_version.py,sha256=3tdcrURWC_cFIzJJ0AUbLpq4j7N9WBPvv2IFchdGJSw,413
8
8
  pycontrails/__init__.py,sha256=vomSUHQ1d7ru2-3LgnmczzuPJw0kHmBSaCSVOpqvEtQ,2004
9
9
  pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- pycontrails/core/vector.py,sha256=GaxOJSDd5t2GzHFpUBCoF7qi-KcWrxIJ_Y1PwRejWQo,70080
11
- pycontrails/core/models.py,sha256=ZFyZWK378sex9uk5yKPMWBuMublYhUEOqjlNqicw5os,39789
12
- pycontrails/core/interpolation.py,sha256=Ifs0tdNe03N-OmoPK1mNB3i8vNXbmIfc3i26AdnRkyE,25679
13
- pycontrails/core/fleet.py,sha256=PD2psa6LHhbH-T9XvVY2CQihsaksGnSgZilddzX1ktU,15964
14
- pycontrails/core/flight.py,sha256=vV9cjKg_XtSn0aVulfoYojVC7xm4TsSqzua7JhDYlJE,80372
10
+ pycontrails/core/vector.py,sha256=N-B-VSNX5bz-FwzSRBdbO3fZ1A8Xh3odbTs_6rnZty4,71263
11
+ pycontrails/core/models.py,sha256=5ppjLNbxWvS3OfiWfhfVDWjbjw5YhOPqFMedOpV4tBk,39808
12
+ pycontrails/core/interpolation.py,sha256=wovjj3TAf3xonVxjarclpvZLyLq6N7wZQQXsI9hT3YA,25713
13
+ pycontrails/core/fleet.py,sha256=0hi_N4R93St-7iD29SE0EnadpBEl_p9lSGtDwpWvGkk,16704
14
+ pycontrails/core/flight.py,sha256=Eba7XmfjGEoFSdWJfSnOmWknAU0c0PPNZtTYrb3u_m4,80659
15
15
  pycontrails/core/fuel.py,sha256=kJZ3P1lPm1L6rdPREM55XQ-VfJ_pt35cP4sO2Nnvmjs,4332
16
16
  pycontrails/core/polygon.py,sha256=EmfHPj0e58whsHvR-3YvDgMWkvMFgp_BgwaoG8IZ4n0,18044
17
17
  pycontrails/core/cache.py,sha256=XG_RCIemv1xatDBmaVyxnoYdi8gD2gkUvjfvRi9RsJA,28068
18
18
  pycontrails/core/__init__.py,sha256=p0O09HxdeXU0X5Z3zrHMlTfXa92YumT3fJ8wJBI5ido,856
19
- pycontrails/core/rgi_cython.cpython-313-darwin.so,sha256=LuJKvEjlV2Nw1FOexRIiSzIBO7FLusAzoEpiIwS98mM,311488
20
- pycontrails/core/flightplan.py,sha256=UO4vL087d5TZMlU984-FxfotGTxFbqK78w2fLDRiel4,7335
21
- pycontrails/core/met.py,sha256=KPby1dgsjrQ1rHK7JcSCnh_I5TFmqyqyL0KEOc1JPbs,101413
22
- pycontrails/core/aircraft_performance.py,sha256=P3_StjXJJqtBOYWbyHyVNuxdOZzuVZDfeRxtNQmSpFY,27236
23
- pycontrails/core/airports.py,sha256=aeyAXVkioIRomrP79UtNrxindL4f1DJyXFaojZCuBBw,6758
24
- pycontrails/core/met_var.py,sha256=GC5ijw4oGuIefmFOSz4vmxMEBj_SVs5Z75IMhDP56Cw,9183
19
+ pycontrails/core/rgi_cython.cpython-313-darwin.so,sha256=Wm9z2qECqH_xAHQhafiye2NPTmZYcNyY37EYnGOuEqc,311488
20
+ pycontrails/core/flightplan.py,sha256=_7j4puAMiSe2aqHXcENR58c-N8crjUp4nbi3O2u7Adg,7335
21
+ pycontrails/core/met.py,sha256=5b2K4PQWcAO5X8Mb3LLJ224_06WDyDEGUIeE3_EB3zA,103599
22
+ pycontrails/core/aircraft_performance.py,sha256=quODa49uv0DVwl-qEYQ2ePLeapOD0GjyNBO3HoSD3M0,28004
23
+ pycontrails/core/airports.py,sha256=3IGP337nqzXAXktT7Ju95i0I8GDVwHMlCaCv2bs4Kkk,6738
24
+ pycontrails/core/met_var.py,sha256=U3q5Ddc1wN5EtT7a5Iy5lixCT3Mmv75C9wScY9MLnc8,11544
25
25
  pycontrails/core/coordinates.py,sha256=0ySsHtqTon7GMbuwmmxMbI92j3ueMteJZh4xxNm5zto,5391
26
26
  pycontrails/datalib/goes.py,sha256=mCEuDYdt1GIBA-sbDq5LdC6ZRvWJ28uaaBTnsXE4syc,26555
27
27
  pycontrails/datalib/landsat.py,sha256=r6366rEF7fOA7mT5KySCPGJplgGE5LvBw5fMqk-U1oM,19697
28
28
  pycontrails/datalib/spire.py,sha256=66SnMdA8KOS69USjKmqrJmTKPK08Ehih9tnlsCt-AJw,25331
29
29
  pycontrails/datalib/__init__.py,sha256=hW9NWdFPC3y_2vHMteQ7GgQdop3917MkDaf5ZhU2RBY,369
30
30
  pycontrails/datalib/sentinel.py,sha256=hYSxIlQnyJHqtHWlKn73HOK_1pm-_IbGebmkHnh4UcA,17172
31
- pycontrails/datalib/_met_utils/metsource.py,sha256=5t2hjSmEG4jg-n8BD5tJy1Fp_SSgRsqYJdOGtuctRNY,24118
31
+ pycontrails/datalib/_met_utils/metsource.py,sha256=omgrBrAap11G5hV8a9qS3umJVuwoX_Mca6QctRa6xn8,24116
32
32
  pycontrails/datalib/ecmwf/arco_era5.py,sha256=7HXQU5S02PzX9Ew2ZrDKSp0tDEG1eeVAvbP3decmm20,12437
33
- pycontrails/datalib/ecmwf/era5.py,sha256=wTXjQ3pkrKg5qFlu8n8Zy6HUU4JuhywK_BgKNN4jnYI,19046
34
- pycontrails/datalib/ecmwf/era5_model_level.py,sha256=KP4a9l2YbEhBPraN1LDx_I_OsOaJemAheW3gICqe5uA,19428
33
+ pycontrails/datalib/ecmwf/era5.py,sha256=4ULNdDlUN0kP6Tbp8D_-Bc12nAsLf0iNfZaDoj_AoZU,18952
34
+ pycontrails/datalib/ecmwf/era5_model_level.py,sha256=AO7ePIGZtavx5nQSPYP4p07RNZeg3bbzmoZC7RUC4Gg,19354
35
35
  pycontrails/datalib/ecmwf/hres.py,sha256=9QHYxMLK7zyQEOFpbVrZfIht9WqVXnhhyOd7YKEgAe0,28381
36
36
  pycontrails/datalib/ecmwf/variables.py,sha256=lU3BNe265XVhCXvdMwZqfkWQwtsetZxVRLSfPqHFKAE,9913
37
37
  pycontrails/datalib/ecmwf/hres_model_level.py,sha256=EjBDYbbPZotTsveFlEiAAWJhhPYiao1DQrLyS4kVCrA,17657
38
38
  pycontrails/datalib/ecmwf/__init__.py,sha256=wdfhplEaW2UKTItIoshTtVEjbPyfDYoprTJNxbKZuvA,2021
39
39
  pycontrails/datalib/ecmwf/common.py,sha256=qRMSzDQikGMi3uqvz-Y57e3biHPzSoVMfUwOu9iTxHc,4024
40
40
  pycontrails/datalib/ecmwf/model_levels.py,sha256=_kgpnogaS6MlfvTX9dB5ASTHFUlZuQ_DRb-VADwEa0k,16996
41
- pycontrails/datalib/ecmwf/ifs.py,sha256=bAxkHXIMUXP8T8JmGp1PXdm24hoJoIHyJ3IDLLHl8ho,10778
41
+ pycontrails/datalib/ecmwf/ifs.py,sha256=0swHe6tFc5Fbu9e4_jREW0H-xYHYLtxjNoE3aUUlgvc,10761
42
42
  pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv,sha256=PmvGLRzn6uuCKSwiasSuVcehvvmSaqP7cnLuN6hhCQQ,9788
43
43
  pycontrails/datalib/_leo_utils/vis.py,sha256=-fLcm1D5cP6lThVHovV3MJSiadWyTUAvYDMvr4drMU4,1802
44
44
  pycontrails/datalib/_leo_utils/search.py,sha256=r87T2OV4qH1pYI2YznvsBL042f4RKxD3OA2snd3-kDI,8687
45
45
  pycontrails/datalib/_leo_utils/static/bq_roi_query.sql,sha256=xq6-tJyz0-bUwW0KjQymqygjH3WlQBmyBtP7Ci7SBe8,260
46
- pycontrails/datalib/gfs/gfs.py,sha256=kGRcmolxbl_5R13N_SOvXr2wAcaqFCb-PUIFhP5whBM,22410
46
+ pycontrails/datalib/gfs/gfs.py,sha256=3tFiR7IObHcFmhGOdb-SJ7QQJSk6tF_6qkyi-pLrIdE,22393
47
47
  pycontrails/datalib/gfs/variables.py,sha256=4ALR4zhYW8tQVlNVHrd0CK8oRNSe_2OkW3ELeaImtAI,3135
48
48
  pycontrails/datalib/gfs/__init__.py,sha256=pXNjb9cJC6ngpuCnoHnmVZ2RHzbHZ0AlsyGvgcdcl2E,684
49
49
  pycontrails/ext/synthetic_flight.py,sha256=ByuJDfpuK5WaGMj41wflfzH6zwI1nejVcQXC4JoMvSI,16795
@@ -56,34 +56,34 @@ pycontrails/utils/types.py,sha256=dN2oYVNNbekqvM89Lfs0FmmhavRQGC7NgGhi_7m6UBU,49
56
56
  pycontrails/utils/temp.py,sha256=lGU0b_R8ze4yKlsOusHIIBaoNFBrmrB3vBjgHRlfcXk,1109
57
57
  pycontrails/utils/json.py,sha256=oTiO8xh603esfBGaGVmA5eUzR0NhAqNpQCegMMgnSbg,5896
58
58
  pycontrails/utils/dependencies.py,sha256=ATP45xYdUbIyGFzgbOe5SbokMytvB84TcexUEFnEUZE,2559
59
- pycontrails/models/pcc.py,sha256=7hIlg_4-F6Ce7KVFyuIZBZY6uDr1h4KRMqBDlpGkzHE,11116
60
- pycontrails/models/tau_cirrus.py,sha256=GjCkGMf6_zRyzdWRSpO7WieNjY8b-RpPmss0WO3e1HM,5381
59
+ pycontrails/models/pcc.py,sha256=0Qdl4u8PmUEpNYd398glTChkbTwsh83wYPt0Bmi8qd8,11068
60
+ pycontrails/models/tau_cirrus.py,sha256=0K7cdHBGaahuWDM0FG1HGqbvhkwyWKHMInwctkBWYbo,5777
61
61
  pycontrails/models/__init__.py,sha256=dQTOLQb7RdUdUwslt5se__5y_ymbInBexQmNrmAeOdE,33
62
- pycontrails/models/issr.py,sha256=Ts1rFr8XKqvq-hWTLzp285PDEt9J_kIR8V3XGCDqoxY,7340
62
+ pycontrails/models/issr.py,sha256=AYLYLHxtG8je5UG6x1zLV0ul89MJPqe5Xk0oWIyZ7b0,7378
63
63
  pycontrails/models/sac.py,sha256=lV1Or0AaLxuS1Zo5V8h5c1fkSKC-hKEgiFm7bmmusWw,15946
64
64
  pycontrails/models/accf.py,sha256=meIcgojYvHgm3de9iro2Bv0M4y9ta5VPwcqGAMEbBp8,13663
65
- pycontrails/models/dry_advection.py,sha256=k7jEibAjrdt42he0QqDckZ0VLfSwKPKeTc2qOa5ciEg,16882
65
+ pycontrails/models/dry_advection.py,sha256=FqUvRFbnwe4esHBYDayn3iu7R2UUuaQwY8x2oToxNI0,19164
66
66
  pycontrails/models/pcr.py,sha256=ZzbEuTOuDdUmmL5T3Wk3HL-O8XzX3HMnn98WcPbASaU,5348
67
67
  pycontrails/models/emissions/__init__.py,sha256=CZB2zIkLUI3NGNmq2ddvRYjEtiboY6PWJjiEiXj_zII,478
68
68
  pycontrails/models/emissions/ffm2.py,sha256=mAvBHnp-p3hIn2fjKGq50eaMHi0jcb5hA5uXbJGeE9I,12068
69
- pycontrails/models/emissions/emissions.py,sha256=jJlK2zPygyz57SQK-DofJUvimD49fRxHA3hiU5REPCQ,47653
69
+ pycontrails/models/emissions/emissions.py,sha256=iAUJQFVzFDllKlDRVzIEZRm18IryFQedbzq3h2GmFcQ,47691
70
70
  pycontrails/models/emissions/black_carbon.py,sha256=HV56zz5-9nrIxDqL2-F6aa7XQYZyv26IDkLHo_Jop9A,20346
71
71
  pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv,sha256=NatpVI1D2tTDLK7uVvlanm9DhfFB44nmFA4aocUcXco,77318
72
72
  pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv,sha256=jCjt7cP6sqLdbDp5NUoaqllVkZNE7NJtSnbB3rX_zQI,127523
73
73
  pycontrails/models/emissions/static/default-engine-uids.csv,sha256=3blb0aqtM8YRsyT1WDo0UYTBtv1h4BwXRIC_Ll9fhnI,6217
74
74
  pycontrails/models/apcemm/__init__.py,sha256=M-hrJklbSgBckclm526MiBAhpKPLHgJbB58ArbJuGIk,175
75
75
  pycontrails/models/apcemm/inputs.py,sha256=88GylkiaymEW_XZeFxLsICI9wV6kl8wVYsuyTe8zIQ8,6585
76
- pycontrails/models/apcemm/utils.py,sha256=xlEVe0RKFXrqDr4V77mbb2HxY8IK42EX4K86tN1sLQs,17094
77
- pycontrails/models/apcemm/apcemm.py,sha256=ow50xVVS1QcRc_RXGZY0h5fOZQ_TETITkujvSx86Sp0,39999
76
+ pycontrails/models/apcemm/utils.py,sha256=Ex6EqXin6yoJv2WWhBotSzhjzUlFNZm2MDgL4CvvX6E,17082
77
+ pycontrails/models/apcemm/apcemm.py,sha256=rKvIaEsqtLbZ5h4o4EOY4Ge4-HdPn2X4M1lEUFDvr68,39975
78
78
  pycontrails/models/apcemm/static/apcemm_yaml_template.yaml,sha256=uAZkc57OUvDMjgX6F5f6hgDh3Hgg1NbHWRUFSiv0DEI,6745
79
- pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=Mpy6Jd0UNta4nUhS01kkm6uCg0Yo5EhHIrP656lLpnI,36770
79
+ pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=pYpJHi9dcuGjJASdZkbc49pIl2cQkVlRu80Gy3ZN5bA,36767
80
80
  pycontrails/models/humidity_scaling/__init__.py,sha256=nqsab_j9BCwMbTfCn4BjXMdhItlvNKkgUJ9-lb8RyIo,1119
81
81
  pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq,sha256=tfYhbafF9Z-gGCg6VQ1YBlOaK_01e65Dc6s9b-hQ6Zo,286375
82
82
  pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq,sha256=pShCvNUo0NYtAHhT9IBRuj38X9jejdlKfv-ZoOKmtKI,35943
83
83
  pycontrails/models/cocip/radiative_forcing.py,sha256=0zTXQXANYC3oIDyYEUHkaJxuwTe0-GojxBipEutWGxU,45031
84
84
  pycontrails/models/cocip/wind_shear.py,sha256=m6ZlWjORfI-lI-D74Z_dIMOHnK4FDYmkb0S6vSpKTO8,3868
85
- pycontrails/models/cocip/cocip.py,sha256=jLipDqA832VVerYj7F8rdNcG7vxyRvdT5tUwrsnA-eY,100138
86
- pycontrails/models/cocip/output_formats.py,sha256=Tyu4080PO5tqZuXjZ0XIxoFF2Nik-stttEMBpu33b-s,83697
85
+ pycontrails/models/cocip/cocip.py,sha256=QbbgSPEI2Lw8mftaxznpUgdNytnMk7O89VsTKBDvQ2w,102407
86
+ pycontrails/models/cocip/output_formats.py,sha256=YXYfm32NsI3OkZn4htAOceMIDG31ulehUiMUCqu8hEQ,83713
87
87
  pycontrails/models/cocip/__init__.py,sha256=CWrkNd6S3ZJq04pjTc2W22sVAJeJD3bJJRy_zLW8Kkc,962
88
88
  pycontrails/models/cocip/cocip_params.py,sha256=rwVW1SnjKnzztlxcxxaCztgzRbIPkMJqC2GefUKQZ6w,12341
89
89
  pycontrails/models/cocip/wake_vortex.py,sha256=YmOuv_oWJ9-fmTx9PVHr6gsXwex0qzLhvoZIJNB9rsk,14515
@@ -92,16 +92,16 @@ pycontrails/models/cocip/radiative_heating.py,sha256=1U4SQWwogtyQ2u6J996kAHP0Ofp
92
92
  pycontrails/models/cocip/contrail_properties.py,sha256=H0D2FQodX6jW3EmAxQNxGS8erOU0EW2MSAAOLB0LyQc,56202
93
93
  pycontrails/models/cocip/unterstrasser_wake_vortex.py,sha256=M6tdl5ZfNDtiLwJOrXg3sBesf6Larg-5JchsVlJNsG4,14675
94
94
  pycontrails/models/ps_model/__init__.py,sha256=Fuum5Rq8ya8qkvbeq2wh6NDo-42RCRnK1Y-2syYy0Ck,553
95
- pycontrails/models/ps_model/ps_model.py,sha256=l2FPbMi1N_KXuG8YXctdT6b1x-Kp55PDQcnVk5t7U8k,33221
95
+ pycontrails/models/ps_model/ps_model.py,sha256=e-rd3b61futqHFQPXbOj3o-7hIuxHZH0fUzmYI4JDow,32255
96
96
  pycontrails/models/ps_model/ps_aircraft_params.py,sha256=pD1xpTBX6ML2Pie78kypNibzE5AkvqnAIaTyEMfciuY,13350
97
- pycontrails/models/ps_model/ps_operational_limits.py,sha256=jPjzjwOENOHdcS2yU_UhAKABlyJ0_kDcHqj-egN3gTc,16477
98
- pycontrails/models/ps_model/ps_grid.py,sha256=ybrHM8IfVuOE_lBQN6z35CVguMyHsCVzA0CKJmydKMQ,26033
97
+ pycontrails/models/ps_model/ps_operational_limits.py,sha256=XwMHO8yu8EZUWtxRgjRKwxmCrmKGoHO7Ob6nlfkrthI,16441
98
+ pycontrails/models/ps_model/ps_grid.py,sha256=DTUXTxYIQ-6iquiCGtScOqkPvakz9F57DxUHQ3JmXIA,26071
99
99
  pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv,sha256=ksrpQTHkxSt1Va_R0rHdenEz6DlIs-Sfk1KFBzHKjhk,1038
100
100
  pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv,sha256=3eNhSwzut0gon04k2EYKKaXRvQSUlau3yBAbHS0EBao,25784
101
101
  pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=l4vBPrOKCJDz5Y1uMjmOGVyUcSWgfZtFWbjW968OPz8,5875
102
102
  pycontrails/models/cocipgrid/__init__.py,sha256=ar6bF_8Pusbb-myujz_q5ntFylQTNH8yiM8fxP7Zk30,262
103
- pycontrails/models/cocipgrid/cocip_grid.py,sha256=3lytIYCiTSZSSRvtDCCISM_0oOx3BH50Z-Y04-6v0Uk,93459
104
- pycontrails/physics/geo.py,sha256=Br0w1-Yfzin1a_IZDeKDT21YtYqoQC8FQGRxcPyoPcU,36233
103
+ pycontrails/models/cocipgrid/cocip_grid.py,sha256=uLQ86xK12LJ43KKb-CdSaDDamj4GyfDbiHp_NefotZU,91151
104
+ pycontrails/physics/geo.py,sha256=5THIXgpaHBQdSYWLgtK4mV_8e1hWW9XeTsSHOShFMeA,36323
105
105
  pycontrails/physics/units.py,sha256=BC0e0l_pDeijqN179tXl8eX_Qpw8d17MVujBu1SV3IE,12293
106
106
  pycontrails/physics/constants.py,sha256=pHQQmccMUwuNnY4hFtm3L8G2rnUQcfJnroyQr8HAVeM,3146
107
107
  pycontrails/physics/__init__.py,sha256=_1eWbEy6evEWdfJCEkwDiSdpiDNzNWEPVqaPekHyhwU,44
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp313-cp313-macosx_11_0_arm64
5
5