• Mayank Mittal's avatar
    Adds support for callable classes in manager terms (#104) · 16c740f5
    Mayank Mittal authored
    # Description
    
    This PR adds support for callable classes to the `term_cfg.func`
    attribute. This is needed for complex behaviors where users may want to
    define certain persistent behaviors as part of the terms.
    
    The callable class should take in the term configuration object and the
    environment instance as inputs to its constructor. Additionally, they
    should implement the `__call__` function with the signature expected by
    the manager.
    
    For example, in the case of observation terms, this looks like:
    
    ```python
    class complex_function_class:
        def __init__(self, cfg: ObservationTermCfg, env: object):
            self.cfg = cfg
            self.env = env
            # define some variables
            self.history_length = 2
            self._obs_history = torch.zeros(self.env.num_envs, self.history_length, 2, device=self.env.device)
    
        def __call__(self, env: object) -> torch.Tensor:
            new_obs = torch.rand(env.num_envs, 2, device=env.device)
            # update history
            self._obs_history[:, 1:] = self._obs_history[:, :1].clone()
            self._obs_history[:, 0] = new_obs
            # return obs
            return new_obs
    ```
    
    ## Type of change
    
    - New feature (non-breaking change which adds functionality)
    - This change requires a documentation update
    
    ## Checklist
    
    - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
    `./orbit.sh --format`
    - [ ] I have made corresponding changes to the documentation
    - [x] My changes generate no new warnings
    - [x] I have added tests that prove my fix is effective or that my
    feature works
    - [x] I have updated the changelog and the corresponding version in the
    extension's `config/extension.toml` file
    16c740f5
Name
Last commit
Last update
.github Loading commit data...
.vscode Loading commit data...
docker Loading commit data...
docs Loading commit data...
source Loading commit data...
.dockerignore Loading commit data...
.flake8 Loading commit data...
.gitignore Loading commit data...
.pre-commit-config.yaml Loading commit data...
LICENSE Loading commit data...
README.md Loading commit data...
VERSION Loading commit data...
orbit.sh Loading commit data...
pyproject.toml Loading commit data...