pycontrails 0.56.0__cp313-cp313-win_amd64.whl → 0.58.0__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 (40) hide show
  1. pycontrails/_version.py +3 -3
  2. pycontrails/core/aircraft_performance.py +1 -1
  3. pycontrails/core/cache.py +2 -2
  4. pycontrails/core/fleet.py +2 -7
  5. pycontrails/core/flight.py +2 -7
  6. pycontrails/core/interpolation.py +42 -64
  7. pycontrails/core/met.py +36 -16
  8. pycontrails/core/polygon.py +3 -3
  9. pycontrails/core/rgi_cython.cp313-win_amd64.pyd +0 -0
  10. pycontrails/core/vector.py +3 -8
  11. pycontrails/datalib/_met_utils/metsource.py +4 -7
  12. pycontrails/datalib/ecmwf/common.py +2 -2
  13. pycontrails/datalib/ecmwf/hres.py +2 -2
  14. pycontrails/datalib/ecmwf/ifs.py +1 -1
  15. pycontrails/datalib/geo_utils.py +261 -0
  16. pycontrails/datalib/gfs/gfs.py +59 -65
  17. pycontrails/datalib/goes.py +193 -399
  18. pycontrails/datalib/himawari/__init__.py +27 -0
  19. pycontrails/datalib/himawari/header_struct.py +266 -0
  20. pycontrails/datalib/himawari/himawari.py +667 -0
  21. pycontrails/datalib/leo_utils/sentinel_metadata.py +9 -9
  22. pycontrails/ext/synthetic_flight.py +2 -2
  23. pycontrails/models/cocip/cocip_uncertainty.py +1 -1
  24. pycontrails/models/cocip/contrail_properties.py +1 -1
  25. pycontrails/models/cocip/output_formats.py +1 -1
  26. pycontrails/models/cocipgrid/cocip_grid.py +3 -3
  27. pycontrails/models/dry_advection.py +1 -1
  28. pycontrails/models/extended_k15.py +4 -4
  29. pycontrails/models/humidity_scaling/humidity_scaling.py +2 -2
  30. pycontrails/models/ps_model/ps_grid.py +2 -2
  31. pycontrails/models/sac.py +1 -1
  32. pycontrails/models/tau_cirrus.py +1 -1
  33. pycontrails/physics/thermo.py +1 -1
  34. pycontrails/utils/iteration.py +1 -1
  35. {pycontrails-0.56.0.dist-info → pycontrails-0.58.0.dist-info}/METADATA +6 -6
  36. {pycontrails-0.56.0.dist-info → pycontrails-0.58.0.dist-info}/RECORD +40 -36
  37. {pycontrails-0.56.0.dist-info → pycontrails-0.58.0.dist-info}/WHEEL +0 -0
  38. {pycontrails-0.56.0.dist-info → pycontrails-0.58.0.dist-info}/licenses/LICENSE +0 -0
  39. {pycontrails-0.56.0.dist-info → pycontrails-0.58.0.dist-info}/licenses/NOTICE +0 -0
  40. {pycontrails-0.56.0.dist-info → pycontrails-0.58.0.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,10 @@
1
1
  """Download and parse Sentinel metadata."""
2
2
 
3
+ import datetime
3
4
  import os
4
5
  import re
5
6
  import xml.etree.ElementTree as ET
6
7
  from collections.abc import Collection
7
- from datetime import datetime, timedelta, timezone
8
8
 
9
9
  import numpy as np
10
10
  import numpy.typing as npt
@@ -464,10 +464,10 @@ def parse_ephemeris_sentinel(datatsrip_metadata_path: str) -> pd.DataFrame:
464
464
  if position_elem is None or position_elem.text is None:
465
465
  continue # skip if missing
466
466
 
467
- gps_time = datetime.strptime(gps_time_elem.text, "%Y-%m-%dT%H:%M:%S")
467
+ gps_time = datetime.datetime.strptime(gps_time_elem.text, "%Y-%m-%dT%H:%M:%S")
468
468
 
469
469
  # Convert GPS to UTC time as there is a few seconds between them
470
- utc_time = gps_to_utc(gps_time).replace(tzinfo=timezone.utc)
470
+ utc_time = gps_to_utc(gps_time).replace(tzinfo=datetime.UTC)
471
471
 
472
472
  # Parse positions in ECEF coordinate system
473
473
  x, y, z = map(float, position_elem.text.split())
@@ -643,30 +643,30 @@ def get_time_delay_detectors(
643
643
  # Time helper functions
644
644
 
645
645
 
646
- def gps_to_utc(gps_time: datetime) -> datetime:
646
+ def gps_to_utc(gps_time: datetime.datetime) -> datetime.datetime:
647
647
  """Convert GPS time (datetime object) to UTC time.
648
648
 
649
649
  https://gssc.esa.int/navipedia/index.php/Transformations_between_Time_Systems
650
650
  """
651
651
 
652
- gps_tai_offset = timedelta(seconds=19)
653
- utc_tai_offset = timedelta(seconds=37)
652
+ gps_tai_offset = datetime.timedelta(seconds=19)
653
+ utc_tai_offset = datetime.timedelta(seconds=37)
654
654
 
655
655
  # Convert GPS time to UTC
656
656
  return gps_time + gps_tai_offset - utc_tai_offset
657
657
 
658
658
 
659
- def _calculate_average_time(times: Collection[datetime]) -> datetime:
659
+ def _calculate_average_time(times: Collection[datetime.datetime]) -> datetime.datetime:
660
660
  """Return the average time from a list of times."""
661
661
  # Compute the average time
662
662
  avg_timestamp = sum(t.timestamp() for t in times) / len(times)
663
- return datetime.fromtimestamp(avg_timestamp)
663
+ return datetime.datetime.fromtimestamp(avg_timestamp)
664
664
 
665
665
 
666
666
  def _calculate_timedeltas(detector_times: dict[int, str]) -> dict[int, pd.Timedelta]:
667
667
  """Calculate the time difference between a detector and the average time."""
668
668
  detector_times_dt = {
669
- detector_id: datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S.%f")
669
+ detector_id: datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S.%f")
670
670
  for detector_id, time_str in detector_times.items()
671
671
  }
672
672
 
@@ -305,8 +305,8 @@ class SyntheticFlight:
305
305
  *src,
306
306
  az,
307
307
  npts,
308
- m_per_timestep, # type: ignore
309
- return_back_azimuth=False, # type: ignore
308
+ m_per_timestep,
309
+ return_back_azimuth=False,
310
310
  )
311
311
  longitude = np.asarray(result.lons)
312
312
  latitude = np.asarray(result.lats)
@@ -30,7 +30,7 @@ class habit_dirichlet(rv_frozen):
30
30
  - Table 2 in :cite:`schumannEffectiveRadiusIce2011`
31
31
  """
32
32
 
33
- def __init__(self, C: float = 96.0):
33
+ def __init__(self, C: float = 96.0) -> None:
34
34
  self.C = C
35
35
 
36
36
  def rvs(self, *args: Any, **kwds: Any) -> npt.NDArray[np.float32]:
@@ -236,7 +236,7 @@ def initial_ice_particle_number(
236
236
  phase, [:math:`# m^{-1}`]
237
237
  """
238
238
  if min_aei is not None:
239
- aei = np.clip(aei, min=min_aei) # type: ignore[arg-type,call-overload]
239
+ aei = np.clip(aei, min=min_aei) # type: ignore[call-overload]
240
240
  return fuel_dist * aei
241
241
 
242
242
 
@@ -2228,7 +2228,7 @@ def compare_cocip_with_goes(
2228
2228
  fig = plt.figure(figsize=(1.2 * x_dim, y_dim))
2229
2229
  pc = ccrs.PlateCarree()
2230
2230
  ax = fig.add_subplot(projection=pc, extent=bbox)
2231
- ax.coastlines() # type: ignore[attr-defined]
2231
+ ax.coastlines()
2232
2232
  ax.imshow(rgb, extent=extent, transform=transform)
2233
2233
 
2234
2234
  ax.set_xticks([spatial_bbox[0], spatial_bbox[2]], crs=ccrs.PlateCarree())
@@ -114,7 +114,7 @@ class CocipGrid(models.Model):
114
114
  rad: MetDataset,
115
115
  params: dict[str, Any] | None = None,
116
116
  **params_kwargs: Any,
117
- ):
117
+ ) -> None:
118
118
  super().__init__(met, params=params, **params_kwargs)
119
119
 
120
120
  compute_tau_cirrus = self.params["compute_tau_cirrus_in_model_init"]
@@ -386,7 +386,7 @@ class CocipGrid(models.Model):
386
386
  "dt_integration": dt_integration_str,
387
387
  "aircraft_type": self.get_source_param("aircraft_type"),
388
388
  "pycontrails_version": pycontrails.__version__,
389
- **self.source.attrs, # type: ignore[dict-item]
389
+ **self.source.attrs,
390
390
  }
391
391
  if ap_model := self.params["aircraft_performance"]:
392
392
  attrs["ap_model"] = type(ap_model).__name__
@@ -2210,7 +2210,7 @@ def result_to_metdataset(
2210
2210
  # Update source
2211
2211
  for k, v in data_vars.items(): # type: ignore[assignment]
2212
2212
  source[k] = v
2213
- source.attrs.update(attrs) # type: ignore[arg-type]
2213
+ source.attrs.update(attrs)
2214
2214
 
2215
2215
  # Return reference to source
2216
2216
  return source
@@ -590,7 +590,7 @@ def _evolve_one_step(
590
590
  vector,
591
591
  dz_m=dz_m,
592
592
  dt=dt, # type: ignore[arg-type]
593
- max_depth=max_depth, # type: ignore[arg-type]
593
+ max_depth=max_depth,
594
594
  verbose_outputs=verbose_outputs,
595
595
  )
596
596
  out["azimuth"] = azimuth_2
@@ -24,12 +24,12 @@ DEFAULT_EXHAUST_T = 600.0 # Exhaust temperature, [K]
24
24
  EXPERIMENTAL_WARNING = True
25
25
 
26
26
 
27
- class ParticleType(enum.Enum):
27
+ class ParticleType(enum.StrEnum):
28
28
  """Enumeration of particle types."""
29
29
 
30
- NVPM = "nvPM"
31
- VPM = "vPM"
32
- AMBIENT = "ambient"
30
+ NVPM = enum.auto()
31
+ VPM = enum.auto()
32
+ AMBIENT = enum.auto()
33
33
 
34
34
 
35
35
  @dataclasses.dataclass(frozen=True)
@@ -442,7 +442,7 @@ class ExponentialBoostLatitudeCorrectionHumidityScaling(HumidityScaling):
442
442
  met: MetDataset | None = None,
443
443
  params: dict[str, Any] | None = None,
444
444
  **params_kwargs: Any,
445
- ):
445
+ ) -> None:
446
446
  if (params is None or "level_type" not in params) and ("level_type" not in params_kwargs):
447
447
  msg = (
448
448
  "The default level_type will change from 'pressure' to 'model' "
@@ -863,7 +863,7 @@ class HistogramMatching(HumidityScaling):
863
863
  met: MetDataset | None = None,
864
864
  params: dict[str, Any] | None = None,
865
865
  **params_kwargs: Any,
866
- ):
866
+ ) -> None:
867
867
  if (params is None or "level_type" not in params) and (
868
868
  params_kwargs is None or "level_type" not in params_kwargs
869
869
  ):
@@ -639,9 +639,9 @@ def ps_nominal_optimize_mach(
639
639
  if sin_a is None or cos_a is None:
640
640
  msg = "Segment angles must be provide if wind data is specified"
641
641
  raise ValueError(msg)
642
- headwind = -(northward_wind * cos_a + eastward_wind * sin_a) # type: ignore[misc]
642
+ headwind = -(northward_wind * cos_a + eastward_wind * sin_a)
643
643
  else:
644
- headwind = 0.0 # type: ignore
644
+ headwind = 0.0
645
645
 
646
646
  min_mach = ps_operational_limits.minimum_mach_num(
647
647
  air_pressure=level * 100.0,
pycontrails/models/sac.py CHANGED
@@ -133,7 +133,7 @@ class SAC(Model):
133
133
 
134
134
  G = slope_mixing_line(specific_humidity, air_pressure, engine_efficiency, ei_h2o, q_fuel)
135
135
  T_sat_liquid_ = T_sat_liquid(G)
136
- rh_crit_sac = rh_critical_sac(air_temperature, T_sat_liquid_, G) # type: ignore[type-var]
136
+ rh_crit_sac = rh_critical_sac(air_temperature, T_sat_liquid_, G)
137
137
  rh = thermo.rh(specific_humidity, air_temperature, air_pressure) # type: ignore[type-var]
138
138
  sac_ = sac(rh, rh_crit_sac)
139
139
 
@@ -91,7 +91,7 @@ def tau_cirrus(met: MetDataset) -> xr.DataArray:
91
91
  # dask.array.gradient expects at least 2 elements in each chunk
92
92
  level_axis = geopotential_height.get_axis_num("level")
93
93
  if geopotential_height.chunks:
94
- level_chunks = geopotential_height.chunks[level_axis] # type: ignore[call-overload, index]
94
+ level_chunks = geopotential_height.chunks[level_axis]
95
95
  if any(chunk < 2 for chunk in level_chunks):
96
96
  geopotential_height = geopotential_height.chunk(level=-1)
97
97
 
@@ -269,7 +269,7 @@ def mk05_e_sat_liquid_prime(T: ArrayScalarLike) -> ArrayScalarLike:
269
269
  Derivative of :func:`mk05_e_sat_liquid`
270
270
  """
271
271
  tanh_term = np.tanh(0.0415 * (T - 218.8))
272
- return mk05_e_sat_liquid(T) * ( # type: ignore[return-value]
272
+ return mk05_e_sat_liquid(T) * (
273
273
  6763.22 / T**2
274
274
  - 4.21 / T
275
275
  + 0.000367
@@ -6,7 +6,7 @@ from collections.abc import Iterator
6
6
  from typing import Any
7
7
 
8
8
 
9
- def chunk_list(lst: list, n: int) -> Iterator[list[Any]]:
9
+ def chunk_list(lst: list[Any], n: int) -> Iterator[list[Any]]:
10
10
  """Yield successive n-sized chunks from list."""
11
11
 
12
12
  for i in range(0, len(lst), n):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycontrails
3
- Version: 0.56.0
3
+ Version: 0.58.0
4
4
  Summary: Python library for modeling aviation climate impacts
5
5
  Author-email: "Contrails.org" <py@contrails.org>
6
6
  License-Expression: Apache-2.0
@@ -13,23 +13,23 @@ Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Intended Audience :: Science/Research
14
14
  Classifier: Operating System :: OS Independent
15
15
  Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
18
  Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
20
  Classifier: Programming Language :: Python :: 3 :: Only
21
21
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
22
  Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
23
23
  Classifier: Topic :: Scientific/Engineering :: GIS
24
24
  Classifier: Typing :: Typed
25
- Requires-Python: >=3.10
25
+ Requires-Python: >=3.11
26
26
  Description-Content-Type: text/markdown
27
27
  License-File: LICENSE
28
28
  License-File: NOTICE
29
29
  Requires-Dist: dask>=2022.3
30
30
  Requires-Dist: numpy>=1.22
31
31
  Requires-Dist: pandas>=2.0
32
- Requires-Dist: scipy>=1.10
32
+ Requires-Dist: scipy>=1.12
33
33
  Requires-Dist: typing-extensions>=4.5; python_version < "3.12"
34
34
  Requires-Dist: xarray>=2022.3
35
35
  Provides-Extra: complete
@@ -74,7 +74,6 @@ Requires-Dist: google-cloud-storage>=2.1; extra == "gcp"
74
74
  Requires-Dist: platformdirs>=3.0; extra == "gcp"
75
75
  Requires-Dist: tqdm>=4.61; extra == "gcp"
76
76
  Provides-Extra: gfs
77
- Requires-Dist: boto3>=1.20; extra == "gfs"
78
77
  Requires-Dist: cfgrib>=0.9; extra == "gfs"
79
78
  Requires-Dist: eccodes>=2.38; extra == "gfs"
80
79
  Requires-Dist: netcdf4>=1.6.1; extra == "gfs"
@@ -94,6 +93,7 @@ Requires-Dist: google-cloud-bigquery-storage>=2.25; extra == "sat"
94
93
  Requires-Dist: pillow>=10.3; extra == "sat"
95
94
  Requires-Dist: pyproj>=3.5; extra == "sat"
96
95
  Requires-Dist: rasterio>=1.3; extra == "sat"
96
+ Requires-Dist: s3fs>=2022.3; extra == "sat"
97
97
  Requires-Dist: scikit-image>=0.18; extra == "sat"
98
98
  Requires-Dist: shapely>=2.0; extra == "sat"
99
99
  Provides-Extra: open3d
@@ -140,7 +140,7 @@ Documentation and examples available at [py.contrails.org](https://py.contrails.
140
140
 
141
141
  ### Install with pip
142
142
 
143
- You can install pycontrails from PyPI with `pip` (Python 3.10 or later required):
143
+ You can install pycontrails from PyPI with `pip` (Python 3.11 or later required):
144
144
 
145
145
  ```bash
146
146
  $ pip install pycontrails
@@ -1,46 +1,50 @@
1
1
  pycontrails/__init__.py,sha256=mKNmGUS5wW1n1PukeaOkmLwQVN24i1__mk0odjBzwEE,2107
2
- pycontrails/_version.py,sha256=zkTAEIXvTjY5VYrpxAXxOfB87yOkpY5j-zTX6WXjfwg,748
2
+ pycontrails/_version.py,sha256=f9cgvZRYhRI4aCHPStcWmarR98l9gyIZj25kIng9ZxQ,748
3
3
  pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  pycontrails/core/__init__.py,sha256=kOAehIZBbvksSW3MuU2DfzsyeE4PaFnOTpYMeq2ZDPE,886
5
- pycontrails/core/aircraft_performance.py,sha256=dasanaqfm5eP9XUDhgoKGj-eQHTWwMZ_mN6_ZdFulT0,28911
5
+ pycontrails/core/aircraft_performance.py,sha256=gGS0s3gq3bWkOahP3pbLAVX8Rbjx_TvdwQkxCPn0DtQ,28883
6
6
  pycontrails/core/airports.py,sha256=muZZ9XkZHi486nbGAYUYILoz_ZH51rU6oWpJPdQYSMc,7010
7
- pycontrails/core/cache.py,sha256=aQZGS_2SHRV1y_4OfD3Qfq5aCvaXk6SIwdx3aCsqX6I,29050
7
+ pycontrails/core/cache.py,sha256=h5j1VX3qHGeIKwCHWQh8r0axqZvaFxu5rSWnajd3zyU,29066
8
8
  pycontrails/core/coordinates.py,sha256=J5qjGuXgbLUw_U9_qREdgOaHl0ngK6Hbbjj3uw7FwNE,5565
9
- pycontrails/core/fleet.py,sha256=acqsZ1OPnwgGjROPnboPO5JWLGHAi-h6B4Eql73h10Y,17191
10
- pycontrails/core/flight.py,sha256=Av81Ikr8J4kdG4HcdCaXIu4kY3oX8EenL6QF0B-iTeU,83780
9
+ pycontrails/core/fleet.py,sha256=USpBSCFFkqepLGSflWkMTlVmWYB0KqGLpg_Sust-8C0,17055
10
+ pycontrails/core/flight.py,sha256=hMdE1XObFs-I88N_gQbIlUzVW12_NXaJATR1uTUJJOg,83645
11
11
  pycontrails/core/flightplan.py,sha256=9_o_kGQm-yG7MibCgfDCJK8mym2BYgENrizIKl1zzgM,7749
12
12
  pycontrails/core/fuel.py,sha256=06YUDhvC8Rx6KbUXRB9qLTsJX2V7tLbzjwAfDH0R6l8,4472
13
- pycontrails/core/interpolation.py,sha256=-GC3T6yh3nMtt7JCawoYeCUnDNRY9GHhxhkRhhnntxE,26437
14
- pycontrails/core/met.py,sha256=NBboBTRKNt5WFSnKUdm2R_9N68EQTYii4P5A_hs79YQ,106898
13
+ pycontrails/core/interpolation.py,sha256=rlTRdcBog1OnNa4tLG3Kf1aikpsR01hYdNi9_1gnVHc,25518
14
+ pycontrails/core/met.py,sha256=ZHd3ay-Bl7kQ9Et-bYXCZzRpSxkcoUAiCX8-YRpx3TQ,107384
15
15
  pycontrails/core/met_var.py,sha256=xGkhIy_uelGo6gKM9rwh6QiUA0_7D0hBgO0Xa0IFi8k,12414
16
16
  pycontrails/core/models.py,sha256=MRDNYVr8WMTF5EJrwZ8zxPHKKMcU09apBcqycimCWwk,45236
17
- pycontrails/core/polygon.py,sha256=3_vYmlQoP3x3lmgwFyqQVgl9ziAQ5e160MCm2fwFou0,18619
18
- pycontrails/core/rgi_cython.cp313-win_amd64.pyd,sha256=ylUd_KH5MxirJlJUBT4trqfE3wDE8YgfU_5o7zIKt0g,242688
19
- pycontrails/core/vector.py,sha256=aF1Ni9ANZkBtoA9gfESWv9fM5fGtkmY-uQjF1Zx3Z3Q,75904
17
+ pycontrails/core/polygon.py,sha256=PUK-LwpreeuwDQ2qrBiKzAfJgDe9_M9ocpMoavAa4LU,18544
18
+ pycontrails/core/rgi_cython.cp313-win_amd64.pyd,sha256=F5M2KTl1yCzdfalHyQxoR9pZ2Msul8OFRFtU5SS7dk8,232448
19
+ pycontrails/core/vector.py,sha256=IqevQQMdrc_ffwd5AcxsngecARfKv3DcgzA544jwl74,75747
20
20
  pycontrails/datalib/__init__.py,sha256=Q2RrnjwtFzfsmJ2tEojDCzDMkd8R0MYw4mQz3YwUsqI,381
21
- pycontrails/datalib/goes.py,sha256=HTjnh147GZQfYX7R0zGVddwMuCHZQJp4cWqthGLETHY,35321
21
+ pycontrails/datalib/geo_utils.py,sha256=qB_kOu0JGnlP00fquqTFDNslo1LLkbybu11oZwqKTeE,9331
22
+ pycontrails/datalib/goes.py,sha256=BjsgiUBTCgkjql30_-3eZkLt6iPMdB4UJ3qkI7OHpDU,28238
22
23
  pycontrails/datalib/landsat.py,sha256=VUJ3BN3NXRIONWH2HMfTEZeHWUGO7ItAXVsGF0ZdWm8,21504
23
24
  pycontrails/datalib/sentinel.py,sha256=-aV8TW9cyeX6mrfyuQE6YXDRkqhxy9XYQ84A3q2jPIQ,24182
24
- pycontrails/datalib/_met_utils/metsource.py,sha256=fCObXHCKo1--v22SRayZDzWlnz0lxTMdGVNhhUyywlM,24900
25
+ pycontrails/datalib/_met_utils/metsource.py,sha256=hwG8uL-mSaCSsDAbYSX_HUB7sgumM_pbfPT7yP9Q2_A,24745
25
26
  pycontrails/datalib/ecmwf/__init__.py,sha256=9EkfWlGki8LYt7ySKf87gS8RzZjAOxK2w87_Sok3CCo,2094
26
27
  pycontrails/datalib/ecmwf/arco_era5.py,sha256=PojAfT0N12SLcgiecZtHiN96sbRWwFx3PThrXIwSX5M,12782
27
- pycontrails/datalib/ecmwf/common.py,sha256=6fcZC_-3FvWJ3vtlZX89PiiS7-DSQhAOgxrLjwU4iW4,4138
28
+ pycontrails/datalib/ecmwf/common.py,sha256=jix1ZMtIPzS97-KTrhtcr-hpbMUQF8loGNaLJM4ObZ8,4084
28
29
  pycontrails/datalib/ecmwf/era5.py,sha256=TbZlOqn3fPmfvCUR1XrVBWxNgIBpSXgRx0S4M49TSeY,19506
29
30
  pycontrails/datalib/ecmwf/era5_model_level.py,sha256=NVquyG_3SzdmfoQl25Wvp4oB_pOe7K_AQOfNv7no14E,19844
30
- pycontrails/datalib/ecmwf/hres.py,sha256=3RHmikpMj0BXHyD6m6iqz56x7R8zN0METezISG_sNic,30484
31
+ pycontrails/datalib/ecmwf/hres.py,sha256=AHUlemItpbxYtyPdpmQpcP5jf_s_dvAeMrd8He6Islo,30428
31
32
  pycontrails/datalib/ecmwf/hres_model_level.py,sha256=EfKbCLyib2aMfeeTFuop4dutB7FiVFhX7UWW_hKtESE,18245
32
- pycontrails/datalib/ecmwf/ifs.py,sha256=a5QmXuihBNGx1eNN7EJGjR5dL9dO142nqkDSkPYGGlc,11048
33
+ pycontrails/datalib/ecmwf/ifs.py,sha256=hdYI0HamDmbzmVGskDCfiSj4-fD5-UEOjAfi-9Pe5-M,11020
33
34
  pycontrails/datalib/ecmwf/model_levels.py,sha256=noLSx45AHZ0rFPiUh3aK3iaEueHgsg6mG_AplHqHeU8,17431
34
35
  pycontrails/datalib/ecmwf/variables.py,sha256=49uzpkk9YV5OGBnq-Po5e3ig2JXi2i1ZtsOOEC-AQFI,10181
35
36
  pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv,sha256=9u7CVA3QnPUmNLIWUkF5b9wFunczkvx1zSudwGmtOv8,9927
36
37
  pycontrails/datalib/gfs/__init__.py,sha256=DGd8twOXwRZZhHx5muc9SJT-YET1KB599kS45_x3IbY,712
37
- pycontrails/datalib/gfs/gfs.py,sha256=qh_nMDaSqkGs-YgibsmDWWXGtn6HY7EUqv5tve7IK5s,23055
38
+ pycontrails/datalib/gfs/gfs.py,sha256=Sn-072e4ZWDi5dtOffHfCKnsFslRKPZASOHCiZ-cj2E,22894
38
39
  pycontrails/datalib/gfs/variables.py,sha256=gmw5cs8RAeB-s9kCbnuKFp1K2SqNbc0lNR-JqhcenZY,3239
40
+ pycontrails/datalib/himawari/__init__.py,sha256=SCA_fNj6DTy2F5i73gL2cF3NuFAuvn2OdGYuRL6FU5g,646
41
+ pycontrails/datalib/himawari/header_struct.py,sha256=YYypTSCH_kiAO-YpRpU60lecXCoVDGQBO6lmFimDOyY,10241
42
+ pycontrails/datalib/himawari/himawari.py,sha256=qEiChMkbbauKGrK6Hng3VHmNaGJUv8bAEOhXZgCnkyQ,23994
39
43
  pycontrails/datalib/leo_utils/__init__.py,sha256=7MgrgpWmlr71fIn6pQIEaRffuvfavlhLz-gQnfUBxIY,218
40
44
  pycontrails/datalib/leo_utils/correction.py,sha256=cOceA702SXtmBvUsG2JJx0MKnsoGWng6469fpfMJjFQ,9830
41
45
  pycontrails/datalib/leo_utils/landsat_metadata.py,sha256=lQ34ARIRFIhN5lU5MRhg9s_GpmZ_OkjJWs5_0hYFYok,10928
42
46
  pycontrails/datalib/leo_utils/search.py,sha256=f4CjKbkGVZ7frc4GAb3rsKPukmEeBbaYVY_S4uCjQjQ,8936
43
- pycontrails/datalib/leo_utils/sentinel_metadata.py,sha256=vVJMIubmR9V_bNG9kiTygMHo8-Ehds7spMaOzkpSgds,26254
47
+ pycontrails/datalib/leo_utils/sentinel_metadata.py,sha256=rMGJ2oWifrEgCI0oQ0qpgBBfTtlREv96CqsV8P-vgz4,26300
44
48
  pycontrails/datalib/leo_utils/vis.py,sha256=0UDVcqMRqHmAORDV4Xyk-HVnTAjbOCf7KCpWm2ilTLE,1861
45
49
  pycontrails/datalib/leo_utils/static/bq_roi_query.sql,sha256=r_gVjpoEvCcAJP56QlXaXzgfWPZdf-kYo3D316glJLU,266
46
50
  pycontrails/datalib/spire/__init__.py,sha256=HTeQFjMc1BJ189fALx5NDGX2IVZ0AUWC_Xu6LCsZduk,191
@@ -49,16 +53,16 @@ pycontrails/datalib/spire/spire.py,sha256=u9nq4LCKi_itL6vvjlcte-wKrx9h_b62yQDkw3
49
53
  pycontrails/ext/bada.py,sha256=RmLDMaZQody8XUR-1I_5rPJqoz6eIq63IpDTcuJweoc,1133
50
54
  pycontrails/ext/cirium.py,sha256=zRPVBBWwocZKkX3XhonSBf54x7P_xnjRcA7psI0Kqnw,429
51
55
  pycontrails/ext/empirical_grid.py,sha256=mveQltokaGeQcxxbdMSLQ6wQ14oh3XX5dfzjWaFpxbk,4503
52
- pycontrails/ext/synthetic_flight.py,sha256=dEWm9vrg6SAWieh6GLAE0m1orTrApav8HHP42-4bIHg,17233
56
+ pycontrails/ext/synthetic_flight.py,sha256=C_-iAKwqgpJtVSBBK5VvNLldCegjUeoIUA3oz3utX9U,17201
53
57
  pycontrails/models/__init__.py,sha256=TKhrXe1Pu1-mV1gctx8cUAMrVxCCAtBkbZi9olfWq8s,34
54
58
  pycontrails/models/accf.py,sha256=rbEn6oTqXsgDPA3Ky0y-bADHWTxGXixa8OwpHH_pXag,13991
55
- pycontrails/models/dry_advection.py,sha256=UhpeSApTN03IRmnWhBKF-rPjy0DiUJQ8M-ngg1Ix5cc,21098
56
- pycontrails/models/extended_k15.py,sha256=lOD0qLJM8LTFCe2UtZAxFBUm7FIXZeX8CdRDdTXH-l8,49305
59
+ pycontrails/models/dry_advection.py,sha256=9LW62U7KutJ37dFurz0JINwzatmvP6ZUSrRbHOgcMlg,21072
60
+ pycontrails/models/extended_k15.py,sha256=CIbpbQAR5wsM5gcuthyLdm7TsRKX1jGMf7kON6PA4iA,49321
57
61
  pycontrails/models/issr.py,sha256=1pqijM2ecEHhmclSRodyZNnj1f-rCn2H_d44SQYo25I,7614
58
62
  pycontrails/models/pcc.py,sha256=7k8kICqDeZ99O2n2Zpnu7EFNGjEpPka_9cu9nrmP44s,11394
59
63
  pycontrails/models/pcr.py,sha256=YI7kd7BRdkHt970LCg0DhAOj-Bfukw0jclfvXGNo1jE,5528
60
- pycontrails/models/sac.py,sha256=5DZWCkHtJXpifWc0ltzecdPLVr1XgjctRuyn3w4zcQc,15958
61
- pycontrails/models/tau_cirrus.py,sha256=6hVeOahKX2MV8NNED7f5yej_2-z3ENPuTl3gjpKxzzI,5961
64
+ pycontrails/models/sac.py,sha256=OYRgJjwldzPUYmCPwhLPYIj1NEKOjxYHF7tPJvpKjvg,15932
65
+ pycontrails/models/tau_cirrus.py,sha256=EZzacrRZ3rZmOwCz3MwdqvAk-gBkIfciGPurvortZ7w,5923
62
66
  pycontrails/models/apcemm/__init__.py,sha256=dDsRW3V6jjzKDd43Yoyc74m_Om1fccvftZgp3OFdAYE,183
63
67
  pycontrails/models/apcemm/apcemm.py,sha256=tbG57Vro7_vXwqE0YpXrimPTtvAXsurti2eBAVWGe-Y,40958
64
68
  pycontrails/models/apcemm/inputs.py,sha256=zHRSWVVlwYw6ms7PpC0p0I-xFsRDUVY9eDZ1g95Uf8U,6811
@@ -67,16 +71,16 @@ pycontrails/models/apcemm/static/apcemm_yaml_template.yaml,sha256=A3H_FWVOtqkZhG
67
71
  pycontrails/models/cocip/__init__.py,sha256=v8JJN_Jx3_tOHaqGaQG-Es7srEAtSCHI7-gCEnM-n-s,991
68
72
  pycontrails/models/cocip/cocip.py,sha256=wbsCjrqU07CuyIYh2CmbrIeRRKftwS9MrQR0id_yuw8,107589
69
73
  pycontrails/models/cocip/cocip_params.py,sha256=SLrK6N1KfadD6bd7f5sVcK-ifZfbYWVe3u8YnPKS55g,13113
70
- pycontrails/models/cocip/cocip_uncertainty.py,sha256=l7zfcMUw47uZ8vNhFeqF03DBXG67GFOH2tbegAPWBmw,12540
71
- pycontrails/models/cocip/contrail_properties.py,sha256=p1JBGFCn2wsxmnZAdoUKK_fy7F5FH3phUl6Fxs80oHM,57271
72
- pycontrails/models/cocip/output_formats.py,sha256=pffbcl9-7HpcJRWDCABHg7yGxjjX_-90uVyt3rIpLHc,86250
74
+ pycontrails/models/cocip/cocip_uncertainty.py,sha256=xeyOIC2fjMrUn0TMvSbpPRU3LP3pu_5Iz3uNiDnNzHk,12548
75
+ pycontrails/models/cocip/contrail_properties.py,sha256=opi8DJjpbm__gjtqzhj-duNl4o4iLndx3dg1gd-bNe0,57262
76
+ pycontrails/models/cocip/output_formats.py,sha256=lQGa7N0G-9XUWXlApCPugOJg0_LMf49Av5BGUERb2T8,86220
73
77
  pycontrails/models/cocip/radiative_forcing.py,sha256=ypgnYi4v3gCQMm_-OQ6rfNocSXyryGxvwLGRgazO1YE,45946
74
78
  pycontrails/models/cocip/radiative_heating.py,sha256=PcOEkqRtQJNq7bxOoz1baBbVV2ku1UQRMrrQXXsRBwc,19504
75
79
  pycontrails/models/cocip/unterstrasser_wake_vortex.py,sha256=wnkzJlm9L-QXZ4gZD4Pdq_XQEL3odXnvmOYPGCLyidA,19439
76
80
  pycontrails/models/cocip/wake_vortex.py,sha256=71bNGy95DYSXjEjDo0jDLGR41XMgia8zrFO7IuAHW6M,14951
77
81
  pycontrails/models/cocip/wind_shear.py,sha256=qhmP3RJ9SEjd-qnXcgRiYis9-apKGF-1d78z6N__tq8,3988
78
82
  pycontrails/models/cocipgrid/__init__.py,sha256=OYSdZ1Htbr_IP7N_HuOAj1Pa_KLHtdEeJfXP-cN-gnU,271
79
- pycontrails/models/cocipgrid/cocip_grid.py,sha256=X1ssHAHmqFcQLdybA8D5TETUnj1nfewBtZbVs--Ppbg,95230
83
+ pycontrails/models/cocipgrid/cocip_grid.py,sha256=3JxG1TdpYlfPRntoFW4UVi1USDdYOUCB8_7RtWKC_ec,95185
80
84
  pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=ZpN00VEmeRYaeZhvSfVjnEjrgn6XdClf1eqJC8Ytcuw,6013
81
85
  pycontrails/models/emissions/__init__.py,sha256=phai3wH5VuUyfyVpu5vHOFI0jXSyoYSWvLTknS78xs0,499
82
86
  pycontrails/models/emissions/black_carbon.py,sha256=o8mVfDZLnNlfnvsqk8O-ljXrMn4Y_ApFuPROAQWHaQY,21294
@@ -86,12 +90,12 @@ pycontrails/models/emissions/static/default-engine-uids.csv,sha256=6e-0Fjbka1www
86
90
  pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv,sha256=s-3_KGQyVoypXCHeQgsTDwdri-e3JVJn5SDxZo60m_s,128119
87
91
  pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv,sha256=MwLLrcATd38KPddTpHpMGBrZuA4I7he-1B5otTp4ar8,77533
88
92
  pycontrails/models/humidity_scaling/__init__.py,sha256=-xqDCJzKJx2nX6yl-gglHheQHWDhkvb8X7atbMJT2LA,1156
89
- pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=rhq3hCs96Gx7LXHbgdlOVduOAxjmbqyNkjJzraPdQXM,39654
93
+ pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=fodIuzdbGG9Ri7CnltPRbXLV2PpyWaaBS6RvacRtVw8,39670
90
94
  pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq,sha256=pShCvNUo0NYtAHhT9IBRuj38X9jejdlKfv-ZoOKmtKI,35943
91
95
  pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq,sha256=tfYhbafF9Z-gGCg6VQ1YBlOaK_01e65Dc6s9b-hQ6Zo,286375
92
96
  pycontrails/models/ps_model/__init__.py,sha256=fCGfdrJjK4K_EOODU8exmOFzedbABb3bMbuFi0gbrgc,571
93
97
  pycontrails/models/ps_model/ps_aircraft_params.py,sha256=LBPMxivbXMrE3s-5Dp8eWGb9qQycf4PRVU-aJL9elrw,13731
94
- pycontrails/models/ps_model/ps_grid.py,sha256=aFI6lnMoYLlbKqucliWFT2weDi1DPEnS7120KNjpNNM,26908
98
+ pycontrails/models/ps_model/ps_grid.py,sha256=vJfC4uT2PvcfBXtvlcUo1_bDt4HGfCr4GW897nATKXQ,26870
95
99
  pycontrails/models/ps_model/ps_model.py,sha256=fGZdkg2kudqUKNVPPszhNIw26lM50p7EzrpvJtgJbZs,32925
96
100
  pycontrails/models/ps_model/ps_operational_limits.py,sha256=95evggmtPbnr3kqNgqfOEJhbupK_D_ksONPmTm0k2B8,16966
97
101
  pycontrails/models/ps_model/static/ps-aircraft-params-20250328.csv,sha256=TKeDak9DHVFByYo3yoEwDZLqOYCJcE32P7lWNm14TnA,26254
@@ -100,19 +104,19 @@ pycontrails/physics/__init__.py,sha256=AScCMSMSZjKxfL6mssdSLwcja1ml7MzREThQp5PLr
100
104
  pycontrails/physics/constants.py,sha256=QninjsmBvmKNj8uHWTuEGKKq9biNh6KmSRkj2SGQHuw,3318
101
105
  pycontrails/physics/geo.py,sha256=ceaOy9ffCRb8eu6LlOAvM04mVMKbmqNh1dvw6iXq5bI,37435
102
106
  pycontrails/physics/jet.py,sha256=nUJY-TVowCPYlhrTkEncDocoVKCeN2IAhvP-6vWP2dQ,31326
103
- pycontrails/physics/thermo.py,sha256=Bm1ERIEYxRwdhkAVzO-xdsmEInp9WZAJNT1TLV0WTVQ,15957
107
+ pycontrails/physics/thermo.py,sha256=Tw4OL6Sg_PQFSOCt5k96bLqd0Zl4ww_BXxMR9jaKUjQ,15927
104
108
  pycontrails/physics/units.py,sha256=r6ncLqhFi9Roi73SfGvfjuB_jpwtsjJ39L3yxr8ndIc,12753
105
109
  pycontrails/physics/static/iata-cargo-load-factors-20250221.csv,sha256=ePGCUak5noyY63aL1a8T7EJf8sWzIpeY95-sbaYKF5w,3915
106
110
  pycontrails/physics/static/iata-passenger-load-factors-20250221.csv,sha256=sK9caPg9MvRYBHm_HVvXGA90x4j4OVIxkxFHF1HOKnA,3909
107
111
  pycontrails/utils/__init__.py,sha256=VmklFC-5I5lGFQEzuomlPk_bM6CoM9XDljfjCovG3vw,33
108
112
  pycontrails/utils/dependencies.py,sha256=SjEdbDDKfGmmYResWZndMCUySO0W0ptWAeY1aA_kcx8,2625
109
- pycontrails/utils/iteration.py,sha256=En2YY4NiNwCNtAVO8HL6tv9byBGKs8MKSI7R8P-gZy4,332
113
+ pycontrails/utils/iteration.py,sha256=nZAvhQFvPtHMZqq_yDtfiMYL5y2zvzJVPocgK_hvTPM,337
110
114
  pycontrails/utils/json.py,sha256=Pqashwoupuf_GfrrSfHclwug9Hg-kYQ4WNxEqay_0Rc,6083
111
115
  pycontrails/utils/temp.py,sha256=5XXqQoEfWjz1OrhoOBZD5vkkCFeuq9LpZkyhc38gIeY,1159
112
116
  pycontrails/utils/types.py,sha256=WJS3rnYxU4l8eEJuJVWGBRD7-zvEBlRD8TQx-fxKbic,5032
113
- pycontrails-0.56.0.dist-info/licenses/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
114
- pycontrails-0.56.0.dist-info/licenses/NOTICE,sha256=VIhzKNYi4lQx6fpZyqiY6eMHpLuwp-_G0JQkmYYa7h0,2005
115
- pycontrails-0.56.0.dist-info/METADATA,sha256=LXRlDfGkCQZOY35fv6ZQIw4WhzpfT39zuu3uSEIfocU,9308
116
- pycontrails-0.56.0.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101
117
- pycontrails-0.56.0.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
118
- pycontrails-0.56.0.dist-info/RECORD,,
117
+ pycontrails-0.58.0.dist-info/licenses/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
118
+ pycontrails-0.58.0.dist-info/licenses/NOTICE,sha256=VIhzKNYi4lQx6fpZyqiY6eMHpLuwp-_G0JQkmYYa7h0,2005
119
+ pycontrails-0.58.0.dist-info/METADATA,sha256=z_gzKrLqz9WjYUUBrxFjAJh0NZeKjJT50GtnFBNc_gE,9309
120
+ pycontrails-0.58.0.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101
121
+ pycontrails-0.58.0.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
122
+ pycontrails-0.58.0.dist-info/RECORD,,