跳转到主要内容

pyEMU是一套用于与PEST和PEST++接口的Python模块

项目描述

pyEMU

用于模型无关的FOSM(一阶,二阶矩)(即基于线性,即贝叶斯线性)不确定性分析和数据价值分析的Python模块,以及与PEST和PEST++的接口。
pyEMU还具有纯Python(pandas和numpy)实现的普通克里金法,用于地统计插值,并支持生成高维PEST(++)模型接口,包括支持(非常)高维集合生成和处理。

主分支: pyemu continuous integration Coverage Status

开发分支:pyemu持续集成 覆盖率状态

文档

完整用户指南

https://pyemu.readthedocs.io/en/latest/

pyEMU文档被视为一等公民!还可以查看存储库中的示例笔记本。

什么是pyEMU?

pyEMU是一组用于独立于模型、用户友好、计算机模型不确定性分析的Python模块。pyEMU与开源套件PEST(Doherty 2010a和2010b,以及Doherty和其他,2010)和PEST++(Welter和其他,2015,Welter和其他,2012)紧密耦合,这些是独立于模型的参数估计工具。然而,pyEMU可以与通用数组对象(如numpy ndarrays)一起使用。

实现了几个方程,包括Schur补(条件不确定性传播,也称为贝叶斯线性估计)(PEST的PREDUNC套件的基础)和误差方差分析(PEST的PREDVAR套件的基础)。pyEMU具有易于使用的参数和数据值得分析例程,这些例程估计在线性、贝叶斯框架中参数知识增加和/或额外数据增加如何影响预测不确定性。还通过ObservationEnsembleParameterEnsemble类提供了对高维蒙特卡洛分析的支持,包括Tonkin和Doherty(2009)的空间蒙托卡洛方法;这些集合类也与PESTPP-IES很好地协同工作。

pyEMU还包括许多处理PEST(++)数据集的功能,例如

  • 操作PEST控制文件,包括使用pandas对参数数据部分和观测数据部分进行复杂编辑
  • 从指令和模板文件创建PEST控制文件
  • 在站样本文件和pandas数据框之间转换——非常适合观测处理
  • 通过残差或用户定义的函数轻松进行观测(重)加权
  • 处理雅可比矩阵和协方差矩阵,包括在二进制和ASCII矩阵之间转换、读取和写入PEST不确定性文件的功能。协方差矩阵可以从相关的控制文件部分(如参数界限或观测权重)实例化。基Matrix类重载了大多数常见的线性代数运算符,以便通过行和列名称自动对齐操作。所有Matrix实例还包括内置的SVD。
  • 地质统计学,包括地质统计学结构支持、读取和写入PEST结构文件以及创建由嵌套地质统计学结构隐含的协方差矩阵,以及普通克里金(在utils.geostats.OrdinaryKrige对象中),它复制了pest实用程序ppk2fac的功能。
  • 复合缩放敏感性计算
  • 从给定的协方差矩阵计算相关系数矩阵
  • 基于Karhunen-Loeve的参数化作为空间分布式参数场的试点点替代方案
  • 一组帮助函数,用于在本地机器上启动tcp/ip工作者以进行并行PEST++/BeoPEST运行
  • 对控制文件中的先验信息方程的全支持
  • 基于Pearson相关系数的加权先验信息方程
  • 基于几个PEST实用程序结果的验证测试

版本 => 1.1包括PstFrom设置类,以支持生成具有所有功能的100,000到1,000,000参数范围的PEST(++)接口。可以在此处找到记录PstFrom类的出版物

https://doi.org/10.1016/j.envsoft.2021.105022

可以在此处找到记录pyEMU和示例应用的出版物

http://dx.doi.org/10.1016/j.envsoft.2016.08.017

资助

pyEMU最初是在美国地质调查局的支持下开发的。新西兰战略科学投资基金(作为GNS科学[https://www.gns.cri.nz/])地下水研究计划的一部分,也自2018年起资助了其贡献。Intera,Inc.还为pyEMU的开发和支持提供了资金。

示例

提供了一些示例ipython笔记本,以展示FOSM参数和预报不确定性分析的典型工作流程,以及研究参数对预报不确定性和观测数据贡献的技术。示例模型包括亨利盐水入侵问题(亨利1964年)和Freyberg(1988年)的模型。

https://github.com/gmdsi/GMDSI_notebooks上有大量关于使用PEST(++)进行基于脚本的方法进行参数估计和不确定性量化的详细学习资料。这些资料对于第一次使用Pyemu的人以及需要回顾相关内容的人来说是极好的资源。

相关链接

GitHub上的PEST++

PEST

地下水建模决策支持倡议

如何开始使用pyEMU

pyEMU可通过pyPI和conda获得。要安装pyEMU,请输入

>>>conda install -c conda-forge pyemu

>>>pip install pyemu

pyEMU需要numpypandas。为了绘图,需要matplotloibpyshpflopy以利用自动接口构造。

安装pyEMU后,可以使用以下命令为您所在的操作系统安装PEST++软件套件

get-pestpp :pyemu

有关更多信息,请参阅文档

发现了一个错误?有一个聪明的想法?欢迎贡献。

请随意提出问题或提交拉取请求。

pyEMU CI测试最近已切换到使用pytest运行。我们使用pytest-xdist进行并行执行。以下是一些可能有助于构建您的PR和测试的注意事项

  • 测试文件位于./autotest
  • Pytest设置在./autotest/conftest.py./autotest/pytest.ini
  • 目前,以_tests.py_tests_2.py结尾的文件将被收集
  • test_开头或以_test结尾的函数将被收集
  • 位于.examples中的ipython笔记本也将运行
  • 由于测试是并行运行的,因此在需要读写文件访问权限的地方进行沙盒运行是最安全的。Pytest内置了一个名为tmp_path的固定装置,可以帮助完成这项工作。设置可选参数--basetemp对于访问本地运行的文件可能有所帮助。

本地运行测试

为了能够干净地使用pytest的固定装置装饰器等,建议通过pytest(而不是使用脚本执行并在main块中注释)来运行本地测试。例如。

运行所有测试

pytest --basetemp=runner autotest

使用pytest-xdist,本地运行可以并行化

pytest --basetemp=runner -n auto autotest

运行文件中的所有测试

pytest --basetemp=runner -n auto autotest/testfile_tests.py

运行特定测试[this_test()]

pytest --basetemp=runner autotest/testfile_tests.py::this_test

使用IDE

大多数现代功能丰富的编辑器和IDE都支持在调试或运行控制台中启动pytest。一些可能需要“鼓励”以识别此库中使用的非标准测试标记。例如,在pycharm中,为了支持点击并运行测试,需要pytest-imp插件以拾取以_test结尾的测试函数(pyEMU中的nosetest遗留问题)。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

pyemu-1.3.7.tar.gz (338.8 kB 查看散列值)

上传时间

构建分发

pyemu-1.3.7-py3-none-any.whl (329.3 kB 查看散列值)

上传时间 Python 3

由以下组织支持