reki发布v2025.7.0版本

目录

reki 项目已发布 v2025.7.0 版本,可以使用 pip 安装或更新到最新版。

新功能

使用CEMC短要素名加载GRIB2要素场

使用 load_field_from_file 等函数从 GRIB2 文件中加载要素场时,函数参数 parameterlevel_typelevel 分别被转换为字典形式的 GRIB 键值对,并合并到同一个字典对象中,随后使用该字典对象过滤 GRIB2 消息。 因此,检索某些要素场可以仅使用 CEMC 短要素名作为 parameter 参数。

例如检索 2 米温度:

from reki.format.grib.eccodes import load_field_from_file

field = load_field_from_file(
    data_path,
    parameter="t2m",
)

注:reki 同样支持 ecCodes 的 shortName,比如使用 parameter="2t" 加载 2 米温度场。

检索 0-3km 垂直风切变:

field = load_field_from_file(
    data_path,
    parameter="shr(0-3000)",
)

CEMC 短要素名包含在 pandas.DataFrame 格式的 CEMC 要素清单 CEMC_PARAM_TABLE 中,可以使用如下代码查看:

from reki.format.grib.config import CEMC_PARAM_TABLE
CEMC_PARAM_TABLE

v2025.7.1:CEMC 短要素名支持 CMA-GFS GRIB2 数据。

v2025.7.2:CEMC 短要素名支持 CMA-MESO GRIB2 数据。

详细信息请访问 data-notebook 网站查看:https://data-notebook.perillaroc.wang

破坏更新

data_finder中配置文件整体作为Jinja2模板

data_finder 模块使用的配置文件是一个 Jinja2 模板,解析模板后得到 YAML 格式文本,加载 YAML 文本后得到最终使用的配置对象。 将配置文件整体作为 Jinja2 模板可以在配置文件中使用 Jinja2 模板的更多功能。

例如,下面代码来自 CMA-GFS grib2-orig 配置文件,使用 Jinja2 模板语法定义两个临时变量,并应用在后续的文件名和目录名中。

{% set start_time_string = time_vars.year ~ time_vars.month ~ time_vars.day ~ time_vars.hour %}
{% set start_date_string = time_vars.year ~ time_vars.month ~ time_vars.day %}

file_name: "Z_NAFP_C_BABJ_{{ start_time_string }}0000_P_NWPC-GRAPES-GFS-GLB-{{ time_vars.forecast_hour }}00.grib2"

paths:
  - type: cmadaas
    level: archive
    path: '{{ query_vars.storage_base }}/DATA/NAFP/NMC/GRAPES-GFS-GLB/{{ time_vars.year }}/{{ start_date_string }}'

data_finder 内置的配置文件已全部更新,支持 CMA-HPC2023-SC1 上运行的 NWP 业务系统,删掉不再支持的数据条目。

模板变量 time_vars 成员变量有变化,仅保留起报时次和预报时效相关变量,将时间计算转移到模板中。

class TimeVars:
    def __init__(
            self,
            start_time: Union[datetime.datetime, pd.Timestamp],
            forecast_time: pd.Timedelta = pd.Timedelta(hours=0)
    ):
        self.start_time = start_time
        self.forecast_time = forecast_time

        self.year = start_time.strftime("%Y")
        self.month = start_time.strftime("%m")
        self.day = start_time.strftime("%d")
        self.hour = start_time.strftime("%H")
        self.minute = start_time.strftime("%M")

        self.forecast_hour = f"{get_forecast_hour(forecast_time):03}"
        self.forecast_minute = f"{get_forecast_minute(forecast_time):02}"

模板解析也增加了一系列函数用于计算和打印时间:

def parse_template(template_content):
    template = Template(template_content)
    return template.render(
        time_vars=time_vars,
        query_vars=query_vars,
        get_year=get_year,
        get_month=get_month,
        get_day=get_day,
        get_hour=get_hour,
        get_minute=get_minute,
        get_forecast_hour=get_forecast_hour,
        get_forecast_minute=get_forecast_minute,
        generate_start_time=generate_start_time,
        generate_forecast_time=generate_forecast_time,
    )

更新

更新测试用例

为测试增加下载数据脚本 (tests/download_data.py),可以用于:

  • 从 WIS WMC-BJ 网站下载 CMA-GFS GRIB2 数据
  • 从 CMADaaS 挂载目录中拷贝 CMA-GFS GRIB2 数据

重写一部分测试用例:

  • format 目录中的测试用例使用下载的 CMA-GFS 数据,可以运行在任意联网环境
  • cma_hpc 目录中的测试用例需要在国家级气象超算 (CMA-HPC2023-SC1) 中运行
  • desktop 目录中的测试用例需要在挂载 CMADaaS 目录的主机中运行,仅限 CMA 内网使用

注意cma_hpc 目录中的一些测试用例仍在开发中。

参考

cemc-oper/reki项目: https://github.com/cemc-oper/reki

reki文档: https://reki.readthedocs.io/

data-notebook项目: https://github.com/cemc-oper/data-notebook

data-notebook网站: https://data-notebook.perillaroc.wang