pycontrails 0.52.0__cp310-cp310-win_amd64.whl → 0.52.1__cp310-cp310-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.

pycontrails/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.52.0'
16
- __version_tuple__ = version_tuple = (0, 52, 0)
15
+ __version__ = version = '0.52.1'
16
+ __version_tuple__ = version_tuple = (0, 52, 1)
@@ -59,27 +59,27 @@ def slice_domain(
59
59
  >>> # Call with request as np.array
60
60
  >>> request = np.linspace(-20, 20, 100)
61
61
  >>> slice_domain(domain, request)
62
- slice(640, 801, None)
62
+ slice(np.int64(640), np.int64(801), None)
63
63
 
64
64
  >>> # Call with request as tuple
65
65
  >>> request = -20, 20
66
66
  >>> slice_domain(domain, request)
67
- slice(640, 801, None)
67
+ slice(np.int64(640), np.int64(801), None)
68
68
 
69
69
  >>> # Call with a buffer
70
70
  >>> request = -16, 13
71
71
  >>> buffer = 4, 7
72
72
  >>> slice_domain(domain, request, buffer)
73
- slice(640, 801, None)
73
+ slice(np.int64(640), np.int64(801), None)
74
74
 
75
75
  >>> # Call with request as a single number
76
76
  >>> request = -20
77
77
  >>> slice_domain(domain, request)
78
- slice(640, 641, None)
78
+ slice(np.int64(640), np.int64(641), None)
79
79
 
80
80
  >>> request = -19.9
81
81
  >>> slice_domain(domain, request)
82
- slice(640, 642, None)
82
+ slice(np.int64(640), np.int64(642), None)
83
83
 
84
84
  """
85
85
  # if the length of domain coordinates is <= 2, return the whole domain
@@ -384,7 +384,7 @@ class Flight(GeoVectorDataset):
384
384
  ... time=pd.date_range('2021-01-01T12', '2021-01-01T14', periods=200),
385
385
  ... )
386
386
  >>> fl.max_distance_gap
387
- 7391.27...
387
+ np.float64(7391.27...)
388
388
  """
389
389
  if self.attrs["crs"] != "EPSG:4326":
390
390
  raise NotImplementedError("Only implemented for EPSG:4326 CRS.")
@@ -415,7 +415,7 @@ class Flight(GeoVectorDataset):
415
415
  ... time=pd.date_range('2021-01-01T12', '2021-01-01T14', periods=200),
416
416
  ... )
417
417
  >>> fl.length
418
- 1436924.67...
418
+ np.float64(1436924.67...)
419
419
  """
420
420
  if self.attrs["crs"] != "EPSG:4326":
421
421
  raise NotImplementedError("Only implemented for EPSG:4326 CRS.")
@@ -1520,11 +1520,11 @@ class Flight(GeoVectorDataset):
1520
1520
 
1521
1521
  >>> # Length (in meters) of waypoints whose temperature exceeds 236K
1522
1522
  >>> fl.length_met("air_temperature", threshold=236)
1523
- 4132178.159...
1523
+ np.float64(4132178.159...)
1524
1524
 
1525
1525
  >>> # Proportion (with respect to distance) of waypoints whose temperature exceeds 236K
1526
1526
  >>> fl.proportion_met("air_temperature", threshold=236)
1527
- 0.663552...
1527
+ np.float64(0.663552...)
1528
1528
  """
1529
1529
  if key not in self.data:
1530
1530
  raise KeyError(f"Column {key} does not exist in data.")
@@ -621,11 +621,11 @@ class EmissionsProfileInterpolator:
621
621
  >>> epi = EmissionsProfileInterpolator(xp, fp)
622
622
  >>> # Interpolate a single value
623
623
  >>> epi.interp(5)
624
- 0.150000...
624
+ np.float64(0.150000...)
625
625
 
626
626
  >>> # Interpolate a single value on a logarithmic scale
627
627
  >>> epi.log_interp(5)
628
- 1.105171...
628
+ np.float64(1.105171...)
629
629
 
630
630
  >>> # Demonstrate speed up compared with xarray.DataArray interpolation
631
631
  >>> import time, xarray as xr
pycontrails/core/met.py CHANGED
@@ -1375,9 +1375,10 @@ class MetDataArray(MetBase):
1375
1375
 
1376
1376
  # try to create DataArray out of input data and **kwargs
1377
1377
  if not isinstance(data, xr.DataArray):
1378
- DeprecationWarning(
1378
+ warnings.warn(
1379
1379
  "Input 'data' must be an xarray DataArray. "
1380
- "Passing arbitrary kwargs will be removed in future versions."
1380
+ "Passing arbitrary kwargs will be removed in future versions.",
1381
+ DeprecationWarning,
1381
1382
  )
1382
1383
  data = xr.DataArray(data, **kwargs)
1383
1384
 
@@ -2609,13 +2610,14 @@ def _load(hash: str, cachestore: CacheStore, chunks: dict[str, int]) -> xr.Datas
2609
2610
 
2610
2611
 
2611
2612
  def _add_vertical_coords(data: XArrayType) -> XArrayType:
2612
- """Add "air_pressure" and "altitude" coordinates to data."""
2613
+ """Add "air_pressure" and "altitude" coordinates to data.
2613
2614
 
2614
- data["level"].attrs.update(units="hPa", long_name="Pressure", positive="down")
2615
+ .. versionchanged:: 0.52.1
2616
+ Ensure that the ``dtype`` of the additional vertical coordinates agree
2617
+ with the ``dtype`` of the underlying gridded data.
2618
+ """
2615
2619
 
2616
- coords = data.coords
2617
- if "air_pressure" in coords and "altitude" in coords:
2618
- return data
2620
+ data["level"].attrs.update(units="hPa", long_name="Pressure", positive="down")
2619
2621
 
2620
2622
  # XXX: use the dtype of the data to determine the precision of these coordinates
2621
2623
  # There are two competing conventions here:
@@ -2625,25 +2627,32 @@ def _add_vertical_coords(data: XArrayType) -> XArrayType:
2625
2627
  # It is more important for air_pressure and altitude to be grid-aligned than to be
2626
2628
  # coordinate-aligned, so we use the dtype of the data to determine the precision of
2627
2629
  # these coordinates
2628
- if isinstance(data, xr.Dataset):
2629
- dtype = np.result_type(*data.data_vars.values(), np.float32)
2630
- else:
2631
- dtype = data.dtype
2632
- level = data["level"].values.astype(dtype, copy=False)
2630
+ dtype = (
2631
+ np.result_type(*data.data_vars.values(), np.float32)
2632
+ if isinstance(data, xr.Dataset)
2633
+ else data.dtype
2634
+ )
2633
2635
 
2634
- if "air_pressure" not in coords:
2636
+ level = data["level"].values
2637
+
2638
+ if "air_pressure" not in data.coords:
2635
2639
  data = data.assign_coords(air_pressure=("level", level * 100.0))
2636
2640
  data.coords["air_pressure"].attrs.update(
2637
2641
  standard_name=AirPressure.standard_name,
2638
2642
  long_name=AirPressure.long_name,
2639
2643
  units=AirPressure.units,
2640
2644
  )
2641
- if "altitude" not in coords:
2645
+ if data.coords["air_pressure"].dtype != dtype:
2646
+ data.coords["air_pressure"] = data.coords["air_pressure"].astype(dtype, copy=False)
2647
+
2648
+ if "altitude" not in data.coords:
2642
2649
  data = data.assign_coords(altitude=("level", units.pl_to_m(level)))
2643
2650
  data.coords["altitude"].attrs.update(
2644
2651
  standard_name=Altitude.standard_name,
2645
2652
  long_name=Altitude.long_name,
2646
2653
  units=Altitude.units,
2647
2654
  )
2655
+ if data.coords["altitude"].dtype != dtype:
2656
+ data.coords["altitude"] = data.coords["altitude"].astype(dtype, copy=False)
2648
2657
 
2649
2658
  return data
@@ -536,7 +536,7 @@ def multipolygon_to_geojson(
536
536
  else:
537
537
  shape = len(ring.coords), 3
538
538
  coords = np.empty(shape)
539
- coords[:, :2] = ring.coords
539
+ coords[:, :2] = np.asarray(ring.coords)
540
540
  coords[:, 2] = altitude
541
541
 
542
542
  poly_coords.append(coords.tolist())
@@ -2057,7 +2057,7 @@ def vector_to_lon_lat_grid(
2057
2057
  [2.97, 0.12, 1.33, ..., 3.54, 0.74, 2.59]])
2058
2058
 
2059
2059
  >>> da.sum().item() == vector["foo"].sum()
2060
- True
2060
+ np.True_
2061
2061
 
2062
2062
  """
2063
2063
  df = vector.select(("longitude", "latitude", *agg), copy=False).dataframe
@@ -35,9 +35,6 @@ DEFAULT_CHUNKS: dict[str, int] = {"time": 1}
35
35
  #: Whether to open multi-file datasets in parallel
36
36
  OPEN_IN_PARALLEL: bool = False
37
37
 
38
- #: Whether to use file locking when opening multi-file datasets
39
- OPEN_WITH_LOCK: bool = False
40
-
41
38
 
42
39
  def parse_timesteps(time: TimeInput | None, freq: str | None = "1h") -> list[datetime]:
43
40
  """Parse time input into set of time steps.
@@ -741,5 +738,4 @@ class MetDataSource(abc.ABC):
741
738
  xr_kwargs.setdefault("engine", NETCDF_ENGINE)
742
739
  xr_kwargs.setdefault("chunks", DEFAULT_CHUNKS)
743
740
  xr_kwargs.setdefault("parallel", OPEN_IN_PARALLEL)
744
- xr_kwargs.setdefault("lock", OPEN_WITH_LOCK)
745
741
  return xr.open_mfdataset(disk_paths, **xr_kwargs)
@@ -16,7 +16,7 @@ from __future__ import annotations
16
16
 
17
17
  import datetime
18
18
  import enum
19
- import io
19
+ import tempfile
20
20
  from collections.abc import Iterable
21
21
 
22
22
  import numpy as np
@@ -535,7 +535,7 @@ class GOES:
535
535
  da_dict = {}
536
536
  for rpath, init_bytes in data.items():
537
537
  channel = _extract_channel_from_rpath(rpath)
538
- ds = xr.open_dataset(io.BytesIO(init_bytes), engine="h5netcdf")
538
+ ds = _load_via_tempfile(init_bytes)
539
539
 
540
540
  da = ds["CMI"]
541
541
  da = da.expand_dims(band_id=ds["band_id"].values)
@@ -551,7 +551,7 @@ class GOES:
551
551
  da = xr.concat(da_dict.values(), dim="band_id")
552
552
 
553
553
  else:
554
- ds = xr.open_dataset(io.BytesIO(data), engine="h5netcdf")
554
+ ds = _load_via_tempfile(data)
555
555
  da = ds["CMI"]
556
556
  da = da.expand_dims(band_id=ds["band_id"].values)
557
557
 
@@ -564,6 +564,13 @@ class GOES:
564
564
  return da
565
565
 
566
566
 
567
+ def _load_via_tempfile(data: bytes) -> xr.Dataset:
568
+ """Load xarray dataset via temporary file."""
569
+ with tempfile.NamedTemporaryFile(buffering=0) as tmp:
570
+ tmp.write(data)
571
+ return xr.load_dataset(tmp.name)
572
+
573
+
567
574
  def _concat_c02(ds1: XArrayType, ds2: XArrayType) -> XArrayType:
568
575
  """Concatenate two datasets with C01 and C02 data."""
569
576
  # Average the C02 data to the C01 resolution
@@ -92,12 +92,12 @@ class CocipUncertaintyParams(CocipParams):
92
92
  >>> distr = scipy.stats.uniform(loc=0.4, scale=0.2)
93
93
  >>> params = CocipUncertaintyParams(seed=123, initial_wake_vortex_depth_uncertainty=distr)
94
94
  >>> params.initial_wake_vortex_depth
95
- 0.41076420
95
+ np.float64(0.41076420...)
96
96
 
97
97
  >>> # Once seeded, calling the class again gives a new value
98
98
  >>> params = CocipUncertaintyParams(initial_wake_vortex_depth=distr)
99
99
  >>> params.initial_wake_vortex_depth
100
- 0.43526372
100
+ np.float64(0.43526372...)
101
101
 
102
102
  >>> # To retain the default value, set the uncertainty to None
103
103
  >>> params = CocipUncertaintyParams(rf_lw_enhancement_factor_uncertainty=None)
@@ -212,7 +212,7 @@ class CocipUncertaintyParams(CocipParams):
212
212
 
213
213
  return out
214
214
 
215
- def rvs(self, size: None | int = None) -> dict[str, float | npt.NDArray[np.float64]]:
215
+ def rvs(self, size: None | int = None) -> dict[str, np.float64 | npt.NDArray[np.float64]]:
216
216
  """Call each distribution's `rvs` method to generate random parameters.
217
217
 
218
218
  Seed calls to `rvs` with class variable `rng`.
@@ -247,12 +247,12 @@ class CocipUncertaintyParams(CocipParams):
247
247
  [7.9063961e-04, 3.0336906e-03, 7.7571563e-04, 2.0577813e-02,
248
248
  9.4205803e-01, 4.3379897e-03, 3.6786550e-03, 2.4747452e-02]],
249
249
  dtype=float32),
250
- 'initial_wake_vortex_depth': 0.39805019708566847,
251
- 'nvpm_ei_n_enhancement_factor': 0.9371878437312526,
252
- 'rf_lw_enhancement_factor': 1.1017491252832377,
253
- 'rf_sw_enhancement_factor': 0.99721639115012,
254
- 'sedimentation_impact_factor': 0.5071779847244678,
255
- 'wind_shear_enhancement_exponent': 0.34100931239701004}
250
+ 'initial_wake_vortex_depth': np.float64(0.39805019708566847),
251
+ 'nvpm_ei_n_enhancement_factor': np.float64(0.9371878437312526),
252
+ 'rf_lw_enhancement_factor': np.float64(1.1017491252832377),
253
+ 'rf_sw_enhancement_factor': np.float64(0.99721639115012),
254
+ 'sedimentation_impact_factor': np.float64(0.5071779847244678),
255
+ 'wind_shear_enhancement_exponent': np.float64(0.34100931239701004)}
256
256
  """
257
257
  return {
258
258
  param: distr.rvs(size=size, random_state=self.rng)
@@ -32,7 +32,6 @@ import xarray as xr
32
32
 
33
33
  from pycontrails.core.met import MetDataArray, MetDataset
34
34
  from pycontrails.core.vector import GeoVectorDataset, vector_to_lon_lat_grid
35
- from pycontrails.datalib.goes import GOES, extract_goes_visualization
36
35
  from pycontrails.models.cocip.contrail_properties import contrail_edges, plume_mass_per_distance
37
36
  from pycontrails.models.cocip.radiative_forcing import albedo
38
37
  from pycontrails.models.humidity_scaling import HumidityScaling
@@ -217,7 +216,7 @@ def contrail_flight_summary_statistics(flight_waypoints: GeoVectorDataset) -> pd
217
216
  )
218
217
 
219
218
  flight_waypoints["persistent_contrail_length"] = np.where(
220
- np.isnan(flight_waypoints["ef"]), 0.0, flight_waypoints["segment_length"]
219
+ np.nan_to_num(flight_waypoints["ef"]) == 0.0, 0.0, flight_waypoints["segment_length"]
221
220
  )
222
221
 
223
222
  # Calculate contrail statistics for each flight
@@ -2125,6 +2124,8 @@ def compare_cocip_with_goes(
2125
2124
  File path of saved CoCiP-GOES image if ``path_write_img`` is provided.
2126
2125
  """
2127
2126
 
2127
+ from pycontrails.datalib.goes import GOES, extract_goes_visualization
2128
+
2128
2129
  try:
2129
2130
  import cartopy.crs as ccrs
2130
2131
  from cartopy.mpl.ticker import LatitudeFormatter, LongitudeFormatter
@@ -886,7 +886,7 @@ def spatial_bounding_box(
886
886
  >>> lon = rng.uniform(-180, 180, size=30)
887
887
  >>> lat = rng.uniform(-90, 90, size=30)
888
888
  >>> spatial_bounding_box(lon, lat)
889
- (-168.0, -77.0, 155.0, 82.0)
889
+ (np.float64(-168.0), np.float64(-77.0), np.float64(155.0), np.float64(82.0))
890
890
  """
891
891
  lon_min = max(np.floor(np.min(longitude) - buffer), -180.0)
892
892
  lon_max = min(np.ceil(np.max(longitude) + buffer), 179.99)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycontrails
3
- Version: 0.52.0
3
+ Version: 0.52.1
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
@@ -28,7 +28,7 @@ Description-Content-Type: text/markdown
28
28
  License-File: LICENSE
29
29
  License-File: NOTICE
30
30
  Requires-Dist: dask >=2022.3
31
- Requires-Dist: numpy <2.0.0,>=1.22
31
+ Requires-Dist: numpy >=1.22
32
32
  Requires-Dist: overrides >=6.1
33
33
  Requires-Dist: pandas >=2.2
34
34
  Requires-Dist: scipy >=1.10
@@ -70,7 +70,7 @@ Requires-Dist: cdsapi >=0.4 ; extra == 'ecmwf'
70
70
  Requires-Dist: cfgrib >=0.9 ; extra == 'ecmwf'
71
71
  Requires-Dist: eccodes >=1.4 ; extra == 'ecmwf'
72
72
  Requires-Dist: ecmwf-api-client >=1.6 ; extra == 'ecmwf'
73
- Requires-Dist: netcdf4 <1.7.0,>=1.6.1 ; extra == 'ecmwf'
73
+ Requires-Dist: netcdf4 >=1.6.1 ; extra == 'ecmwf'
74
74
  Requires-Dist: platformdirs >=3.0 ; extra == 'ecmwf'
75
75
  Requires-Dist: requests >=2.25 ; extra == 'ecmwf'
76
76
  Requires-Dist: lxml >=5.1.0 ; extra == 'ecmwf'
@@ -98,7 +98,6 @@ Requires-Dist: gcsfs >=2022.3 ; extra == 'sat'
98
98
  Requires-Dist: geojson >=3.1 ; extra == 'sat'
99
99
  Requires-Dist: google-cloud-bigquery >=3.23 ; extra == 'sat'
100
100
  Requires-Dist: google-cloud-bigquery-storage >=2.25 ; extra == 'sat'
101
- Requires-Dist: h5netcdf >=1.2 ; extra == 'sat'
102
101
  Requires-Dist: pillow >=10.3 ; extra == 'sat'
103
102
  Requires-Dist: pyproj >=3.5 ; extra == 'sat'
104
103
  Requires-Dist: rasterio >=1.3 ; extra == 'sat'
@@ -121,7 +120,7 @@ Requires-Dist: zarr >=2.12 ; extra == 'zarr'
121
120
 
122
121
  | | |
123
122
  |---------------|-------------------------------------------------------------------|
124
- | **Version** | [![PyPI version](https://img.shields.io/pypi/v/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) [![Supported python versions](https://img.shields.io/pypi/pyversions/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) |
123
+ | **Version** | [![PyPI version](https://img.shields.io/pypi/v/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) [![conda-forge version](https://anaconda.org/conda-forge/pycontrails/badges/version.svg)](https://anaconda.org/conda-forge/pycontrails) [![Supported python versions](https://img.shields.io/pypi/pyversions/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) |
125
124
  | **Citation** | [![DOI](https://zenodo.org/badge/617248930.svg)](https://zenodo.org/badge/latestdoi/617248930) |
126
125
  | **Tests** | [![Unit test](https://github.com/contrailcirrus/pycontrails/actions/workflows/test.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/test.yaml) [![Docs](https://github.com/contrailcirrus/pycontrails/actions/workflows/docs.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/docs.yaml) [![Release](https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/contrailcirrus/pycontrails/badge)](https://securityscorecards.dev/viewer?uri=github.com/contrailcirrus/pycontrails)|
127
126
  | **License** | [![Apache License 2.0](https://img.shields.io/pypi/l/pycontrails.svg)](https://github.com/contrailcirrus/pycontrails/blob/main/LICENSE) |
@@ -140,7 +139,9 @@ Documentation and examples available at [py.contrails.org](https://py.contrails.
140
139
 
141
140
  ## Install
142
141
 
143
- Requires Python (3.9 or later)
142
+ ### Install with pip
143
+
144
+ You can install pycontrails from PyPI with `pip` (Python 3.9 or later required):
144
145
 
145
146
  ```bash
146
147
  $ pip install pycontrails
@@ -155,7 +156,17 @@ Install the latest development version directly from GitHub:
155
156
  pip install git+https://github.com/contrailcirrus/pycontrails.git
156
157
  ```
157
158
 
158
- See more options in the [install documentation](https://py.contrails.org/install).
159
+ ### Install with conda
160
+
161
+ You can install pycontrails from the [conda-forge](https://conda-forge.org/) channel with `conda` (or other `conda`-like package managers such as `mamba`):
162
+
163
+ ```bash
164
+ conda install -c conda-forge pycontrails
165
+ ```
166
+
167
+ The conda-forge package includes all optional runtime dependencies.
168
+
169
+ See more installation options in the [install documentation](https://py.contrails.org/install).
159
170
 
160
171
  ## Get Involved
161
172
 
@@ -1,31 +1,31 @@
1
1
  pycontrails/__init__.py,sha256=EpPulx2dBYpqZNsyh6HTwGGnFsvBVHBXabG5VInwSg4,2071
2
- pycontrails/_version.py,sha256=4ifLhkKoDFiaXL1n-ptlNl4WrJFDK9SUsh55U37ctSc,429
2
+ pycontrails/_version.py,sha256=OgPKMeVk5BhpBhwqypLdg843dA-09mBdlcfYz7wrIM8,429
3
3
  pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  pycontrails/core/__init__.py,sha256=X0DX2FGboPN_svwN2xiBzoPpHhDtg0oKFjXQfmCqMWU,886
5
5
  pycontrails/core/aircraft_performance.py,sha256=ikeJmdvFRDa1RdfR-JKfhQbiiIzL0c2vzcBmobmoxMs,22511
6
6
  pycontrails/core/airports.py,sha256=nGKXN3jOtzsDCaJZVFNO3e3w-U3lqMTz5Ww5jALiRJY,6984
7
7
  pycontrails/core/cache.py,sha256=5B8h6gqhn5Sy_pQR0wGn7QX-Cou8GdjwDUM59SRuDns,28852
8
- pycontrails/core/coordinates.py,sha256=cb8RprpoSgRTFbAXTPNfuUHVnOxyV3zZ0Ac88P5YbBw,5465
8
+ pycontrails/core/coordinates.py,sha256=J5qjGuXgbLUw_U9_qREdgOaHl0ngK6Hbbjj3uw7FwNE,5565
9
9
  pycontrails/core/fleet.py,sha256=WKF_s_gRXHmB9b1OW7RUkM1TzfvVD8Ab0Md-qKRwkzs,16544
10
- pycontrails/core/flight.py,sha256=V0SrkhXzBSnDydP4s4AJQMkNpPz1R90Vbtan4rxNFJ8,85867
10
+ pycontrails/core/flight.py,sha256=f4yD4UdKl955IXMckBx5RNSiJxDS5wkUcESYsSfARWs,85915
11
11
  pycontrails/core/flightplan.py,sha256=cpMZ6VCYbfwh3vnew2XgVEHnqBx1NzeAhrTVCvlbbss,7569
12
12
  pycontrails/core/fuel.py,sha256=06YUDhvC8Rx6KbUXRB9qLTsJX2V7tLbzjwAfDH0R6l8,4472
13
- pycontrails/core/interpolation.py,sha256=Sp9s17i1QQx3jZwnwvt3vo6enWwlkYwTVKCE27N2Wdk,26214
14
- pycontrails/core/met.py,sha256=l0A1MEFrOUtYWO_ZHoHzYgqa1rmIh7fxA8PiwE26yT8,96251
13
+ pycontrails/core/interpolation.py,sha256=JY97IkHIgLRExxHN0B28R2CM5xXRYB1n4xT3gr4xPgU,26238
14
+ pycontrails/core/met.py,sha256=ihIP3kxat_OpgsUwVtol-esctzoaWtTCbHCFkMa3RB8,96625
15
15
  pycontrails/core/met_var.py,sha256=JzB7UhBLQyU4TuKZqemhpBHA6Dbt89BPYO2sYBLMkL4,9504
16
16
  pycontrails/core/models.py,sha256=VS-ct4xkojJIuqdPpT1ke1ZetNzv10nNx_Z_XalZyeo,40175
17
- pycontrails/core/polygon.py,sha256=IwKnTRfKCgcOqbvKSsm-iJwd1HheS8sgsxAb6ufJy7c,18565
18
- pycontrails/core/rgi_cython.cp310-win_amd64.pyd,sha256=koBXycJziUYTyKca1QZlHL_Z-f827qDS7Bqc9GSEAjY,259584
19
- pycontrails/core/vector.py,sha256=MF0oWX0Ghp_G41A712VbU1GEKRNU_Pj9PtzMREPG5Z8,73916
17
+ pycontrails/core/polygon.py,sha256=F403uzql_c47MPM2Qdmec6WwtFaXZyb48h-4gK-K4EU,18577
18
+ pycontrails/core/rgi_cython.cp310-win_amd64.pyd,sha256=LZCoeuKptNVy4h2rMxbtxZVzkUJt9owlB5Vw7Dn7aKE,259584
19
+ pycontrails/core/vector.py,sha256=bTPDQNQnw89ZIi4IauJBkPOrNnYikBk24NppA2vx9T8,73920
20
20
  pycontrails/datalib/__init__.py,sha256=Q2RrnjwtFzfsmJ2tEojDCzDMkd8R0MYw4mQz3YwUsqI,381
21
- pycontrails/datalib/goes.py,sha256=xURMK5tJaJXas0lHQxdr1OC5VX7l-Ahsxl_dZDyQX8s,27122
21
+ pycontrails/datalib/goes.py,sha256=UMxXXCiRL6SHY5_3cXs8GmG19eeKOOi3gKCimkyZSuc,27305
22
22
  pycontrails/datalib/landsat.py,sha256=ptcI5d7Hk7KM-LUuZUaUxnQMwb_8z70ezTx1ErKfBhU,20212
23
23
  pycontrails/datalib/sentinel.py,sha256=I8-NzxJenESosMUeGTt8ESiJ_kFEUSLsKdA6pZGNrEM,17734
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=qViw9OxwMN2hqG8Qpm4SV7ShyI5nTjaYkNWSptAD9Lo,1819
27
27
  pycontrails/datalib/_leo_utils/static/bq_roi_query.sql,sha256=r_gVjpoEvCcAJP56QlXaXzgfWPZdf-kYo3D316glJLU,266
28
- pycontrails/datalib/_met_utils/metsource.py,sha256=HZ9bIaaCYDCBwzKW_1zUbItpP5If7HNBl7GX--_fDV8,24736
28
+ pycontrails/datalib/_met_utils/metsource.py,sha256=STOFWg6WgN3SR03pOsKCXtrg-OxCf-G-N6ttqDKMe2s,24585
29
29
  pycontrails/datalib/ecmwf/__init__.py,sha256=a3prI136k2NCxCicLMWznvr52cTx6JjHpmV6ts4OGxI,1508
30
30
  pycontrails/datalib/ecmwf/arco_era5.py,sha256=gBQTK-pCQkwp0nsiewbnsnWjcpziekBvl1Lon27N43A,19151
31
31
  pycontrails/datalib/ecmwf/common.py,sha256=OMCfeujF4sRxCpZl2q9ykgyg64AOBREJyU-sCO01V7g,3987
@@ -60,9 +60,9 @@ pycontrails/models/apcemm/static/apcemm_yaml_template.yaml,sha256=A3H_FWVOtqkZhG
60
60
  pycontrails/models/cocip/__init__.py,sha256=miDxSFxN9PzL_ieSJb3BYeHmbKqZwGicCz1scNB5eW0,991
61
61
  pycontrails/models/cocip/cocip.py,sha256=s9j5UhPCaaxiJZDXUvQ2KnEgvQz2pMrRHlWKZijwRIw,100140
62
62
  pycontrails/models/cocip/cocip_params.py,sha256=T4IseK6KtY4hG3BuGZBtFgM90HCYecUXsb_QVEK6uGo,11670
63
- pycontrails/models/cocip/cocip_uncertainty.py,sha256=lksROIRLt-jxEdjJTiLP9Da-FYt1GjZKaIxwDaH2Ytg,12069
63
+ pycontrails/models/cocip/cocip_uncertainty.py,sha256=7W586BJEAY_wpSpfVdcdX-HpZG4twk3cMLhUR2ELTMA,12176
64
64
  pycontrails/models/cocip/contrail_properties.py,sha256=u6SvucHC6VtF2kujfSVFTfv0263t5uYpNOUJZAroEzc,57111
65
- pycontrails/models/cocip/output_formats.py,sha256=VFWXGIDcWg98aQhMdstOhWlfhmHEUP582eHtyfcaFvw,85473
65
+ pycontrails/models/cocip/output_formats.py,sha256=rQeSn-gnerw1LGRYpWdubCc3k_ec93_Fl1u_iXoSk-w,85491
66
66
  pycontrails/models/cocip/radiative_forcing.py,sha256=SYmQ8lL8gpWbf6he2C9mKSjODtytbFcdnMdBM-LtBKE,46206
67
67
  pycontrails/models/cocip/radiative_heating.py,sha256=N7FTR20luERmokprdqMOl-d8-cTYZZ2ZSsTdxZnLHfs,19368
68
68
  pycontrails/models/cocip/unterstrasser_wake_vortex.py,sha256=Ymz-uO9vVhLIFwT9yuF5g1g3hcT-XWdryLsebSBqoVU,14976
@@ -91,7 +91,7 @@ pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv,sha256=2RtIHw
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=Dwc9dUzUlHGCDVqFdh492vJZsC5CB8J45cJnsHaMRF4,31229
94
+ pycontrails/physics/geo.py,sha256=GlrGgFI26hsc04o6QLN6rY6Q1mgXuZkLXkNh1juXxuc,31277
95
95
  pycontrails/physics/jet.py,sha256=iQ0g5cocj6j0JZPSxpTF3LLypSZGx3QQc6UyXsFfJGc,26461
96
96
  pycontrails/physics/thermo.py,sha256=5S8QvjaGDPR5vCbDsAsvwmplJPhTeDnITjCEU_sGMRY,13240
97
97
  pycontrails/physics/units.py,sha256=GnCJCKz25jcEYGcQVWfuYViVha6mukf08Eo4pK_3iYo,12744
@@ -101,9 +101,9 @@ pycontrails/utils/iteration.py,sha256=En2YY4NiNwCNtAVO8HL6tv9byBGKs8MKSI7R8P-gZy
101
101
  pycontrails/utils/json.py,sha256=xCv71CKVZNHk4MyoYC-hl7dXObXXbI7P8gcNCn3AUoU,6172
102
102
  pycontrails/utils/temp.py,sha256=5XXqQoEfWjz1OrhoOBZD5vkkCFeuq9LpZkyhc38gIeY,1159
103
103
  pycontrails/utils/types.py,sha256=gNG9cSZ3djW7jufg0h1fXM3kD24sBY6ENE6wsxY_Q6o,4937
104
- pycontrails-0.52.0.dist-info/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
105
- pycontrails-0.52.0.dist-info/METADATA,sha256=H3dxmqQMQaqGUUx0vLTP0ffLxKf1kVyYj0wM2sKbzck,9001
106
- pycontrails-0.52.0.dist-info/NOTICE,sha256=qYeNEp8OjDK5jSW3hTlr9LQRjZeEhXQm0zDei5UFaYs,1969
107
- pycontrails-0.52.0.dist-info/WHEEL,sha256=lO6CqtLHCAi38X3Es1a4R1lAjZFvN010IMRCFo2S7Mc,102
108
- pycontrails-0.52.0.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
109
- pycontrails-0.52.0.dist-info/RECORD,,
104
+ pycontrails-0.52.1.dist-info/LICENSE,sha256=HVr8JnZfTaA-12BfKUQZi5hdrB3awOwLWs5X_ga5QzA,10353
105
+ pycontrails-0.52.1.dist-info/METADATA,sha256=8Hq3tH_bn4RsRLUmaqCnordAtV5JS0gOVJmPRFesMFo,9477
106
+ pycontrails-0.52.1.dist-info/NOTICE,sha256=qYeNEp8OjDK5jSW3hTlr9LQRjZeEhXQm0zDei5UFaYs,1969
107
+ pycontrails-0.52.1.dist-info/WHEEL,sha256=UZYoTfvcH9CL8oQkujTAI06MiAXK9kd09pSK3OpCC7k,101
108
+ pycontrails-0.52.1.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
109
+ pycontrails-0.52.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (70.2.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp310-cp310-win_amd64
5
5