pycontrails 0.47.3__cp310-cp310-macosx_11_0_arm64.whl → 0.48.1__cp310-cp310-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/__init__.py +2 -2
- pycontrails/_version.py +2 -2
- pycontrails/core/coordinates.py +17 -10
- pycontrails/core/datalib.py +155 -113
- pycontrails/core/flight.py +45 -28
- pycontrails/core/met.py +163 -39
- pycontrails/core/met_var.py +9 -9
- pycontrails/core/models.py +27 -0
- pycontrails/core/rgi_cython.cpython-310-darwin.so +0 -0
- pycontrails/core/vector.py +257 -33
- pycontrails/datalib/ecmwf/common.py +14 -65
- pycontrails/datalib/ecmwf/era5.py +22 -27
- pycontrails/datalib/ecmwf/hres.py +53 -88
- pycontrails/datalib/ecmwf/ifs.py +10 -2
- pycontrails/datalib/gfs/gfs.py +68 -106
- pycontrails/models/accf.py +181 -154
- pycontrails/models/cocip/cocip.py +205 -105
- pycontrails/models/cocip/cocip_params.py +0 -4
- pycontrails/models/cocip/wake_vortex.py +9 -7
- pycontrails/models/cocipgrid/cocip_grid.py +2 -6
- pycontrails/models/issr.py +29 -31
- pycontrails/models/pcr.py +5 -12
- pycontrails/models/sac.py +24 -27
- pycontrails/models/tau_cirrus.py +22 -5
- pycontrails/utils/types.py +1 -1
- {pycontrails-0.47.3.dist-info → pycontrails-0.48.1.dist-info}/METADATA +2 -2
- {pycontrails-0.47.3.dist-info → pycontrails-0.48.1.dist-info}/RECORD +31 -31
- {pycontrails-0.47.3.dist-info → pycontrails-0.48.1.dist-info}/WHEEL +1 -1
- {pycontrails-0.47.3.dist-info → pycontrails-0.48.1.dist-info}/LICENSE +0 -0
- {pycontrails-0.47.3.dist-info → pycontrails-0.48.1.dist-info}/NOTICE +0 -0
- {pycontrails-0.47.3.dist-info → pycontrails-0.48.1.dist-info}/top_level.txt +0 -0
pycontrails/models/issr.py
CHANGED
|
@@ -9,7 +9,7 @@ import numpy as np
|
|
|
9
9
|
|
|
10
10
|
import pycontrails
|
|
11
11
|
from pycontrails.core.flight import Flight
|
|
12
|
-
from pycontrails.core.met import
|
|
12
|
+
from pycontrails.core.met import MetDataset
|
|
13
13
|
from pycontrails.core.met_var import AirTemperature, SpecificHumidity
|
|
14
14
|
from pycontrails.core.models import Model, ModelParams
|
|
15
15
|
from pycontrails.core.vector import GeoVectorDataset
|
|
@@ -56,12 +56,14 @@ class ISSR(Model):
|
|
|
56
56
|
>>> # Instantiate and run model
|
|
57
57
|
>>> scaling = ConstantHumidityScaling(rhi_adj=0.98)
|
|
58
58
|
>>> model = ISSR(met, humidity_scaling=scaling)
|
|
59
|
-
>>>
|
|
60
|
-
>>>
|
|
61
|
-
|
|
59
|
+
>>> out1 = model.eval()
|
|
60
|
+
>>> issr1 = out1["issr"]
|
|
61
|
+
>>> issr1.proportion # Get proportion of values with ice supersaturation
|
|
62
|
+
0.114140
|
|
62
63
|
|
|
63
64
|
>>> # Run with a lower threshold
|
|
64
|
-
>>>
|
|
65
|
+
>>> out2 = model.eval(rhi_threshold=0.95)
|
|
66
|
+
>>> issr2 = out2["issr"]
|
|
65
67
|
>>> issr2.proportion
|
|
66
68
|
0.146647
|
|
67
69
|
"""
|
|
@@ -78,11 +80,11 @@ class ISSR(Model):
|
|
|
78
80
|
def eval(self, source: GeoVectorDataset, **params: Any) -> GeoVectorDataset: ...
|
|
79
81
|
|
|
80
82
|
@overload
|
|
81
|
-
def eval(self, source: MetDataset | None = ..., **params: Any) ->
|
|
83
|
+
def eval(self, source: MetDataset | None = ..., **params: Any) -> MetDataset: ...
|
|
82
84
|
|
|
83
85
|
def eval(
|
|
84
86
|
self, source: GeoVectorDataset | Flight | MetDataset | None = None, **params: Any
|
|
85
|
-
) -> GeoVectorDataset | Flight |
|
|
87
|
+
) -> GeoVectorDataset | Flight | MetDataset:
|
|
86
88
|
"""Evaluate ice super-saturated regions along flight trajectory or on meteorology grid.
|
|
87
89
|
|
|
88
90
|
.. versionchanged:: 0.27.0
|
|
@@ -90,6 +92,12 @@ class ISSR(Model):
|
|
|
90
92
|
Humidity scaling now handled automatically. This is controlled by
|
|
91
93
|
model parameter ``humidity_scaling``.
|
|
92
94
|
|
|
95
|
+
.. versionchanged:: 0.48.0
|
|
96
|
+
|
|
97
|
+
If the ``source`` is a :class:`MetDataset`, the returned object will
|
|
98
|
+
also be a :class:`MetDataset`. Previous the "issr" :class:`MetDataArray`
|
|
99
|
+
was returned.
|
|
100
|
+
|
|
93
101
|
Parameters
|
|
94
102
|
----------
|
|
95
103
|
source : GeoVectorDataset | Flight | MetDataset | None, optional
|
|
@@ -100,7 +108,7 @@ class ISSR(Model):
|
|
|
100
108
|
|
|
101
109
|
Returns
|
|
102
110
|
-------
|
|
103
|
-
GeoVectorDataset | Flight |
|
|
111
|
+
GeoVectorDataset | Flight | MetDataset
|
|
104
112
|
Returns 1 in ISSR, 0 everywhere else.
|
|
105
113
|
Returns `np.nan` if interpolating outside meteorology grid.
|
|
106
114
|
|
|
@@ -117,40 +125,30 @@ class ISSR(Model):
|
|
|
117
125
|
self.downselect_met()
|
|
118
126
|
self.source.setdefault("air_pressure", self.source.air_pressure)
|
|
119
127
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
128
|
+
humidity_scaling = self.params["humidity_scaling"]
|
|
129
|
+
scale_humidity = humidity_scaling is not None and "specific_humidity" not in self.source
|
|
130
|
+
|
|
123
131
|
self.set_source_met()
|
|
124
132
|
|
|
125
133
|
# apply humidity scaling, warn if no scaling is provided for ECMWF data
|
|
126
134
|
if scale_humidity:
|
|
127
|
-
|
|
135
|
+
humidity_scaling.eval(self.source, copy_source=False)
|
|
128
136
|
|
|
129
|
-
|
|
137
|
+
self.source["issr"] = issr(
|
|
130
138
|
air_temperature=self.source.data["air_temperature"],
|
|
131
139
|
specific_humidity=self.source.data["specific_humidity"],
|
|
132
140
|
air_pressure=self.source.data["air_pressure"],
|
|
133
141
|
rhi=self.source.data.get("rhi", None), # if rhi already known, pass it in
|
|
134
142
|
rhi_threshold=self.params["rhi_threshold"],
|
|
135
143
|
)
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
"
|
|
143
|
-
|
|
144
|
-
if scale_humidity:
|
|
145
|
-
for k, v in self.params["humidity_scaling"].description.items():
|
|
146
|
-
attrs[f"humidity_scaling_{k}"] = v
|
|
147
|
-
if self.met is not None:
|
|
148
|
-
attrs["met_source"] = self.met.attrs.get("met_source", "unknown")
|
|
149
|
-
|
|
150
|
-
self.source["issr"].data.attrs.update(attrs)
|
|
151
|
-
return self.source["issr"]
|
|
152
|
-
|
|
153
|
-
# In GeoVectorDataset case, return source
|
|
144
|
+
|
|
145
|
+
# Tag output with additional metadata attrs
|
|
146
|
+
self.transfer_met_source_attrs()
|
|
147
|
+
self.source.attrs["pycontrails_version"] = pycontrails.__version__
|
|
148
|
+
if scale_humidity:
|
|
149
|
+
for k, v in humidity_scaling.description.items():
|
|
150
|
+
self.source.attrs[f"humidity_scaling_{k}"] = v
|
|
151
|
+
|
|
154
152
|
return self.source
|
|
155
153
|
|
|
156
154
|
|
pycontrails/models/pcr.py
CHANGED
|
@@ -12,7 +12,7 @@ from typing import Any, overload
|
|
|
12
12
|
import numpy as np
|
|
13
13
|
|
|
14
14
|
from pycontrails.core.flight import Flight
|
|
15
|
-
from pycontrails.core.met import
|
|
15
|
+
from pycontrails.core.met import MetDataset
|
|
16
16
|
from pycontrails.core.met_var import AirTemperature, SpecificHumidity
|
|
17
17
|
from pycontrails.core.models import Model
|
|
18
18
|
from pycontrails.core.vector import GeoVectorDataset
|
|
@@ -56,11 +56,11 @@ class PCR(Model):
|
|
|
56
56
|
def eval(self, source: GeoVectorDataset, **params: Any) -> GeoVectorDataset: ...
|
|
57
57
|
|
|
58
58
|
@overload
|
|
59
|
-
def eval(self, source: MetDataset | None = ..., **params: Any) ->
|
|
59
|
+
def eval(self, source: MetDataset | None = ..., **params: Any) -> MetDataset: ...
|
|
60
60
|
|
|
61
61
|
def eval(
|
|
62
62
|
self, source: GeoVectorDataset | Flight | MetDataset | None = None, **params: Any
|
|
63
|
-
) -> GeoVectorDataset | Flight |
|
|
63
|
+
) -> GeoVectorDataset | Flight | MetDataset:
|
|
64
64
|
"""Evaluate potential contrails regions of the :attr:`met` grid.
|
|
65
65
|
|
|
66
66
|
Parameters
|
|
@@ -71,7 +71,7 @@ class PCR(Model):
|
|
|
71
71
|
|
|
72
72
|
Returns
|
|
73
73
|
-------
|
|
74
|
-
GeoVectorDataset | Flight |
|
|
74
|
+
GeoVectorDataset | Flight | MetDataset
|
|
75
75
|
Returns 1 in potential contrail regions, 0 everywhere else.
|
|
76
76
|
Returns ``np.nan`` if interpolating outside meteorology grid.
|
|
77
77
|
**params : Any
|
|
@@ -96,14 +96,7 @@ class PCR(Model):
|
|
|
96
96
|
|
|
97
97
|
pcr_ = _pcr_from_issr_and_sac(self.source.data["issr"], self.source.data["sac"])
|
|
98
98
|
self.source["pcr"] = pcr_
|
|
99
|
-
|
|
100
|
-
if isinstance(self.source, MetDataset):
|
|
101
|
-
attrs = {**self.source["issr"].attrs, **self.source["sac"].attrs}
|
|
102
|
-
attrs["description"] = self.long_name
|
|
103
|
-
self.source["pcr"].attrs.update(attrs)
|
|
104
|
-
return self.source["pcr"]
|
|
105
|
-
|
|
106
|
-
# In GeoVectorDataset case, return source
|
|
99
|
+
|
|
107
100
|
return self.source
|
|
108
101
|
|
|
109
102
|
|
pycontrails/models/sac.py
CHANGED
|
@@ -11,7 +11,7 @@ import scipy.optimize
|
|
|
11
11
|
import pycontrails
|
|
12
12
|
from pycontrails.core.flight import Flight
|
|
13
13
|
from pycontrails.core.fuel import Fuel, JetA
|
|
14
|
-
from pycontrails.core.met import
|
|
14
|
+
from pycontrails.core.met import MetDataset
|
|
15
15
|
from pycontrails.core.met_var import AirTemperature, SpecificHumidity
|
|
16
16
|
from pycontrails.core.models import Model, ModelParams
|
|
17
17
|
from pycontrails.core.vector import GeoVectorDataset
|
|
@@ -64,11 +64,11 @@ class SAC(Model):
|
|
|
64
64
|
def eval(self, source: GeoVectorDataset, **params: Any) -> GeoVectorDataset: ...
|
|
65
65
|
|
|
66
66
|
@overload
|
|
67
|
-
def eval(self, source: MetDataset | None = ..., **params: Any) ->
|
|
67
|
+
def eval(self, source: MetDataset | None = ..., **params: Any) -> MetDataset: ...
|
|
68
68
|
|
|
69
69
|
def eval(
|
|
70
70
|
self, source: GeoVectorDataset | Flight | MetDataset | None = None, **params: Any
|
|
71
|
-
) -> GeoVectorDataset | Flight |
|
|
71
|
+
) -> GeoVectorDataset | Flight | MetDataset:
|
|
72
72
|
"""Evaluate the Schmidt-Appleman criteria along flight trajectory or on meteorology grid.
|
|
73
73
|
|
|
74
74
|
.. versionchanged:: 0.27.0
|
|
@@ -76,6 +76,12 @@ class SAC(Model):
|
|
|
76
76
|
Humidity scaling now handled automatically. This is controlled by
|
|
77
77
|
model parameter ``humidity_scaling``.
|
|
78
78
|
|
|
79
|
+
.. versionchanged:: 0.48.0
|
|
80
|
+
|
|
81
|
+
If the ``source`` is a :class:`MetDataset`, the returned object will
|
|
82
|
+
also be a :class:`MetDataset`. Previous the "sac" :class:`MetDataArray`
|
|
83
|
+
was returned.
|
|
84
|
+
|
|
79
85
|
Parameters
|
|
80
86
|
----------
|
|
81
87
|
source : GeoVectorDataset | Flight | MetDataset | None, optional
|
|
@@ -86,7 +92,7 @@ class SAC(Model):
|
|
|
86
92
|
|
|
87
93
|
Returns
|
|
88
94
|
-------
|
|
89
|
-
GeoVectorDataset | Flight |
|
|
95
|
+
GeoVectorDataset | Flight | MetDataset
|
|
90
96
|
Returns 1 where SAC is satisfied, 0 everywhere else.
|
|
91
97
|
Returns `np.nan` if interpolating outside meteorology grid.
|
|
92
98
|
|
|
@@ -104,14 +110,13 @@ class SAC(Model):
|
|
|
104
110
|
self.downselect_met()
|
|
105
111
|
self.source.setdefault("air_pressure", self.source.air_pressure)
|
|
106
112
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
)
|
|
113
|
+
humidity_scaling = self.params["humidity_scaling"]
|
|
114
|
+
scale_humidity = humidity_scaling is not None and "specific_humidity" not in self.source
|
|
110
115
|
self.set_source_met()
|
|
111
116
|
|
|
112
117
|
# apply humidity scaling, warn if no scaling is provided for ECMWF data
|
|
113
118
|
if scale_humidity:
|
|
114
|
-
|
|
119
|
+
humidity_scaling.eval(self.source, copy_source=False)
|
|
115
120
|
|
|
116
121
|
# Extract source data
|
|
117
122
|
air_temperature = self.source.data["air_temperature"]
|
|
@@ -123,7 +128,8 @@ class SAC(Model):
|
|
|
123
128
|
if isinstance(self.source, Flight):
|
|
124
129
|
fuel = self.source.fuel
|
|
125
130
|
else:
|
|
126
|
-
fuel
|
|
131
|
+
# NOTE: Not setting fuel on MetDataset source
|
|
132
|
+
fuel = self.get_source_param("fuel", set_attr=False)
|
|
127
133
|
assert isinstance(fuel, Fuel), "The fuel attribute must be of type Fuel"
|
|
128
134
|
|
|
129
135
|
ei_h2o = fuel.ei_h2o
|
|
@@ -142,24 +148,15 @@ class SAC(Model):
|
|
|
142
148
|
self.source["rh_critical_sac"] = rh_crit_sac
|
|
143
149
|
self.source["sac"] = sac_
|
|
144
150
|
|
|
145
|
-
# Tag output with additional attrs
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
if self.met is not None:
|
|
155
|
-
attrs["met_source"] = self.met.attrs.get("met_source", "unknown")
|
|
156
|
-
if isinstance(engine_efficiency, (int, float)):
|
|
157
|
-
attrs["engine_efficiency"] = engine_efficiency
|
|
158
|
-
|
|
159
|
-
self.source["sac"].data.attrs.update(attrs)
|
|
160
|
-
return self.source["sac"]
|
|
161
|
-
|
|
162
|
-
# In GeoVectorDataset case, return source
|
|
151
|
+
# Tag output with additional metadata attrs
|
|
152
|
+
self.transfer_met_source_attrs()
|
|
153
|
+
self.source.attrs["pycontrails_version"] = pycontrails.__version__
|
|
154
|
+
if scale_humidity:
|
|
155
|
+
for k, v in humidity_scaling.description.items():
|
|
156
|
+
self.source.attrs[f"humidity_scaling_{k}"] = v
|
|
157
|
+
if isinstance(engine_efficiency, (int, float)):
|
|
158
|
+
self.source.attrs["engine_efficiency"] = engine_efficiency
|
|
159
|
+
|
|
163
160
|
return self.source
|
|
164
161
|
|
|
165
162
|
|
pycontrails/models/tau_cirrus.py
CHANGED
|
@@ -16,6 +16,27 @@ TauCirrus = MetVariable(
|
|
|
16
16
|
)
|
|
17
17
|
|
|
18
18
|
|
|
19
|
+
def _geopotential_height(met: MetDataset) -> xr.DataArray:
|
|
20
|
+
"""Extract geopotential height from MetDataset."""
|
|
21
|
+
|
|
22
|
+
# Attempt 1: Use geopotential height if available
|
|
23
|
+
try:
|
|
24
|
+
return met.data["geopotential_height"]
|
|
25
|
+
except KeyError:
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
# Attempt 2: Use geopotential if available
|
|
29
|
+
try:
|
|
30
|
+
return met.data["geopotential"] / constants.g
|
|
31
|
+
except KeyError:
|
|
32
|
+
pass
|
|
33
|
+
|
|
34
|
+
# Attempt 3: Approximate geopotential height from altitude
|
|
35
|
+
# https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.height_to_geopotential.html
|
|
36
|
+
altitude = met.data["altitude"]
|
|
37
|
+
return altitude * constants.radius_earth / (constants.radius_earth + altitude)
|
|
38
|
+
|
|
39
|
+
|
|
19
40
|
def tau_cirrus(met: MetDataset) -> xr.DataArray:
|
|
20
41
|
"""Calculate the optical depth of NWP cirrus around each pressure level.
|
|
21
42
|
|
|
@@ -25,7 +46,6 @@ def tau_cirrus(met: MetDataset) -> xr.DataArray:
|
|
|
25
46
|
A MetDataset with the following variables:
|
|
26
47
|
- "air_temperature"
|
|
27
48
|
- "specific_cloud_ice_water_content" or "ice_water_mixing_ratio"
|
|
28
|
-
- "geopotential_height" or "geopotential"
|
|
29
49
|
|
|
30
50
|
Returns
|
|
31
51
|
-------
|
|
@@ -41,10 +61,7 @@ def tau_cirrus(met: MetDataset) -> xr.DataArray:
|
|
|
41
61
|
of the derivative.
|
|
42
62
|
"""
|
|
43
63
|
|
|
44
|
-
|
|
45
|
-
geopotential_height = met.data["geopotential_height"]
|
|
46
|
-
except KeyError:
|
|
47
|
-
geopotential_height = met.data["geopotential"] / constants.g
|
|
64
|
+
geopotential_height = _geopotential_height(met)
|
|
48
65
|
|
|
49
66
|
# TODO: these are not *quite* the same, though we treat them the same for now
|
|
50
67
|
# ECMWF "specific_cloud_ice_water_content" is mass ice per mass of *moist* air
|
pycontrails/utils/types.py
CHANGED
|
@@ -29,7 +29,7 @@ ArrayScalarLike = TypeVar(
|
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
#: Datetime like input (datetime, pd.Timestamp, np.datetime64)
|
|
32
|
-
DatetimeLike = TypeVar("DatetimeLike", datetime, pd.Timestamp, np.datetime64)
|
|
32
|
+
DatetimeLike = TypeVar("DatetimeLike", datetime, pd.Timestamp, np.datetime64, str)
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
def support_arraylike(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pycontrails
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.48.1
|
|
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
|
|
@@ -68,7 +68,6 @@ Provides-Extra: ecmwf
|
|
|
68
68
|
Requires-Dist: cdsapi >=0.4 ; extra == 'ecmwf'
|
|
69
69
|
Requires-Dist: cfgrib >=0.9 ; extra == 'ecmwf'
|
|
70
70
|
Requires-Dist: eccodes >=1.4 ; extra == 'ecmwf'
|
|
71
|
-
Requires-Dist: ecmwflibs >=0.4 ; extra == 'ecmwf'
|
|
72
71
|
Requires-Dist: ecmwf-api-client >=1.6 ; extra == 'ecmwf'
|
|
73
72
|
Requires-Dist: netcdf4 >=1.6.1 ; extra == 'ecmwf'
|
|
74
73
|
Requires-Dist: platformdirs >=3.0 ; extra == 'ecmwf'
|
|
@@ -87,6 +86,7 @@ Provides-Extra: goes
|
|
|
87
86
|
Requires-Dist: cartopy >=0.22 ; extra == 'goes'
|
|
88
87
|
Requires-Dist: gcsfs >=2022.3 ; extra == 'goes'
|
|
89
88
|
Requires-Dist: h5netcdf >=1.2 ; extra == 'goes'
|
|
89
|
+
Requires-Dist: aiohttp >=3.9.0b0 ; (python_version >= "3.12") and extra == 'goes'
|
|
90
90
|
Provides-Extra: jupyter
|
|
91
91
|
Requires-Dist: ipywidgets >=7.6 ; extra == 'jupyter'
|
|
92
92
|
Requires-Dist: jupyterlab >=2.2 ; extra == 'jupyter'
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
pycontrails-0.
|
|
2
|
-
pycontrails-0.
|
|
3
|
-
pycontrails-0.
|
|
4
|
-
pycontrails-0.
|
|
5
|
-
pycontrails-0.
|
|
6
|
-
pycontrails-0.
|
|
7
|
-
pycontrails/_version.py,sha256=
|
|
8
|
-
pycontrails/__init__.py,sha256=
|
|
1
|
+
pycontrails-0.48.1.dist-info/RECORD,,
|
|
2
|
+
pycontrails-0.48.1.dist-info/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
|
|
3
|
+
pycontrails-0.48.1.dist-info/WHEEL,sha256=kDvY48Xu21LeV5YFIta_-l-0Q5d2H2VsRtRGyEH1GYU,110
|
|
4
|
+
pycontrails-0.48.1.dist-info/NOTICE,sha256=gKI8DcN1WhiXB2SFRKDogcjONldGubTvBxiOYdC4CXU,1926
|
|
5
|
+
pycontrails-0.48.1.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
|
|
6
|
+
pycontrails-0.48.1.dist-info/METADATA,sha256=-DmCMG3RmYaxq1sX_lfwfKAv8gV7naDqpKTadgpTCcI,8423
|
|
7
|
+
pycontrails/_version.py,sha256=SmV-QgndmfqQSl3EnRtXH5ks2pvcWLjNDwIDauQbrGk,413
|
|
8
|
+
pycontrails/__init__.py,sha256=jQlqY1c5d9cKwN5ItqaQdJdhAWnQbHIk4TX6QI-CYww,1962
|
|
9
9
|
pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
pycontrails/core/vector.py,sha256=
|
|
11
|
-
pycontrails/core/models.py,sha256=
|
|
10
|
+
pycontrails/core/vector.py,sha256=dHWUnsJasIHldRUtHy00zhONJH1pV8fgJ6sKJHIJrNk,70400
|
|
11
|
+
pycontrails/core/models.py,sha256=MtaujNXbUd0fWINWPqCIqOoWD6jv_sU649D7COavHpc,38306
|
|
12
12
|
pycontrails/core/interpolation.py,sha256=C275gTrX-GJWfMm6gd2LiD-fKSHmMmDFrq--Pn5w_x4,23703
|
|
13
13
|
pycontrails/core/fleet.py,sha256=Zxp23KPV2yugiY210wOLelI66HJLrjEDYa2y8JP1CmY,13278
|
|
14
|
-
pycontrails/core/rgi_cython.cpython-310-darwin.so,sha256=
|
|
15
|
-
pycontrails/core/flight.py,sha256=
|
|
14
|
+
pycontrails/core/rgi_cython.cpython-310-darwin.so,sha256=_7-AtgF4pnD7X-khqsWPjyvSGUqOuxUvqvaXdmsol7Y,316125
|
|
15
|
+
pycontrails/core/flight.py,sha256=QJCbVvY5P0JncjfxOHMme1uU3SPXAbs8hXHSRJKJCM4,71895
|
|
16
16
|
pycontrails/core/fuel.py,sha256=u6u12Hatq81yvCF1Y1hEEu-Bp-cMi-Vsl7-5jTGXUks,4050
|
|
17
17
|
pycontrails/core/polygon.py,sha256=RfiurNFrJWcJZuqIHRFCUncQEwIg0hutQrW9RLJVMY8,17315
|
|
18
|
-
pycontrails/core/datalib.py,sha256=
|
|
18
|
+
pycontrails/core/datalib.py,sha256=L_n0ns2Yspy2NswBJ5fIa5x8vJKdBxknsdWTYL14Jew,22495
|
|
19
19
|
pycontrails/core/cache.py,sha256=FvE50YK8dddydozpQHe-XxE1tj8xT5SWcb2LtLj-dC0,28453
|
|
20
20
|
pycontrails/core/__init__.py,sha256=4ZE7x1gMa_Q7GcgcWpPP9fQ-sTulCXWmMjsCJ0odakY,840
|
|
21
21
|
pycontrails/core/flightplan.py,sha256=7BwYPPo4QfqCIWzBwXD848xg34Ggza4ldi4VUogWVYQ,7643
|
|
22
|
-
pycontrails/core/met.py,sha256=
|
|
22
|
+
pycontrails/core/met.py,sha256=q1ZyinJ5pzin111ALRqruJV8b1TfoLKq5C5MZTrGDJc,89239
|
|
23
23
|
pycontrails/core/aircraft_performance.py,sha256=8Ig0vWMIe_EDOK4KUhOlzzjkmbvpXz6z0_0f_xZCacI,22149
|
|
24
24
|
pycontrails/core/airports.py,sha256=5D0VF9DxleQlVOmMW-P8_fVVkob-aB3doO1Co2XNFss,6766
|
|
25
|
-
pycontrails/core/met_var.py,sha256=
|
|
26
|
-
pycontrails/core/coordinates.py,sha256=
|
|
25
|
+
pycontrails/core/met_var.py,sha256=zyXWI_9dRS4FfH1Io_k0YcIxZIsp8y4YPiC_Oayi_gs,9195
|
|
26
|
+
pycontrails/core/coordinates.py,sha256=ALGzFXjr4poFsqflg8D0kzUTC5bBjsVcXwiHfEsw7vs,5098
|
|
27
27
|
pycontrails/datalib/goes.py,sha256=2JQ8C3iUtSl6hDjVivv4VB3oCRXxuT3ciB0OCFF2lIE,26150
|
|
28
28
|
pycontrails/datalib/__init__.py,sha256=s5b8W6scXgespKZjPcaC-8jyLd3FqZqN0BZccLxaGuE,237
|
|
29
|
-
pycontrails/datalib/ecmwf/era5.py,sha256=
|
|
30
|
-
pycontrails/datalib/ecmwf/hres.py,sha256=
|
|
29
|
+
pycontrails/datalib/ecmwf/era5.py,sha256=OteEGx3oGrYeqHwtZc-3JtJz1Bz0dzh6uT4GHEQfabM,18318
|
|
30
|
+
pycontrails/datalib/ecmwf/hres.py,sha256=lGp75SmS4GfLkppj7LiCcU1OXNA0_cP5mbun-AkdMok,28187
|
|
31
31
|
pycontrails/datalib/ecmwf/variables.py,sha256=akqjUS3WKnSzV1Y0KkHLylH7QByvitc3wo8NBFeSNew,8714
|
|
32
32
|
pycontrails/datalib/ecmwf/__init__.py,sha256=F9a-iRz27nmVuQpMUwx5hjSCW95KnRmsHsa7m1_T86Y,1108
|
|
33
|
-
pycontrails/datalib/ecmwf/common.py,sha256=
|
|
34
|
-
pycontrails/datalib/ecmwf/ifs.py,sha256=
|
|
35
|
-
pycontrails/datalib/gfs/gfs.py,sha256=
|
|
33
|
+
pycontrails/datalib/ecmwf/common.py,sha256=UMlmsGn_54RNNRezwRbqP9zqiBPHhYp-gBHDCn-9Ofc,3549
|
|
34
|
+
pycontrails/datalib/ecmwf/ifs.py,sha256=t8MAZNGIe02T19A7ggeXUpxBiYjm-VPoeneoaRVtjBw,10594
|
|
35
|
+
pycontrails/datalib/gfs/gfs.py,sha256=PL1ExmhKK3eKwQ4HZgdXMFKRidpg-JBDQuaSPfZeXn4,21571
|
|
36
36
|
pycontrails/datalib/gfs/variables.py,sha256=s6rKyFdDA8E0Jz8X4twM7mgq5zhRGlk5qTedItyqoY8,2860
|
|
37
37
|
pycontrails/datalib/gfs/__init__.py,sha256=tWxgqmlW8Uo07J-3fBTXPrteatzTka9mSXomhWy3NVA,684
|
|
38
38
|
pycontrails/datalib/spire/spire.py,sha256=dmtynQjeAk1b-3mgdPGEyon770oBcEm-_jLBoaBDiH8,25321
|
|
@@ -43,18 +43,18 @@ pycontrails/ext/empirical_grid.py,sha256=pAa-YvbP0OCnE--2WvPbqhQo8B6NWeSFGgcFXsY
|
|
|
43
43
|
pycontrails/ext/bada.py,sha256=j4Tj7oWSV_6UxYYa9_OjC1yTVzJMQdNRDI4aUQam_xM,1063
|
|
44
44
|
pycontrails/utils/iteration.py,sha256=UjMn2FRDyC0A7q_MqKNpqqeNZm-lA23Ws-KV7zFzAl4,292
|
|
45
45
|
pycontrails/utils/__init__.py,sha256=Gt_57sBgfliFSxx9sDpuchykFDxmM11Wg9xAeSqPcnI,32
|
|
46
|
-
pycontrails/utils/types.py,sha256=
|
|
46
|
+
pycontrails/utils/types.py,sha256=UuPBCLeXCGYCde5q4AvUGysDBGi2jRiPWUKbMRTbs_E,4569
|
|
47
47
|
pycontrails/utils/temp.py,sha256=6BlJ5NaQpACyL-n3FuqfscFb9Mfbgvs72BwWfSzBfmU,1100
|
|
48
48
|
pycontrails/utils/json.py,sha256=zB_23_mqE39G231sQ_XXmxpQQ9pGjIGQCPJ2JaknRrY,5990
|
|
49
49
|
pycontrails/utils/dependencies.py,sha256=LBKnhlZHTKDOGFr3J17cnfbQbBtO3uGkKBVoOIhW01s,2488
|
|
50
50
|
pycontrails/models/pcc.py,sha256=yWi0TochaCWCgrb68dUad9xPMqysIRa2hr6VT8PvxL4,11286
|
|
51
|
-
pycontrails/models/tau_cirrus.py,sha256=
|
|
51
|
+
pycontrails/models/tau_cirrus.py,sha256=yNYw4ukT68w2ATGFZr3p8AZxB6A2xufXQq7XP2U51y0,5026
|
|
52
52
|
pycontrails/models/__init__.py,sha256=dQTOLQb7RdUdUwslt5se__5y_ymbInBexQmNrmAeOdE,33
|
|
53
|
-
pycontrails/models/issr.py,sha256=
|
|
54
|
-
pycontrails/models/sac.py,sha256=
|
|
55
|
-
pycontrails/models/accf.py,sha256=
|
|
53
|
+
pycontrails/models/issr.py,sha256=nfNJHKGyVEwkBun3u1kjR0WVPLK2zrdPjLGBnK5MWMs,7340
|
|
54
|
+
pycontrails/models/sac.py,sha256=uaupJine1s9ad5YyTCHpK6ixk6IZYtxDHhxHviMj2Y8,16075
|
|
55
|
+
pycontrails/models/accf.py,sha256=20XWID_6aoFLDOfanf5ncay_azPbZSA2NoowJSZbM20,12559
|
|
56
56
|
pycontrails/models/dry_advection.py,sha256=_HJA02GPjlJH2OKhX3BAvQWJX0iV-bOu57hWPl2Ue60,16145
|
|
57
|
-
pycontrails/models/pcr.py,sha256=
|
|
57
|
+
pycontrails/models/pcr.py,sha256=veI1gtcYLZB9EUmp8siAI-WOIhxPuftsNMIPKrM-7gI,5463
|
|
58
58
|
pycontrails/models/emissions/__init__.py,sha256=N_EE768TNRDbdmXaxly2Pwun7UmVBTVPc4k89VBz5ys,478
|
|
59
59
|
pycontrails/models/emissions/ffm2.py,sha256=8JOW0tx9X5SmyEmW-b_9Xhg-OwGmKDfKbCj1_SDPCmY,11996
|
|
60
60
|
pycontrails/models/emissions/emissions.py,sha256=JTdL2BXU3xekU3U5uc2Kg99F7xeQ57hyHv_1PxlX17A,47264
|
|
@@ -67,11 +67,11 @@ pycontrails/models/humidity_scaling/__init__.py,sha256=nqsab_j9BCwMbTfCn4BjXMdhI
|
|
|
67
67
|
pycontrails/models/humidity_scaling/quantiles/era5-quantiles.pq,sha256=tfYhbafF9Z-gGCg6VQ1YBlOaK_01e65Dc6s9b-hQ6Zo,286375
|
|
68
68
|
pycontrails/models/cocip/radiative_forcing.py,sha256=_dJ6_OM4fBvmhgL6MoDObhfTAUEXx-JzKqb5htYe1H8,44799
|
|
69
69
|
pycontrails/models/cocip/wind_shear.py,sha256=Pr6ZBMnuWK380uzX2mSx0wkNXnufuCjOmV5vpUStRv0,3852
|
|
70
|
-
pycontrails/models/cocip/cocip.py,sha256=
|
|
70
|
+
pycontrails/models/cocip/cocip.py,sha256=AMA5I_eR3m959Gfh7VXDy1L9laernIQ_PTV2Kdp3HCc,91752
|
|
71
71
|
pycontrails/models/cocip/output_formats.py,sha256=UKzVc2R4Ij8uAsJbOFz1O9SZo9N5-mG0YfBLI6e_SZA,77118
|
|
72
72
|
pycontrails/models/cocip/__init__.py,sha256=7Wy_CnmVqg_Gpg2UhIlisJOJ3naL6c5BBzTSJqdbiM4,902
|
|
73
|
-
pycontrails/models/cocip/cocip_params.py,sha256=
|
|
74
|
-
pycontrails/models/cocip/wake_vortex.py,sha256=
|
|
73
|
+
pycontrails/models/cocip/cocip_params.py,sha256=rvOvE028yEs4H0WEPRyYx2kk8PDjvPmNkk43wUu-YRM,10295
|
|
74
|
+
pycontrails/models/cocip/wake_vortex.py,sha256=HclCU7CuNK_OkkhinWvZB5ipucyGnEsJ3q-_4E6bC5c,13314
|
|
75
75
|
pycontrails/models/cocip/cocip_uncertainty.py,sha256=wJ43NJr3YZX92GiMhY6LUVni9qbsqKg0duCRSS_r_mw,11782
|
|
76
76
|
pycontrails/models/cocip/radiative_heating.py,sha256=PngrHriQDSX1iDKu1v2g9NPRe4w6eGi6123xJD6itz8,18712
|
|
77
77
|
pycontrails/models/cocip/contrail_properties.py,sha256=yMqDbAg751orkqPSKlUlnItsoa9JC8lcfxzeoGc8yEk,56007
|
|
@@ -83,7 +83,7 @@ pycontrails/models/ps_model/static/ps-aircraft-params-20230517.csv,sha256=sh6uNM
|
|
|
83
83
|
pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=DiKWJIDkYmitg0aW0hZqOe-8eftXsE2PrxdpS9tMnOo,6233
|
|
84
84
|
pycontrails/models/cocipgrid/__init__.py,sha256=ar6bF_8Pusbb-myujz_q5ntFylQTNH8yiM8fxP7Zk30,262
|
|
85
85
|
pycontrails/models/cocipgrid/cocip_time_handling.py,sha256=TSuMU06F09EaY9DYDJVpuGiqDVlV6tteGajjfPUb1oE,13869
|
|
86
|
-
pycontrails/models/cocipgrid/cocip_grid.py,sha256=
|
|
86
|
+
pycontrails/models/cocipgrid/cocip_grid.py,sha256=HpUFNxlAJFMU58xgA0bnGoAqHVWXRBWIoIcKlfmG9HM,83904
|
|
87
87
|
pycontrails/physics/geo.py,sha256=zc5D35pNQJ2UDTOJLTGTcf2mJRnNjzg4NJm1BzQoW2U,30160
|
|
88
88
|
pycontrails/physics/units.py,sha256=7aFb4NVc0EIOyIU-fOmVHAIWMM3_AfqmEliUPWW0T64,12235
|
|
89
89
|
pycontrails/physics/constants.py,sha256=fFDMpXMlldE6c5RbjaIn4UqGpXvX32mLuCG0RnxmtHE,2990
|
|
File without changes
|
|
File without changes
|
|
File without changes
|