From 0bd27f72cbff37728e85917163ca07abd89a5e1d Mon Sep 17 00:00:00 2001 From: Sibo Wang Date: Fri, 21 Jun 2024 12:07:44 +0200 Subject: [PATCH 1/4] improve website formatting --- doc/source/tutorials/advanced_olfaction.rst | 18 ++++++++++-------- doc/source/tutorials/advanced_vision.rst | 18 ++++++++++-------- doc/source/tutorials/cpg_controller.rst | 18 ++++++++++-------- .../gym_basics_and_kinematic_replay.rst | 12 ++++-------- doc/source/tutorials/head_stabilization.rst | 17 +++++++++++------ doc/source/tutorials/hybrid_controller.rst | 18 ++++++++++-------- doc/source/tutorials/olfaction_basics.rst | 18 ++++++++++-------- doc/source/tutorials/path_integration.rst | 18 ++++++++++-------- doc/source/tutorials/rule_based_controller.rst | 18 ++++++++++-------- doc/source/tutorials/turning.rst | 18 ++++++++++-------- doc/source/tutorials/vision_basics.rst | 18 ++++++++++-------- setup.py | 2 +- 12 files changed, 106 insertions(+), 87 deletions(-) diff --git a/doc/source/tutorials/advanced_olfaction.rst b/doc/source/tutorials/advanced_olfaction.rst index 1fd3a32c..121665db 100644 --- a/doc/source/tutorials/advanced_olfaction.rst +++ b/doc/source/tutorials/advanced_olfaction.rst @@ -1,16 +1,18 @@ Advanced olfaction: Navigating a complex odor plume =================================================== -**Author:** Victor Alfred Stimpfling +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and -better structured implementation can be found in the `examples folder of -the FlyGym repository on -GitHub `__. + **Author:** Victor Alfred Stimpfling -**Notebook Format:** This tutorial is available in `.ipynb` format in the -`notebooks folder of the FlyGym repository `_. + The code presented in this notebook has been simplified and + restructured for display in a notebook format. A more complete and + better structured implementation can be found in the `examples folder of + the FlyGym repository on + GitHub `__. + + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary**: In this tutorial, we simulate a complex odor plume, replay the plume in MuJoCo, and build a simple controller to navigate it. diff --git a/doc/source/tutorials/advanced_vision.rst b/doc/source/tutorials/advanced_vision.rst index 79e25b09..a94f0dc1 100644 --- a/doc/source/tutorials/advanced_vision.rst +++ b/doc/source/tutorials/advanced_vision.rst @@ -1,16 +1,18 @@ Connectome-constrained visual system model ========================================== -**Authors:** Thomas Ka Chung Lam, Sibo Wang-Chen +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and -better structured implementation can be found in the `examples folder of -the FlyGym repository on -GitHub `__. + **Authors:** Thomas Ka Chung Lam, Sibo Wang-Chen -**Notebook Format:** This tutorial is available in `.ipynb` format in the -`notebooks folder of the FlyGym repository `_. + The code presented in this notebook has been simplified and + restructured for display in a notebook format. A more complete and + better structured implementation can be found in the `examples folder of + the FlyGym repository on + GitHub `__. + + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary**: In this tutorial, we will (1) simulate two flies in the same arena, and (2) integrate a connectome-constrained visual system diff --git a/doc/source/tutorials/cpg_controller.rst b/doc/source/tutorials/cpg_controller.rst index d541d6b5..47bb198f 100644 --- a/doc/source/tutorials/cpg_controller.rst +++ b/doc/source/tutorials/cpg_controller.rst @@ -1,16 +1,18 @@ Controlling locomotion with CPGs ================================ -**Authors:** Sibo Wang-Chen, Femke Hurtak +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and -better structured implementation can be found in the `examples folder of -the FlyGym repository on -GitHub `__. + **Authors:** Sibo Wang-Chen, Femke Hurtak -**Notebook Format:** This tutorial is available in `.ipynb` format in the -`notebooks folder of the FlyGym repository `_. + The code presented in this notebook has been simplified and + restructured for display in a notebook format. A more complete and + better structured implementation can be found in the `examples folder of + the FlyGym repository on + GitHub `__. + + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary:** In this tutorial, we will introduce the concept of Central Pattern Generators (CPGs) and build a CPG-based model to control walking diff --git a/doc/source/tutorials/gym_basics_and_kinematic_replay.rst b/doc/source/tutorials/gym_basics_and_kinematic_replay.rst index 45286ccb..4c8fa9ad 100644 --- a/doc/source/tutorials/gym_basics_and_kinematic_replay.rst +++ b/doc/source/tutorials/gym_basics_and_kinematic_replay.rst @@ -1,16 +1,12 @@ Interacting with NeuroMechFly ============================= -**Author:** Sibo Wang-Chen +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and -better structured implementation can be found in the `examples folder of -the FlyGym repository on -GitHub `__. + **Author:** Sibo Wang-Chen -**Notebook Format:** This tutorial is available in `.ipynb` format in the -`notebooks folder of the FlyGym repository `_. + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary:** In this tutorial, we will introduce the basic concepts of interacting with the simulated fly in a Markov Decision Process using diff --git a/doc/source/tutorials/head_stabilization.rst b/doc/source/tutorials/head_stabilization.rst index 33affeef..5681c77b 100644 --- a/doc/source/tutorials/head_stabilization.rst +++ b/doc/source/tutorials/head_stabilization.rst @@ -1,13 +1,18 @@ Head stabilization ================== -**Author:** Sibo Wang-Chen +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and -better structured implementation can be found in the `examples folder of -the FlyGym repository on -GitHub `__. + **Author:** Sibo Wang-Chen + + The code presented in this notebook has been simplified and + restructured for display in a notebook format. A more complete and + better structured implementation can be found in the `examples folder of + the FlyGym repository on + GitHub `__. + + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary:** In this tutorial, we will use mechanosensory information to correct for self motion in closed loop. We will train an internal model diff --git a/doc/source/tutorials/hybrid_controller.rst b/doc/source/tutorials/hybrid_controller.rst index 9516095d..bbb2fdca 100644 --- a/doc/source/tutorials/hybrid_controller.rst +++ b/doc/source/tutorials/hybrid_controller.rst @@ -1,16 +1,18 @@ Overcome complex terrain with a hybrid controller ================================================= -**Authors:** Victor Alfred Stimpfling, Sibo Wang-Chen +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and -better structured implementation can be found in the `examples folder of -the FlyGym repository on -GitHub `__. + **Authors:** Victor Alfred Stimpfling, Sibo Wang-Chen -**Notebook Format:** This tutorial is available in `.ipynb` format in the -`notebooks folder of the FlyGym repository `_. + The code presented in this notebook has been simplified and + restructured for display in a notebook format. A more complete and + better structured implementation can be found in the `examples folder of + the FlyGym repository on + GitHub `__. + + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary**: In this tutorial, we will illustrate how CPG- and rule-based controllers fail to produce robust locomotion over complex diff --git a/doc/source/tutorials/olfaction_basics.rst b/doc/source/tutorials/olfaction_basics.rst index 8f575487..904cca90 100644 --- a/doc/source/tutorials/olfaction_basics.rst +++ b/doc/source/tutorials/olfaction_basics.rst @@ -1,16 +1,18 @@ Olfaction basics ================ -**Author:** Sibo Wang-Chen +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and -better structured implementation can be found in the `examples folder of -the FlyGym repository on -GitHub `__. + **Author:** Sibo Wang-Chen -**Notebook Format:** This tutorial is available in `.ipynb` format in the -`notebooks folder of the FlyGym repository `_. + The code presented in this notebook has been simplified and + restructured for display in a notebook format. A more complete and + better structured implementation can be found in the `examples folder of + the FlyGym repository on + GitHub `__. + + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary:** In this tutorial, we will implement a simple controller for odor-guided taxis. diff --git a/doc/source/tutorials/path_integration.rst b/doc/source/tutorials/path_integration.rst index ceaca3d2..cb366724 100644 --- a/doc/source/tutorials/path_integration.rst +++ b/doc/source/tutorials/path_integration.rst @@ -1,16 +1,18 @@ Path integration ================ -**Author:** Sibo Wang-Chen +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and better -structured implementation can be found in the -`examples folder of the FlyGym repository on -GitHub `__. + **Author:** Sibo Wang-Chen -**Notebook Format:** This tutorial is available in `.ipynb` format in the -`notebooks folder of the FlyGym repository `_. + The code presented in this notebook has been simplified and + restructured for display in a notebook format. A more complete and better + structured implementation can be found in the + `examples folder of the FlyGym repository on + GitHub `__. + + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary:** In this tutorial, we will show how the position and heading of the animal can be estimated by integrating mechanosensory signals, a diff --git a/doc/source/tutorials/rule_based_controller.rst b/doc/source/tutorials/rule_based_controller.rst index 7374a2db..2517d3ca 100644 --- a/doc/source/tutorials/rule_based_controller.rst +++ b/doc/source/tutorials/rule_based_controller.rst @@ -1,16 +1,18 @@ Rule-based controller ===================== -**Authors:** Victor Alfred Stimpfling, Sibo Wang-Chen +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and -better structured implementation can be found in the `examples folder of -the FlyGym repository on -GitHub `__. + **Authors:** Victor Alfred Stimpfling, Sibo Wang-Chen -**Notebook Format:** This tutorial is available in `.ipynb` format in the -`notebooks folder of the FlyGym repository `_. + The code presented in this notebook has been simplified and + restructured for display in a notebook format. A more complete and + better structured implementation can be found in the `examples folder of + the FlyGym repository on + GitHub `__. + + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary:** In this tutorial, we will show how locomotion can be achieved using local coordination rules in the absence of centralized diff --git a/doc/source/tutorials/turning.rst b/doc/source/tutorials/turning.rst index a562be22..69873fbf 100644 --- a/doc/source/tutorials/turning.rst +++ b/doc/source/tutorials/turning.rst @@ -1,16 +1,18 @@ Encapsulating custom code into Gym environments: A turning controller ===================================================================== -**Authors:** Victor Alfred Stimpfling, Sibo Wang-Chen +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and -better structured implementation can be found in the `examples folder of -the FlyGym repository on -GitHub `__. + **Authors:** Victor Alfred Stimpfling, Sibo Wang-Chen -**Notebook Format:** This tutorial is available in `.ipynb` format in the -`notebooks folder of the FlyGym repository `_. + The code presented in this notebook has been simplified and + restructured for display in a notebook format. A more complete and + better structured implementation can be found in the `examples folder of + the FlyGym repository on + GitHub `__. + + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary:** In this tutorial, we will demonstrate how one can build controllers at different levels of abstraction by implementing Gym diff --git a/doc/source/tutorials/vision_basics.rst b/doc/source/tutorials/vision_basics.rst index 7256e40f..8bb905c2 100644 --- a/doc/source/tutorials/vision_basics.rst +++ b/doc/source/tutorials/vision_basics.rst @@ -1,16 +1,18 @@ Vision basics ============= -**Author:** Sibo Wang-Chen +.. note:: -**Note:** The code presented in this notebook has been simplified and -restructured for display in a notebook format. A more complete and -better structured implementation can be found in the `examples folder of -the FlyGym repository on -GitHub `__. + **Author:** Sibo Wang-Chen -**Notebook Format:** This tutorial is available in `.ipynb` format in the -`notebooks folder of the FlyGym repository `_. + The code presented in this notebook has been simplified and + restructured for display in a notebook format. A more complete and + better structured implementation can be found in the `examples folder of + the FlyGym repository on + GitHub `__. + + This tutorial is available in ``.ipynb`` format in the + `notebooks folder of the FlyGym repository `_. **Summary:** In this tutorial, we will build a simple model to control the fly to follow a moving sphere. By doing so, we will also demonstrate diff --git a/setup.py b/setup.py index a26ea1f0..ab58ec2d 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( name="flygym", - version="1.0.1-pre.1", + version="1.0.0", author="Neuroengineering Laboratory, EPFL", author_email="sibo.wang@epfl.ch", description="Gym environments for NeuroMechFly in various physics simulators", From f7a83cfc0685197327b620fea80b26ffbb471edc Mon Sep 17 00:00:00 2001 From: Sibo Wang Date: Fri, 21 Jun 2024 23:06:29 +0200 Subject: [PATCH 2/4] purge pip cache more often to avoid occasional hashing issue --- .github/workflows/documentation.yaml | 3 +++ .github/workflows/tests_full.yaml | 1 + .github/workflows/tests_macos.yaml | 1 + .github/workflows/tests_ubuntu22.yaml | 1 + .github/workflows/tests_windows.yaml | 1 + 5 files changed, 7 insertions(+) diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml index f861800b..fb4e3063 100644 --- a/.github/workflows/documentation.yaml +++ b/.github/workflows/documentation.yaml @@ -12,8 +12,11 @@ jobs: python-version: '3.12' - name: Install dependencies run: | + pip install --upgrade pip + pip cache purge pip install sphinxcontrib-googleanalytics pip install "flyvision @ https://github.com/Nely-EPFL/flyvis/archive/refs/heads/main.zip" + pip cache purge pip install -e ."[dev,examples]" pip install toolz - name: Sphinx build diff --git a/.github/workflows/tests_full.yaml b/.github/workflows/tests_full.yaml index 133a56bd..49bcb1f8 100644 --- a/.github/workflows/tests_full.yaml +++ b/.github/workflows/tests_full.yaml @@ -26,6 +26,7 @@ jobs: pip install --upgrade pip pip cache purge pip install "flyvision @ https://github.com/Nely-EPFL/flyvis/archive/refs/heads/main.zip" + pip cache purge pip install -e ".[dev,examples]" - name: Lint with ruff run: | diff --git a/.github/workflows/tests_macos.yaml b/.github/workflows/tests_macos.yaml index 6025f530..75d261a4 100644 --- a/.github/workflows/tests_macos.yaml +++ b/.github/workflows/tests_macos.yaml @@ -23,6 +23,7 @@ jobs: pip install --upgrade pip pip cache purge pip install "flyvision @ https://github.com/Nely-EPFL/flyvis/archive/refs/heads/main.zip" + pip cache purge pip install -e ".[dev,examples]" - name: Lint with ruff run: | diff --git a/.github/workflows/tests_ubuntu22.yaml b/.github/workflows/tests_ubuntu22.yaml index 9aff2b49..a5205eb1 100644 --- a/.github/workflows/tests_ubuntu22.yaml +++ b/.github/workflows/tests_ubuntu22.yaml @@ -26,6 +26,7 @@ jobs: pip install --upgrade pip pip cache purge pip install "flyvision @ https://github.com/Nely-EPFL/flyvis/archive/refs/heads/main.zip" + pip cache purge pip install -e ".[dev,examples]" - name: Lint with ruff run: | diff --git a/.github/workflows/tests_windows.yaml b/.github/workflows/tests_windows.yaml index 4c9dc4c5..6779ef61 100644 --- a/.github/workflows/tests_windows.yaml +++ b/.github/workflows/tests_windows.yaml @@ -22,6 +22,7 @@ jobs: pip install --upgrade pip pip cache purge pip install "flyvision @ https://github.com/nely-epfl/flyvis/archive/refs/heads/main.zip" + pip cache purge pip install -e .[dev,examples] - name: Lint with ruff run: | From 1322113468c8822f3c520d5309008e7ecbbd1e39 Mon Sep 17 00:00:00 2001 From: Sibo Wang Date: Sun, 23 Jun 2024 17:52:12 +0200 Subject: [PATCH 3/4] minor non-code updates --- doc/source/installation.rst | 42 +++++++++++++++--------- doc/source/tutorials/advanced_vision.rst | 8 ++--- notebooks/advanced_vision.ipynb | 2 +- 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/doc/source/installation.rst b/doc/source/installation.rst index f477b5f8..69185b11 100644 --- a/doc/source/installation.rst +++ b/doc/source/installation.rst @@ -2,6 +2,9 @@ Installation ============ +FlyGym can be installed as a regular Python package via `PyPI `_ or as a developer installation from the source code. In addition, we provide a Docker image with FlyGym and its dependencies pre-installed. Below, we provide instructions for each of these methods. + + Installation via PyPI --------------------- The easiest way to install FlyGym is via PyPI. Before you start, you might want to create a Python virtual environment with virtualenv or Conda. For example, with Conda: @@ -11,32 +14,39 @@ The easiest way to install FlyGym is via PyPI. Before you start, you might want conda create -n flygym python=3.12 # flygym is tested on Python 3.9-3.12 conda activate flygym # run this every time you use the environment -(Optional) If you would like to interface FlyGym with the `connectome-constrained vision model `_ from `Lappalainen et al. (2023) `_, you need to install the FlyVision package separately. Since FlyVision is not published on the Python Package Index (PyPI), you must either install it manually following `its installation instructions `_, or install it with ``pip`` from our fork on GitHub: +Then, to install the FlyGym package: .. code-block:: bash - pip install "flyvision @ https://github.com/Nely-EPFL/flyvis/archive/refs/heads/main.zip" + pip install "flygym" -(Required) Then, to install the FlyGym package: +.. warning:: + + **Headless machines**: If you want to run FlyGym on a machine without a display (e.g. a server or a node on a cluster), please check the special instructions at the bottom of this page. -.. code-block:: bash +.. note:: - # if you only want the basic package: - pip install "flygym" + **(Optional) Additional dependencies for provided tutorials and examples:** A number of additional dependencies are required to run the provided `tutorials `_ and `examples `_. To install these dependencies, you can run the following command: - # to install additional dependencies required to run the provided examples: - pip install "flygym[examples]" + .. code-block:: bash - # to install dev tools such as pytest (automated testing) and sphinx (docs building): - pip install "flygym[dev]" - - # to install everything: - pip install "flygym[examples,dev]" + pip install "flygym[examples]" + The tutorial and example on interfacing FlyGym with the `connectome-constrained vision model `_ from `Lappalainen et al. (2023) `_ further requires the FlyVision package, which is not published on the Python Package Index (PyPI). As a result, the command above does not install FlyVision. Instead, you must either install it manually following `its installation instructions `_, or install it with ``pip`` from our fork on GitHub: + + .. code-block:: bash + + pip install "flyvision @ https://github.com/Nely-EPFL/flyvis/archive/refs/heads/main.zip" + +.. Note:: + + **(Optional) Additional tools for developers:** Developers of FlyGym use a number of other tools for automated documentation generation, testing, and code linting. These tools are not required to use FlyGym as it is, but can be useful if you wish to modify the code or contribute to the project. To install these tools, you can run: + + .. code-block:: bash -Please note that the ``pip`` installation does not easily allow the user to modify the source code. If you want to modify the source code, please follow the instructions below for developer installation. + pip install "flygym[dev]" -If you want to run FlyGym on a machine without a display (e.g. a server or a node on a cluster), please check the special instructions at the bottom of this page. + Note, however, that ``pip`` installation does not easily allow the user to modify the source code. If you want to modify the source code, please follow the instructions below for developer installation. Developer installation @@ -142,7 +152,7 @@ Docker image `"Containerization" `_ is a way of virtualization that aims to bundle an application and its dependencies into a single portable, executable unit called a *container*. `Docker `_ is a popular platform for developing, shipping, and running containers, making it easier to manage and deploy applications in a consistent manner. -Instead of installing FlyGym on your machine directly, you can also install Docker on your machine and run FlyGym through Docker. This might be particularly helpful if you are using container-as-a-service (CaaS) systems such as Kubernetes to train or deploy models at scale. We provide a Docker image with FlyGym and its dependencies pre-installed and publish it to `Docker Hub `_. This image is defined by the `Dockerfile `_ at the root level of the directory. +Instead of installing FlyGym on your machine directly, you can also install Docker on your machine and run FlyGym through Docker. This might be particularly helpful if you are using container-as-a-service (CaaS) systems such as Kubernetes to train or deploy models at scale. We provide a Docker image with FlyGym and its dependencies pre-installed and publish it to `Docker Hub `_. This image is defined by the `Dockerfile `_ at the root level of the directory. For more information about how to interact with Docker, please refer to the `official Docker guides `_. Note that you need to `install NVIDIA Container Toolkit `_ if you would like to use an NVIDIA GPU from the container. diff --git a/doc/source/tutorials/advanced_vision.rst b/doc/source/tutorials/advanced_vision.rst index a94f0dc1..d9ab137f 100644 --- a/doc/source/tutorials/advanced_vision.rst +++ b/doc/source/tutorials/advanced_vision.rst @@ -42,10 +42,10 @@ To overcome this limitation, we can implement the core logic of the hybrid turning controller at the level of the Fly instead (see `API reference `__). Because we can have multiple Fly objects in the same Simulation, this -approach allows us to separately control multiple “``HybridTurningFly``” -instance. Let’s spawn two flies, a target fly and an observer fly that -looks at the target fly perpendicular to the target fly’s heading -direction: +approach allows us to separately control multiple ``HybridTurningFly`` +instances. Let’s spawn two flies: a target fly that walks forward and an +observer fly that observes the target fly perpendicular to the target fly's +direction of movement. .. code:: ipython3 diff --git a/notebooks/advanced_vision.ipynb b/notebooks/advanced_vision.ipynb index b1ff67d5..8e4587b2 100644 --- a/notebooks/advanced_vision.ipynb +++ b/notebooks/advanced_vision.ipynb @@ -21,7 +21,7 @@ "\n", "In the previous tutorial, we have used `HybridTurningController` to control the walking fly at a high level of abstraction — instead of specifying joint movements, we provide a 2D descending drive and rely on the underlying CPG network and sensory feedback-based correction mechanism to compute the appropriate joint actions. Details of this controller was covered in [this tutorial](https://neuromechfly.org/tutorials/turning.html). One limitation of this design decision is that the controller is implemented at the level of the Simulation (recall that `HybridTurningController` extends the `Simulation` class). Therefore, it is difficult to model multiple flies, each driven by a hybrid turning controller, in a single simulation.\n", "\n", - "To overcome this limitation, we can implement the core logic of the hybrid turning controller at the level of the Fly instead (see [API reference](https://neuromechfly.org/api_ref/examples/locomotion.html#hybrid-turning-fly)). Because we can have multiple Fly objects in the same Simulation, this approach allows us to separately control multiple \"`HybridTurningFly`\" instance. Let's spawn two flies, a target fly and an observer fly that looks at the target fly perpendicular to the target fly's heading direction:" + "To overcome this limitation, we can implement the core logic of the hybrid turning controller at the level of the Fly instead (see [API reference](https://neuromechfly.org/api_ref/examples/locomotion.html#hybrid-turning-fly)). Because we can have multiple Fly objects in the same Simulation, this approach allows us to separately control multiple `HybridTurningFly` instances. Let's spawn two flies: a target fly that walks forward and an observer fly that observes the target fly perpendicular to the target fly's direction of movement." ] }, { From c42df4ff17822c92503b45daf1e08543e06173d5 Mon Sep 17 00:00:00 2001 From: Sibo Wang Date: Sun, 23 Jun 2024 17:55:38 +0200 Subject: [PATCH 4/4] minor update --- doc/source/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/installation.rst b/doc/source/installation.rst index 69185b11..fd8baaa2 100644 --- a/doc/source/installation.rst +++ b/doc/source/installation.rst @@ -20,7 +20,7 @@ Then, to install the FlyGym package: pip install "flygym" -.. warning:: +.. important:: **Headless machines**: If you want to run FlyGym on a machine without a display (e.g. a server or a node on a cluster), please check the special instructions at the bottom of this page.