pycontrails 0.49.5__cp39-cp39-macosx_11_0_arm64.whl → 0.50.0__cp39-cp39-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.

@@ -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
- raise ValueError(
537
+ msg = (
538
538
  "No intersection between flight waypoints and met domain. "
539
- "Rerun Cocip with `met` overlapping flight."
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] = (200.0, 200.0)
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 `np.array` used with in CoCiP calculations.
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 `tqdm` progress bar showing batch evaluation progress.
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 [unit `m`]. Round-off error
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
- #: `dt_integration` parameter. On the other hand, too large of a nominal segment
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
- #: .. versionadded 0.32.2:: EXPERIMENTAL: If None, run CoCiP in "segment-free"
45
- #: mode. This mode does not include any terms involving segments (wind shear,
46
- #: segment_length, any derived terms). See :attr:`CocipGridParams.azimuth`
47
- #: and :attr:`CocipGridParams.dsn_dz_factor` for more details.
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
- #: .. versionadded 0.32.2:: EXPERIMENTAL: If None, run CoCiP in "segment-free"
64
- #: mode. This mode does not include any terms involving segments (wind shear,
65
- #: segment_length, any derived terms), unless :attr:`CocipGridParams.dsn_dz_factor`
66
- #: is non-zero.
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
- #: .. versionadded:: 0.32.2.
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 * s^{-1}`]. If included in :attr:`CocipGrid.source`,
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 :ref:pycontrails.models.cocipgrid.cocip_grid`
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
 
@@ -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 ``ModuleNotFoundError`` when dependencies are not met."""
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: ModuleNotFoundError,
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 ``ModuleNotFoundError`` with a helpful message.
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 ``ModuleNotFoundError``. For example,
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 ``ModuleNotFoundError``, the ``package_name`` should be "scikit-learn".
30
- module_not_found_error : ModuleNotFoundError
31
- The ``ModuleNotFoundError`` that was raised. This is simply passed to 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 ModuleNotFoundError(msg) from module_not_found_error
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.49.5
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 >=6.1 ; extra == 'dev'
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.49.5.dist-info/RECORD,,
2
- pycontrails-0.49.5.dist-info/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
3
- pycontrails-0.49.5.dist-info/WHEEL,sha256=JlTVwpqUzP01iqSUKAL8LrwscoYFkCFkZ28SRV9G62c,108
4
- pycontrails-0.49.5.dist-info/NOTICE,sha256=gKI8DcN1WhiXB2SFRKDogcjONldGubTvBxiOYdC4CXU,1926
5
- pycontrails-0.49.5.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
6
- pycontrails-0.49.5.dist-info/METADATA,sha256=rDzd21VDquxdBt5vofTqKPe8mJyZi4xdAVMSnjBku18,8270
7
- pycontrails/_version.py,sha256=nH-3YHqHjzaEFGxsYlRP1yKzx4o1iBZGXleKwGLmKPg,413
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=t3aNIuHimB-eyeerOmc50nLML0b4_R6yjydcdcJkGHg,108
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=oAuPxKo2okFgrWZaZuBRzxyKdJ8TtsyNJf1NWoSDKfc,71672
11
- pycontrails/core/rgi_cython.cpython-39-darwin.so,sha256=iIhzmIY4jvYS_x9g7Pwr0NzdrwH6fpSZcaQ2h7JSl6Y,317628
12
- pycontrails/core/models.py,sha256=OzzVGjEi0R7bWtr9hx4NboNePJLPwYwFeZOUm19EVJ8,38874
10
+ pycontrails/core/vector.py,sha256=FqBoS7Acg5vRenyPn5kjB54TQqll85Ea3ysC8XFJiUU,71662
11
+ pycontrails/core/rgi_cython.cpython-39-darwin.so,sha256=NF3Fi4GTgXTxXw0OVWku6oXO_c6y7J6-9-mTJtkN1io,317628
12
+ pycontrails/core/models.py,sha256=sipUAH_r0A1TxQ0yBjaPj8WC33Piw34ABHyrmRePfhg,39003
13
13
  pycontrails/core/interpolation.py,sha256=8M0eO2_fX8KOquxhgMkut8E2Yg73BFWYp9wVzECJC1U,24038
14
14
  pycontrails/core/fleet.py,sha256=84oTb8RJ3-bPVvZn3O2ljMEZLwJ9Q-E455ZzQJ4QaQU,16075
15
15
  pycontrails/core/flight.py,sha256=ovJzPShgM_i0_Gm5EOrvWTk3vNh8K8wu4raOxXxo36g,75892
16
16
  pycontrails/core/fuel.py,sha256=kJZ3P1lPm1L6rdPREM55XQ-VfJ_pt35cP4sO2Nnvmjs,4332
17
17
  pycontrails/core/polygon.py,sha256=eX0gLL6OA_3658hjT0uraoyQWn4WvKYS-uxh3YCkTZY,17685
18
- pycontrails/core/datalib.py,sha256=7Lco4y-1nA0Kf1ANG7N1fCe2fCLOLzO_5PQlfnnkxfo,22520
18
+ pycontrails/core/datalib.py,sha256=tqYR69vVeY6LsKgtOYkZU1sEJNrbrwjqRPC1eK8mQaU,23270
19
19
  pycontrails/core/cache.py,sha256=rCBZiRSVoFkRwf_ay7O-eba2PaYoXdlJSz1znZPuOQk,27957
20
20
  pycontrails/core/__init__.py,sha256=4ZE7x1gMa_Q7GcgcWpPP9fQ-sTulCXWmMjsCJ0odakY,840
21
21
  pycontrails/core/flightplan.py,sha256=s7tHbjMFbHAJkSWV6hPkghuW6jDb1n5UhWAo9XbJ9z0,7349
22
- pycontrails/core/met.py,sha256=V2iHV2NZftWU5hBSWJ3Da26j27IC4j-3WbydtPS_DdY,92497
22
+ pycontrails/core/met.py,sha256=kT5a3p6WIBUqHlxdtV_VQLyVMWEK3A0BhBIppcYrrcI,92491
23
23
  pycontrails/core/aircraft_performance.py,sha256=4yNGfArt741HNFjxpWvEu86BTzie9LaPjC4KH3dXYts,21966
24
24
  pycontrails/core/airports.py,sha256=aeyAXVkioIRomrP79UtNrxindL4f1DJyXFaojZCuBBw,6758
25
- pycontrails/core/met_var.py,sha256=zyXWI_9dRS4FfH1Io_k0YcIxZIsp8y4YPiC_Oayi_gs,9195
25
+ pycontrails/core/met_var.py,sha256=EhrLGdrCAp8cKb-3Whd_ttLMZn4_zLMhE-QyFinESqo,9197
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/era5.py,sha256=vjRRd9QbeDz3M7qNn3FwLjwgn7kzCiPtbWkpu2lj3E0,18347
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=akqjUS3WKnSzV1Y0KkHLylH7QByvitc3wo8NBFeSNew,8714
32
- pycontrails/datalib/ecmwf/__init__.py,sha256=F9a-iRz27nmVuQpMUwx5hjSCW95KnRmsHsa7m1_T86Y,1108
33
- pycontrails/datalib/ecmwf/common.py,sha256=xyHDqlFynGi9y3gvMfSsYTVNCJxpCNQYUVnmNx2rM7o,3707
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=2x16iOCBRzUEb_GeGPCWNPpeeTJ9wxYkvpYsgYR3OaM,21569
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=LBKnhlZHTKDOGFr3J17cnfbQbBtO3uGkKBVoOIhW01s,2488
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=X4b_samWXtG5jD83W6vrlrc4MR-8SyG_uhSdhz55pD4,95816
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=sc3j0nUHIdXXGEhnqRFGZEohEVPBu0UMSef1BMRiU1g,10302
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=Vnpzm-nc6TtSQexXychCg8Sp5o5ZGlvEU8-ZJ3DP87k,5779
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=fFDMpXMlldE6c5RbjaIn4UqGpXvX32mLuCG0RnxmtHE,2990
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
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-cp39-macosx_11_0_arm64
5
5