pycontrails 0.54.4__cp311-cp311-win_amd64.whl → 0.54.5__cp311-cp311-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.

@@ -3,16 +3,24 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import dataclasses
6
+ import sys
6
7
  from typing import Any, NoReturn, overload
7
8
 
9
+ if sys.version_info >= (3, 12):
10
+ from typing import override
11
+ else:
12
+ from typing_extensions import override
13
+
8
14
  import numpy as np
9
15
  import numpy.typing as npt
16
+ import pandas as pd
10
17
 
11
18
  from pycontrails.core import models
12
- from pycontrails.core.met import MetDataset
19
+ from pycontrails.core.met import MetDataset, maybe_downselect_mds
13
20
  from pycontrails.core.met_var import (
14
21
  AirTemperature,
15
22
  EastwardWind,
23
+ MetVariable,
16
24
  NorthwardWind,
17
25
  VerticalVelocity,
18
26
  )
@@ -89,7 +97,12 @@ class DryAdvection(models.Model):
89
97
 
90
98
  name = "dry_advection"
91
99
  long_name = "Emission plume advection without sedimentation"
92
- met_variables = AirTemperature, EastwardWind, NorthwardWind, VerticalVelocity
100
+ met_variables: tuple[MetVariable, ...] = (
101
+ AirTemperature,
102
+ EastwardWind,
103
+ NorthwardWind,
104
+ VerticalVelocity,
105
+ )
93
106
  default_params = DryAdvectionParams
94
107
 
95
108
  met: MetDataset
@@ -127,6 +140,10 @@ class DryAdvection(models.Model):
127
140
  self.update_params(params)
128
141
  self.set_source(source)
129
142
  self.source = self.require_source_type(GeoVectorDataset)
143
+ self.downselect_met()
144
+ if not self.source.coords_intersect_met(self.met).any():
145
+ msg = "No source coordinates intersect met data."
146
+ raise ValueError(msg)
130
147
 
131
148
  self.source = self._prepare_source()
132
149
 
@@ -139,18 +156,24 @@ class DryAdvection(models.Model):
139
156
  max_depth = self.params["max_depth"]
140
157
 
141
158
  source_time = self.source["time"]
142
- t0 = source_time.min()
159
+ t0 = pd.Timestamp(source_time.min()).floor(pd.Timedelta(dt_integration)).to_numpy()
143
160
  t1 = source_time.max()
144
161
  timesteps = np.arange(t0 + dt_integration, t1 + dt_integration + max_age, dt_integration)
145
162
 
146
163
  vector = GeoVectorDataset()
164
+ met = None
147
165
 
148
166
  evolved = []
149
167
  for t in timesteps:
150
168
  filt = (source_time < t) & (source_time >= t - dt_integration)
151
169
  vector = vector + self.source.filter(filt, copy=False)
170
+
171
+ t0 = vector["time"].min()
172
+ t1 = vector["time"].max()
173
+ met = maybe_downselect_mds(self.met, met, t0, t1)
174
+
152
175
  vector = _evolve_one_step(
153
- self.met,
176
+ met,
154
177
  vector,
155
178
  t,
156
179
  sedimentation_rate=sedimentation_rate,
@@ -202,7 +225,7 @@ class DryAdvection(models.Model):
202
225
  raise ValueError(
203
226
  "If 'azimuth' is None, then 'width' and 'depth' must also be None."
204
227
  )
205
- return GeoVectorDataset(self.source.select(columns, copy=False), copy=False)
228
+ return GeoVectorDataset._from_fastpath(self.source.select(columns, copy=False).data)
206
229
 
207
230
  if "azimuth" not in self.source:
208
231
  self.source["azimuth"] = np.full_like(self.source["longitude"], azimuth)
@@ -228,7 +251,19 @@ class DryAdvection(models.Model):
228
251
  width, depth, sigma_yz=0.0
229
252
  )
230
253
 
231
- return GeoVectorDataset(self.source.select(columns, copy=False), copy=False)
254
+ return GeoVectorDataset._from_fastpath(self.source.select(columns, copy=False).data)
255
+
256
+ @override
257
+ def downselect_met(self) -> None:
258
+ if not self.params["downselect_met"]:
259
+ return
260
+
261
+ buffers = {
262
+ f"{coord}_buffer": self.params[f"met_{coord}_buffer"]
263
+ for coord in ("longitude", "latitude", "level")
264
+ }
265
+ buffers["time_buffer"] = (np.timedelta64(0, "ns"), self.params["max_age"])
266
+ self.met = self.source.downselect_met(self.met, **buffers)
232
267
 
233
268
 
234
269
  def _perform_interp_for_step(
@@ -464,15 +499,16 @@ def _evolve_one_step(
464
499
  dt, # type: ignore[arg-type]
465
500
  )
466
501
 
467
- out = GeoVectorDataset(
468
- longitude=longitude_2,
469
- latitude=latitude_2,
470
- level=level_2,
471
- time=np.full(longitude_2.shape, t),
472
- copy=False,
502
+ out = GeoVectorDataset._from_fastpath(
503
+ {
504
+ "longitude": longitude_2,
505
+ "latitude": latitude_2,
506
+ "level": level_2,
507
+ "time": np.full(longitude_2.shape, t),
508
+ "age": vector["age"] + dt,
509
+ "waypoint": vector["waypoint"],
510
+ }
473
511
  )
474
- out["age"] = vector["age"] + dt
475
- out["waypoint"] = vector["waypoint"]
476
512
 
477
513
  azimuth = vector.get("azimuth")
478
514
  if azimuth is None:
@@ -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
@@ -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
@@ -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
@@ -28,7 +28,7 @@ from pycontrails.core.aircraft_performance import (
28
28
  from pycontrails.core.fleet import Fleet
29
29
  from pycontrails.core.flight import Flight
30
30
  from pycontrails.core.met import MetDataset
31
- from pycontrails.core.met_var import AirTemperature, EastwardWind, NorthwardWind
31
+ from pycontrails.core.met_var import AirTemperature, EastwardWind, MetVariable, NorthwardWind
32
32
  from pycontrails.models.ps_model import ps_operational_limits as ps_lims
33
33
  from pycontrails.models.ps_model.ps_aircraft_params import (
34
34
  PSAircraftEngineParams,
@@ -71,7 +71,7 @@ class PSFlight(AircraftPerformance):
71
71
 
72
72
  name = "PSFlight"
73
73
  long_name = "Poll-Schumann Aircraft Performance Model"
74
- met_variables = (AirTemperature,)
74
+ met_variables: tuple[MetVariable, ...] = (AirTemperature,)
75
75
  optional_met_variables = EastwardWind, NorthwardWind
76
76
  default_params = PSFlightParams
77
77
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycontrails
3
- Version: 0.54.4
3
+ Version: 0.54.5
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
@@ -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=kFZvrW5jx6g1qJRLgxlKl-4x8-TUNN78w9rzkZQ5teE,429
3
3
  pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  pycontrails/core/__init__.py,sha256=kOAehIZBbvksSW3MuU2DfzsyeE4PaFnOTpYMeq2ZDPE,886
5
5
  pycontrails/core/aircraft_performance.py,sha256=nSIrsWsrP5muWtI805kR_shv6Um8QJMHVLCAMa1ycvk,27902
6
6
  pycontrails/core/airports.py,sha256=nGKXN3jOtzsDCaJZVFNO3e3w-U3lqMTz5Ww5jALiRJY,6984
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
9
+ pycontrails/core/fleet.py,sha256=ddujPC79K975gWVk8NDskE79OZaUam8tPR9rONaT918,17192
10
+ pycontrails/core/flight.py,sha256=NZZAKtKf5vPRkboCgM_Tb-fD5VWXQNAoNdctuoQT03w,82853
11
11
  pycontrails/core/flightplan.py,sha256=0ozSt3jqa62PZBjXnEDQLbZO1YORg3r2552RpRtkKZA,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
13
+ pycontrails/core/interpolation.py,sha256=-GC3T6yh3nMtt7JCawoYeCUnDNRY9GHhxhkRhhnntxE,26437
14
+ pycontrails/core/met.py,sha256=JeTLNbFMv19MJk8N3kihLgt5vXlMHOj0AetO8rHtPgU,106497
15
15
  pycontrails/core/met_var.py,sha256=iLk8R2Yq2MCnc7_XJLUULqojBwe1seFp3jdaTm8T-BY,9490
16
- pycontrails/core/models.py,sha256=BVNsBL5vSKzJPZCN57v7BOfLtXufVlIBN8jFJHCuwM4,40984
16
+ pycontrails/core/models.py,sha256=LiWeaFs9Xr2F2DPOAk0caM6D_hz16W9GuEAnBFU9yXo,40987
17
17
  pycontrails/core/polygon.py,sha256=NZ4YBhdALidXYOPsSX1cwGQ022j-AXgbWIQg7LA-f-I,18593
18
- pycontrails/core/rgi_cython.cp311-win_amd64.pyd,sha256=ywBCceg8ii_eNhJr1-vZx0M_gxUOF8MJzmUxYFEPksw,258560
19
- pycontrails/core/vector.py,sha256=SPG96XDzm3WLUsL-pbQFx3w8YPo-CVp6IgGIWgy5sl8,72239
18
+ pycontrails/core/rgi_cython.cp311-win_amd64.pyd,sha256=qh-mG9CQT3LzqwBUt9eqdARwfZaVMcKrdml0rDa_ljM,258560
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
@@ -46,19 +46,19 @@ 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
49
+ pycontrails/models/dry_advection.py,sha256=A-mEkVK5sQKctuok9a-rxme_HXTe-UVbzouUx-ciP8g,18559
50
+ pycontrails/models/issr.py,sha256=J6mh4pze31XpD2_zD9ujzYPXsZFrmSwNcRORCcLoOVI,7588
51
51
  pycontrails/models/pcc.py,sha256=M5KhtRgdCP9pfDFgui7ibbijtRBTjx3QOJL_m1tQYfs,11443
52
52
  pycontrails/models/pcr.py,sha256=G_0yR5PsCMeJBP6tZFi3M7A6Wcq8s71UvosdA7ozUkI,5502
53
53
  pycontrails/models/sac.py,sha256=LhEwexJZnkxitj-x5eNVSCDGdkoCdj8Zh_I0WB8FWOY,16405
54
54
  pycontrails/models/tau_cirrus.py,sha256=7wvZrgT9Da8A4SzIlLsE1zIRoJRNglmR2yKsMCAjxaQ,5556
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=yEB__kGqJPgUJEdfoDb7VrrH21sXbzgh7wmK8F-d-m4,102731
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
@@ -69,11 +69,11 @@ pycontrails/models/cocip/unterstrasser_wake_vortex.py,sha256=GBFtwCPslStlgJU81Wg
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
@@ -84,8 +84,8 @@ pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq,sha2
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
87
+ pycontrails/models/ps_model/ps_grid.py,sha256=IhtCJF5FxJM7xYcc6jwPog91owe3dfkMwsOh6UTcrqI,26772
88
+ pycontrails/models/ps_model/ps_model.py,sha256=N_466_18m7d-hLRULdI7RBHMLqjnW431JOeDmxEKwE8,34293
89
89
  pycontrails/models/ps_model/ps_operational_limits.py,sha256=qGT6_EP0v5Zn9_V5fnB309eyifZRzQFE1G5qmJiw4gU,17006
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
@@ -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=nkBcd8Ko0v5sEcSagm2-x_RVrb8gBSkTa8VFFZ0Mr1o,101
110
- pycontrails-0.54.4.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
111
- pycontrails-0.54.4.dist-info/RECORD,,
106
+ pycontrails-0.54.5.dist-info/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
107
+ pycontrails-0.54.5.dist-info/METADATA,sha256=DastunRS0aBY5toiVT6Z6CAjQT2pF3mL6_gXBt_5lTI,9335
108
+ pycontrails-0.54.5.dist-info/NOTICE,sha256=QG0F9avpssHcmlEMlLbndVRGqmB7ATPIk16uDVmTlVE,1972
109
+ pycontrails-0.54.5.dist-info/WHEEL,sha256=nkBcd8Ko0v5sEcSagm2-x_RVrb8gBSkTa8VFFZ0Mr1o,101
110
+ pycontrails-0.54.5.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
111
+ pycontrails-0.54.5.dist-info/RECORD,,