Fancy Gym
=========

.. raw:: html

   <div style="text-align: center;">
      <img src="_static/imgs/fancy_namelogo.svg" style="margin: 5%; width: 80%;"></a>
   </div>
    <style>
       /* Little Hack: We don't want to show the title (ugly), but need to define it since it also sets the pages metadata (for titlebar and stuff) */
        h1 {
            display: none;
        }
    </style>


Built upon the foundation of
`Gymnasium <https://gymnasium.farama.org/>`__ (a maintained fork of
OpenAI’s renowned Gym library) ``fancy_gym`` offers a comprehensive
collection of reinforcement learning environments.

Key Features
------------

 - **New Challenging Environments**: ``fancy_gym`` includes several new
   environments (`Panda Box Pushing <envs/fancy/mujoco.html#box-pushing>`_,
   `Table Tennis <envs/fancy/mujoco.html#table-tennis>`_,
   `etc. <envs/fancy/index.html>`_) that present a higher degree of
   difficulty, pushing the boundaries of reinforcement learning research.
 - **Support for Movement Primitives**: ``fancy_gym`` supports a range
   of movement primitives (MPs), including Dynamic Movement Primitives
   (DMPs), Probabilistic Movement Primitives (ProMP), and Probabilistic
   Dynamic Movement Primitives (ProDMP).
 - **Upgrade to Movement Primitives**: With our framework, it’s
   straightforward to transform standard Gymnasium environments into
   environments that support movement primitives.
 - **Benchmark Suite Compatibility**: ``fancy_gym`` makes it easy to
   access renowned benchmark suites such as `DeepMind
   Control <envs/dmc.html>`__
   and `Metaworld <envs/meta.html>`__, whether you want
   to use them in the regular step-based setting or using MPs.
 - **Contribute Your Own Environments**: If you’re inspired to create
   custom gym environments, both step-based and with movement
   primitives, this
   `guide <guide/upgrading_envs.html>`__
   will assist you. We encourage and highly appreciate submissions via
   PRs to integrate these environments into ``fancy_gym``.

Quickstart Guide
----------------

Install via pip (`or use an alternative installation method <guide/installation.html>`__)

.. code:: bash

   pip install 'fancy_gym[all]'


Try out one of our step-based environments (`or explore our other envs <envs/fancy/index.html>`__)

.. code:: python

   import gymnasium as gym
   import fancy_gym
   import time

   env = gym.make('fancy/BoxPushingDense-v0', render_mode='human')
   observation = env.reset()
   env.render()

   for i in range(1000):
      action = env.action_space.sample() # Randomly sample an action
      observation, reward, terminated, truncated, info = env.step(action)
      time.sleep(1/env.metadata['render_fps'])

      if terminated or truncated:
            observation, info = env.reset()


Explore the MP-based variant (`or learn more about Movement Primitives (MPs) <guide/episodic_rl.html>`__)

.. code:: python

   import gymnasium as gym
   import fancy_gym

   env = gym.make('fancy_ProMP/BoxPushingDense-v0', render_mode='human')
   env.reset()
   env.render()
   
   for i in range(10):
      action = env.action_space.sample() # Randomly sample MP parameters
      observation, reward, terminated, truncated, info = env.step(action) # Will execute full trajectory, based on MP
      observation = env.reset()


.. toctree::
   :maxdepth: 3
   :caption: User Guide

   guide/installation
   guide/episodic_rl
   guide/basic_usage
   guide/upgrading_envs

.. toctree::
   :maxdepth: 3
   :caption: Environments

   envs/fancy/index
   envs/dmc
   envs/meta
   envs/open_ai

.. toctree::
   :maxdepth: 3
   :caption: Examples

   examples/general
   examples/dmc
   examples/metaworld
   examples/open_ai
   examples/movement_primitives
   examples/mp_params_tuning
   examples/pd_control_gain_tuning
   examples/replanning_envs

.. toctree::
   :maxdepth: 3
   :caption: API

   api

Citing the Project
------------------

To cite `fancy_gym` in publications:

.. code:: bibtex

   @software{fancy_gym,
       title = {Fancy Gym},
       author = {Otto, Fabian and Celik, Onur and Roth, Dominik and Zhou, Hongyi},
       abstract = {Fancy Gym: Unifying interface for various RL benchmarks with support for Black Box approaches.},
       url = {https://github.com/ALRhub/fancy_gym},
       organization = {Autonomous Learning Robots Lab (ALR) at KIT},
   }

Icon Attribution
----------------

The icon is based on the
`Gymnasium <https://github.com/Farama-Foundation/Gymnasium>`__ icon as
can be found
`here <https://gymnasium.farama.org/_static/img/gymnasium_black.svg>`__.

=================

.. raw:: html

   <div style="text-align: center; background: #f8f8f8; border-radius: 10px;">
      <a href="https://alr.iar.kit.edu/"><img src="_static/imgs/alr.svg" style="margin: 5%; width: 20%;"></a>
      <a href="https://www.kit.edu/"><img src="_static/imgs/kit.svg" style="margin: 5%; width: 20%;"></a>
      <a href="https://uni-tuebingen.de/"><img src="_static/imgs/uni_tuebingen.svg" style="margin: 5%; width: 20%;"></a>
   </div>
   <br>