pycontrails 0.56.0__cp311-cp311-macosx_11_0_arm64.whl → 0.58.0__cp311-cp311-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.

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.cpython-311-darwin.so +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,75 +1,79 @@
1
- pycontrails-0.56.0.dist-info/RECORD,,
2
- pycontrails-0.56.0.dist-info/WHEEL,sha256=sunMa2yiYbrNLGeMVDqEA0ayyJbHlex7SCn1TZrEq60,136
3
- pycontrails-0.56.0.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
4
- pycontrails-0.56.0.dist-info/METADATA,sha256=V-rmySZx3DVD4x1SN4wcN9yqATXqErO7zoaXg6l2JNc,9128
5
- pycontrails-0.56.0.dist-info/licenses/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
6
- pycontrails-0.56.0.dist-info/licenses/NOTICE,sha256=fiBPdjYibMpDzf8hqcn7TvAQ-yeK10q_Nqq24DnskYg,1962
7
- pycontrails/_version.py,sha256=2_q1TRVy1QpIW3N_C_ZBLtNup6qZoUaN3O-tBxeD494,714
1
+ pycontrails-0.58.0.dist-info/RECORD,,
2
+ pycontrails-0.58.0.dist-info/WHEEL,sha256=sunMa2yiYbrNLGeMVDqEA0ayyJbHlex7SCn1TZrEq60,136
3
+ pycontrails-0.58.0.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
4
+ pycontrails-0.58.0.dist-info/METADATA,sha256=-pOZxATs-SGOiS7FppQtQYehP9MYFbQV2l_VnbptyJg,9129
5
+ pycontrails-0.58.0.dist-info/licenses/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
6
+ pycontrails-0.58.0.dist-info/licenses/NOTICE,sha256=fiBPdjYibMpDzf8hqcn7TvAQ-yeK10q_Nqq24DnskYg,1962
7
+ pycontrails/_version.py,sha256=ife3IDQF-DAoy1CwSUU90Z0xGG9P1GsYeBh-Ic3uecI,714
8
8
  pycontrails/__init__.py,sha256=9ypSB2fKZlKghTvSrjWo6OHm5qfASwiTIvlMew3Olu4,2037
9
9
  pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- pycontrails/core/rgi_cython.cpython-311-darwin.so,sha256=iJcD-AVC1MLGi_OmmeGs75MRY2r_ZenH7jb004MhYh0,360832
11
- pycontrails/core/vector.py,sha256=mQG1NmULztZjTK7O4waiggiR_4dA7LhTeuyQnLJRHsE,73650
10
+ pycontrails/core/rgi_cython.cpython-311-darwin.so,sha256=oorJJpA1Pe0n4aZxf_wOa4D-WlA8sIPdHqrjZdyrvMY,341568
11
+ pycontrails/core/vector.py,sha256=hms3hea2Y86LOuZFfOqzGZToqpOVksgXikM_S5w355w,73498
12
12
  pycontrails/core/models.py,sha256=3mDTqp1V5aae9akuYwbMGIUEkESKSYTjZeyu2IiMW7s,43915
13
- pycontrails/core/interpolation.py,sha256=wovjj3TAf3xonVxjarclpvZLyLq6N7wZQQXsI9hT3YA,25713
14
- pycontrails/core/fleet.py,sha256=3uRByONZW8yHiS2gmgwOozVm6ksUVdsy6Gyf6jYjSPY,16703
15
- pycontrails/core/flight.py,sha256=_a4AJjewA_lcW_qjBPga9z6JlVAev-es_M8TFVyX_1E,81590
13
+ pycontrails/core/interpolation.py,sha256=TpLDfx-Bx2tGDjWJOyU4n9Dkz6Obl05dB7Ol5diYdsk,24816
14
+ pycontrails/core/fleet.py,sha256=a_vVwAjMbjkhszg7ejP3V0yly_wJ9Va_OQEATG-9UHw,16572
15
+ pycontrails/core/flight.py,sha256=dmqO1PxADMHIcK9U8XSnuXbP59ftQgeKvdI2xGP04ig,81460
16
16
  pycontrails/core/fuel.py,sha256=kJZ3P1lPm1L6rdPREM55XQ-VfJ_pt35cP4sO2Nnvmjs,4332
17
- pycontrails/core/polygon.py,sha256=g7YqWzUbOHWT65XrLqLUZLrQXYcx_x1NcJ041-Cj7UY,18070
18
- pycontrails/core/cache.py,sha256=Zng2edpSKYNyrkD4j1omYMCzJ7Lm762YJnUmqoVu1Z4,28161
17
+ pycontrails/core/polygon.py,sha256=kXYwj1Xy-mo8GEWXFAO_OJEtZbGx11DE_sZw6iyNvN4,17995
18
+ pycontrails/core/cache.py,sha256=JQIy1sQf0Vil7wlEk9ZIvVacnOD4wM3X8-UkMFjR2wQ,28177
19
19
  pycontrails/core/__init__.py,sha256=p0O09HxdeXU0X5Z3zrHMlTfXa92YumT3fJ8wJBI5ido,856
20
20
  pycontrails/core/flightplan.py,sha256=0mvA3IO19Sap-7gwpmEIV35_mg6ChvajwhurvjZZt_U,7521
21
- pycontrails/core/met.py,sha256=O9W6RaEwUsg7ZERR47Q-6fYjg13BzOZtcQdw92444xg,103987
22
- pycontrails/core/aircraft_performance.py,sha256=Kk_Rb61jDOWPmCQHwn2jR5vMPmB8b3aq1iTWfiUMj9U,28232
21
+ pycontrails/core/met.py,sha256=JosS0DXGEB4NBQ40WU1b4yG04h3DkT7Vs-P0jK-UkCY,104453
22
+ pycontrails/core/aircraft_performance.py,sha256=CPIgIi5nUuCHiNVLAvZcWECRfakmMd-wUWd3lMA6oGM,28204
23
23
  pycontrails/core/airports.py,sha256=CzZrgJNZ7wtNv8vg9sJczMhFov7k0gmrGR4tRKCH8i8,6782
24
24
  pycontrails/core/met_var.py,sha256=g69vqbxpJeXEQU8vrrcoUR1PX3zCo2-k3au1Lv2TiIw,12027
25
25
  pycontrails/core/coordinates.py,sha256=0ySsHtqTon7GMbuwmmxMbI92j3ueMteJZh4xxNm5zto,5391
26
- pycontrails/datalib/goes.py,sha256=_TB32tGWxumASOEZUQ_PwGWz8QMZPTJf8pG4jbPR-WY,34358
26
+ pycontrails/datalib/goes.py,sha256=kZIhx1cKIcNtIxQ3IiuN45aCpwDzzTOxi0Y4fjyaOLs,27481
27
27
  pycontrails/datalib/landsat.py,sha256=6ylDkAjnyX7b4ZbHn4bprO8HB8ADPFyMkwWehIs8FLg,20915
28
+ pycontrails/datalib/geo_utils.py,sha256=w6VYhJQeMpBXaBclqANv4Nn0yqPIxlQr6GTUpjArTj0,9070
28
29
  pycontrails/datalib/__init__.py,sha256=hW9NWdFPC3y_2vHMteQ7GgQdop3917MkDaf5ZhU2RBY,369
29
30
  pycontrails/datalib/sentinel.py,sha256=ed1l1avq8lBvQinY_vNSsWRcpqxUdAPY61AGyPcLawo,23532
30
- pycontrails/datalib/_met_utils/metsource.py,sha256=B4Gd9gkfMMlXe-xc_xcNNZAJ0gOeRelvrBsFyk6tEs4,24151
31
+ pycontrails/datalib/himawari/himawari.py,sha256=uJXhu1URdu3Hen9wMwkgxyPHdjd_xyIt9E7WblVy2xQ,23327
32
+ pycontrails/datalib/himawari/__init__.py,sha256=SWupVbeuyK07IPDCgiNjN6hoLB7hlceabJ3fixhDkl0,619
33
+ pycontrails/datalib/himawari/header_struct.py,sha256=WbPkNBNUVm8tGKU8wpj4rldY17g5MHQ_OfbWicZSokc,9975
34
+ pycontrails/datalib/_met_utils/metsource.py,sha256=mlKcRko5ZKuYK5uwWn6AAgUSJLMQAYq1nFqskVMGgYo,23999
31
35
  pycontrails/datalib/ecmwf/arco_era5.py,sha256=7HXQU5S02PzX9Ew2ZrDKSp0tDEG1eeVAvbP3decmm20,12437
32
36
  pycontrails/datalib/ecmwf/era5.py,sha256=4ULNdDlUN0kP6Tbp8D_-Bc12nAsLf0iNfZaDoj_AoZU,18952
33
37
  pycontrails/datalib/ecmwf/era5_model_level.py,sha256=AO7ePIGZtavx5nQSPYP4p07RNZeg3bbzmoZC7RUC4Gg,19354
34
- pycontrails/datalib/ecmwf/hres.py,sha256=isRQkybVZyKxVvqpQyGQsMtePFfv_qqAMBQ98wDLYtc,29680
38
+ pycontrails/datalib/ecmwf/hres.py,sha256=tvIXPJjXgijtVdsSyPGtvKf0h5GUczBSsovKEbCgBxg,29624
35
39
  pycontrails/datalib/ecmwf/variables.py,sha256=lU3BNe265XVhCXvdMwZqfkWQwtsetZxVRLSfPqHFKAE,9913
36
40
  pycontrails/datalib/ecmwf/hres_model_level.py,sha256=CcxMKiFJyLvM9njmBVywAXJxyWE7atsgHXBubKJQqHM,17779
37
41
  pycontrails/datalib/ecmwf/__init__.py,sha256=wdfhplEaW2UKTItIoshTtVEjbPyfDYoprTJNxbKZuvA,2021
38
- pycontrails/datalib/ecmwf/common.py,sha256=qRMSzDQikGMi3uqvz-Y57e3biHPzSoVMfUwOu9iTxHc,4024
42
+ pycontrails/datalib/ecmwf/common.py,sha256=axOxvdrey9YD34uk0Ocav08MxKvC2uVaiwvyQgFZMEw,3970
39
43
  pycontrails/datalib/ecmwf/model_levels.py,sha256=_kgpnogaS6MlfvTX9dB5ASTHFUlZuQ_DRb-VADwEa0k,16996
40
- pycontrails/datalib/ecmwf/ifs.py,sha256=0swHe6tFc5Fbu9e4_jREW0H-xYHYLtxjNoE3aUUlgvc,10761
44
+ pycontrails/datalib/ecmwf/ifs.py,sha256=_1UarorPp9VlgFZc-NnZy8YnfEqBdp7GV1A-ye6JqS8,10733
41
45
  pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv,sha256=PmvGLRzn6uuCKSwiasSuVcehvvmSaqP7cnLuN6hhCQQ,9788
42
- pycontrails/datalib/gfs/gfs.py,sha256=3tFiR7IObHcFmhGOdb-SJ7QQJSk6tF_6qkyi-pLrIdE,22393
46
+ pycontrails/datalib/gfs/gfs.py,sha256=VqS0MRLawgzkBDpjDUYoswXByIy6XUqA9XP7lM1ueBk,22238
43
47
  pycontrails/datalib/gfs/variables.py,sha256=4ALR4zhYW8tQVlNVHrd0CK8oRNSe_2OkW3ELeaImtAI,3135
44
48
  pycontrails/datalib/gfs/__init__.py,sha256=pXNjb9cJC6ngpuCnoHnmVZ2RHzbHZ0AlsyGvgcdcl2E,684
45
49
  pycontrails/datalib/spire/spire.py,sha256=h25BVgSr7E71Ox3-y9WgqFvp-54L08yzb2Ou-iMl7wM,24242
46
50
  pycontrails/datalib/spire/__init__.py,sha256=3-My8yQItS6PL0DqXgNaltLqvN6T7nbnNnLD-sy7kt4,186
47
51
  pycontrails/datalib/spire/exceptions.py,sha256=U0V_nZTLhxJwrzldvU9PdESx8-zLddRH3FmzkJyFyrI,1714
48
- pycontrails/datalib/leo_utils/sentinel_metadata.py,sha256=h5ieEwtmeAAtiIBdfOF8HaoE121ba0DrKb7dLvuaAeI,25506
52
+ pycontrails/datalib/leo_utils/sentinel_metadata.py,sha256=UXpv0XPmtQezVfprcFYNlRpV7nherCDW4oKStBZTdT8,25552
49
53
  pycontrails/datalib/leo_utils/landsat_metadata.py,sha256=B455-Yq6HTj0Se0dS4c_2F5ZjcATu2yNK1gyoIlgLMg,10628
50
54
  pycontrails/datalib/leo_utils/__init__.py,sha256=-SEAc1f7zEbJHcKjgwLuhnIwte9W-ystFNLvfC4RE94,213
51
55
  pycontrails/datalib/leo_utils/vis.py,sha256=-fLcm1D5cP6lThVHovV3MJSiadWyTUAvYDMvr4drMU4,1802
52
56
  pycontrails/datalib/leo_utils/search.py,sha256=KbHQ2GARacDuUz3zEJuATSga-R32dQFVTqhZgndHUZI,8686
53
57
  pycontrails/datalib/leo_utils/correction.py,sha256=cHf4PhHNYMqdVAFYNiTnjcVyqr1vCBMCKi0IjKB_3pw,9564
54
58
  pycontrails/datalib/leo_utils/static/bq_roi_query.sql,sha256=xq6-tJyz0-bUwW0KjQymqygjH3WlQBmyBtP7Ci7SBe8,260
55
- pycontrails/ext/synthetic_flight.py,sha256=wROBQErfr_IhEPndC97fuWbnZQega2Z89VhzoXzZMO8,16802
59
+ pycontrails/ext/synthetic_flight.py,sha256=DdDy1gih8bwdBjsTsvi4mK3lJhcNKlhyllpOWaaASio,16770
56
60
  pycontrails/ext/cirium.py,sha256=DFPfRwLDwddpucAPRQhyT4bDGh0VvvoViMUd3pidam8,415
57
61
  pycontrails/ext/empirical_grid.py,sha256=FPNQA0x4nVwBXFlbs3DgIapSrXFYhoc8b8IX0M4xhBc,4363
58
62
  pycontrails/ext/bada.py,sha256=YlQq4nnFyWza1Am2e2ZucpaICHDuUFRTrtVzIKMzf9s,1091
59
- pycontrails/utils/iteration.py,sha256=q_vb39VjxRr4hqTyPYko3gK4sboJOJf_Evq6m_2DL-g,319
63
+ pycontrails/utils/iteration.py,sha256=YGcex8pBDegU9dbDJmarxqdPzebAk_Gnc8DK3khY9SY,324
60
64
  pycontrails/utils/__init__.py,sha256=Gt_57sBgfliFSxx9sDpuchykFDxmM11Wg9xAeSqPcnI,32
61
65
  pycontrails/utils/types.py,sha256=1AaY1x_qGlYAl08xg6PS0MPKm3OZwFBM7xLI_nHK7EY,4869
62
66
  pycontrails/utils/temp.py,sha256=lGU0b_R8ze4yKlsOusHIIBaoNFBrmrB3vBjgHRlfcXk,1109
63
67
  pycontrails/utils/json.py,sha256=oTiO8xh603esfBGaGVmA5eUzR0NhAqNpQCegMMgnSbg,5896
64
68
  pycontrails/utils/dependencies.py,sha256=ATP45xYdUbIyGFzgbOe5SbokMytvB84TcexUEFnEUZE,2559
65
- pycontrails/models/extended_k15.py,sha256=uZ32wC5HNCJ5M9u4V4x10QoXn2hZRZy1tKcSvNJE0K4,47978
69
+ pycontrails/models/extended_k15.py,sha256=ZNL1XDvw-aG24_zGbP6Xkn203oVNqIwMau2exkiADS0,47994
66
70
  pycontrails/models/pcc.py,sha256=0Qdl4u8PmUEpNYd398glTChkbTwsh83wYPt0Bmi8qd8,11068
67
- pycontrails/models/tau_cirrus.py,sha256=2Z4egt-QFprkyITRgtarA5alOTTQRQbjzgmSqE49_1g,5778
71
+ pycontrails/models/tau_cirrus.py,sha256=wMhh8xQ1byW9WdzRSJIAVDMeyZTBl_PUKMXdF6Zy1uE,5740
68
72
  pycontrails/models/__init__.py,sha256=dQTOLQb7RdUdUwslt5se__5y_ymbInBexQmNrmAeOdE,33
69
73
  pycontrails/models/issr.py,sha256=_qIKDgO0Owxeb0Q4WJlxcn1FJEvF3QDU-cqh2fpDsBo,7404
70
- pycontrails/models/sac.py,sha256=8Vx5wg4-Kb8l4GK67wp7VNVpdFM4Wyux1xKuNrjZ_IQ,15516
74
+ pycontrails/models/sac.py,sha256=xTPTuCwYf8_goC5xJXxRl0NRZADuNOzyGJh13cuunQM,15490
71
75
  pycontrails/models/accf.py,sha256=_tunWpw1sYW8ES8RvpdhNahXwaf4LwdHMEdXhv7-cCI,13566
72
- pycontrails/models/dry_advection.py,sha256=3Vf-oug6an4WRHBOMlXZMsD7B6lx-ieMr-8mkSQyP3c,20496
76
+ pycontrails/models/dry_advection.py,sha256=CwR37hwQEAWNrFKBrCjUmaaB3D-ToaQrxq2x7Ek5Hc4,20470
73
77
  pycontrails/models/pcr.py,sha256=Xde0aF8cMV9jTQ_uI2UvdHSLqotVUgPutb1Wgq7LtfY,5374
74
78
  pycontrails/models/emissions/__init__.py,sha256=CZB2zIkLUI3NGNmq2ddvRYjEtiboY6PWJjiEiXj_zII,478
75
79
  pycontrails/models/emissions/ffm2.py,sha256=mAvBHnp-p3hIn2fjKGq50eaMHi0jcb5hA5uXbJGeE9I,12068
@@ -83,36 +87,36 @@ pycontrails/models/apcemm/inputs.py,sha256=88GylkiaymEW_XZeFxLsICI9wV6kl8wVYsuyT
83
87
  pycontrails/models/apcemm/utils.py,sha256=Ex6EqXin6yoJv2WWhBotSzhjzUlFNZm2MDgL4CvvX6E,17082
84
88
  pycontrails/models/apcemm/apcemm.py,sha256=rKvIaEsqtLbZ5h4o4EOY4Ge4-HdPn2X4M1lEUFDvr68,39975
85
89
  pycontrails/models/apcemm/static/apcemm_yaml_template.yaml,sha256=uAZkc57OUvDMjgX6F5f6hgDh3Hgg1NbHWRUFSiv0DEI,6745
86
- pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=ntNnhqo-lLvuQ6ntApDAtalZF6vmF8bK0PKUgmIye8c,38579
90
+ pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=l5S63mH6K5DOWk8LYtlbOz8wNbJQBcWd-DqCBUxKsik,38595
87
91
  pycontrails/models/humidity_scaling/__init__.py,sha256=nqsab_j9BCwMbTfCn4BjXMdhItlvNKkgUJ9-lb8RyIo,1119
88
92
  pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq,sha256=tfYhbafF9Z-gGCg6VQ1YBlOaK_01e65Dc6s9b-hQ6Zo,286375
89
93
  pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq,sha256=pShCvNUo0NYtAHhT9IBRuj38X9jejdlKfv-ZoOKmtKI,35943
90
94
  pycontrails/models/cocip/radiative_forcing.py,sha256=WleEc6hqrAlqJYtL3oZjRW7gJr_pPQNESJdOXi6oKqE,44686
91
95
  pycontrails/models/cocip/wind_shear.py,sha256=m6ZlWjORfI-lI-D74Z_dIMOHnK4FDYmkb0S6vSpKTO8,3868
92
96
  pycontrails/models/cocip/cocip.py,sha256=PgNuBzvTdkrANCjS_N9GscOkT9WXTaQUkI-IGxmMG9g,104847
93
- pycontrails/models/cocip/output_formats.py,sha256=dBT5-1yJsX_T_EoVhuja8ow4u-WlJRJ-7DihCgkyl7U,83980
97
+ pycontrails/models/cocip/output_formats.py,sha256=nnEfwBdWRE7InoL9f8YLVtqK3cN4izbKuRMYds_6qOU,83950
94
98
  pycontrails/models/cocip/__init__.py,sha256=CWrkNd6S3ZJq04pjTc2W22sVAJeJD3bJJRy_zLW8Kkc,962
95
99
  pycontrails/models/cocip/cocip_params.py,sha256=BWmTt6yE4m-LM7lyCtj05FK3wVvU9n7iVnuauGq3jtA,12808
96
100
  pycontrails/models/cocip/wake_vortex.py,sha256=F5S8n4eBrBM-7qNcVUtX3IrXD7Kt9pWnrKj6UK-HGeA,14555
97
- pycontrails/models/cocip/cocip_uncertainty.py,sha256=jjejXM6Cd3icJuiQ9_T_qU0B983t6_2sRwQJiZxQ36o,12249
101
+ pycontrails/models/cocip/cocip_uncertainty.py,sha256=TZ85xAbDc5zRgQKP7wb3AfHoUIvkfHycuX86dwZCqwM,12257
98
102
  pycontrails/models/cocip/radiative_heating.py,sha256=1U4SQWwogtyQ2u6J996kAHP0OfpZ3hH2_x4Cyt3Cy8U,18984
99
- pycontrails/models/cocip/contrail_properties.py,sha256=TpKzY7ZXLjbSKKGU6CVRLiFB_bp2O9YU6PXuLkAs1T0,55741
103
+ pycontrails/models/cocip/contrail_properties.py,sha256=BRldMsxNIYlKHg5ozD5_wWtJ7OGTcQvinkQUioHqaqk,55732
100
104
  pycontrails/models/cocip/unterstrasser_wake_vortex.py,sha256=bIRS-Z4MRMdkYtth2RaDe5h1ZN0HvCE_Sw96PXQEHKQ,18931
101
105
  pycontrails/models/ps_model/__init__.py,sha256=Fuum5Rq8ya8qkvbeq2wh6NDo-42RCRnK1Y-2syYy0Ck,553
102
106
  pycontrails/models/ps_model/ps_model.py,sha256=fgFekJpGuAu73KvpfLhlAbIwR7JJGwQpLILWmrONywc,31925
103
107
  pycontrails/models/ps_model/ps_aircraft_params.py,sha256=I2nBkdnRo9YGMn-0k35ooYpzPNJkHyEH5cU3K-Cz8b0,13350
104
108
  pycontrails/models/ps_model/ps_operational_limits.py,sha256=XwMHO8yu8EZUWtxRgjRKwxmCrmKGoHO7Ob6nlfkrthI,16441
105
- pycontrails/models/ps_model/ps_grid.py,sha256=rBsCEQkGY4cTf57spF0sqCfOo4oC4auE8ngS_mcl0VM,26207
109
+ pycontrails/models/ps_model/ps_grid.py,sha256=IvBkPAJI3bAv8xx4pRZ6x4Sv8Pei1gmp5utTWhY9wgI,26169
106
110
  pycontrails/models/ps_model/static/ps-aircraft-params-20250328.csv,sha256=LUYuWozE8fv4ZxuPhQIyVi0Kz4aYGyRjPcH5bSl4oNs,26185
107
111
  pycontrails/models/ps_model/static/ps-synonym-list-20250328.csv,sha256=phtrf0m-UYQ7gjoKtIIwINzftTSNd-Bwe9CPen_Gvc8,1048
108
112
  pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=l4vBPrOKCJDz5Y1uMjmOGVyUcSWgfZtFWbjW968OPz8,5875
109
113
  pycontrails/models/cocipgrid/__init__.py,sha256=ar6bF_8Pusbb-myujz_q5ntFylQTNH8yiM8fxP7Zk30,262
110
- pycontrails/models/cocipgrid/cocip_grid.py,sha256=k0IfdWJcCXdsuLZUEczPp3-QeKUPy7zpzk3nZnFG8Y8,92678
114
+ pycontrails/models/cocipgrid/cocip_grid.py,sha256=4BOmSMQEKxl4DYluq7q8bh1DWKlgNGw0N--0qaguomA,92633
111
115
  pycontrails/physics/geo.py,sha256=ITK23l1A2lzjNPTFC8ZKyQH59I5Cy_TvuvM_gbALo94,36297
112
116
  pycontrails/physics/units.py,sha256=p-6PzFLpVCMpvmfrhXVh3Hs-nMJw9Y1x-hvgnL9Lo9c,12281
113
117
  pycontrails/physics/constants.py,sha256=JHYL2IJY7del2BE_1QfKaEwtIwkbtyHvyxlm_JPHR90,3201
114
118
  pycontrails/physics/__init__.py,sha256=_1eWbEy6evEWdfJCEkwDiSdpiDNzNWEPVqaPekHyhwU,44
115
- pycontrails/physics/thermo.py,sha256=v7-66PE31SJXz45MXAB9Iq9XfPg1Sn5FpOsTngLaDDI,15406
119
+ pycontrails/physics/thermo.py,sha256=mGVduIY1c1DM6dVAdGcklGIJmscHXo3glDXmdeUtAZk,15376
116
120
  pycontrails/physics/jet.py,sha256=Je1d3vgbBEaVIAL1WZ3C-4p2f9fy9dWOjP5vFVsGGh8,30358
117
121
  pycontrails/physics/static/iata-cargo-load-factors-20250221.csv,sha256=ixsnQk1DyGxHMo0pDy4aOoQIwgOyrGfhMRPumEwPMBc,3841
118
122
  pycontrails/physics/static/iata-passenger-load-factors-20250221.csv,sha256=Q2olRIqUpbOaavvM5ikG8m1v1YQAN3KLNHeFDPvM53Q,3835