garage项目代码贡献规范与技术指南

garage项目代码贡献规范与技术指南

garage A toolkit for reproducible reinforcement learning research. garage 项目地址: https://gitcode.com/gh_mirrors/ga/garage

前言

garage作为一个强化学习研究框架,其代码质量与规范程度直接影响着研究工作的可复现性和可扩展性。本文将详细介绍garage项目的代码规范、开发流程和最佳实践,帮助开发者快速掌握项目贡献的正确方式。

开发环境配置

在开始贡献代码前,需要正确配置开发环境。关键步骤包括安装pre-commit钩子,它能在提交代码前自动执行代码格式检查:

pre-commit install -t pre-commit
pre-commit install -t pre-push
pre-commit install -t commit-msg

这些钩子会在每次git commit时自动运行,检查代码风格、语法等问题,避免将格式错误的代码提交到仓库。

代码风格规范

Python代码风格

garage严格遵循PEP8规范,并在此基础上增加了一些项目特有的规则:

  1. 导入排序:按PEP8分组后按字母顺序排列

    • 标准库导入
    • 第三方库导入
    • 本地应用/库导入
  2. 字符串引号:优先使用单引号,除非字符串内包含单引号

  3. 字符串格式化:统一使用f-string

    # 推荐
    name = "World"
    greeting = f'Hello, {name}!'
    
    # 不推荐
    greeting = 'Hello, {}!'.format(name)
    
  4. 抽象基类:必须使用abc模块

    import abc
    
    class Robot(abc.ABC):
        @abc.abstractmethod
        def beep(self):
            pass
    

模块导入规范

  1. 便利导入:在__init__.py中添加一级导入的快捷方式

    # garage/foo/__init__.py
    from garage.foo.bar import Bar
    
  2. 避免循环导入:同一包内的导入使用绝对路径

    # 正确
    from garage.foo.baz import Baz
    
    # 错误(可能导致循环导入)
    from garage.foo import Baz
    
  3. 第三方库导入:导入整个模块而非具体对象

    # 正确
    import numpy as np
    import tensorflow as tf
    
    # 错误
    from numpy import array
    

文档规范

文档字符串(Docstring)

所有公开方法必须提供符合Google风格的文档字符串:

def sample_action(self, observation):
    """Sample an action given an observation.
    
    Args:
        observation (numpy.ndarray): Observation from the environment with
            shape :math:`(O^*)` where :math:`O^*` means any shape.
    
    Returns:
        numpy.ndarray: Sampled action with shape :math:`(A^*)`.
    
    Raises:
        RuntimeError: If the policy is not initialized.
    """

张量形状标注

强化学习涉及大量张量操作,必须明确标注形状:

| 符号 | 说明 | |------|------| | N | 批次维度 | | T | 时间维度 | | S^* | 可变形状 | | \bullet | 展平操作符 |

示例:

def process_trajectories(trajs):
    """处理轨迹数据
    
    Args:
        trajs (list[numpy.ndarray]): 轨迹列表,每个元素的形状为 :math:`([T], S^*)`
    
    Returns:
        numpy.ndarray: 处理后的轨迹,形状为 :math:`(N \bullet [T], S^*)`
    """

测试要求

garage采用严格的测试驱动开发:

  1. 新功能:必须包含单元测试
  2. Bug修复:必须添加重现Bug的测试用例
  3. 测试位置:所有测试放在garage/tests/目录下
  4. 命名规范:测试文件以test_开头

示例测试结构:

def test_sample_action():
    policy = MyPolicy()
    obs = np.zeros((10,))
    action = policy.sample_action(obs)
    assert action.shape == (5,)

Git工作流规范

garage采用线性提交历史,禁止合并提交:

基本准则

  1. 不要使用GitHub的"Update branch"按钮
  2. 不要使用git merge命令
  3. 不要直接在master分支上提交
  4. 定期将特性分支变基到最新master

常用操作示例

  1. 创建特性分支

    git checkout master
    git pull rlworkgroup master
    git checkout -b my-feature
    
  2. 变基更新分支

    git checkout my-feature
    git fetch rlworkgroup
    git rebase rlworkgroup/master
    
  3. 提交信息格式

    简要描述(50字符以内)
    
    详细说明(每行72字符)
    - 变更原因
    - 主要修改
    - 影响范围
    

代码审查流程

提交的PR需要满足以下条件才能被合并:

  1. 基于最新的master分支
  2. 通过所有CI测试
  3. 符合提交信息规范
  4. 获得至少一位贡献者的批准
  5. 获得维护者的批准

建议开发者在请求维护者审查前,先确保满足前3项条件,以提高审查效率。

总结

garage项目通过严格的代码规范和质量控制,确保框架的稳定性和可维护性。开发者在贡献代码时,应当:

  1. 遵循PEP8和项目特定规范
  2. 编写完整的文档和测试
  3. 使用正确的Git工作流
  4. 通过pre-commit检查
  5. 按照审查流程提交PR

这些实践不仅适用于garage项目,也是高质量开源项目开发的通用准则。掌握这些规范将有助于开发者更好地参与开源社区贡献。

garage A toolkit for reproducible reinforcement learning research. garage 项目地址: https://gitcode.com/gh_mirrors/ga/garage

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁景晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值