pycontrails 0.54.2__cp313-cp313-win_amd64.whl → 0.54.3__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pycontrails might be problematic. Click here for more details.

Files changed (29) hide show
  1. pycontrails/_version.py +2 -2
  2. pycontrails/core/aircraft_performance.py +17 -3
  3. pycontrails/core/flight.py +3 -1
  4. pycontrails/core/rgi_cython.cp313-win_amd64.pyd +0 -0
  5. pycontrails/datalib/ecmwf/variables.py +1 -0
  6. pycontrails/datalib/landsat.py +5 -8
  7. pycontrails/datalib/sentinel.py +7 -11
  8. pycontrails/ext/bada.py +3 -2
  9. pycontrails/ext/synthetic_flight.py +3 -2
  10. pycontrails/models/accf.py +40 -19
  11. pycontrails/models/apcemm/apcemm.py +2 -1
  12. pycontrails/models/cocip/cocip.py +1 -2
  13. pycontrails/models/cocipgrid/cocip_grid.py +25 -20
  14. pycontrails/models/dry_advection.py +50 -54
  15. pycontrails/models/ps_model/__init__.py +2 -1
  16. pycontrails/models/ps_model/ps_aircraft_params.py +3 -2
  17. pycontrails/models/ps_model/ps_grid.py +187 -1
  18. pycontrails/models/ps_model/ps_model.py +4 -7
  19. pycontrails/models/ps_model/ps_operational_limits.py +39 -52
  20. pycontrails/physics/geo.py +149 -0
  21. pycontrails/physics/jet.py +141 -11
  22. pycontrails/physics/static/iata-cargo-load-factors-20241115.csv +71 -0
  23. pycontrails/physics/static/iata-passenger-load-factors-20241115.csv +71 -0
  24. {pycontrails-0.54.2.dist-info → pycontrails-0.54.3.dist-info}/METADATA +9 -9
  25. {pycontrails-0.54.2.dist-info → pycontrails-0.54.3.dist-info}/RECORD +29 -27
  26. {pycontrails-0.54.2.dist-info → pycontrails-0.54.3.dist-info}/WHEEL +1 -1
  27. {pycontrails-0.54.2.dist-info → pycontrails-0.54.3.dist-info}/LICENSE +0 -0
  28. {pycontrails-0.54.2.dist-info → pycontrails-0.54.3.dist-info}/NOTICE +0 -0
  29. {pycontrails-0.54.2.dist-info → pycontrails-0.54.3.dist-info}/top_level.txt +0 -0
@@ -1,22 +1,28 @@
1
1
  """Jet aircraft trajectory and performance parameters.
2
2
 
3
3
  This module includes common functions to calculate jet aircraft trajectory
4
- and performance parameters, including fuel quantities, mass, thrust setting
5
- and propulsion efficiency.
4
+ and performance parameters, including fuel quantities, mass, thrust setting,
5
+ propulsion efficiency and load factors.
6
6
  """
7
7
 
8
8
  from __future__ import annotations
9
9
 
10
+ import functools
10
11
  import logging
12
+ import pathlib
11
13
 
12
14
  import numpy as np
13
15
  import numpy.typing as npt
16
+ import pandas as pd
14
17
 
15
18
  from pycontrails.core import flight
16
19
  from pycontrails.physics import constants, units
17
20
  from pycontrails.utils.types import ArrayOrFloat, ArrayScalarLike
18
21
 
19
22
  logger = logging.getLogger(__name__)
23
+ _path_to_static = pathlib.Path(__file__).parent / "static"
24
+ PLF_PATH = _path_to_static / "iata-passenger-load-factors-20241115.csv"
25
+ CLF_PATH = _path_to_static / "iata-cargo-load-factors-20241115.csv"
20
26
 
21
27
 
22
28
  # -------------------
@@ -43,7 +49,7 @@ def acceleration(
43
49
 
44
50
  See Also
45
51
  --------
46
- :func:`flight.segment_duration`
52
+ pycontrails.Flight.segment_duration
47
53
  """
48
54
  dv_dt = np.empty_like(true_airspeed)
49
55
  dv_dt[:-1] = np.diff(true_airspeed) / segment_duration[:-1]
@@ -71,8 +77,8 @@ def climb_descent_angle(
71
77
 
72
78
  See Also
73
79
  --------
74
- :func:`flight.segment_rocd`
75
- :func:`flight.segment_true_airspeed`
80
+ pycontrails.Flight.segment_rocd
81
+ pycontrails.Flight.segment_true_airspeed
76
82
  """
77
83
  rocd_ms = units.ft_to_m(rocd) / 60.0
78
84
  sin_theta = rocd_ms / true_airspeed
@@ -319,8 +325,8 @@ def reserve_fuel_requirements(
319
325
 
320
326
  See Also
321
327
  --------
322
- :func:`flight.segment_phase`
323
- :func:`fuel_burn`
328
+ pycontrails.Flight.segment_phase
329
+ fuel_burn
324
330
  """
325
331
  segment_phase = flight.segment_phase(rocd, altitude_ft)
326
332
 
@@ -345,6 +351,128 @@ def reserve_fuel_requirements(
345
351
  # -------------
346
352
 
347
353
 
354
+ @functools.cache
355
+ def _historical_regional_load_factor(path: pathlib.Path) -> pd.DataFrame:
356
+ """Load the historical regional load factor database.
357
+
358
+ Daily load factors are estimated from linearly interpolating the monthly statistics.
359
+
360
+ Returns
361
+ -------
362
+ pd.DataFrame
363
+ Historical regional load factor for each day.
364
+
365
+ Notes
366
+ -----
367
+ The monthly **passenger load factor** for each region is compiled from IATA's monthly
368
+ publication of the Air Passenger Market Analysis, where the static file will be continuously
369
+ updated. The report estimates the regional passenger load factor by dividing the revenue
370
+ passenger-km (RPK) by the available seat-km (ASK).
371
+
372
+ The monthly **cargo load factor** for each region is compiled from IATA's monthly publication
373
+ of the Air Cargo Market Analysis, where the static file will be continuously updated.
374
+ The report estimates the regional cargo load factor by dividing the freight tonne-km (FTK)
375
+ by the available freight tonne-km (AFTK).
376
+ """
377
+ df = pd.read_csv(path, index_col="Date", parse_dates=True, date_format="%d/%m/%Y")
378
+ return df.resample("D").interpolate()
379
+
380
+
381
+ AIRPORT_TO_REGION = {
382
+ "A": "Asia Pacific",
383
+ "B": "Europe",
384
+ "C": "North America",
385
+ "D": "Africa",
386
+ "E": "Europe",
387
+ "F": "Africa",
388
+ "G": "Africa",
389
+ "H": "Africa",
390
+ "K": "North America",
391
+ "L": "Europe",
392
+ "M": "Latin America",
393
+ "N": "Asia Pacific",
394
+ "O": "Middle East",
395
+ "P": "Asia Pacific",
396
+ "R": "Asia Pacific",
397
+ "S": "Latin America",
398
+ "T": "Latin America",
399
+ "U": "Asia Pacific",
400
+ "V": "Asia Pacific",
401
+ "W": "Asia Pacific",
402
+ "Y": "Asia Pacific",
403
+ "Z": "Asia Pacific",
404
+ }
405
+
406
+
407
+ def aircraft_load_factor(
408
+ origin_airport_icao: str | None = None,
409
+ first_waypoint_time: pd.Timestamp | None = None,
410
+ *,
411
+ freighter: bool = False,
412
+ ) -> float:
413
+ """
414
+ Estimate passenger/cargo load factor based on historical data.
415
+
416
+ Accounts for regional and seasonal differences.
417
+
418
+ Parameters
419
+ ----------
420
+ origin_airport_icao : str | None
421
+ ICAO code of origin airport. If None is provided, then globally averaged values will be
422
+ assumed at `first_waypoint_time`.
423
+ first_waypoint_time : pd.Timestamp | None
424
+ First waypoint UTC time. If None is provided, then regionally or globally averaged values
425
+ from the trailing twelve months will be used.
426
+ freighter: bool
427
+ Historical cargo load factor will be used if true, otherwise use passenger load factor.
428
+
429
+ Returns
430
+ -------
431
+ float
432
+ Passenger/cargo load factor [0 - 1], unitless
433
+ """
434
+ # If origin airport is provided, use regional load factor
435
+ if origin_airport_icao is not None:
436
+ first_letter = origin_airport_icao[0]
437
+ region = AIRPORT_TO_REGION.get(first_letter, "Global")
438
+ else:
439
+ region = "Global"
440
+
441
+ # Use passenger or cargo database
442
+ if freighter:
443
+ lf_database = _historical_regional_load_factor(CLF_PATH)
444
+ else:
445
+ lf_database = _historical_regional_load_factor(PLF_PATH)
446
+
447
+ # If `first_waypoint_time` is None, global/regional averages for the trailing twelve months
448
+ # will be assumed.
449
+ if first_waypoint_time is None:
450
+ t1 = lf_database.index[-1]
451
+ t0 = t1 - pd.DateOffset(months=12) + pd.DateOffset(days=1)
452
+ return lf_database.loc[t0:t1, region].mean().item()
453
+
454
+ date = first_waypoint_time.floor("D")
455
+
456
+ # If `date` is more recent than the historical data, then use most recent load factors
457
+ # from trailing twelve months as seasonal values are stable except in COVID years (2020-22).
458
+ if date > lf_database.index[-1]:
459
+ if date.month == 2 and date.day == 29: # remove any leap day
460
+ date = date.replace(day=28)
461
+
462
+ filt = (lf_database.index.month == date.month) & (lf_database.index.day == date.day)
463
+ date = lf_database.index[filt][-1]
464
+
465
+ # (2) If `date` is before the historical data, then use 2019 load factors.
466
+ elif date < lf_database.index[0]:
467
+ if date.month == 2 and date.day == 29: # remove any leap day
468
+ date = date.replace(day=28)
469
+
470
+ filt = (lf_database.index.month == date.month) & (lf_database.index.day == date.day)
471
+ date = lf_database.index[filt][0]
472
+
473
+ return lf_database.at[date, region].item()
474
+
475
+
348
476
  def aircraft_weight(aircraft_mass: ArrayOrFloat) -> ArrayOrFloat:
349
477
  """Calculate the aircraft weight at each waypoint.
350
478
 
@@ -413,7 +541,8 @@ def initial_aircraft_mass(
413
541
 
414
542
  See Also
415
543
  --------
416
- :func:`reserve_fuel_requirements`
544
+ reserve_fuel_requirements
545
+ aircraft_load_factor
417
546
  """
418
547
  tom = operating_empty_weight + load_factor * max_payload + total_fuel_burn + total_reserve_fuel
419
548
  return min(tom, max_takeoff_weight)
@@ -463,9 +592,10 @@ def update_aircraft_mass(
463
592
 
464
593
  See Also
465
594
  --------
466
- :func:`fuel_burn`
467
- :func:`reserve_fuel_requirements`
468
- :func:`initial_aircraft_mass`
595
+ fuel_burn
596
+ reserve_fuel_requirements
597
+ initial_aircraft_mass
598
+ aircraft_load_factor
469
599
  """
470
600
  if takeoff_mass is None:
471
601
  takeoff_mass = initial_aircraft_mass(
@@ -0,0 +1,71 @@
1
+ Date,Global,Africa,Asia Pacific,Europe,Latin America,Middle East,North America
2
+ 15/12/2018,0.488,0.381,0.54,0.567,0.291,0.488,0.414
3
+ 15/1/2019,0.451,0.354,0.501,0.501,0.299,0.421,0.4
4
+ 15/2/2019,0.447,0.363,0.473,0.53,0.297,0.466,0.379
5
+ 15/3/2019,0.495,0.384,0.556,0.56,0.323,0.488,0.416
6
+ 15/4/2019,0.463,0.374,0.518,0.496,0.325,0.458,0.405
7
+ 15/5/2019,0.468,0.386,0.52,0.513,0.353,0.469,0.398
8
+ 15/6/2019,0.454,0.324,0.522,0.498,0.337,0.44,0.382
9
+ 15/7/2019,0.45,0.323,0.519,0.485,0.354,0.453,0.373
10
+ 15/8/2019,0.446,0.302,0.516,0.477,0.372,0.435,0.377
11
+ 15/9/2019,0.464,0.329,0.539,0.501,0.379,0.459,0.381
12
+ 15/10/2019,0.477,0.361,0.539,0.533,0.364,0.477,0.394
13
+ 15/11/2019,0.496,0.404,0.538,0.569,0.403,0.497,0.413
14
+ 15/12/2019,0.467,0.368,0.519,0.53,0.3,0.47,0.395
15
+ 15/1/2020,0.45,0.356,0.474,0.501,0.311,0.426,0.424
16
+ 15/2/2020,0.464,0.368,0.543,0.531,0.342,0.461,0.372
17
+ 15/3/2020,0.545,0.425,0.656,0.63,0.411,0.532,0.429
18
+ 15/4/2020,0.58,0.486,0.691,0.648,0.554,0.525,0.487
19
+ 15/5/2020,0.576,0.612,0.643,0.625,0.561,0.483,0.526
20
+ 15/6/2020,0.573,0.547,0.645,0.62,0.512,0.494,0.521
21
+ 15/7/2020,0.564,0.489,0.639,0.594,0.464,0.53,0.506
22
+ 15/8/2020,0.548,0.502,0.616,0.568,0.478,0.535,0.489
23
+ 15/9/2020,0.569,0.507,0.642,0.62,0.456,0.579,0.484
24
+ 15/10/2020,0.576,0.502,0.617,0.651,0.443,0.606,0.496
25
+ 15/11/2020,0.582,0.496,0.631,0.655,0.436,0.6,0.5
26
+ 15/12/2020,0.573,0.51,0.639,0.653,0.367,0.597,0.482
27
+ 15/1/2021,0.589,0.48,0.665,0.627,0.39,0.569,0.532
28
+ 15/2/2021,0.575,0.476,0.692,0.641,0.429,0.598,0.453
29
+ 15/3/2021,0.588,0.499,0.661,0.685,0.453,0.613,0.472
30
+ 15/4/2021,0.578,0.504,0.633,0.681,0.457,0.598,0.473
31
+ 15/5/2021,0.572,0.502,0.646,0.656,0.423,0.589,0.469
32
+ 15/6/2021,0.565,0.48,0.676,0.626,0.381,0.581,0.458
33
+ 15/7/2021,0.544,0.455,0.654,0.598,0.387,0.536,0.443
34
+ 15/8/2021,0.542,0.43,0.698,0.575,0.404,0.529,0.437
35
+ 15/9/2021,0.553,0.428,0.68,0.604,0.37,0.558,0.447
36
+ 15/10/2021,0.561,0.45,0.661,0.626,0.421,0.572,0.449
37
+ 15/11/2021,0.559,0.434,0.654,0.631,0.446,0.572,0.444
38
+ 15/12/2021,0.542,0.502,0.634,0.623,0.413,0.556,0.43
39
+ 15/1/2022,0.541,0.492,0.609,0.584,0.417,0.513,0.474
40
+ 15/2/2022,0.532,0.502,0.592,0.636,0.476,0.529,0.429
41
+ 15/3/2022,0.549,0.494,0.638,0.671,0.448,0.526,0.442
42
+ 15/4/2022,0.516,0.49,0.631,0.578,0.419,0.504,0.419
43
+ 15/5/2022,0.505,0.495,0.627,0.548,0.387,0.487,0.411
44
+ 15/6/2022,0.492,0.447,0.608,0.507,0.383,0.488,0.404
45
+ 15/7/2022,0.472,0.452,0.563,0.493,0.374,0.469,0.398
46
+ 15/8/2022,0.467,0.418,0.547,0.502,0.374,0.466,0.393
47
+ 15/9/2022,0.481,0.451,0.572,0.528,0.381,0.478,0.396
48
+ 15/10/2022,0.487,0.437,0.561,0.558,0.384,0.48,0.401
49
+ 15/11/2022,0.491,0.458,0.545,0.569,0.382,0.475,0.419
50
+ 15/12/2022,0.472,0.432,0.528,0.559,0.322,0.454,0.406
51
+ 15/1/2023,0.448,0.439,0.452,0.541,0.325,0.411,0.423
52
+ 15/2/2023,0.456,0.468,0.464,0.574,0.361,0.445,0.4
53
+ 15/3/2023,0.462,0.489,0.485,0.57,0.366,0.456,0.393
54
+ 15/4/2023,0.427,0.482,0.442,0.497,0.364,0.431,0.373
55
+ 15/5/2023,0.415,0.448,0.422,0.489,0.333,0.41,0.373
56
+ 15/6/2023,0.432,0.446,0.468,0.476,0.337,0.446,0.374
57
+ 15/7/2023,0.421,0.417,0.457,0.472,0.322,0.411,0.37
58
+ 15/8/2023,0.42,0.388,0.443,0.484,0.326,0.407,0.377
59
+ 15/9/2023,0.438,0.436,0.466,0.5,0.319,0.424,0.392
60
+ 15/10/2023,0.452,0.416,0.472,0.53,0.354,0.46,0.392
61
+ 15/11/2023,0.467,0.421,0.479,0.57,0.363,0.469,0.408
62
+ 15/12/2023,0.459,0.41,0.479,0.562,0.316,0.455,0.403
63
+ 15/1/2024,0.457,0.431,0.446,0.555,0.344,0.439,0.435
64
+ 15/2/2024,0.451,0.451,0.432,0.584,0.376,0.463,0.396
65
+ 15/3/2024,0.473,0.473,0.475,0.581,0.402,0.496,0.404
66
+ 15/4/2024,0.439,0.429,0.445,0.515,0.387,0.447,0.387
67
+ 15/5/2024,0.446,0.438,0.453,0.518,0.362,0.461,0.397
68
+ 15/6/2024,0.458,0.385,0.496,0.507,0.336,0.473,0.388
69
+ 15/7/2024,0.444,0.4,0.48,0.496,0.338,0.458,0.382
70
+ 15/8/2024,0.44,0.378,0.466,0.501,0.359,0.445,0.387
71
+ 15/9/2024,0.456,0.392,0.485,0.525,0.368,0.474,0.389
@@ -0,0 +1,71 @@
1
+ Date,Global,Africa,Asia Pacific,Europe,Latin America,Middle East,North America
2
+ 15/12/2018,0.804,0.724,0.81,0.81,0.818,0.736,0.825
3
+ 15/1/2019,0.796,0.709,0.81,0.796,0.825,0.76,0.795
4
+ 15/2/2019,0.806,0.704,0.826,0.815,0.813,0.726,0.808
5
+ 15/3/2019,0.817,0.72,0.812,0.837,0.815,0.739,0.85
6
+ 15/4/2019,0.828,0.733,0.817,0.851,0.822,0.803,0.839
7
+ 15/5/2019,0.815,0.676,0.802,0.837,0.832,0.732,0.851
8
+ 15/6/2019,0.844,0.706,0.821,0.875,0.832,0.767,0.887
9
+ 15/7/2019,0.857,0.735,0.831,0.89,0.853,0.812,0.888
10
+ 15/8/2019,0.857,0.755,0.839,0.889,0.833,0.821,0.875
11
+ 15/9/2019,0.819,0.721,0.801,0.866,0.819,0.75,0.828
12
+ 15/10/2019,0.82,0.697,0.815,0.855,0.819,0.734,0.841
13
+ 15/11/2019,0.818,0.708,0.813,0.833,0.822,0.732,0.828
14
+ 15/12/2019,0.823,0.724,0.816,0.828,0.825,0.78,0.859
15
+ 15/1/2020,0.803,0.702,0.799,0.816,0.826,0.785,0.812
16
+ 15/2/2020,0.759,0.668,0.678,0.813,0.812,0.725,0.811
17
+ 15/3/2020,0.606,0.609,0.589,0.67,0.681,0.599,0.557
18
+ 15/4/2020,0.366,0.111,0.538,0.32,0.55,0.284,0.15
19
+ 15/5/2020,0.507,0.071,0.62,0.427,0.623,0.255,0.381
20
+ 15/6/2020,0.576,0.162,0.638,0.555,0.666,0.357,0.524
21
+ 15/7/2020,0.579,0.296,0.657,0.609,0.631,0.396,0.476
22
+ 15/8/2020,0.585,0.39,0.65,0.635,0.639,0.372,0.477
23
+ 15/9/2020,0.601,0.378,0.692,0.586,0.706,0.365,0.525
24
+ 15/10/2020,0.602,0.482,0.687,0.552,0.721,0.387,0.558
25
+ 15/11/2020,0.58,0.474,0.664,0.523,0.74,0.372,0.518
26
+ 15/12/2020,0.575,0.549,0.616,0.578,0.73,0.44,0.516
27
+ 15/1/2021,0.541,0.544,0.566,0.576,0.685,0.422,0.484
28
+ 15/2/2021,0.554,0.516,0.591,0.563,0.683,0.398,0.527
29
+ 15/3/2021,0.623,0.53,0.669,0.593,0.708,0.422,0.624
30
+ 15/4/2021,0.633,0.476,0.678,0.563,0.723,0.404,0.668
31
+ 15/5/2021,0.658,0.53,0.678,0.593,0.768,0.389,0.728
32
+ 15/6/2021,0.696,0.587,0.657,0.658,0.784,0.459,0.806
33
+ 15/7/2021,0.731,0.614,0.675,0.725,0.793,0.513,0.841
34
+ 15/8/2021,0.7,0.64,0.545,0.746,0.774,0.56,0.786
35
+ 15/9/2021,0.676,0.56,0.605,0.719,0.773,0.524,0.727
36
+ 15/10/2021,0.706,0.558,0.629,0.741,0.809,0.577,0.769
37
+ 15/11/2021,0.713,0.616,0.597,0.752,0.822,0.616,0.786
38
+ 15/12/2021,0.723,0.647,0.625,0.745,0.816,0.663,0.793
39
+ 15/1/2022,0.645,0.623,0.576,0.682,0.782,0.591,0.663
40
+ 15/2/2022,0.698,0.648,0.629,0.721,0.795,0.648,0.745
41
+ 15/3/2022,0.747,0.657,0.642,0.739,0.808,0.718,0.839
42
+ 15/4/2022,0.778,0.68,0.67,0.795,0.809,0.713,0.858
43
+ 15/5/2022,0.794,0.696,0.696,0.807,0.807,0.762,0.86
44
+ 15/6/2022,0.824,0.743,0.729,0.86,0.817,0.772,0.891
45
+ 15/7/2022,0.835,0.753,0.764,0.87,0.831,0.812,0.882
46
+ 15/8/2022,0.818,0.757,0.74,0.862,0.824,0.796,0.856
47
+ 15/9/2022,0.816,0.743,0.747,0.847,0.823,0.795,0.855
48
+ 15/10/2022,0.82,0.726,0.755,0.848,0.833,0.791,0.864
49
+ 15/11/2022,0.808,0.748,0.77,0.838,0.82,0.775,0.832
50
+ 15/12/2022,0.811,0.769,0.772,0.836,0.785,0.8,0.842
51
+ 15/1/2023,0.777,0.742,0.774,0.762,0.813,0.791,0.784
52
+ 15/2/2023,0.778,0.756,0.792,0.752,0.811,0.798,0.771
53
+ 15/3/2023,0.807,0.739,0.792,0.805,0.812,0.794,0.837
54
+ 15/4/2023,0.813,0.708,0.784,0.838,0.814,0.76,0.856
55
+ 15/5/2023,0.818,0.699,0.773,0.848,0.811,0.799,0.863
56
+ 15/6/2023,0.842,0.689,0.804,0.877,0.825,0.794,0.887
57
+ 15/7/2023,0.852,0.746,0.816,0.877,0.867,0.821,0.897
58
+ 15/8/2023,0.846,0.764,0.822,0.876,0.851,0.83,0.858
59
+ 15/9/2023,0.826,0.731,0.8,0.86,0.839,0.816,0.83
60
+ 15/10/2023,0.831,0.707,0.821,0.856,0.848,0.806,0.836
61
+ 15/11/2023,0.818,0.704,0.814,0.837,0.844,0.777,0.827
62
+ 15/12/2023,0.821,0.732,0.812,0.851,0.827,0.782,0.829
63
+ 15/1/2024,0.799,0.731,0.808,0.782,0.85,0.799,0.799
64
+ 15/2/2024,0.806,0.744,0.844,0.761,0.827,0.808,0.795
65
+ 15/3/2024,0.82,0.721,0.835,0.809,0.831,0.775,0.837
66
+ 15/4/2024,0.824,0.734,0.824,0.838,0.822,0.792,0.83
67
+ 15/5/2024,0.834,0.729,0.818,0.852,0.834,0.808,0.858
68
+ 15/6/2024,0.85,0.771,0.829,0.877,0.842,0.795,0.876
69
+ 15/7/2024,0.86,0.75,0.834,0.882,0.862,0.84,0.889
70
+ 15/8/2024,0.862,0.779,0.86,0.879,0.84,0.823,0.871
71
+ 15/9/2024,0.836,0.765,0.831,0.865,0.834,0.814,0.824
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycontrails
3
- Version: 0.54.2
3
+ Version: 0.54.3
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
@@ -31,15 +31,15 @@ Requires-Dist: dask>=2022.3
31
31
  Requires-Dist: numpy>=1.22
32
32
  Requires-Dist: pandas>=2.2
33
33
  Requires-Dist: scipy>=1.10
34
- Requires-Dist: xarray>=2022.3
35
34
  Requires-Dist: typing-extensions>=4.5; python_version < "3.12"
35
+ Requires-Dist: xarray>=2022.3
36
36
  Provides-Extra: complete
37
37
  Requires-Dist: pycontrails[ecmwf,gcp,gfs,jupyter,pyproj,sat,vis,zarr]; extra == "complete"
38
38
  Provides-Extra: dev
39
- Requires-Dist: dep-license; extra == "dev"
39
+ Requires-Dist: dep_license; extra == "dev"
40
40
  Requires-Dist: fastparquet>=0.8; extra == "dev"
41
41
  Requires-Dist: ipdb>=0.13; extra == "dev"
42
- Requires-Dist: memory-profiler; extra == "dev"
42
+ Requires-Dist: memory_profiler; extra == "dev"
43
43
  Requires-Dist: mypy>=1.8; extra == "dev"
44
44
  Requires-Dist: mypy-extensions>=1.0; extra == "dev"
45
45
  Requires-Dist: platformdirs>=3.0; extra == "dev"
@@ -62,7 +62,7 @@ Requires-Dist: pytest-check-links>=0.8.0; extra == "docs"
62
62
  Requires-Dist: sphinx>=4.2; extra == "docs"
63
63
  Requires-Dist: sphinx-autobuild>=0.7; extra == "docs"
64
64
  Requires-Dist: sphinxcontrib-bibtex>=2.2; extra == "docs"
65
- Requires-Dist: sphinx-copybutton>=0.5; extra == "docs"
65
+ Requires-Dist: sphinx_copybutton>=0.5; extra == "docs"
66
66
  Requires-Dist: sphinxext.opengraph>=0.8; extra == "docs"
67
67
  Provides-Extra: ecmwf
68
68
  Requires-Dist: cdsapi>=0.4; extra == "ecmwf"
@@ -86,10 +86,6 @@ Requires-Dist: tqdm>=4.61; extra == "gfs"
86
86
  Provides-Extra: jupyter
87
87
  Requires-Dist: ipywidgets>=7.6; extra == "jupyter"
88
88
  Requires-Dist: jupyterlab>=2.2; extra == "jupyter"
89
- Provides-Extra: open3d
90
- Requires-Dist: open3d>=0.14; extra == "open3d"
91
- Provides-Extra: pyproj
92
- Requires-Dist: pyproj>=3.5; extra == "pyproj"
93
89
  Provides-Extra: sat
94
90
  Requires-Dist: cartopy>=0.22; extra == "sat"
95
91
  Requires-Dist: db-dtypes>=1.2; extra == "sat"
@@ -101,6 +97,10 @@ Requires-Dist: pillow>=10.3; extra == "sat"
101
97
  Requires-Dist: pyproj>=3.5; extra == "sat"
102
98
  Requires-Dist: rasterio>=1.3; extra == "sat"
103
99
  Requires-Dist: scikit-image>=0.18; extra == "sat"
100
+ Provides-Extra: open3d
101
+ Requires-Dist: open3d>=0.14; extra == "open3d"
102
+ Provides-Extra: pyproj
103
+ Requires-Dist: pyproj>=3.5; extra == "pyproj"
104
104
  Provides-Extra: vis
105
105
  Requires-Dist: matplotlib>=3.3; extra == "vis"
106
106
  Requires-Dist: opencv-python-headless>=4.5; extra == "vis"
@@ -1,13 +1,13 @@
1
1
  pycontrails/__init__.py,sha256=EpPulx2dBYpqZNsyh6HTwGGnFsvBVHBXabG5VInwSg4,2071
2
- pycontrails/_version.py,sha256=mC3vkpyLEZ07amX98qZXKhkK9brNZvIS9DOK52GQrNw,429
2
+ pycontrails/_version.py,sha256=n8sehSwoJPF0YqOLEWUVMMtHdRQ_L6UunLYrk7v5vi8,429
3
3
  pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  pycontrails/core/__init__.py,sha256=X0DX2FGboPN_svwN2xiBzoPpHhDtg0oKFjXQfmCqMWU,886
5
- pycontrails/core/aircraft_performance.py,sha256=ZXw0asXC0SV0xc6Ks8e_ZLQCWxQlfVlL0T9xwnkXtwQ,27069
5
+ pycontrails/core/aircraft_performance.py,sha256=U2qD1VfGVM8k3kvYJtU5Pqa1ISKmIrMSzCm5uT19hp0,27844
6
6
  pycontrails/core/airports.py,sha256=nGKXN3jOtzsDCaJZVFNO3e3w-U3lqMTz5Ww5jALiRJY,6984
7
7
  pycontrails/core/cache.py,sha256=W4N-bsw_6mkzcFiMfAmArMtlEP9OHVipjTeoniToQ3M,28953
8
8
  pycontrails/core/coordinates.py,sha256=J5qjGuXgbLUw_U9_qREdgOaHl0ngK6Hbbjj3uw7FwNE,5565
9
9
  pycontrails/core/fleet.py,sha256=X2gDpK9d_IedzkLQdPhtT9sKu7n05kLSFpXpTfPmuPE,16202
10
- pycontrails/core/flight.py,sha256=bwUiGPCnIOcHD4S-kLcfrG29qQfiptf3pAvY3uheyQs,85191
10
+ pycontrails/core/flight.py,sha256=NQyqMJzC-_wXJDpviBWPez6NK33gARqRioQwhRJ_gUY,85356
11
11
  pycontrails/core/flightplan.py,sha256=0ozSt3jqa62PZBjXnEDQLbZO1YORg3r2552RpRtkKZA,7555
12
12
  pycontrails/core/fuel.py,sha256=06YUDhvC8Rx6KbUXRB9qLTsJX2V7tLbzjwAfDH0R6l8,4472
13
13
  pycontrails/core/interpolation.py,sha256=AYG5PKkBKlCZpje7HNi8P7wlbikds76QMlJnlRrCKFs,26338
@@ -15,12 +15,12 @@ pycontrails/core/met.py,sha256=fdLHJXjyazaZ75UQXBPg3ZVZjhNGUS_tjp0x4v5hVPk,10365
15
15
  pycontrails/core/met_var.py,sha256=iLk8R2Yq2MCnc7_XJLUULqojBwe1seFp3jdaTm8T-BY,9490
16
16
  pycontrails/core/models.py,sha256=KWDCVzpg-0pfp7075XtLlNm-ALuthPm4KSowr9Wn21Y,40463
17
17
  pycontrails/core/polygon.py,sha256=F403uzql_c47MPM2Qdmec6WwtFaXZyb48h-4gK-K4EU,18577
18
- pycontrails/core/rgi_cython.cp313-win_amd64.pyd,sha256=z10NyIV0tEnSBA7QBxH39YBPajzd_V3DD-EKOnVxC_w,263680
18
+ pycontrails/core/rgi_cython.cp313-win_amd64.pyd,sha256=ONtiYN9hlVVSej0PbapnZJYbxRTjgA8nJJiX6s6RrFw,263168
19
19
  pycontrails/core/vector.py,sha256=VZi7sSjgchJN6vu7Xabf-OC_J85-DwbeOCC7SM8M9IY,72201
20
20
  pycontrails/datalib/__init__.py,sha256=Q2RrnjwtFzfsmJ2tEojDCzDMkd8R0MYw4mQz3YwUsqI,381
21
21
  pycontrails/datalib/goes.py,sha256=UMxXXCiRL6SHY5_3cXs8GmG19eeKOOi3gKCimkyZSuc,27305
22
- pycontrails/datalib/landsat.py,sha256=bxk_3cOLndOguYkzyg9dLU2YNhGHYwrAOaQY_NkdPq8,20290
23
- pycontrails/datalib/sentinel.py,sha256=BSoRcRldulWw1jHpm6rszeZdgUO7P6MMMYBwXAjLb1g,17732
22
+ pycontrails/datalib/landsat.py,sha256=YrDpngF5HtvWFVwxN0FLFxCfZIEmeBMiifdkbH7fQTk,20263
23
+ pycontrails/datalib/sentinel.py,sha256=ukzdSeHKC1UBWEYzehS2LqtKoCpKpaPobLfbZDGy6KU,17679
24
24
  pycontrails/datalib/spire.py,sha256=aW0wh5GDrszFb20ZMzmWKQ4uHbOCmHvVt9Sf4U3AyTI,26070
25
25
  pycontrails/datalib/_leo_utils/search.py,sha256=8JzT56ps3SH1W-5rwL8BWuxLLljwxa_5fjLAuZdL_Vg,8937
26
26
  pycontrails/datalib/_leo_utils/vis.py,sha256=0UDVcqMRqHmAORDV4Xyk-HVnTAjbOCf7KCpWm2ilTLE,1861
@@ -35,30 +35,30 @@ pycontrails/datalib/ecmwf/hres.py,sha256=PMos1_JlqlLdmus0yz4ZR1257hKRnl0uRqRaH9o
35
35
  pycontrails/datalib/ecmwf/hres_model_level.py,sha256=ghrN-z5bjV-ztv6L5KlGiCLlGR9ABbAe5k38CaARmLU,18121
36
36
  pycontrails/datalib/ecmwf/ifs.py,sha256=_JM2s5UvPDQu7Rdmx2dcxBIyZrKC7gvHqurR3sSqWxw,11039
37
37
  pycontrails/datalib/ecmwf/model_levels.py,sha256=noLSx45AHZ0rFPiUh3aK3iaEueHgsg6mG_AplHqHeU8,17431
38
- pycontrails/datalib/ecmwf/variables.py,sha256=nWHVbTsvGShjxJIrbgE0NgXNPlsefyU4ebSYY2tDTlY,10132
38
+ pycontrails/datalib/ecmwf/variables.py,sha256=49uzpkk9YV5OGBnq-Po5e3ig2JXi2i1ZtsOOEC-AQFI,10181
39
39
  pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv,sha256=9u7CVA3QnPUmNLIWUkF5b9wFunczkvx1zSudwGmtOv8,9927
40
40
  pycontrails/datalib/gfs/__init__.py,sha256=VcE2j62ITbY7F3tEtgaLrfyjHWci-4mvLtnVg3SVgtE,712
41
41
  pycontrails/datalib/gfs/gfs.py,sha256=8HjxUebIhO6xA94-Nu9o8BAXiccpYrpJJ7SODbQ0Cko,23046
42
42
  pycontrails/datalib/gfs/variables.py,sha256=gmw5cs8RAeB-s9kCbnuKFp1K2SqNbc0lNR-JqhcenZY,3239
43
- pycontrails/ext/bada.py,sha256=S0qfNYsp1cGqkHGPu-IkAwk66lD79yikRlrq9uwgPpI,1104
43
+ pycontrails/ext/bada.py,sha256=RmLDMaZQody8XUR-1I_5rPJqoz6eIq63IpDTcuJweoc,1133
44
44
  pycontrails/ext/cirium.py,sha256=zRPVBBWwocZKkX3XhonSBf54x7P_xnjRcA7psI0Kqnw,429
45
45
  pycontrails/ext/empirical_grid.py,sha256=1WHyt1VOWEr7bMlnXo1tEKJgePvLKjKsCCee2w22gf8,4502
46
- pycontrails/ext/synthetic_flight.py,sha256=1aaTTfNk0IP8ZhuUSqBLCNRmO-2oI7vv9FZKpA9HXLU,17187
46
+ pycontrails/ext/synthetic_flight.py,sha256=6w2pC7DpbdHi3J1w5BL-8j3xCzYdP8N7FQ8dsMfDBpw,17226
47
47
  pycontrails/models/__init__.py,sha256=TKhrXe1Pu1-mV1gctx8cUAMrVxCCAtBkbZi9olfWq8s,34
48
- pycontrails/models/accf.py,sha256=Mncb82HZWbFerPBCQqZGs5P781JsqAuRxosXG-E-i6c,12974
49
- pycontrails/models/dry_advection.py,sha256=YurECAbB0J8w9M0JKTm4FzX1VcwzYoyAhnxGXB7HWgM,17191
48
+ pycontrails/models/accf.py,sha256=YlRo5aDeHSSYE7IRHbNW4dsWTACCkVaYsqGbgM-AqlI,14090
49
+ pycontrails/models/dry_advection.py,sha256=ly55oeYF7y8UeGqTvMFUcrO22QPIPBOaQD91wBvTfZ0,17332
50
50
  pycontrails/models/issr.py,sha256=QXkTIpj13u9qG5BeAaMVdtWbN8hNSsnGLL5hIzU5ZMM,7550
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=eXt3yRrcFBaZNNeH6ZOuU4XEZU2rOfrLKEOC7f0_Ywo,5194
55
55
  pycontrails/models/apcemm/__init__.py,sha256=dDsRW3V6jjzKDd43Yoyc74m_Om1fccvftZgp3OFdAYE,183
56
- pycontrails/models/apcemm/apcemm.py,sha256=0zsQBvuqJTgdD3DF3yw3qzSipoNMIliHfuTr5bhh744,40918
56
+ pycontrails/models/apcemm/apcemm.py,sha256=wCCVBBwqe-XXg2ZJw3jLgoa176LLztr99rtG7ME3wJU,40982
57
57
  pycontrails/models/apcemm/inputs.py,sha256=zHRSWVVlwYw6ms7PpC0p0I-xFsRDUVY9eDZ1g95Uf8U,6811
58
58
  pycontrails/models/apcemm/utils.py,sha256=6pKQbS5EAzTnI_edVtUvGrzM0xwNq1t9MBGgCRJtg_0,17531
59
59
  pycontrails/models/apcemm/static/apcemm_yaml_template.yaml,sha256=A3H_FWVOtqkZhG91TWLdblMKaLWIcjRMsKqkfTN6mB4,6928
60
60
  pycontrails/models/cocip/__init__.py,sha256=miDxSFxN9PzL_ieSJb3BYeHmbKqZwGicCz1scNB5eW0,991
61
- pycontrails/models/cocip/cocip.py,sha256=qDjRhFmBR6ggj0yqF9uoKbdkFw7nwKMKiQn92gnsiT4,102801
61
+ pycontrails/models/cocip/cocip.py,sha256=CcR8pHTbWVNwc3kOBSD9G9UcACxBvFypKTRn8psPmlk,102760
62
62
  pycontrails/models/cocip/cocip_params.py,sha256=JwQl8FLcp4l5-MLiMQhPsxHL8jKXg2ymWXD7Jbn3zTQ,13002
63
63
  pycontrails/models/cocip/cocip_uncertainty.py,sha256=7W586BJEAY_wpSpfVdcdX-HpZG4twk3cMLhUR2ELTMA,12176
64
64
  pycontrails/models/cocip/contrail_properties.py,sha256=u6SvucHC6VtF2kujfSVFTfv0263t5uYpNOUJZAroEzc,57111
@@ -69,7 +69,7 @@ pycontrails/models/cocip/unterstrasser_wake_vortex.py,sha256=Ymz-uO9vVhLIFwT9yuF
69
69
  pycontrails/models/cocip/wake_vortex.py,sha256=r3FM4egyGohRF0qGD3pFWBJppUQ_3GhtO_g7L74HmjU,14817
70
70
  pycontrails/models/cocip/wind_shear.py,sha256=Dm181EsiCBJWTnRTZ3ZI3YXscBRnhA6ANnKer004b2Q,3980
71
71
  pycontrails/models/cocipgrid/__init__.py,sha256=OYSdZ1Htbr_IP7N_HuOAj1Pa_KLHtdEeJfXP-cN-gnU,271
72
- pycontrails/models/cocipgrid/cocip_grid.py,sha256=j-lFzr48Vir9yU1hT0w6RtGSbfv3tYozlmfWubPi-9Q,96912
72
+ pycontrails/models/cocipgrid/cocip_grid.py,sha256=-Rer9cFctWjjdHM6Zq1caYMgGYZWNortiZGG8ziSAtY,96642
73
73
  pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=ZpN00VEmeRYaeZhvSfVjnEjrgn6XdClf1eqJC8Ytcuw,6013
74
74
  pycontrails/models/emissions/__init__.py,sha256=BXzV2pBps8j3xbaF1n9uPdVVLI5MBIGYx8xqDJezYIE,499
75
75
  pycontrails/models/emissions/black_carbon.py,sha256=9DRqB487pH8Iq83FXggA5mPLYEAA8NpsKx24f8uTEF4,20828
@@ -82,28 +82,30 @@ pycontrails/models/humidity_scaling/__init__.py,sha256=-xqDCJzKJx2nX6yl-gglHheQH
82
82
  pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=CdOmWLPEd__wpGt8EMXT3PAM8W_iLUw9njG-N-w9Urw,37775
83
83
  pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq,sha256=pShCvNUo0NYtAHhT9IBRuj38X9jejdlKfv-ZoOKmtKI,35943
84
84
  pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq,sha256=tfYhbafF9Z-gGCg6VQ1YBlOaK_01e65Dc6s9b-hQ6Zo,286375
85
- pycontrails/models/ps_model/__init__.py,sha256=QggqLRpqUh6imcn7GFPcKFSU4s3WjgfdvO8hH_OO8NY,512
86
- pycontrails/models/ps_model/ps_aircraft_params.py,sha256=ZqY9VEnFmYQ10ZMHBUfcIE4RF3iml9ctp0YF2v4Lg0I,13453
87
- pycontrails/models/ps_model/ps_grid.py,sha256=DIUItUslzJARa_Ly_SUGur8_D3Ph6_qBX1BNcL2g4mI,19172
88
- pycontrails/models/ps_model/ps_model.py,sha256=f_wwvVMmuNDRohCjYf9mUzLtugKEfzU-zbZgbYle0fo,34539
89
- pycontrails/models/ps_model/ps_operational_limits.py,sha256=hpgNkS1Xx7mjTSoNzfGoy50Yv9LNWfBDAVgPfa1c31k,17372
85
+ pycontrails/models/ps_model/__init__.py,sha256=UkHYhXqldQMNJ0gijp6Acpk4-04uqT1nPP5-8R0zTMA,571
86
+ pycontrails/models/ps_model/ps_aircraft_params.py,sha256=YbKsSSjBQD5CQpn0eCNxBUQ86YUj-YN3d5zR7tgkeg8,13563
87
+ pycontrails/models/ps_model/ps_grid.py,sha256=G4HntWZbAjuvy9BKsvoCcCg2Hmfpxz3ej5FE6SBIVvg,26285
88
+ pycontrails/models/ps_model/ps_model.py,sha256=qBMuSL1NHeCWvf9_T5LHG-_gzfCKeazAM7ZCVpyFsk8,34211
89
+ pycontrails/models/ps_model/ps_operational_limits.py,sha256=4nRRWAUydhbeam_NfLII2cMfv1PraGQMCVPj_OR_wXU,17166
90
90
  pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv,sha256=2RtIHwXRuMVAEfsefopm1m6ozHi8YciYUN3WTMpfoo4,25852
91
91
  pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv,sha256=MLXOeVjC5FQULGNc6rn-_BdSURJAkJLMSDzPhC7OpDY,1141
92
92
  pycontrails/physics/__init__.py,sha256=AScCMSMSZjKxfL6mssdSLwcja1ml7MzREThQp5PLr9U,45
93
93
  pycontrails/physics/constants.py,sha256=SWG7H7eJCvQXfUR3qS6_fYzNvEeRZga50qT2RuaHoYU,3262
94
- pycontrails/physics/geo.py,sha256=GlrGgFI26hsc04o6QLN6rY6Q1mgXuZkLXkNh1juXxuc,31277
95
- pycontrails/physics/jet.py,sha256=iQ0g5cocj6j0JZPSxpTF3LLypSZGx3QQc6UyXsFfJGc,26461
94
+ pycontrails/physics/geo.py,sha256=J0eSha0GcUoMFnxAnPrpNZITT1cAhot2it96eyIauLs,37291
95
+ pycontrails/physics/jet.py,sha256=Zm6bj-g9ZasqV9DZ0bHIu4sy2SdZyNq2B6hEEhnbtG8,31188
96
96
  pycontrails/physics/thermo.py,sha256=HAcg2wmNXW-vJbOF2kOXBoUyJiAosPY0nRWeM37otdY,13238
97
97
  pycontrails/physics/units.py,sha256=GnCJCKz25jcEYGcQVWfuYViVha6mukf08Eo4pK_3iYo,12744
98
+ pycontrails/physics/static/iata-cargo-load-factors-20241115.csv,sha256=fd54t1cJMpR0jshWhpZxzfglQ9wmDL3I1D3mifqtkqw,3757
99
+ pycontrails/physics/static/iata-passenger-load-factors-20241115.csv,sha256=EwTFMGkvHXI2W5sbsAmQ82kZ6nb7bpP9JZKg2PY-M00,3752
98
100
  pycontrails/utils/__init__.py,sha256=VmklFC-5I5lGFQEzuomlPk_bM6CoM9XDljfjCovG3vw,33
99
101
  pycontrails/utils/dependencies.py,sha256=SjEdbDDKfGmmYResWZndMCUySO0W0ptWAeY1aA_kcx8,2625
100
102
  pycontrails/utils/iteration.py,sha256=En2YY4NiNwCNtAVO8HL6tv9byBGKs8MKSI7R8P-gZy4,332
101
103
  pycontrails/utils/json.py,sha256=OHfKm4b9VeToxNBJM6gh3eI1xkTPDbvmXvWhHtsNr94,6102
102
104
  pycontrails/utils/temp.py,sha256=5XXqQoEfWjz1OrhoOBZD5vkkCFeuq9LpZkyhc38gIeY,1159
103
105
  pycontrails/utils/types.py,sha256=pqyqz8oXE4cfsx0z2ctWrNnIQavpF8uVZaH2a5fqNak,4934
104
- pycontrails-0.54.2.dist-info/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
105
- pycontrails-0.54.2.dist-info/METADATA,sha256=3F18VHx2UQSxtomFOEDYFMjMqWWGDZFX5e3ZOBQqAm0,9335
106
- pycontrails-0.54.2.dist-info/NOTICE,sha256=qYeNEp8OjDK5jSW3hTlr9LQRjZeEhXQm0zDei5UFaYs,1969
107
- pycontrails-0.54.2.dist-info/WHEEL,sha256=-v_yZ08fSknsoT62oIKG9wp1eCBV9_ao2rO4BeIReTY,101
108
- pycontrails-0.54.2.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
109
- pycontrails-0.54.2.dist-info/RECORD,,
106
+ pycontrails-0.54.3.dist-info/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
107
+ pycontrails-0.54.3.dist-info/METADATA,sha256=pGTowqmSX18OltaoWIX9OrqwKqHAAyhZFrdMxR0R95I,9335
108
+ pycontrails-0.54.3.dist-info/NOTICE,sha256=qYeNEp8OjDK5jSW3hTlr9LQRjZeEhXQm0zDei5UFaYs,1969
109
+ pycontrails-0.54.3.dist-info/WHEEL,sha256=4-iQBlRoDdX1wfPofc7KLWa5Cys4eZSgXs6GVU8fKlQ,101
110
+ pycontrails-0.54.3.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
111
+ pycontrails-0.54.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp313-cp313-win_amd64
5
5