NVIDIA/earth2studio 0.20.0
NVIDIA/earth2studio
Captured source
source ↗published Oct 29, 2026seen 9hcaptured 9hhttp 200method plain
v0.20.0
Repository: NVIDIA/earth2studio
Tag: 0.20.0
Published: 2026-10-29T23:54:21Z
Prerelease: no
Release notes: Earth2Studio general release 0.20.0
:rotating_light: Breaking Changes :rotating_light:
- NCEP observation frames now use Arrow-backed dtypes throughout. Missing values are nulls, string columns are dictionary-encoded, and
NNJAObsSatwndquality indicators uselist>instead of Python lists. Consumers that depend on the previous pandas dtypes or missing-value representation should update accordingly. CorrDiffEra5Hrrr.load_modelnow defaults to the distilled model; passdistilled_model=Falseto use the 50-step teacher.
:closed_book: Changelog
:earth_americas: Added
- Added subseasonal-to-seasonal evaluation capability in the eval recipe, with
WindowMeanForecastPipelineandWindowMeanSource. - Added the distilled ERA5 -> HRRR downscaling model (
CorrDiffEra5HrrrDistilled). - Added StormScope Flash variants of
StormScopeGOESandStormScopeMRMSfor accelerated inference over CONUS, including crop-based inference. - Added HealDA v2 (
HealDAv2), a global machine-learning data-assimilation model mapping a 48-hour sequence of satellite and conventional observations to a 104-channel, 0.25° atmospheric analysis (da-healda-v2extra). It accepts one wide NNJA frame (layout="wide") per stream ininput_coords()order. - Added
InterpCRPSDiT, a CRPS DiT temporal interpolation model with sub-hourly output. - Added an
original_eventoption and report time/latitude/longitude columns toNNJAObsConv; report-time filtering preserves complete PrepBUFR profiles. - Added a
detectorcolumn toNNJAObsSatcarrying the CrIS field-of-view index, plusscan_quality,granule_quality, andfootprint_qualitycolumns for ATMS, CrIS, and IASI provider flags. - Added a
cycle_timecolumn to the NCEP observation sources (NNJAObsConv,NNJAObsSatwnd,NNJAObsSat,NomadsGDASObsConv) identifying the cycle of the file each row was decoded from. - Added a
layoutoption to the NCEP observation sources:"wide"returns one row per report level, wind, or footprint with oneobservation_column per variable;"long"remains the default. - Added
fetch_dataframesto fetch several DataFrame requests concurrently, accepting and returning either a list or a dictionary. - Added the Google Cloud mirror (
source="google") to ECMWF open-data sources. - Eval recipe:
scoring.online.verification_sourcesscores one online rollout against several named truth sources in a single pass, writing separate statistics and scores per reference.
⚙️ Changed
- The NCEP observation sources decode BUFR with earth2bufr instead of PyBufrKit. Rows and values are unchanged except PrepBUFR station identifiers with non-ASCII bytes, which now carry spaces instead of U+FFFD.
- NCEP observation frames use
pd.ArrowDtypecolumns throughout, with null missing values and dictionary-encoded string columns. NNJAObsSatreturns a row for every decoded channel, including channels with missing or unconvertible observations, so every footprint appears.NNJAObsSatwndreads each field from its first occurrence in the message template.NNJAObsSatdecodes only thesensor_indiceschannels of an IR sounder and returns IASI and CrIS brightness temperature from a single Planck conversion.decode_workerson NCEP sources controls the threads transforming decoded batches; decoding runs on earth2bufr's thread pool.- NNJA and GDAS conventional lexicon modifiers are now identity operations; the decoders return Earth2Studio units.
fetch_dataframepreserves attributes set by the data source and addsrequest_timeandrequest_lead_timeinstead of replacing them.obstore_read_chunkedandobstore_fetch_to_cacheacceptchunk_size,max_concurrent, andhedge_after. NNJA sources use larger concurrent ranges and re-request stalled ranges.NNJAObsConvandNNJAObsSatexpose an adjustabletask_timeout, defaulting to 600 seconds per download attempt.- ECMWF open-data sources accept a
client_kwargsdictionary foropendata.Client. - Updated CBottle Tropical Cyclone and Infill checkpoints to new EMA versions.
- Added rollout checkpointing support for
AtlasCRPS. - Reduced the default HealDA v2 example observation downloads and extended its download timeouts.
:hammer: Fixed
NNJAObsConvandNomadsGDASObsConvcorrectly decode PrepBUFR files from before 2007 and raise on files with no known message family instead of returning no rows.- PrepBUFR messages dated 2000 (edition 3, year of century 100) get the year 2000 instead of 100, preventing their observations from being dropped by the time window.
NNJAObsConv,NNJAObsSatwnd, andNNJAObsSatraise on file, message, or DX-table decode failures instead of silently returning fewer rows.NNJAObsSatskips sensors outside their archive years in multi-sensor requests instead of failing the whole request.- NNJA, GDAS, and UFS observation sources read all cycle files whose ±3-hour spans overlap a request and keep only rows within each requested window.
- Updated the
CorrDiffCosmoEra5checkpoint revision to use corrected ERA5 training-domain statistics inrea2/stats.json. - Brier scores honor custom ensemble dimension names during coordinate validation.
- Corrected the Energy Score ensemble reduction axis when multivariate dimensions precede the ensemble dimension.
- Fixed running variance and standard deviation when reducing non-leading or multiple dimensions.
Aurora1p5andAurora1p5Ensembleno longer apply a second log-untransform totp1handsf1h, which made hourly precipitation and snowfall about 1000 times too small.- Fixed
ZarrBackendandIceChunkBackendreopening stores containing root-level subgroups or scalar arrays. datasource_to_fileoffsets requested times by each lead time independently instead of compounding the leads.DataArrayPathListpreserves size-one dimensions when loading files with a single variable or time.- Added the missing
dataextra to the HealDA v2 example dependencies.
📦 Dependencies
- Replaced PyBufrKit with earth2bufr in the
dataextra. - Require
pyarrow>=24to avoidTable.filtercorruption on large single chunks in versions 18–23. - Switched to stable PyPI ONNX Runtime with CUDA 13 support.
- Updated pinned requirements to
aiohttp==3.14.5,fsspec==2026.9.0, andurllib3==2.8.0.
Thank you to our contributors:
-...
Excerpt shown — open the source for the full document.