pycontrails 0.54.4__cp310-cp310-win_amd64.whl → 0.54.6__cp310-cp310-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.

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.cp310-win_amd64.pyd +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,22 +1,22 @@
1
1
  pycontrails/__init__.py,sha256=NOLObVatChUoklxD_qM8rjDtzrYu1gpmurNWqBhPpUM,2074
2
- pycontrails/_version.py,sha256=xKxgcTEdq0NjYH6Hbq4pY-EOXx3T98XpNxO1vgFDJqU,429
2
+ pycontrails/_version.py,sha256=fpB6PGg0QTJniUGkjeIPxIbiS3yN4-9wDXf5Ml7KyLE,429
3
3
  pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  pycontrails/core/__init__.py,sha256=kOAehIZBbvksSW3MuU2DfzsyeE4PaFnOTpYMeq2ZDPE,886
5
- pycontrails/core/aircraft_performance.py,sha256=nSIrsWsrP5muWtI805kR_shv6Um8QJMHVLCAMa1ycvk,27902
6
- pycontrails/core/airports.py,sha256=nGKXN3jOtzsDCaJZVFNO3e3w-U3lqMTz5Ww5jALiRJY,6984
5
+ pycontrails/core/aircraft_performance.py,sha256=lXw-RRg96yfXnsWPR5q3ARV_RGp1c32ozfx0mkHlb1k,28688
6
+ pycontrails/core/airports.py,sha256=b0ujvU1nyWr4a-qtNSigPo3s4K02xAeGcyTeeHFK4KU,6963
7
7
  pycontrails/core/cache.py,sha256=NnlElV4ejshgyU2LMf5BtZGqmr1kZOxwz1hAT2Lq1ok,28953
8
8
  pycontrails/core/coordinates.py,sha256=J5qjGuXgbLUw_U9_qREdgOaHl0ngK6Hbbjj3uw7FwNE,5565
9
- pycontrails/core/fleet.py,sha256=FHvyikLV0o4d0OXw4AQGXNK24v4ybS1gYSBae4FF_cg,16431
10
- pycontrails/core/flight.py,sha256=pZJy0N1EJZCqXFjZLfCMuFqGaA9mK4IUtaC-JvodS8I,82540
11
- pycontrails/core/flightplan.py,sha256=0ozSt3jqa62PZBjXnEDQLbZO1YORg3r2552RpRtkKZA,7555
9
+ pycontrails/core/fleet.py,sha256=ddujPC79K975gWVk8NDskE79OZaUam8tPR9rONaT918,17192
10
+ pycontrails/core/flight.py,sha256=dJ8t2BvM9C4fdmNZFQ9fHxRbcrhOP4KIJ6l0pYQZrsU,82830
11
+ pycontrails/core/flightplan.py,sha256=bcDjmJ-UR1gtuOLgAkCsRnwjJrz_l3n0nVRuj4_d9EU,7555
12
12
  pycontrails/core/fuel.py,sha256=06YUDhvC8Rx6KbUXRB9qLTsJX2V7tLbzjwAfDH0R6l8,4472
13
- pycontrails/core/interpolation.py,sha256=CDuOi1wXUT0L_LhPthiptoPsTAcXV7OuQW9FHsWXutQ,26400
14
- pycontrails/core/met.py,sha256=9xAqkEGg4wKn6lBisvBl0AnMzr_xjG2Jx7-WMaTb0DQ,104252
15
- pycontrails/core/met_var.py,sha256=iLk8R2Yq2MCnc7_XJLUULqojBwe1seFp3jdaTm8T-BY,9490
16
- pycontrails/core/models.py,sha256=BVNsBL5vSKzJPZCN57v7BOfLtXufVlIBN8jFJHCuwM4,40984
13
+ pycontrails/core/interpolation.py,sha256=-GC3T6yh3nMtt7JCawoYeCUnDNRY9GHhxhkRhhnntxE,26437
14
+ pycontrails/core/met.py,sha256=JeTLNbFMv19MJk8N3kihLgt5vXlMHOj0AetO8rHtPgU,106497
15
+ pycontrails/core/met_var.py,sha256=kBwk0twIfo4jWNo_L1vxwdB40YzuSjXhbLFxGUFSpfM,11913
16
+ pycontrails/core/models.py,sha256=odpHsazdvF_tKNwNS3y1qU9L3dC0dGV2RA5XqU4BeYw,41004
17
17
  pycontrails/core/polygon.py,sha256=NZ4YBhdALidXYOPsSX1cwGQ022j-AXgbWIQg7LA-f-I,18593
18
- pycontrails/core/rgi_cython.cp310-win_amd64.pyd,sha256=XvWkW6tGK0APEng_hkHO183kPsyLlvu4diC0ygzaJvg,256000
19
- pycontrails/core/vector.py,sha256=SPG96XDzm3WLUsL-pbQFx3w8YPo-CVp6IgGIWgy5sl8,72239
18
+ pycontrails/core/rgi_cython.cp310-win_amd64.pyd,sha256=smC_WpTwpbC8tvQiOWHF7nWfxxBSwFpl1XDAr01Sb_U,256000
19
+ pycontrails/core/vector.py,sha256=T8YMtylYPmeHo3sanfgmZVSCPckoJTFg3Iq8apGBNIA,73445
20
20
  pycontrails/datalib/__init__.py,sha256=Q2RrnjwtFzfsmJ2tEojDCzDMkd8R0MYw4mQz3YwUsqI,381
21
21
  pycontrails/datalib/goes.py,sha256=eMo_A_Kxii3dTItp6_j6obvyT1NiGAr06RyYMuHZzd0,27327
22
22
  pycontrails/datalib/landsat.py,sha256=YrDpngF5HtvWFVwxN0FLFxCfZIEmeBMiifdkbH7fQTk,20263
@@ -25,20 +25,20 @@ pycontrails/datalib/spire.py,sha256=aW0wh5GDrszFb20ZMzmWKQ4uHbOCmHvVt9Sf4U3AyTI,
25
25
  pycontrails/datalib/_leo_utils/search.py,sha256=8JzT56ps3SH1W-5rwL8BWuxLLljwxa_5fjLAuZdL_Vg,8937
26
26
  pycontrails/datalib/_leo_utils/vis.py,sha256=0UDVcqMRqHmAORDV4Xyk-HVnTAjbOCf7KCpWm2ilTLE,1861
27
27
  pycontrails/datalib/_leo_utils/static/bq_roi_query.sql,sha256=r_gVjpoEvCcAJP56QlXaXzgfWPZdf-kYo3D316glJLU,266
28
- pycontrails/datalib/_met_utils/metsource.py,sha256=-Jhv02bUtqaB52Fy5w1O3AGStils1Qa9aDxRG57qwTQ,24867
28
+ pycontrails/datalib/_met_utils/metsource.py,sha256=7QGqAt3FXmXnU7AfN-w6wkXzZKgpCS1WYfoTg5uhtZA,24865
29
29
  pycontrails/datalib/ecmwf/__init__.py,sha256=9EkfWlGki8LYt7ySKf87gS8RzZjAOxK2w87_Sok3CCo,2094
30
30
  pycontrails/datalib/ecmwf/arco_era5.py,sha256=PojAfT0N12SLcgiecZtHiN96sbRWwFx3PThrXIwSX5M,12782
31
31
  pycontrails/datalib/ecmwf/common.py,sha256=6fcZC_-3FvWJ3vtlZX89PiiS7-DSQhAOgxrLjwU4iW4,4138
32
- pycontrails/datalib/ecmwf/era5.py,sha256=W4qA-9UPIMXHZ86FymC5irgfx9l7a8Age3FbE2x6D40,19601
33
- pycontrails/datalib/ecmwf/era5_model_level.py,sha256=0uZiRFgj4dTvx4f92butomAof2yuMM-VY-SFnIovyNY,19919
32
+ pycontrails/datalib/ecmwf/era5.py,sha256=TbZlOqn3fPmfvCUR1XrVBWxNgIBpSXgRx0S4M49TSeY,19506
33
+ pycontrails/datalib/ecmwf/era5_model_level.py,sha256=NVquyG_3SzdmfoQl25Wvp4oB_pOe7K_AQOfNv7no14E,19844
34
34
  pycontrails/datalib/ecmwf/hres.py,sha256=k7VK1KUOopzTd0TrO5FYwFSSagArKq4q8oAyK3hNPso,29168
35
35
  pycontrails/datalib/ecmwf/hres_model_level.py,sha256=ghrN-z5bjV-ztv6L5KlGiCLlGR9ABbAe5k38CaARmLU,18121
36
- pycontrails/datalib/ecmwf/ifs.py,sha256=qCZHJPWs0Kxnmk--SX-ozNZf53Y3-NmbusX0olfsEjE,11067
36
+ pycontrails/datalib/ecmwf/ifs.py,sha256=a5QmXuihBNGx1eNN7EJGjR5dL9dO142nqkDSkPYGGlc,11048
37
37
  pycontrails/datalib/ecmwf/model_levels.py,sha256=noLSx45AHZ0rFPiUh3aK3iaEueHgsg6mG_AplHqHeU8,17431
38
38
  pycontrails/datalib/ecmwf/variables.py,sha256=49uzpkk9YV5OGBnq-Po5e3ig2JXi2i1ZtsOOEC-AQFI,10181
39
39
  pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv,sha256=9u7CVA3QnPUmNLIWUkF5b9wFunczkvx1zSudwGmtOv8,9927
40
40
  pycontrails/datalib/gfs/__init__.py,sha256=DGd8twOXwRZZhHx5muc9SJT-YET1KB599kS45_x3IbY,712
41
- pycontrails/datalib/gfs/gfs.py,sha256=Maxz7n8IbOWjTWWBQ-UTuRiN_25DGiKzIPTfMdNPFjY,23074
41
+ pycontrails/datalib/gfs/gfs.py,sha256=qh_nMDaSqkGs-YgibsmDWWXGtn6HY7EUqv5tve7IK5s,23055
42
42
  pycontrails/datalib/gfs/variables.py,sha256=gmw5cs8RAeB-s9kCbnuKFp1K2SqNbc0lNR-JqhcenZY,3239
43
43
  pycontrails/ext/bada.py,sha256=RmLDMaZQody8XUR-1I_5rPJqoz6eIq63IpDTcuJweoc,1133
44
44
  pycontrails/ext/cirium.py,sha256=zRPVBBWwocZKkX3XhonSBf54x7P_xnjRcA7psI0Kqnw,429
@@ -46,52 +46,52 @@ pycontrails/ext/empirical_grid.py,sha256=mveQltokaGeQcxxbdMSLQ6wQ14oh3XX5dfzjWaF
46
46
  pycontrails/ext/synthetic_flight.py,sha256=6w2pC7DpbdHi3J1w5BL-8j3xCzYdP8N7FQ8dsMfDBpw,17226
47
47
  pycontrails/models/__init__.py,sha256=TKhrXe1Pu1-mV1gctx8cUAMrVxCCAtBkbZi9olfWq8s,34
48
48
  pycontrails/models/accf.py,sha256=YlRo5aDeHSSYE7IRHbNW4dsWTACCkVaYsqGbgM-AqlI,14090
49
- pycontrails/models/dry_advection.py,sha256=rjjd7-KjC98JVbB-ne13o41TuxvJeQ9d6IrrQI2XBuI,17377
50
- pycontrails/models/issr.py,sha256=QXkTIpj13u9qG5BeAaMVdtWbN8hNSsnGLL5hIzU5ZMM,7550
51
- pycontrails/models/pcc.py,sha256=M5KhtRgdCP9pfDFgui7ibbijtRBTjx3QOJL_m1tQYfs,11443
49
+ pycontrails/models/dry_advection.py,sha256=vDPjNrECefMvRVnfkhWCWbYQPpB2YYhGUvLiIuW10TM,19727
50
+ pycontrails/models/issr.py,sha256=J6mh4pze31XpD2_zD9ujzYPXsZFrmSwNcRORCcLoOVI,7588
51
+ pycontrails/models/pcc.py,sha256=7k8kICqDeZ99O2n2Zpnu7EFNGjEpPka_9cu9nrmP44s,11394
52
52
  pycontrails/models/pcr.py,sha256=G_0yR5PsCMeJBP6tZFi3M7A6Wcq8s71UvosdA7ozUkI,5502
53
53
  pycontrails/models/sac.py,sha256=LhEwexJZnkxitj-x5eNVSCDGdkoCdj8Zh_I0WB8FWOY,16405
54
- pycontrails/models/tau_cirrus.py,sha256=7wvZrgT9Da8A4SzIlLsE1zIRoJRNglmR2yKsMCAjxaQ,5556
54
+ pycontrails/models/tau_cirrus.py,sha256=G39eEUYdPMC0AEW4msC1pxRvzLLdgw9Sfzzzi_jB5Sw,5959
55
55
  pycontrails/models/apcemm/__init__.py,sha256=dDsRW3V6jjzKDd43Yoyc74m_Om1fccvftZgp3OFdAYE,183
56
- pycontrails/models/apcemm/apcemm.py,sha256=WpJ6TwteIBnYXq5QwoklBEQZBK4Ot7It993JWQQl7JY,40982
56
+ pycontrails/models/apcemm/apcemm.py,sha256=tbG57Vro7_vXwqE0YpXrimPTtvAXsurti2eBAVWGe-Y,40958
57
57
  pycontrails/models/apcemm/inputs.py,sha256=zHRSWVVlwYw6ms7PpC0p0I-xFsRDUVY9eDZ1g95Uf8U,6811
58
- pycontrails/models/apcemm/utils.py,sha256=6pKQbS5EAzTnI_edVtUvGrzM0xwNq1t9MBGgCRJtg_0,17531
58
+ pycontrails/models/apcemm/utils.py,sha256=gew1MGtuOwKy0CTVKomJ_Lmuhmy4JxsopkughzCeB4o,17519
59
59
  pycontrails/models/apcemm/static/apcemm_yaml_template.yaml,sha256=A3H_FWVOtqkZhG91TWLdblMKaLWIcjRMsKqkfTN6mB4,6928
60
60
  pycontrails/models/cocip/__init__.py,sha256=v8JJN_Jx3_tOHaqGaQG-Es7srEAtSCHI7-gCEnM-n-s,991
61
- pycontrails/models/cocip/cocip.py,sha256=IEinGyJ8yV2-BGNv6zJp0Txcps2kO3GlFGmeFgE8mL8,102758
61
+ pycontrails/models/cocip/cocip.py,sha256=CtZWQWAAuOhyn3KVgkvoQGYYRNGP__8G4HR6c-irYe8,105086
62
62
  pycontrails/models/cocip/cocip_params.py,sha256=9q6teJgXKxEqWLhA_itMG-A8OeLIFb7XvEUUf7eTjdE,12631
63
63
  pycontrails/models/cocip/cocip_uncertainty.py,sha256=fKQVAg-HyviegwNauxLgX9wdA0cRpK8XAOCNjZZIRWI,12528
64
64
  pycontrails/models/cocip/contrail_properties.py,sha256=jF7iXFmMQEpyI3DNkRa7NFs-unx5a3HmmX6xs9FSJDQ,57734
65
- pycontrails/models/cocip/output_formats.py,sha256=JwEpcagVSoyKihTR6pgPEBB0WJAwRwHxVkL2_xeQJLY,85958
65
+ pycontrails/models/cocip/output_formats.py,sha256=WpuSYTZ221kYUQNgUZGssdZlMXMy2GeCCiU13pCaAyI,85975
66
66
  pycontrails/models/cocip/radiative_forcing.py,sha256=Zx7amTmIQHozuYyxfkryBJZVFDJws6a--By71TIMMIk,46297
67
67
  pycontrails/models/cocip/radiative_heating.py,sha256=PcOEkqRtQJNq7bxOoz1baBbVV2ku1UQRMrrQXXsRBwc,19504
68
68
  pycontrails/models/cocip/unterstrasser_wake_vortex.py,sha256=GBFtwCPslStlgJU81WgE7nkWHVfSJkxFrPgJ2nq4PJc,15081
69
69
  pycontrails/models/cocip/wake_vortex.py,sha256=i6P1UDxde_WPP8SAliPdiaVCdeFMRxCFR7_zKaoNlno,14911
70
70
  pycontrails/models/cocip/wind_shear.py,sha256=qhmP3RJ9SEjd-qnXcgRiYis9-apKGF-1d78z6N__tq8,3988
71
71
  pycontrails/models/cocipgrid/__init__.py,sha256=OYSdZ1Htbr_IP7N_HuOAj1Pa_KLHtdEeJfXP-cN-gnU,271
72
- pycontrails/models/cocipgrid/cocip_grid.py,sha256=ovBUx81oaeMzTqKlZGJUXwHRdm3q8iX3tofTWyKfuhA,96045
72
+ pycontrails/models/cocipgrid/cocip_grid.py,sha256=8J7WeTyblaJo69yp6VSRVcic_Jrs1vITXL93jTWHY1o,93672
73
73
  pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=ZpN00VEmeRYaeZhvSfVjnEjrgn6XdClf1eqJC8Ytcuw,6013
74
74
  pycontrails/models/emissions/__init__.py,sha256=phai3wH5VuUyfyVpu5vHOFI0jXSyoYSWvLTknS78xs0,499
75
75
  pycontrails/models/emissions/black_carbon.py,sha256=oIi-SxnRKdVDewyzqpA5eE4kzq5CJCtPcNcqrUh4Ito,20940
76
- pycontrails/models/emissions/emissions.py,sha256=0vvVtR5T3Hk5E5g5ORLgr1wsYgAutlAKXDB-Rhoq3JE,49006
76
+ pycontrails/models/emissions/emissions.py,sha256=nj3dNXH2NXX4xotsbkt2_yVen4nAioSFFeqCu-9dL9w,49044
77
77
  pycontrails/models/emissions/ffm2.py,sha256=sWWzaV-5N2nNQlS0RxgKFwPzja5dehc99mfifTHW6pQ,12404
78
78
  pycontrails/models/emissions/static/default-engine-uids.csv,sha256=6e-0Fjbka1www4o2CNtw2pW-g0s_E7hZQ6vOaR84Q5Y,6456
79
79
  pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv,sha256=s-3_KGQyVoypXCHeQgsTDwdri-e3JVJn5SDxZo60m_s,128119
80
80
  pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv,sha256=MwLLrcATd38KPddTpHpMGBrZuA4I7he-1B5otTp4ar8,77533
81
81
  pycontrails/models/humidity_scaling/__init__.py,sha256=-xqDCJzKJx2nX6yl-gglHheQHWDhkvb8X7atbMJT2LA,1156
82
- pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=NT0VtkrCAiQwaQMBqfHskNPDmCpEX2Qpm1faMDsiOmI,37800
82
+ pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=7s9EsWmHm02feXZOSB-sdnVJQ-wyTvtRwB-C9NqqiTQ,37797
83
83
  pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq,sha256=pShCvNUo0NYtAHhT9IBRuj38X9jejdlKfv-ZoOKmtKI,35943
84
84
  pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq,sha256=tfYhbafF9Z-gGCg6VQ1YBlOaK_01e65Dc6s9b-hQ6Zo,286375
85
85
  pycontrails/models/ps_model/__init__.py,sha256=fCGfdrJjK4K_EOODU8exmOFzedbABb3bMbuFi0gbrgc,571
86
86
  pycontrails/models/ps_model/ps_aircraft_params.py,sha256=xs6-bCAhhOgN-LRDa7rUuuJdYM-bjDAMABLRayVhYwo,13731
87
- pycontrails/models/ps_model/ps_grid.py,sha256=UUc7ena69z7h5PISa3a9-fyU074U7vgWWQF-aC_9WE8,26734
88
- pycontrails/models/ps_model/ps_model.py,sha256=quKoYFhfXjnUQQx-ePcNVmOmN6G_o91g6_Sobz3Hndw,34255
89
- pycontrails/models/ps_model/ps_operational_limits.py,sha256=qGT6_EP0v5Zn9_V5fnB309eyifZRzQFE1G5qmJiw4gU,17006
87
+ pycontrails/models/ps_model/ps_grid.py,sha256=IhtCJF5FxJM7xYcc6jwPog91owe3dfkMwsOh6UTcrqI,26772
88
+ pycontrails/models/ps_model/ps_model.py,sha256=-l2sEWzyjaoXNjvATKoC_vqbNYfex4XpgXSzDAf03zQ,33261
89
+ pycontrails/models/ps_model/ps_operational_limits.py,sha256=95evggmtPbnr3kqNgqfOEJhbupK_D_ksONPmTm0k2B8,16966
90
90
  pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv,sha256=2RtIHwXRuMVAEfsefopm1m6ozHi8YciYUN3WTMpfoo4,25852
91
91
  pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv,sha256=MLXOeVjC5FQULGNc6rn-_BdSURJAkJLMSDzPhC7OpDY,1141
92
92
  pycontrails/physics/__init__.py,sha256=AScCMSMSZjKxfL6mssdSLwcja1ml7MzREThQp5PLr9U,45
93
93
  pycontrails/physics/constants.py,sha256=SWG7H7eJCvQXfUR3qS6_fYzNvEeRZga50qT2RuaHoYU,3262
94
- pycontrails/physics/geo.py,sha256=k7fuEhWsV-qGn37wZklnlQpmoalhBN12Ygm_kN6dUFo,37371
94
+ pycontrails/physics/geo.py,sha256=WyZKLj-63yGCfjePEhiwxLp26be44VCdEiisu9tXtzE,37461
95
95
  pycontrails/physics/jet.py,sha256=z_MNEU7BVcy0sTtRbpKooS0Ynf4Ah5kVMDoLIeO-4Fg,31274
96
96
  pycontrails/physics/thermo.py,sha256=HAcg2wmNXW-vJbOF2kOXBoUyJiAosPY0nRWeM37otdY,13238
97
97
  pycontrails/physics/units.py,sha256=P6j9v2-29TDoy2JE_FQlcXH-2mlihVulSP1wBLqZY44,12765
@@ -103,9 +103,9 @@ pycontrails/utils/iteration.py,sha256=En2YY4NiNwCNtAVO8HL6tv9byBGKs8MKSI7R8P-gZy
103
103
  pycontrails/utils/json.py,sha256=Pqashwoupuf_GfrrSfHclwug9Hg-kYQ4WNxEqay_0Rc,6083
104
104
  pycontrails/utils/temp.py,sha256=5XXqQoEfWjz1OrhoOBZD5vkkCFeuq9LpZkyhc38gIeY,1159
105
105
  pycontrails/utils/types.py,sha256=hPqUwaeRLgga69nj7LVbPojPg1k7pUSvYzFlGAiPKIM,5154
106
- pycontrails-0.54.4.dist-info/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
107
- pycontrails-0.54.4.dist-info/METADATA,sha256=lSgEm44TBaerh5-wlgcdIVWvGv7EN1QSc6Fm2mmUCb0,9335
108
- pycontrails-0.54.4.dist-info/NOTICE,sha256=QG0F9avpssHcmlEMlLbndVRGqmB7ATPIk16uDVmTlVE,1972
109
- pycontrails-0.54.4.dist-info/WHEEL,sha256=tcd-HDpskugT8GYYKyyid0lOlzoZtZdWwcrj5ormtfo,101
110
- pycontrails-0.54.4.dist-info/top_level.txt,sha256=dwaYXVcMhF92QWtAYcLvL0k02vyBqwhsv92lYs2V6zQ,23
111
- pycontrails-0.54.4.dist-info/RECORD,,
106
+ pycontrails-0.54.6.dist-info/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
107
+ pycontrails-0.54.6.dist-info/METADATA,sha256=xLlw2rgL4SdWGJz7X5z5AwKSe_-kgycaMUlYsEorXNo,9292
108
+ pycontrails-0.54.6.dist-info/NOTICE,sha256=QG0F9avpssHcmlEMlLbndVRGqmB7ATPIk16uDVmTlVE,1972
109
+ pycontrails-0.54.6.dist-info/WHEEL,sha256=rzGfZgUcGeKSgIHGYMuqg4xE4VPHxnaldXH6BG0zjVk,101
110
+ pycontrails-0.54.6.dist-info/top_level.txt,sha256=dwaYXVcMhF92QWtAYcLvL0k02vyBqwhsv92lYs2V6zQ,23
111
+ pycontrails-0.54.6.dist-info/RECORD,,
@@ -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: cp310-cp310-win_amd64
5
5