-
Notifications
You must be signed in to change notification settings - Fork 273
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Add]将 xdoctest 引入到飞桨框架工作流中v1 #547
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
示例代码的量太大(近2000)段,有没有好的修改方法?或者搞个快乐开源让大家都来玩玩?!
可参考 中国软件开源创新大赛:飞桨框架任务挑战赛 赛事流程,本任务本来就是需要任务划分的,RFC 作者主要作为任务 Leader,承担任务的划分与分工,划分后建立 Tracking issue,发布给有兴趣的开发者来做,Tracking issue 可参考 PaddlePaddle/Paddle#53172 (comment) 列表里的内容,可以将这一点考虑进来写在 RFC 里~
Paddle docs 的 sphinx 文档编译还有不清楚的地方,PR 里面也写了,这里可否指导一下~
文档应该是用 https://github.com/PaddlePaddle/docs/blob/develop/docs-build.sh 构建的?细节我就不清楚了……
另外,RFC 非常详细!稍微修改下我觉得就没啥问题了 👍
rfcs/Docs/将 xdoctest 引入到飞桨框架工作流中.md
Outdated
|
||
## 3、意义 | ||
|
||
提高飞桨框架示例代码的质量。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里多写一点吧,包括保证示例代码输出正确性等
|
||
[Paddle/tools/sampcd_processor.py](https://github.com/PaddlePaddle/Paddle/blob/develop/tools/sampcd_processor.py) | ||
|
||
完成。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这种地方为什么要换行呢?
aaa
[bbb](ccc)
ddd
<!-- 改成下面的就可以 -->
aaa [bbb](ccc) ddd
行内代码块(`)一样,不需要换行,部分长命令可换成代码块(```)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这。。。 算是强迫症吧。。。 写成一坨看着难受。。。😂
rfcs/Docs/将 xdoctest 引入到飞桨框架工作流中.md
Outdated
|
||
此方法存在较多问题,比如,无法验证代码与示例中的结果是否一致,无法处理本应报错的示例代码等。 | ||
|
||
并且,Paddle docs 此处的检查与 Paddle 代码中的目标一致,属于对示例代码的重复检查,建议移除此检查。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个我在一年前就有这样的建议了:
PaddlePaddle/docs#4973 (comment)
此外,由于我们现在示例代码已经基本全部采用 COPY-FROM 取代,因此也可以考虑取消 docs repo 里的示例代码检查,将示例代码检查完全交给 Paddle repo 里的 CI 来进行
@luotao1 觉得呢?
另外 @megemini 也可以统计下 docs 下目前还有多少的示例代码会被提取,多少是 fluid 下的
rfcs/Docs/将 xdoctest 引入到飞桨框架工作流中.md
Outdated
|
||
1. 前期准备阶段:Paddle doc 与 Paddle 代码 的检查共存,新旧代码样式共存,不进行代码示例的修改。 | ||
|
||
- 修改目前 Paddle docs 的代码检查方式,兼容 `google` 样式。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里的描述是不是没有修改?还是之前方案的描述?应该主要修改 Paddle 这边 CI 的检查方式
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Paddle docs 也要修改,如果不改的话,google 样式的示例,在 Paddle docs 中会报错。
参考后面 1.1 修改目前 Paddle docs 的代码检查方式
里面的示例在 Paddle docs 中目前的问题。
不过,如果直接移除 docs 中的检查,那就没啥问题了~
>>> x = paddle.to_tensor([-0.4, -0.2, 0.1, 0.3]) | ||
>>> out = paddle.abs(x) | ||
>>> print(out) | ||
Tensor(shape=[4], dtype=float32, place=Place(cpu), stop_gradient=True, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
与 Torch 不同的是,Paddle Tensor 格式化后的字符串里有 place 信息,这个在不同平台上会不一样,这个是如何保证的呢?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
嗯,好问题,这个之前没注意到!
对于:
Tensor(shape=[2, 2], dtype=float32, place=Place(cpu), stop_gradient=True,
Tensor(shape=[2, 2], dtype=float32, place=Place(gpu:0), stop_gradient=True,
xdoctest 是认为不一致的。
目前看,可以从几个方面着手:
-
开发文档里面要写清楚
比如,明确开发者在写示例的时候,是否关注
place
:- 关注:如特指 gpu 环境等,开发者应该写明:
+REQUIRES(env:gpu)
- paddle.device.set_device("gpu")
- 不关注:那么,默认环境为 “cpu”。此处为开发者认为示例检查的默认环境,而不是实际代码检查的环境。
另外,xdoctest 还支持
...
的方式,个人推荐这种方式,如:add_sample_code( globals()["abs"], r""" Examples: .. code-block:: python >>> import paddle >>> x = paddle.to_tensor([[0.1, 0.2],[-0.4, -0.2]]) >>> out = paddle.abs(x) >>> print(out) ... [[0.10000000, 0.20000000], [0.40000001, 0.20000000]] ... """, )
这样也是可以通过测试的。也就是说,在关注的输出内容前后,加上
...
,这样 xdoctest 可以不比对前面和后面的内容。 - 关注:如特指 gpu 环境等,开发者应该写明:
-
execute_xdoctest
的global_exec
加一个paddle.device.set_device("cpu")
,也就是说,每次执行前统一默认设置为 "cpu" 环境执行:def execute_xdoctest(docs): import xdoctest xdoctest_config = { "global_exec": r"\n".join( [ "import paddle", "paddle.device.set_device('cpu')", ] ), ... } ...
另外,简单分析一下运行时状况(有 place 的示例代码):
- 不全局执行
paddle.device.set_device('cpu')
,跟随运行时环境
执行环境 | 示例代码 | 检查结果 |
---|---|---|
cpu | 无REQUIRES | 正常检查 |
cpu | +REQUIRES(env:gpu) 和 paddle.device.set_device("gpu") | 跳过检查 |
gpu | 无REQUIRES | 正常检查,如果有 place 则可能报错 |
gpu | +REQUIRES(env:gpu) 和 paddle.device.set_device("gpu") | 正常检查 |
- 全局执行
paddle.device.set_device('cpu')
执行环境 | 示例代码 | 检查结果 |
---|---|---|
cpu | 无REQUIRES | 正常检查 |
cpu | +REQUIRES(env:gpu) 和 paddle.device.set_device("gpu") | 跳过检查 |
gpu | 无REQUIRES | 正常检查 |
gpu | +REQUIRES(env:gpu) 和 paddle.device.set_device("gpu") | 正常检查 |
这里看看怎么处理?之后我更新一下 rfc~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
按照对比来看,「全局执行 paddle.device.set_device('cpu')
」没有任何缺点?不过无 REQUIRES 的单测会不会在 gpu 环境下因为加了 paddle.device.set_device('cpu')
仍然跑 CPU?会不会因此而测试地不全面?
其实这里我有点好奇,我们的无 REQUIRES 的示例代码是否应该在 CPU 和 GPU 下各跑一次呢?如果需要的话,后者不太可行,只能选择前者,然后通过 ...
来解决两者之间的差异问题
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
当然有缺点:
- 如果执行了
paddle.device.set_device('cpu')
,那么,真正需要 gpu 或其他环境的示例,则必须在示例中加入paddle.device.set_device("gpu")
之类的代码,进行显性的转换。 - 对于一般的开发过程,不在乎是否为 cpu 或 gpu 环境,则很可能在一个 gpu 环境中执行代码,并将其输出拷贝到示例中。这样,在执行了全局 cpu 命令后,再执行示例检查则会报错!
这些问题,只能在开发文档中进行说明,约束开发者对于示例的写作~
如果要 cpu 和 gpu 环境各跑一次,并比对结果,那么,就只能用 ...
这个来解决兼容性问题了,毕竟:
- 一个输出不会同时有 cpu 和 gpu 两个结果
- 应该大部分开发者也不会写两遍示例代码,分别针对 cpu 和 gpu
所以,我觉得目前比较好的方案是:
- 加上
paddle.device.set_device('cpu')
- 开发文档中引导使用
...
的写作方式
这样的话:
- 在 cpu 的执行环境中,那些 gpu 的示例代码由于不满足 REQUIRES 会跳过
- 在 gpu 的执行环境中,由于
paddle.device.set_device('cpu')
,那些不依赖 gpu 的示例可以正确执行,而依赖 gpu 的示例也可以正常检查
以上,是不使用 ...
的情况,如果按照开发文档的指导,使用了 ...
,则不必关心执行环境了
不过无 REQUIRES 的单测会不会在 gpu 环境下因为加了 paddle.device.set_device('cpu') 仍然跑 CPU?会不会因此而测试地不全面?
针对这个问题,我个人的意见是,xdoctest 毕竟只是示例代码的检查,目的是防止示例 写错
,而不是进行 单元测试
,所以,应该允许部分的 漏测
,如执行环境的不全面等~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这部分确实是个问题。但根本还是因为print paddle tensor,无法提供一个machine friendly的输出引起的。长期看,我觉得可以考虑让打印paddle tensor时,不输出place信息,其行为跟 pytorch/numpy 对齐会是比较理想的方案。
如果考虑兼容性的问题的话,就这个项目而言, 可以考虑增加一个内部API,调用该API,可以修改print paddle tensor的行为,让其不打印place信息。在进入xdoctest的时候开启该配制。
检查的环境的话,默认只在CPU上跑一遍就可以了。毕竟这个是示例代码的检查,不是单测。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这部分确实是个问题。但根本还是因为print paddle tensor,无法提供一个machine friendly的输出引起的。长期看,我觉得可以考虑让打印paddle tensor时,不输出place信息,其行为跟 pytorch/numpy 对齐会是比较理想的方案。
嗯~ 或者,有个类似 pprint
、paddle.summary
之类的格式化输出的方法也行~
如果考虑兼容性的问题的话,就这个项目而言, 可以考虑增加一个内部API,调用该API,可以修改print paddle tensor的行为,让其不打印place信息。在进入xdoctest的时候开启该配制。
这个可能不太行~ 输出的比对是两方面,一个是开发者写的,一个是程序输出的,程序输出的我们可以控制,但是开发者如果用 print 输出并拷贝到示例代码中,还是会存在 place ~ 同上,长期看,最好是有一个两方一致的方法~
检查的环境的话,默认只在CPU上跑一遍就可以了。毕竟这个是示例代码的检查,不是单测。
赞同!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
但是开发者如果用 print 输出并拷贝到示例代码中,还是会存在 place
这里可以用CI监控下,示例代码中不能存在place。以下这个PR就是【跳过代码示例中print的使用监控】
rfcs/Docs/将 xdoctest 引入到飞桨框架工作流中.md
Outdated
|
||
**CAUTION: Review 注意** | ||
|
||
> 由于 `registry.baidubce.com/paddleorg/docpreview` 这个 docker 镜像拉不下来,这里无法验证此方法的正确性!因此,此处特性的实现需要具体讨论! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个链接是从哪里找到的呢?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
文档应该是用 https://github.com/PaddlePaddle/docs/blob/develop/docs-build.sh 构建的?
确实是,但是文档构建完之后,只是简单的 html,没有具体的显示格式~
在 registry.baidubce.com/paddleopen/fluiddoc-sphinx:20210610-py38
这个docker
里面,有个 preview 的脚本:
/root/fluiddoc-preview.sh
里面用到了这个 registry.baidubce.com/paddleorg/docpreview
docker,以及 spring 服务器。
由于后面就没权限了,所以我猜测系统在具体呈现这些文档的时候,会再做一些处理。而加入代码复制的特性,可能就不在 Paddle docs 负责的范围内了~
所以,具体涉及到页面复制特性,以及sphinx构建相关的东西,我都写的比较少,还有待确认~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个超出了本项目的范围了,可以不考虑。
等上线之后,请负责官网的研发同学来实现就好了。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
写的非常好!
-
Paddle docs中API文档可以直接使用 COPY-FROM,基于这个前提,设计文档是不是要做一下调整,能省去很多后续成本。即我们可以先开一个任务把没有使用COPY-FROM的先做了,同时需要有CI检测,即docs中API文档不能引入示例代码
-
新旧代码风格的问题,实操上先把增量控制住,即新增/修改的API注释(这块CI是有的),必须要走google style(只需要改一下这儿的逻辑),不然CI报错。这样实操上是否简单点?
现有示例代码存量较大(近2000个),存在修改工作量风险。
这个能否开发一个脚本,自动补全 >>> ?,剩余补全不了的再人工修改。而且如果第2点的CI脚本上了,自动化改存量脚本也有CI保障,工作量可以收敛。
- 因为2.5版本已经拉分支了,我们目标在2.6版本前把这块做完。
请 @jzhang533 @sunzhongkai588 再review下
@SigureMo 我猜测CI上只跑一次,但QA验收的时候都跑一下。
|
同意这点,因为理论上docs内的内容,是对英文版本的翻译,示例代码部分是不需要翻译的。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
非常赞的RFC,期待~
rfcs/Docs/将 xdoctest 引入到飞桨框架工作流中.md
Outdated
|
||
**CAUTION: Review 注意** | ||
|
||
> 由于 `registry.baidubce.com/paddleorg/docpreview` 这个 docker 镜像拉不下来,这里无法验证此方法的正确性!因此,此处特性的实现需要具体讨论! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个超出了本项目的范围了,可以不考虑。
等上线之后,请负责官网的研发同学来实现就好了。
赞同开任务来清理没有copy-from的中文文档。目前基本上新增api的中文文档代码都是copy-from的,没有copy-from的都是比较旧的api文档。
我理解即使用脚本自动补全 >>>,可能还有大量的人工工作需要做。因为目前示例代码的输出结果有太多写法了,如rfc所述
这种简单、量大的工作可能还是主要得借助于「快乐开源」或者「LearnDL」 |
这两天有点事儿,抱歉回复的比较迟~ 针对大家 @SigureMo @luotao1 @jzhang533 @sunzhongkai588 的意见,我这里先汇总一下,后续修改 rfc:
赞同! 这个确实应该开一个任务,我想,放在第二阶段第一个任务 不过,不建议把这个任务放在最开始,因为,如果放在最开始,那么 Paddle docs 的修改还是要依赖 docs 自己的 CI 来检查!还是相当于要同时维护 Paddle 代码的 CI 和 Paddle docs 的 CI 两个部分。。。
嗯,目前 Paddle 代码 和 Paddle docs 中的 CI 都有增量检查,计划上是不改动增量/全量这部分的逻辑,只改动具体的检查部分~ 考虑到 xdoctest 的引入,与开发者的引导之间,存在时间差,所以,我是想在流水线切换的这段时间,最好能兼容旧格式~
我觉得,从开发者和学习示例代码的角度来看,如果目前示例中用 print 来输出,print 的输出也带有 place,那么,我们只能采用有限的手段来约束和检查,比如,指导开发者在写示例代码的时候,如无特殊情况,请用 CPU 环境,我们也在 CPU 环境中进行检查。 如果进行过多 magic 的控制,比如,限制示例代码中要删掉 place 部分,而学习者重现示例的时候,发现有 place,就会比较困惑。。。 以上,请评审!:) |
Docs仓库可以不要示例代码检查。 |
|
✨ 赞!!!
✨ 同意!!! 那我单独开一个任务跟踪这个事情~ 虽然不明白,为什么跟 xdoctest 没关系还要加到这个 rfc 里面 ~ 🤣 开个玩笑 别生气 ~ 🤭
✨ 明白!!! 是不是可以这样做:
✨ 收到!!!
✨ 可以!!! 这样的话就简单了:
|
这里我是有一点担忧的,如果早期考虑的不够全面的话,直接替换很容易导致开发者不清楚如何去修改,有些写的明明是对的,但是不熟悉新的示例代码书写方式而难以合入,而且早期也是没有多少是可以参考的 如果不考虑兼容旧格式的话,可以考虑增加黑白名单,未迁移部分只跑旧的检查,迁移部分只跑新的检查,这样可以确保不会出现上述问题,而且也不需要兼容旧格式
COPY-FROM 后的代码是不会检查的吧?目前代码检查应该是基于 rst 源码进行提取的,已经迁移到 COPY-FROM 的 rst 源码提取不到示例代码,应该是会直接跳过的 |
可以的。
可以单独写一个Copy-FROM的RFC出来(然后我们就可以启动啦)。这样这个RFC更加精简和聚焦一点。都是你调研出来的成果呢。
我建议这块可以出几个方案,用表格的形式对比一下优缺点:1)要兼容 2)不兼容的做法1(luotao)3)不兼容的做法2(SigureMo)4)不兼容的做法XXX。然后我们请大家来评审下。 |
@SigureMo 这个地方不太确定~ docs 的 CI 流程好像是:
提取不到的会跳过,没什么问题~ 提取到的好像还是要检查的吧?!
need_check_cn_doc_files="$1"
echo $need_check_cn_doc_files
# Check COPY-FROM is parsed into Sample Code
echo "Run COPY-FROM parsed into Sample Code Check"
python check_copy_from_parsed_into_sample_code.py "${OUTPUTDIR}/zh/${VERSIONSTR}/" $need_check_cn_doc_files
if [ $? -ne 0 ];then
echo "ERROR: Exist COPY-FROM has not been parsed into sample code, please check COPY-FROM in the above files"
exit 1
fi
need_check_files=$(filter_cn_api_files "${need_check_cn_doc_files}")
echo "$need_check_files"
if [ "$need_check_files" = "" ]
then
echo "need check files is empty, skip chinese api check"
else
echo "need check files is not empty, begin to install paddle"
install_paddle
if [ $? -ne 0 ];then
echo "install paddle error"
exit 5
fi
for file in $need_check_files;do
python chinese_samplecode_processor.py ../docs/$file
if [ $? -ne 0 ];then
EXIT_CODE=5
fi
done
exit ${EXIT_CODE}
fi 重现 COPY-FROM 的条件和环境挺麻烦的,不过,从逻辑上来看,目前的好像是这样,也没啥问题~ 还请帮忙看看! |
如果是这样,我认为提取到的完全没必要再检查一遍了,因为提取到的可以保证在 Paddle 那边已经检查过了,docs 再重新检查是完全没必要的,这个检查完全可以下线的 |
来,买定离手!!!🎲 |
大概是按照目录分一下,如果一个目录已经迁移到新的格式,则加入到新格式名单中,不跑旧的检查,只跑新的检查,任何一个示例代码只跑一种检查 |
@megemini 因为评审意见比较多且格式检查涉及面较广,辛苦整理出一份Copy-From的RFC和xdoctest修改后的RFC,我们邀请更多RD来review下 |
@SigureMo @luotao1 @jzhang533 @sunzhongkai588 统计 结合之前讨论的一些问题,更新了一版 rfc,请评审! 谢谢!:) |
- 中英文 API 文档特性更新 | ||
- 代码检查移交 | ||
|
||
# 六、影响面 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这一部分【影响面】,做成表的形式更加精简,便于阅读
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
改了,没法看,又改回去了 😵💫
rfcs/Docs/将 xdoctest 引入到飞桨框架工作流中.md
Outdated
- 更新文档《开发 API Python 端》与《API 文档书写规范》 | ||
- 不再兼容旧格式 | ||
- 中英文 API 文档特性更新 | ||
- 代码检查移交 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
排期规划
- 需要大致写一下工作量和人员安排,可以用表的形式。比如 1661行和1664行需要借助快乐开源任务,其他是你自行开发?
- 哪些工作可以并行开展?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已修改,请评审!:)
rfcs/Docs/将 xdoctest 引入到飞桨框架工作流中.md
Outdated
|
||
生成 `PR` 对应的 API | ||
|
||
`paddle/fluid/API_PR.spec` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
155行-161行,可以合并成一行么,这样RFC看起来更加精简。或者是出于什么考量分开写呢?全文多处是这样的。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
其余我没什么问题了~
|
||
> **Xdoctest 示例样式说明** | ||
> | ||
> - A `Google-style <https://sphinxcontrib-napoleon.readthedocs.io>`__ doctest is |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个链接是从 reStructureText 里 copy 过来的?需要改成 Markdown 格式
> | ||
> - A `freeform style` doctest is any contiguous block of lines prefixed by ``>>>``. | ||
This is the original parsing style of the builtin doctest module. Each block is | ||
listed as its own test. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
我看这次更改主要将 google style
替换成了 google/freeform style
,这里是怎么考虑的呢?按理说我们的英文文档本来就应该是符合 google style
的,为什么还需要 freeform style
呢?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
freefrom 与 google 样式的最大区别是,freeform 会解析 docstring 中所有 >>>
中的代码,google 样式只解析 Example
内的代码~
因为 google 样式其实是指 docstring 中的 Args: Returns: Examples:
这样的写作格式,而不管是 google 还是 freeform 都应该符合 >>>
这种 doctest
的写作方式,而不是我们现在这种直接写代码的方式。
v1.2 这个版本最大的更新,是在统计 docs 示例代码的时候,发现有些代码是不在 Example
里面的,参考 ### 3.2 Paddle docs
以及第一个任务 修改目前 Paddle docs 中 COPY-FROM 的逻辑
。
所以把 google style
替换成了 google/freeform style
,表示既需要检查 Example
里面的代码,也要检查其他部分 docstring 中的代码。
坑越挖越大 ... ... 💔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM~
PR types
New features
PR changes
Docs
Describe
[used AI Studio]
中国软件开源创新大赛:飞桨框架任务挑战赛
之前的 PR #540 调研不全面,我重新写了这一版,后面把那个 PR 关了吧~
另外,补充几个问题:
@SigureMo @Ligoml @luotao1
请评审!谢谢!