贡献
目录
贡献¶
感谢您帮助构建 dask-ml
!
克隆仓库¶
Fork dask-ml 仓库 并克隆该 fork
git clone https://github.com/<your-github-username>/dask-ml
cd dask-ml
您可能希望将 https://github.com/dask/dask-ml
添加为上游远程仓库。
git remote add upstream https://github.com/dask/dask-ml
创建环境¶
我们在 ci
目录中有包含所有必要依赖项的 conda 环境 YAML 文件。
conda env create -f ci/environment-latest.yaml --name=dask-ml-dev
创建 conda 环境并安装所有依赖项。
如果您使用 pip,可以在 setup.py
中查看所有必需和可选依赖项的列表(查看 install_requires
字段获取必需依赖项,extras_require
获取可选依赖项)。
构建 dask-ml¶
Dask-ML 是一个纯 Python 仓库。开发安装非常简单,只需克隆仓库并在克隆的目录中运行以下命令即可
pip
:
python -m pip install -e ".[dev]"
conda
:
conda activate dask-ml-dev
python -m pip install --no-deps -e .
如果您遇到任何问题,请在 dask-ml issue tracker 上提出 issue。
风格¶
Dask-ML 使用 black 进行格式化,使用 flake8 进行 linting。如果您使用 python -m pip install -e ".[dev]"
安装了 dask-ml,这些工具应该已经安装好了。
black .
flake8
isort -rc dask_ml tests
您可能希望设置一个 提交前钩子 (pre-commit hook),以便在提交更改时运行 black。
运行测试¶
Dask-ml 使用 py.test 进行测试。您可以从 dask-ml 主目录运行测试,如下所示
pytest tests
或者,您也可以选择只运行完整测试套件的子集。例如,要仅测试预处理子模块,我们可以如下运行测试
pytest tests/preprocessing
覆盖率¶
如果您的 Pull Request 降低了代码覆盖率,CI 可能会失败。有时这是可以接受的,维护者会合并它。要在本地检查覆盖率,请使用
pytest --cov --cov-report=html
除了这些选项外,您仍然可以使用所有常用的 pytest 命令行选项。
提交前钩子¶
按如下方式安装和构建 pre commit 工具
python -m pip install pre-commit
pre-commit install
安装一些插件,例如 black、isort 和 flake8。这些工具将在每次提交时自动运行。您可以使用 git commit --no-verify
跳过检查。
约定¶
我们大部分遵循 scikit-learn 的 API 设计。如果您正在实现一个新的估计器,理想情况下它应该能通过 scikit-learn 的 估计器检查。
在 dask 环境下,我们还有一些额外的决策需要做。理想情况下
在
.fit
过程中学习到的所有属性都应该是 具体的,即它们不应该是 dask 集合。在可能的情况下,转换器应该支持
numpy.ndarray
pandas.DataFrame
dask.Array
dask.DataFrame
如果可能,转换器应该接受一个
columns
关键字来将转换限制在指定的列,同时不触动其他列。inverse_transform
的行为也应该类似(忽略其他列),以便inverse_transform(transform(X))
等于X
。返回数组的方法(如
.transform
,.predict
)应该返回与输入相同的类型。因此,如果输入是dask.array
,则应该返回一个具有相同分块的dask.array
。
文档¶
我们使用 numpydoc 来编写文档字符串 (docstrings)。
可以使用以下方式构建文档
$ conda env create -f ci/environment-docs.yaml --name=dask-ml-dev-docs
$ conda activate dask-ml-dev-docs
$ python -m pip install -e .
$ cd docs
$ make html
示例是写成剥离输出的 Jupyter 笔记本,可以手动剥离或使用 nbstripout。我们希望示例可以在 binder 上运行,所以它们应该很小,但包含如何扩展到更大问题的说明。
大多数示例的源代码保存在 dask-examples 仓库中。更新应该在那里进行,它们会自动作为 Dask-ML 文档构建过程的一部分包含进来。
当为仅在主分支可用的新功能添加示例时,笔记本应首先包含在 Dask-ML 仓库的 docs/source/examples/
下。这些示例将在 Dask-ML 发布过程中移至 dask/dask-examples
。