pyEMU是一套用于与PEST和PEST++接口的Python模块
项目描述
pyEMU
用于模型无关的FOSM(一阶,二阶矩)(即基于线性,即贝叶斯线性)不确定性分析和数据价值分析的Python模块,以及与PEST和PEST++的接口。
pyEMU还具有纯Python(pandas和numpy)实现的普通克里金法,用于地统计插值,并支持生成高维PEST(++)模型接口,包括支持(非常)高维集合生成和处理。
文档
完整用户指南
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具有易于使用的参数和数据值得分析例程,这些例程估计在线性、贝叶斯框架中参数知识增加和/或额外数据增加如何影响预测不确定性。还通过ObservationEnsemble
和ParameterEnsemble
类提供了对高维蒙特卡洛分析的支持,包括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的人以及需要回顾相关内容的人来说是极好的资源。
相关链接
如何开始使用pyEMU
pyEMU可通过pyPI和conda获得。要安装pyEMU,请输入
>>>conda install -c conda-forge pyemu
或
>>>pip install pyemu
pyEMU需要numpy
和pandas
。为了绘图,需要matplotloib
、pyshp
和flopy
以利用自动接口构造。
安装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 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | f8bd5cef12de2d7dd9e36e9670c909bb54e6c34156e1f98aa66c5ffaea54cf3b |
|
MD5 | aab6fd222cd8cc16ff5d656796d05d15 |
|
BLAKE2b-256 | e891ec41b49b8c288f4770a36fa18f003baf7e56ddf10d60327ff792617b0227 |
pyemu-1.3.7-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 6a58d435bdfb4df83a92c1321d235a17c4592250cce4a7d87be1c3c3fd10aadc |
|
MD5 | af1106516abccdfcabc6143c55997b13 |
|
BLAKE2b-256 | a51c8cbb4b0a1d99b6a25818020d6b58760a29656276a89b35080ddc56a6701b |