pycontrails 0.49.5__cp312-cp312-macosx_11_0_arm64.whl → 0.50.0__cp312-cp312-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pycontrails might be problematic. Click here for more details.
- pycontrails/_version.py +2 -2
- pycontrails/core/datalib.py +60 -38
- pycontrails/core/met.py +4 -4
- pycontrails/core/met_var.py +2 -2
- pycontrails/core/models.py +7 -3
- pycontrails/core/rgi_cython.cpython-312-darwin.so +0 -0
- pycontrails/core/vector.py +5 -5
- pycontrails/datalib/ecmwf/__init__.py +4 -0
- pycontrails/datalib/ecmwf/arco_era5.py +577 -0
- pycontrails/datalib/ecmwf/common.py +1 -1
- pycontrails/datalib/ecmwf/era5.py +2 -5
- pycontrails/datalib/ecmwf/variables.py +18 -0
- pycontrails/datalib/gfs/gfs.py +2 -2
- pycontrails/models/cocip/cocip.py +26 -3
- pycontrails/models/cocip/cocip_params.py +11 -1
- pycontrails/models/cocipgrid/cocip_grid_params.py +25 -19
- pycontrails/physics/constants.py +6 -0
- pycontrails/utils/dependencies.py +13 -11
- {pycontrails-0.49.5.dist-info → pycontrails-0.50.0.dist-info}/METADATA +4 -2
- {pycontrails-0.49.5.dist-info → pycontrails-0.50.0.dist-info}/RECORD +24 -23
- {pycontrails-0.49.5.dist-info → pycontrails-0.50.0.dist-info}/WHEEL +1 -1
- {pycontrails-0.49.5.dist-info → pycontrails-0.50.0.dist-info}/LICENSE +0 -0
- {pycontrails-0.49.5.dist-info → pycontrails-0.50.0.dist-info}/NOTICE +0 -0
- {pycontrails-0.49.5.dist-info → pycontrails-0.50.0.dist-info}/top_level.txt +0 -0
|
@@ -31,7 +31,7 @@ from pycontrails.models.cocip import (
|
|
|
31
31
|
)
|
|
32
32
|
from pycontrails.models.cocip.cocip_params import CocipFlightParams
|
|
33
33
|
from pycontrails.models.emissions.emissions import Emissions
|
|
34
|
-
from pycontrails.physics import geo, thermo, units
|
|
34
|
+
from pycontrails.physics import constants, geo, thermo, units
|
|
35
35
|
|
|
36
36
|
logger = logging.getLogger(__name__)
|
|
37
37
|
|
|
@@ -534,10 +534,11 @@ class Cocip(Model):
|
|
|
534
534
|
self.source.size,
|
|
535
535
|
)
|
|
536
536
|
if not intersection.any():
|
|
537
|
-
|
|
537
|
+
msg = (
|
|
538
538
|
"No intersection between flight waypoints and met domain. "
|
|
539
|
-
"Rerun Cocip with
|
|
539
|
+
"Rerun Cocip with met overlapping flight."
|
|
540
540
|
)
|
|
541
|
+
raise ValueError(msg)
|
|
541
542
|
|
|
542
543
|
# STEP 4: Begin met interpolation
|
|
543
544
|
# Unfortunately we use both "u_wind" and "eastward_wind" to refer to the
|
|
@@ -1101,6 +1102,9 @@ class Cocip(Model):
|
|
|
1101
1102
|
|
|
1102
1103
|
# Initially set energy forcing to 0 because the contrail just formed (age = 0)
|
|
1103
1104
|
contrail["ef"] = np.zeros_like(contrail["n_ice_per_m"])
|
|
1105
|
+
if self.params["compute_atr20"]:
|
|
1106
|
+
contrail["global_yearly_mean_rf"] = np.zeros_like(contrail["n_ice_per_m"])
|
|
1107
|
+
contrail["atr20"] = np.zeros_like(contrail["n_ice_per_m"])
|
|
1104
1108
|
|
|
1105
1109
|
if not self.params["filter_sac"]:
|
|
1106
1110
|
contrail["sac"] = self._downwash_flight["sac"]
|
|
@@ -1226,6 +1230,10 @@ class Cocip(Model):
|
|
|
1226
1230
|
|
|
1227
1231
|
# Perform all aggregations
|
|
1228
1232
|
agg_dict = {"ef": ["sum"], "age": ["max"]}
|
|
1233
|
+
if self.params["compute_atr20"]:
|
|
1234
|
+
agg_dict["global_yearly_mean_rf"] = ["sum"]
|
|
1235
|
+
agg_dict["atr20"] = ["sum"]
|
|
1236
|
+
|
|
1229
1237
|
rad_keys = ["sdr", "rsr", "olr", "rf_sw", "rf_lw", "rf_net"]
|
|
1230
1238
|
for key in rad_keys:
|
|
1231
1239
|
if self.params["verbose_outputs"]:
|
|
@@ -1236,6 +1244,10 @@ class Cocip(Model):
|
|
|
1236
1244
|
aggregated = grouped.agg(agg_dict)
|
|
1237
1245
|
aggregated.columns = [f"{k1}_{k2}" for k1, k2 in aggregated.columns]
|
|
1238
1246
|
aggregated = aggregated.rename(columns={"ef_sum": "ef", "age_max": "contrail_age"})
|
|
1247
|
+
if self.params["compute_atr20"]:
|
|
1248
|
+
aggregated = aggregated.rename(
|
|
1249
|
+
columns={"global_yearly_mean_rf_sum": "global_yearly_mean_rf", "atr20_sum": "atr20"}
|
|
1250
|
+
)
|
|
1239
1251
|
|
|
1240
1252
|
# Join the two
|
|
1241
1253
|
df = df.join(aggregated)
|
|
@@ -2372,6 +2384,14 @@ def calc_timestep_contrail_evolution(
|
|
|
2372
2384
|
contrail_2["ef"] = energy_forcing_2
|
|
2373
2385
|
contrail_2["age"][energy_forcing_2 == 0.0] = np.timedelta64(0, "ns")
|
|
2374
2386
|
|
|
2387
|
+
if params["compute_atr20"]:
|
|
2388
|
+
contrail_2["global_yearly_mean_rf"] = (
|
|
2389
|
+
contrail_2["ef"] / constants.surface_area_earth / constants.seconds_per_year
|
|
2390
|
+
)
|
|
2391
|
+
contrail_2["atr20"] = (
|
|
2392
|
+
params["global_rf_to_atr20_factor"] * contrail_2["global_yearly_mean_rf"]
|
|
2393
|
+
)
|
|
2394
|
+
|
|
2375
2395
|
# filter contrail_2 by persistent waypoints, if any continuous segments are left
|
|
2376
2396
|
logger.debug(
|
|
2377
2397
|
"Fraction of waypoints surviving: %s / %s",
|
|
@@ -2408,6 +2428,9 @@ def calc_timestep_contrail_evolution(
|
|
|
2408
2428
|
continuous = final_contrail["continuous"]
|
|
2409
2429
|
final_contrail["ef"][~continuous] = 0.0
|
|
2410
2430
|
final_contrail["age"][~continuous] = np.timedelta64(0, "ns")
|
|
2431
|
+
if params["compute_atr20"]:
|
|
2432
|
+
final_contrail["global_yearly_mean_rf"][~continuous] = 0.0
|
|
2433
|
+
final_contrail["atr20"][~continuous] = 0.0
|
|
2411
2434
|
return final_contrail
|
|
2412
2435
|
|
|
2413
2436
|
|
|
@@ -102,7 +102,7 @@ class CocipParams(ModelParams):
|
|
|
102
102
|
met_latitude_buffer: tuple[float, float] = (10.0, 10.0)
|
|
103
103
|
|
|
104
104
|
#: Met level buffer [:math:`hPa`] for Cocip initialization and evolution.
|
|
105
|
-
met_level_buffer: tuple[float, float] = (
|
|
105
|
+
met_level_buffer: tuple[float, float] = (40.0, 40.0)
|
|
106
106
|
|
|
107
107
|
# ---------
|
|
108
108
|
# Filtering
|
|
@@ -136,6 +136,16 @@ class CocipParams(ModelParams):
|
|
|
136
136
|
#: :attr:`CocipGridParams.verbose_outputs_evolution`.
|
|
137
137
|
verbose_outputs: bool = False
|
|
138
138
|
|
|
139
|
+
#: Add additional metric of ATR20 and global yearly mean RF to model output.
|
|
140
|
+
#: These are not standard CoCiP outputs but based on the derivation used
|
|
141
|
+
#: in the first supplement to :cite:`yin_predicting_2023`. ATR20 is defined
|
|
142
|
+
#: as the average temperature response over a 20 year horizon.
|
|
143
|
+
compute_atr20: bool = False
|
|
144
|
+
|
|
145
|
+
#: Constant factor used to convert global- and year-mean RF, [:math:`W m^{-2}`],
|
|
146
|
+
#: to ATR20, [:math:`K`], given by :cite:`yin_predicting_2023`.
|
|
147
|
+
global_rf_to_atr20_factor: float = 0.0151
|
|
148
|
+
|
|
139
149
|
# ----------------
|
|
140
150
|
# Model parameters
|
|
141
151
|
# ----------------
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Default CocipGrid parameters."""
|
|
1
|
+
"""Default :class:`CocipGrid` parameters."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -17,7 +17,7 @@ class CocipGridParams(CocipParams):
|
|
|
17
17
|
# Algorithm
|
|
18
18
|
# ---------
|
|
19
19
|
|
|
20
|
-
#: Approximate size of a typical
|
|
20
|
+
#: Approximate size of a typical :class:`numpy.ndarray` used with in CoCiP calculations.
|
|
21
21
|
#: The 4-dimensional array defining the waypoint is raveled and split into
|
|
22
22
|
#: batches of this size.
|
|
23
23
|
#: A smaller number for this parameter will reduce memory footprint at the
|
|
@@ -26,25 +26,27 @@ class CocipGridParams(CocipParams):
|
|
|
26
26
|
|
|
27
27
|
#: Additional boost to target split size before SAC is computed. For typical meshes, only
|
|
28
28
|
#: 10% of waypoints will survive SAC and initial downwash filtering. Accordingly, this parameter
|
|
29
|
-
#: magnifies mesh split size before SAC is computed.
|
|
29
|
+
#: magnifies mesh split size before SAC is computed. See :attr:`target_split_size`.
|
|
30
30
|
target_split_size_pre_SAC_boost: float = 3.0
|
|
31
31
|
|
|
32
|
-
#: Display
|
|
32
|
+
#: Display ``tqdm`` progress bar showing batch evaluation progress.
|
|
33
33
|
show_progress: bool = True
|
|
34
34
|
|
|
35
35
|
# ------------------
|
|
36
36
|
# Simulated Aircraft
|
|
37
37
|
# ------------------
|
|
38
38
|
|
|
39
|
-
#: Nominal segment length to place at each grid point [
|
|
39
|
+
#: Nominal segment length to place at each grid point [:math:`m`]. Round-off error
|
|
40
40
|
#: can be problematic with a small nominal segment length and a large
|
|
41
|
-
#:
|
|
42
|
-
#: length diminishes the "locality" of the grid point.
|
|
41
|
+
#: :attr:`dt_integration` parameter. On the other hand,
|
|
42
|
+
#: too large of a nominal segment length diminishes the "locality" of the grid point.
|
|
43
43
|
#:
|
|
44
|
-
#:
|
|
45
|
-
#:
|
|
46
|
-
#:
|
|
47
|
-
#:
|
|
44
|
+
#: .. versionadded:: 0.32.2
|
|
45
|
+
#:
|
|
46
|
+
#: EXPERIMENTAL: If None, run CoCiP in "segment-free"
|
|
47
|
+
#: mode. This mode does not include any terms involving segments (wind shear,
|
|
48
|
+
#: segment length, any derived terms). See :attr:`azimuth`
|
|
49
|
+
#: and :attr:`dsn_dz_factor` for more details.
|
|
48
50
|
segment_length: float | None = 1000.0
|
|
49
51
|
|
|
50
52
|
#: Fuel type
|
|
@@ -60,10 +62,13 @@ class CocipGridParams(CocipParams):
|
|
|
60
62
|
|
|
61
63
|
#: Navigation bearing [:math:`\deg`] measured in clockwise direction from
|
|
62
64
|
#: true north, by default 0.0.
|
|
63
|
-
#:
|
|
64
|
-
#:
|
|
65
|
-
#:
|
|
66
|
-
#:
|
|
65
|
+
#:
|
|
66
|
+
#: .. versionadded:: 0.32.2
|
|
67
|
+
#:
|
|
68
|
+
#: EXPERIMENTAL: If None, run CoCiP in "segment-free"
|
|
69
|
+
#: mode. This mode does not include any terms involving segments (wind shear,
|
|
70
|
+
#: segment_length, any derived terms), unless :attr:`dsn_dz_factor`
|
|
71
|
+
#: is non-zero.
|
|
67
72
|
azimuth: float | None = 0.0
|
|
68
73
|
|
|
69
74
|
#: Experimental parameter used to approximate ``dsn_dz`` from ``ds_dz`` via
|
|
@@ -73,7 +78,7 @@ class CocipGridParams(CocipParams):
|
|
|
73
78
|
#: ``dsn_dz_factor = 0.665`` adequately approximates the mean EF predictions
|
|
74
79
|
#: of :class:`CocipGrid` over all azimuths.
|
|
75
80
|
#:
|
|
76
|
-
#:
|
|
81
|
+
#: .. versionadded:: 0.32.2
|
|
77
82
|
dsn_dz_factor: float = 0.0
|
|
78
83
|
|
|
79
84
|
#: --------------------
|
|
@@ -90,7 +95,7 @@ class CocipGridParams(CocipParams):
|
|
|
90
95
|
#: :attr:`aircraft_performance` model is used to estimate the aircraft mass.
|
|
91
96
|
aircraft_mass: float | None = None
|
|
92
97
|
|
|
93
|
-
#: Cruising true airspeed, [:math:`m
|
|
98
|
+
#: Cruising true airspeed, [:math:`m \ s^{-1}`]. If included in :attr:`CocipGrid.source`,
|
|
94
99
|
#: this parameter is unused. Otherwise, if this parameter is None, the
|
|
95
100
|
#: :attr:`aircraft_performance` model is used to estimate the true airspeed.
|
|
96
101
|
true_airspeed: float | None = None
|
|
@@ -100,13 +105,14 @@ class CocipGridParams(CocipParams):
|
|
|
100
105
|
#: :attr:`aircraft_performance` model is used to estimate the engine efficiency.
|
|
101
106
|
engine_efficiency: float | None = None
|
|
102
107
|
|
|
103
|
-
#: Nominal fuel flow, [:math:`kg s^{-1}`]. If included in :attr:`CocipGrid.source`,
|
|
108
|
+
#: Nominal fuel flow, [:math:`kg \ s^{-1}`]. If included in :attr:`CocipGrid.source`,
|
|
104
109
|
#: this parameter is unused. Otherwise, if this parameter is None, the
|
|
105
110
|
#: :attr:`aircraft_performance` model is used to estimate the fuel flow.
|
|
106
111
|
fuel_flow: float | None = None
|
|
107
112
|
|
|
108
113
|
#: Aircraft performance model. Required unless ``source`` or ``params``
|
|
109
114
|
#: provide all of the following variables:
|
|
115
|
+
#:
|
|
110
116
|
#: - wingspan
|
|
111
117
|
#: - true_airspeed (or mach_number)
|
|
112
118
|
#: - fuel_flow
|
|
@@ -123,7 +129,7 @@ class CocipGridParams(CocipParams):
|
|
|
123
129
|
# ------------
|
|
124
130
|
|
|
125
131
|
#: Attach additional formation specific data to the output. If True, attach
|
|
126
|
-
#: all possible formation data. See :
|
|
132
|
+
#: all possible formation data. See :mod:`pycontrails.models.cocipgrid.cocip_grid`
|
|
127
133
|
#: for a list of supported formation data.
|
|
128
134
|
verbose_outputs_formation: bool | set[str] = False
|
|
129
135
|
|
pycontrails/physics/constants.py
CHANGED
|
@@ -18,10 +18,16 @@ g: float = 9.80665
|
|
|
18
18
|
#: Radius of Earth :math:`[m]`
|
|
19
19
|
radius_earth: float = 6371229.0
|
|
20
20
|
|
|
21
|
+
#: Surface area of Earth :math:`[m^2]`
|
|
22
|
+
surface_area_earth: float = 5.10072e14
|
|
23
|
+
|
|
21
24
|
#: ISA height of the tropopause :math:`[m]`
|
|
22
25
|
#: :cite:`wikipediacontributorsInternationalStandardAtmosphere2023`
|
|
23
26
|
h_tropopause: float = 11000.0
|
|
24
27
|
|
|
28
|
+
#: Seconds in a Julian year :math:`[s]`
|
|
29
|
+
seconds_per_year: float = 3.15576e7
|
|
30
|
+
|
|
25
31
|
# -------------
|
|
26
32
|
# Thermodynamic
|
|
27
33
|
# -------------
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Raise ``
|
|
1
|
+
"""Raise ``ImportError`` when dependencies are not met."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -8,30 +8,32 @@ from typing import NoReturn
|
|
|
8
8
|
def raise_module_not_found_error(
|
|
9
9
|
name: str,
|
|
10
10
|
package_name: str,
|
|
11
|
-
module_not_found_error:
|
|
11
|
+
module_not_found_error: ImportError,
|
|
12
12
|
pycontrails_optional_package: str | None = None,
|
|
13
13
|
extra: str | None = None,
|
|
14
14
|
) -> NoReturn:
|
|
15
|
-
"""Raise ``
|
|
15
|
+
"""Raise ``ImportError`` with a helpful message.
|
|
16
16
|
|
|
17
17
|
Parameters
|
|
18
18
|
----------
|
|
19
19
|
name : str
|
|
20
|
-
The name describing the context of the ``
|
|
20
|
+
The name describing the context of the ``ImportError``. For example,
|
|
21
21
|
if the module is required for a specific function, the name could be
|
|
22
22
|
"my_function function". If the module is required for a specific method,
|
|
23
23
|
the name could be "MyClass.my_method method". If the module is required
|
|
24
|
-
for an entire pycontrails module, the name could be "my_module module".
|
|
24
|
+
for an entire ``pycontrails`` module, the name could be "my_module module".
|
|
25
25
|
package_name : str
|
|
26
26
|
The name of the package that is required. This should be the full name of
|
|
27
27
|
the python package, which may be different from the name of the module
|
|
28
28
|
that is actually imported. For example, if ``import sklearn`` triggers
|
|
29
|
-
the ``
|
|
30
|
-
module_not_found_error :
|
|
31
|
-
The ``
|
|
32
|
-
``from`` clause of the ``raise`` statement below.
|
|
29
|
+
the ``ImportError``, the ``package_name`` should be "scikit-learn".
|
|
30
|
+
module_not_found_error : ImportError
|
|
31
|
+
The ``ImportError`` that was raised. This is passed to the
|
|
32
|
+
``from`` clause of the ``raise`` statement below. The subclass of the
|
|
33
|
+
``ImportError`` is preserved (e.g., ``ModuleNotFoundError`` or
|
|
34
|
+
``ImportError``).
|
|
33
35
|
pycontrails_optional_package : str, optional
|
|
34
|
-
The name of the optional pycontrails package that can be used to
|
|
36
|
+
The name of the optional ``pycontrails`` package that can be used to
|
|
35
37
|
install the required package. See the ``pyproject.toml`` file.
|
|
36
38
|
extra : str, optional
|
|
37
39
|
Any extra information that should be included in the error message.
|
|
@@ -61,4 +63,4 @@ def raise_module_not_found_error(
|
|
|
61
63
|
if extra:
|
|
62
64
|
msg = f"{msg} {extra}"
|
|
63
65
|
|
|
64
|
-
raise
|
|
66
|
+
raise type(module_not_found_error)(msg) from module_not_found_error
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pycontrails
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.50.0
|
|
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
|
|
@@ -47,7 +47,7 @@ Requires-Dist: platformdirs >=3.0 ; extra == 'dev'
|
|
|
47
47
|
Requires-Dist: pre-commit >=2.10 ; extra == 'dev'
|
|
48
48
|
Requires-Dist: psutil ; extra == 'dev'
|
|
49
49
|
Requires-Dist: pyarrow >=5.0 ; extra == 'dev'
|
|
50
|
-
Requires-Dist: pytest >=
|
|
50
|
+
Requires-Dist: pytest >=8.1 ; extra == 'dev'
|
|
51
51
|
Requires-Dist: pytest-cov >=2.11 ; extra == 'dev'
|
|
52
52
|
Requires-Dist: requests >=2.25 ; extra == 'dev'
|
|
53
53
|
Requires-Dist: ruff ==0.1.15 ; extra == 'dev'
|
|
@@ -72,6 +72,7 @@ Requires-Dist: ecmwf-api-client >=1.6 ; extra == 'ecmwf'
|
|
|
72
72
|
Requires-Dist: netcdf4 >=1.6.1 ; extra == 'ecmwf'
|
|
73
73
|
Requires-Dist: platformdirs >=3.0 ; extra == 'ecmwf'
|
|
74
74
|
Requires-Dist: requests >=2.25 ; extra == 'ecmwf'
|
|
75
|
+
Requires-Dist: lxml >=5.1.0 ; extra == 'ecmwf'
|
|
75
76
|
Provides-Extra: gcp
|
|
76
77
|
Requires-Dist: google-cloud-storage >=2.1 ; extra == 'gcp'
|
|
77
78
|
Requires-Dist: platformdirs >=3.0 ; extra == 'gcp'
|
|
@@ -102,6 +103,7 @@ Requires-Dist: seaborn >=0.11 ; extra == 'vis'
|
|
|
102
103
|
Requires-Dist: shapely >=2.0 ; extra == 'vis'
|
|
103
104
|
Provides-Extra: zarr
|
|
104
105
|
Requires-Dist: fsspec >=2022.7.1 ; extra == 'zarr'
|
|
106
|
+
Requires-Dist: gcsfs >=2022.7.1 ; extra == 'zarr'
|
|
105
107
|
Requires-Dist: zarr >=2.12 ; extra == 'zarr'
|
|
106
108
|
|
|
107
109
|
# pycontrails
|
|
@@ -1,38 +1,39 @@
|
|
|
1
|
-
pycontrails-0.
|
|
2
|
-
pycontrails-0.
|
|
3
|
-
pycontrails-0.
|
|
4
|
-
pycontrails-0.
|
|
5
|
-
pycontrails-0.
|
|
6
|
-
pycontrails-0.
|
|
7
|
-
pycontrails/_version.py,sha256=
|
|
1
|
+
pycontrails-0.50.0.dist-info/RECORD,,
|
|
2
|
+
pycontrails-0.50.0.dist-info/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
|
|
3
|
+
pycontrails-0.50.0.dist-info/WHEEL,sha256=Vo9YTsjXxZ5SWdH4n69oS5jU3YTIi3eHk0n-aUcTtlw,110
|
|
4
|
+
pycontrails-0.50.0.dist-info/NOTICE,sha256=gKI8DcN1WhiXB2SFRKDogcjONldGubTvBxiOYdC4CXU,1926
|
|
5
|
+
pycontrails-0.50.0.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
|
|
6
|
+
pycontrails-0.50.0.dist-info/METADATA,sha256=9ve6s3kh1CYwx9EzwMogAzb1iw3P_yvnzZvxSE4oFWI,8367
|
|
7
|
+
pycontrails/_version.py,sha256=ONUcj7Xp7Ud_V-_OrSjnShIGAo3Cf2Ecu5M9H2psCqg,413
|
|
8
8
|
pycontrails/__init__.py,sha256=c_Vtz7CvdiVAL8ggluash9-8tGcLO_5Vvu-3_Ie47CE,1985
|
|
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=FqBoS7Acg5vRenyPn5kjB54TQqll85Ea3ysC8XFJiUU,71662
|
|
11
|
+
pycontrails/core/models.py,sha256=sipUAH_r0A1TxQ0yBjaPj8WC33Piw34ABHyrmRePfhg,39003
|
|
12
12
|
pycontrails/core/interpolation.py,sha256=8M0eO2_fX8KOquxhgMkut8E2Yg73BFWYp9wVzECJC1U,24038
|
|
13
13
|
pycontrails/core/fleet.py,sha256=84oTb8RJ3-bPVvZn3O2ljMEZLwJ9Q-E455ZzQJ4QaQU,16075
|
|
14
14
|
pycontrails/core/flight.py,sha256=ovJzPShgM_i0_Gm5EOrvWTk3vNh8K8wu4raOxXxo36g,75892
|
|
15
15
|
pycontrails/core/fuel.py,sha256=kJZ3P1lPm1L6rdPREM55XQ-VfJ_pt35cP4sO2Nnvmjs,4332
|
|
16
16
|
pycontrails/core/polygon.py,sha256=eX0gLL6OA_3658hjT0uraoyQWn4WvKYS-uxh3YCkTZY,17685
|
|
17
|
-
pycontrails/core/datalib.py,sha256=
|
|
17
|
+
pycontrails/core/datalib.py,sha256=tqYR69vVeY6LsKgtOYkZU1sEJNrbrwjqRPC1eK8mQaU,23270
|
|
18
18
|
pycontrails/core/cache.py,sha256=rCBZiRSVoFkRwf_ay7O-eba2PaYoXdlJSz1znZPuOQk,27957
|
|
19
19
|
pycontrails/core/__init__.py,sha256=4ZE7x1gMa_Q7GcgcWpPP9fQ-sTulCXWmMjsCJ0odakY,840
|
|
20
20
|
pycontrails/core/flightplan.py,sha256=s7tHbjMFbHAJkSWV6hPkghuW6jDb1n5UhWAo9XbJ9z0,7349
|
|
21
|
-
pycontrails/core/met.py,sha256=
|
|
21
|
+
pycontrails/core/met.py,sha256=kT5a3p6WIBUqHlxdtV_VQLyVMWEK3A0BhBIppcYrrcI,92491
|
|
22
22
|
pycontrails/core/aircraft_performance.py,sha256=4yNGfArt741HNFjxpWvEu86BTzie9LaPjC4KH3dXYts,21966
|
|
23
23
|
pycontrails/core/airports.py,sha256=aeyAXVkioIRomrP79UtNrxindL4f1DJyXFaojZCuBBw,6758
|
|
24
|
-
pycontrails/core/met_var.py,sha256=
|
|
25
|
-
pycontrails/core/rgi_cython.cpython-312-darwin.so,sha256=
|
|
24
|
+
pycontrails/core/met_var.py,sha256=EhrLGdrCAp8cKb-3Whd_ttLMZn4_zLMhE-QyFinESqo,9197
|
|
25
|
+
pycontrails/core/rgi_cython.cpython-312-darwin.so,sha256=U5-JETeJPKU5uHaTlyx4r-8FLmwLue6I9QwSZNgbDts,317789
|
|
26
26
|
pycontrails/core/coordinates.py,sha256=vVITA90x0Jx-UQG2XMm3JAKKsIrFUcU861xV-L9czTI,5291
|
|
27
27
|
pycontrails/datalib/goes.py,sha256=kNBokaIvdTaeCnAyf9dnWAegkBDVuWW9_9Rzt2RvtxY,26169
|
|
28
28
|
pycontrails/datalib/__init__.py,sha256=s5b8W6scXgespKZjPcaC-8jyLd3FqZqN0BZccLxaGuE,237
|
|
29
|
-
pycontrails/datalib/ecmwf/
|
|
29
|
+
pycontrails/datalib/ecmwf/arco_era5.py,sha256=wwBIXZxRRV98g42kNYalirsn9hmq3QBSD_4zdoIEwEg,20258
|
|
30
|
+
pycontrails/datalib/ecmwf/era5.py,sha256=dGEqXtjuE0OgWxOtkMmBtegeMmo1n6nb2cUrNkXx7HM,18285
|
|
30
31
|
pycontrails/datalib/ecmwf/hres.py,sha256=yJapluaSaOrHw23iUc-OIIW2Jd7iVLlDcvMSQpd7ToU,28172
|
|
31
|
-
pycontrails/datalib/ecmwf/variables.py,sha256=
|
|
32
|
-
pycontrails/datalib/ecmwf/__init__.py,sha256=
|
|
33
|
-
pycontrails/datalib/ecmwf/common.py,sha256=
|
|
32
|
+
pycontrails/datalib/ecmwf/variables.py,sha256=gihPeicRzaaxinjjL_tWzaQqg2m0ixba8xplwagnGV8,9296
|
|
33
|
+
pycontrails/datalib/ecmwf/__init__.py,sha256=wQ2c-wEAQvOdAgHYAK0qj2FJkh1Jfj0J3kmcytvYtG4,1215
|
|
34
|
+
pycontrails/datalib/ecmwf/common.py,sha256=0D2dQBi9mBOQnxog_A95yjkQ2brG0z0__teFc1ghDMU,3702
|
|
34
35
|
pycontrails/datalib/ecmwf/ifs.py,sha256=s__NOQcUfbvxVPyCE7qgO8cxYLJoh7PWj7zZS-nKR7g,10594
|
|
35
|
-
pycontrails/datalib/gfs/gfs.py,sha256=
|
|
36
|
+
pycontrails/datalib/gfs/gfs.py,sha256=wOvOl1d-7B024uaaak9gnXg99Lbnv7yhE00ajSGRw6U,21569
|
|
36
37
|
pycontrails/datalib/gfs/variables.py,sha256=KESzB1sTD3hsU8T-qZFD29oFM3l2ZcEtjAE_H7BHKIE,2861
|
|
37
38
|
pycontrails/datalib/gfs/__init__.py,sha256=tWxgqmlW8Uo07J-3fBTXPrteatzTka9mSXomhWy3NVA,684
|
|
38
39
|
pycontrails/datalib/spire/spire.py,sha256=66SnMdA8KOS69USjKmqrJmTKPK08Ehih9tnlsCt-AJw,25331
|
|
@@ -46,7 +47,7 @@ pycontrails/utils/__init__.py,sha256=Gt_57sBgfliFSxx9sDpuchykFDxmM11Wg9xAeSqPcnI
|
|
|
46
47
|
pycontrails/utils/types.py,sha256=oKMJdZYugcU8YXoF2Pux6S4_aX5ymTbMEJrDJtEjY1E,4564
|
|
47
48
|
pycontrails/utils/temp.py,sha256=lGU0b_R8ze4yKlsOusHIIBaoNFBrmrB3vBjgHRlfcXk,1109
|
|
48
49
|
pycontrails/utils/json.py,sha256=4PL7xkt-O9VGvngHh8F1nfbSbgoxjNlDZDUQRxYfcCM,5982
|
|
49
|
-
pycontrails/utils/dependencies.py,sha256=
|
|
50
|
+
pycontrails/utils/dependencies.py,sha256=ATP45xYdUbIyGFzgbOe5SbokMytvB84TcexUEFnEUZE,2559
|
|
50
51
|
pycontrails/models/pcc.py,sha256=7hIlg_4-F6Ce7KVFyuIZBZY6uDr1h4KRMqBDlpGkzHE,11116
|
|
51
52
|
pycontrails/models/tau_cirrus.py,sha256=yNYw4ukT68w2ATGFZr3p8AZxB6A2xufXQq7XP2U51y0,5026
|
|
52
53
|
pycontrails/models/__init__.py,sha256=dQTOLQb7RdUdUwslt5se__5y_ymbInBexQmNrmAeOdE,33
|
|
@@ -67,10 +68,10 @@ pycontrails/models/humidity_scaling/__init__.py,sha256=nqsab_j9BCwMbTfCn4BjXMdhI
|
|
|
67
68
|
pycontrails/models/humidity_scaling/quantiles/era5-quantiles.pq,sha256=tfYhbafF9Z-gGCg6VQ1YBlOaK_01e65Dc6s9b-hQ6Zo,286375
|
|
68
69
|
pycontrails/models/cocip/radiative_forcing.py,sha256=ERuFcYMo0_1iiOricnZ8D4ext23bMnTCeZwg9vd6Vzs,44944
|
|
69
70
|
pycontrails/models/cocip/wind_shear.py,sha256=p8d3iaNzxPA3MoxFEM1ZDKt0aticoD6U9cv0QmbuBzs,3860
|
|
70
|
-
pycontrails/models/cocip/cocip.py,sha256=
|
|
71
|
+
pycontrails/models/cocip/cocip.py,sha256=ehS-fwO604gYe3YqQP6I7jKic0WiCGJfulL9Q1mx6LA,96856
|
|
71
72
|
pycontrails/models/cocip/output_formats.py,sha256=d9naGliEEVuk2ER0KZEY5R2FHQZIY5NcP6PamlHcBM0,77149
|
|
72
73
|
pycontrails/models/cocip/__init__.py,sha256=7Wy_CnmVqg_Gpg2UhIlisJOJ3naL6c5BBzTSJqdbiM4,902
|
|
73
|
-
pycontrails/models/cocip/cocip_params.py,sha256=
|
|
74
|
+
pycontrails/models/cocip/cocip_params.py,sha256=fRSGP6mnMfn4oh25kkaz0EmxLqFUcmYdhTZE3pDR3lY,10838
|
|
74
75
|
pycontrails/models/cocip/wake_vortex.py,sha256=Q5YMEK59jTYzAPt4x24ylugqThzhrN2BOTLBiD-KeC0,13408
|
|
75
76
|
pycontrails/models/cocip/cocip_uncertainty.py,sha256=4JtlCVFpLBnPRlvyEp9QFpRfHFK9joSTnxe0NJdONG4,11784
|
|
76
77
|
pycontrails/models/cocip/radiative_heating.py,sha256=YRpwfXgFnf89iuJiIM96q-jbdcMAwlX8QLsADTKMABE,18848
|
|
@@ -81,12 +82,12 @@ pycontrails/models/ps_model/ps_aircraft_params.py,sha256=7PlJtTo5EP7FLHKQ-EK4jFs
|
|
|
81
82
|
pycontrails/models/ps_model/ps_operational_limits.py,sha256=bMIUKU5_K-H6ld_ZKoLle3hBW28o3RzVy1P5N4C8jg0,10371
|
|
82
83
|
pycontrails/models/ps_model/ps_grid.py,sha256=PyuiGKvknx6x34FGeNoxJ47uVf90Bd-EgbAN3CKpOZQ,18667
|
|
83
84
|
pycontrails/models/ps_model/static/ps-aircraft-params-20240209.csv,sha256=lZ_gzhOfB-Ul8VUnzyiffYyLTRJ3wab1rlOgh_N-byA,14679
|
|
84
|
-
pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=
|
|
85
|
+
pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=l4vBPrOKCJDz5Y1uMjmOGVyUcSWgfZtFWbjW968OPz8,5875
|
|
85
86
|
pycontrails/models/cocipgrid/__init__.py,sha256=ar6bF_8Pusbb-myujz_q5ntFylQTNH8yiM8fxP7Zk30,262
|
|
86
87
|
pycontrails/models/cocipgrid/cocip_grid.py,sha256=WKtFCJT6cDVI_QmAJ7jgWkgK5h3iSav1rOYsrlAPT1o,89803
|
|
87
88
|
pycontrails/physics/geo.py,sha256=lqEpTLhex2r-o-6EHSSEiPC8xqZ-NlwwCBob9-cJA_w,30240
|
|
88
89
|
pycontrails/physics/units.py,sha256=W_pOCZ7abjQnUIFhrMEelPTrk18ihJQitPSpnTd2toI,12256
|
|
89
|
-
pycontrails/physics/constants.py,sha256=
|
|
90
|
+
pycontrails/physics/constants.py,sha256=pHQQmccMUwuNnY4hFtm3L8G2rnUQcfJnroyQr8HAVeM,3146
|
|
90
91
|
pycontrails/physics/__init__.py,sha256=_1eWbEy6evEWdfJCEkwDiSdpiDNzNWEPVqaPekHyhwU,44
|
|
91
92
|
pycontrails/physics/thermo.py,sha256=x3IsnUkEIA1zrDTFkS4GbV5B-ZKe_sxLbkCwQJ5Ign4,12810
|
|
92
93
|
pycontrails/physics/jet.py,sha256=JX-o5dDjyITMNUIOcD_7UBt_4ldc9v-5gI6bmwf0wQ4,25624
|
|
File without changes
|
|
File without changes
|
|
File without changes
|