发展指导方针
如果您有兴趣帮助开发PySD,请 PySD开发路径 列出了可以做出贡献的领域。
要开始,您可以对存储库进行分叉并为您自己的版本做出贡献。当您对自己的编辑感到满意时,请向主分支提交拉取请求。
备注
为了打开拉取请求,应彻底测试新功能和更改。为此,应添加新功能或转换功能的单元测试,请查看下面的开发工具部分。打开拉取请求时,所有测试都会运行,并检查cover和pep8风格。
开发工具
您可能会发现有很多工具对开发有帮助:
测试套件
PySD使用找到的通用模型测试套件 on github 它们运行时使用 pytest_integration_test_vensim_pathway.py 和 pytest_integration_test_xmile_pathway.py . PySD还拥有自己的内部功能测试, pytest_*.py 档案 /tests/ 目录.
为了运行所有测试 pytest
应该使用。一 Makefile is given to run easier the tests with pytest
, check tests/README for more information.
这些测试运行得很快,并且应在做出任何更改时执行,以确保当前功能保持完整。如果添加了任何新功能或纠正了错误,则应使用测试套件中的新模型或相应的补充测试来更新测试 pytest_*.py 文件.
备注
如果您的更改纠正了与Vensim(或Xmile)模型的转换或运行相关的一些现有错误。您应该在 test suite repo 重现已解决的错误并添加必要的行 pytest_integration/pytest_integration_test_vensim_pathway.py (或 pytest_integration/pytest_integration_test_xmile_pathway.py )运行新测试。然后,鼓励还添加单元测试 pytest_translators 重现新功能的转换和工作流程的测试 pytest_types/functions/pytest_functions.py (或 pytest_types/statefuls/pytest_statefuls.py ).
速度测试
未来可能会开发速度测试。欢迎任何贡献。
Profiler
分析代码可以帮助识别操作中的瓶颈。为了了解代码的更改如何影响其速度,我们应该构建一个执行相关PySD组件的分析测试。
Python Linter
Pylint 是一个模块,用于检查您的代码是否符合适当的Python编码实践。它有助于确保代码易于其他人阅读,并且是改进编码实践的良好快速反馈。lint检查器可以为整个包以及单个Python模块或类运行。每当进行更改时,它都应该在本地级别(即在特定文件上)运行,并在提交包之前在全球范围内运行。它不需要完美,但我们应该始终渴望朝着积极的方向前进。'
PySD设计理念
PySD认识到有重点的项目更加稳健和可维护,因此遵循以下理念:
尽可能少做。
任何不是系统动力学特有的东西(例如绘图、集成、装配等)都应该使用外部工具实现,或者省略。
坚持SD。让其他学科(ABM、离散事件模拟等)创建自己的工具。
使用外部模型创建工具。
使用系统动力学的核心语言。
将实施限制为基本XMILE标准。
抵制将所有供应商工具中出现的所有内容包含在内的冲动。
强调易用性。让以前没有使用过Python的SD从业者了解基础知识。
Take advantage of general Python constructions and best practices.
开发和使用强大的测试和分析组件。尽早分享您的工作。尽早发现错误。
避免救火或急于快速添加功能。SD对软件开发中的短期思维有足够的了解,足以知道这条道路通向何方。