贡献

感谢您帮助构建 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 环境下,我们还有一些额外的决策需要做。理想情况下

  1. .fit 过程中学习到的所有属性都应该是 具体的,即它们不应该是 dask 集合。

  2. 在可能的情况下,转换器应该支持

    • numpy.ndarray

    • pandas.DataFrame

    • dask.Array

    • dask.DataFrame

  3. 如果可能,转换器应该接受一个 columns 关键字来将转换限制在指定的列,同时不触动其他列。 inverse_transform 的行为也应该类似(忽略其他列),以便 inverse_transform(transform(X)) 等于 X

  4. 返回数组的方法(如 .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