diff --git a/doc/htmldoc/connect_nest/nest_server.rst b/doc/htmldoc/connect_nest/nest_server.rst
index 680521ae89..45f4782222 100644
--- a/doc/htmldoc/connect_nest/nest_server.rst
+++ b/doc/htmldoc/connect_nest/nest_server.rst
@@ -6,30 +6,20 @@ NEST Server
What is NEST Server?
--------------------
-NEST Server enables users to interact with the NEST simulation engine
-via a RESTful API. Using this approach, you can perform the same basic
-operations as with :ref:`PyNEST `, but
-instead of doing so by directly importing the ``nest`` module, all
-commands, including their arguments and result data, are channeled
-through HTTP requests and responses over a TCP/IP connection.
-
-The main advantage of using NEST in this way is that it decouples the
-*simulation backend* in the form of the NEST simulation kernel from the
-*frontend*, i.e., the code that controls the simulation. In such a
-scenario, only the backend (the *server*) depends on NEST, while the
-frontend could really be anything that can talk HTTP. Under the hood,
-NEST Server forwards the commands it receives to PyNEST, and sends
-back the result data in response packets.
-
-NEST Server was initially developed as a backend for :doc:`NEST Desktop
-`, a web-based graphical
-frontend for NEST. With growing interest in a more general server
-backend for NEST, the functionality of the original NEST Server was
-extended to accommodate for this broader range of application.
-Starting with NEST 3.0, the NEST Server was integrated into the main
-source code repository of NEST to make it available to everyone in a
-convenient way.
+NEST Server enables users to interact with the NEST simulation engine via a RESTful API. Using this approach, you can
+perform the same basic operations as with :ref:`PyNEST `, but instead of doing so by directly importing the
+``nest`` module, all commands, including their arguments and result data, are channeled through HTTP requests and
+responses over a TCP/IP connection.
+The main advantage of using NEST in this way is that it decouples the *simulation backend* in the form of the NEST
+simulation kernel from the *frontend*, i.e., the code that controls the simulation. In such a scenario, only the backend
+(the *server*) depends on NEST, while the frontend could really be anything that can talk HTTP. Under the hood, NEST
+Server forwards the commands it receives to PyNEST, and sends back the result data in response packets.
+
+NEST Server was initially developed as a backend for :doc:`NEST Desktop `, a web-based graphical frontend
+for NEST. With growing interest in a more general server backend for NEST, the functionality of the original NEST Server
+was extended to accommodate for this broader range of application. Starting with NEST 3.0, the NEST Server was
+integrated into the main source code repository of NEST to make it available to everyone in a convenient way.
Use cases for NEST Server
-------------------------
@@ -39,99 +29,90 @@ Use cases for NEST Server
:alt: NEST Server concept
:width: 240px
-NEST Server can be considered a language independent interface to NEST
-that can be deployed either locally or on a remote machine. To give
-you a better idea of what NEST Server is good for, here are some of
-its main use cases.
-
-One scenario in which NEST Server comes in handy, is if you want to
-work on your laptop, but run your NEST simulations on a machine with
-higher performance or more memory, for instance, a big workstation or
-computer cluster at your lab. For this, you would deploy NEST Server
-on the remote machine, and use the :ref:`NEST Client `
-locally or write your own client using one of the recipes provided in
-the :ref:`section on advanced applications `.
-
-:doc:`NEST Desktop `, the web-based
-graphical user interface for NEST, uses NEST Server as its simulation
-backend. It supports server instances running either locally or
-remotely. More details about how to configure and run this setup can
-be found in the documentation of NEST Desktop.
-
-Last but not least, the latest version of the `HBP Neurorobotic
-Platform `_ use the NEST Server to run the
-neuronal simulation as part of closed-loop robotic experiments. As it
-has rather specific requirements on the client side, it uses a custom
-client for the NEST Server instead of the generic one shipped with NEST.
-
-If you yourself have an interesting situation in which you use NEST
-Server and would like to have it listed here, feel free to `drop us a
-line `_.
+NEST Server can be considered a language independent interface to NEST that can be deployed either locally or on a
+remote machine. To give you a better idea of what NEST Server is good for, here are some of its main use cases.
+
+One scenario in which NEST Server comes in handy, is if you want to work on your laptop, but run your NEST simulations
+on a machine with higher performance or more memory, for instance, a big workstation or computer cluster at your lab.
+For this, you would deploy NEST Server on the remote machine, and use the :ref:`NEST Client ` locally or
+write your own client using one of the recipes provided in the :ref:`section on advanced applications
+`.
+
+:doc:`NEST Desktop `, the web-based graphical user interface for NEST, uses NEST Server as its simulation
+backend. It supports server instances running either locally or remotely. More details about how to configure and run
+this setup can be found in the documentation of NEST Desktop.
+
+Last but not least, the latest version of the `HBP Neurorobotic Platform `_ use the NEST
+Server to run the neuronal simulation as part of closed-loop robotic experiments. As it has rather specific requirements
+on the client side, it uses a custom client for the NEST Server instead of the generic one shipped with NEST.
+
+If you yourself have an interesting situation in which you use NEST Server and would like to have it listed here, feel
+free to `drop us a line `_.
Install and run NEST Server
---------------------------
-NEST Server is included in all source code distributions of NEST and
-consequently, also available in derived packages, our virtual
-machine, and Docker images.
+NEST Server is included in all source code distributions of NEST and consequently, also available in derived packages,
+our virtual machine, and Docker images.
-For native installations, the requirements can be simply installed via
-``pip``::
+For native installations, the requirements can be simply installed via ``pip``::
pip3 install Flask Flask-Cors gunicorn RestrictedPython
-or by installing the full NEST development environment in case you
-prefer using ``conda``::
+or by installing the full NEST development environment in case you prefer using ``conda``::
cd
conda env create -p conda/
conda activate conda/
-As an alternative to a native installation, NEST Server is available
-from the NEST Docker image. Please check out the corresponding
-:ref:`installation instructions ` for more details.
+As an alternative to a native installation, NEST Server is available from the NEST Docker image. Please check out the
+corresponding :ref:`installation instructions ` for more details.
.. _sec_server_vars:
Set environment variables for security options
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-NEST Server comes with a number of access restrictions that are meant to protect your
-computer. After careful consideration, each of the restrictions can be disabled by setting
-a corresponding environment variable.
-
-* ``NEST_SERVER_DISABLE_AUTH``: By default, the NEST Server requires a NESTServerAuth tokens. Setting this variable to ``1`` disables this restriction. A token is automatically created and printed to the console by NEST Server upon start-up. If needed, a custom token can be set using the environment variable ``NEST_SERVER_ACCESS_TOKEN``
-* ``NEST_SERVER_CORS_ORIGINS``: By default, the NEST Server only allows requests from localhost (see `CORS `_). Other hosts can be explicitly allowed by supplying them in the form `http://host_or_ip`` to this variable.
-* ``NEST_SERVER_ENABLE_EXEC_CALL``: By default, NEST Server only allows calls to its PyNEST-like API. If the use-case requires the execution of scripts via the ``/exec`` route, this variable can be set to ``1``. PLEASE BE AWARE THAT THIS OPENS YOUR COMPUTER TO REMOTE CODE EXECUTION.
-* ``NEST_SERVER_DISABLE_RESTRICTION``: By default, NEST Server runs all code passed to the ``/exec`` route through RestrictedPython to sanitize it. To disable this mechanism, this variable can be set to ``1``. For increased security, code passed in this way only allows explictly whitelisted modules to be imported. To import modules, the variable ``NEST_SERVER_MODULES`` can be set to a standard Python import line like this:
+NEST Server comes with a number of access restrictions that are meant to protect your computer. After careful
+consideration, each of the restrictions can be disabled by setting a corresponding environment variable.
+
+* ``NEST_SERVER_DISABLE_AUTH``: By default, the NEST Server requires a NESTServerAuth tokens. Setting this variable to
+ ``1`` disables this restriction. A token is automatically created and printed to the console by NEST Server upon
+ start-up. If needed, a custom token can be set using the environment variable ``NEST_SERVER_ACCESS_TOKEN``
+* ``NEST_SERVER_CORS_ORIGINS``: By default, the NEST Server only allows requests from localhost (see `CORS
+ `_). Other hosts can be explicitly allowed by supplying them
+ in the form `http://host_or_ip:*`` to this variable (By default: http://localhost:*).
+* ``NEST_SERVER_ENABLE_EXEC_CALL``: By default, NEST Server only allows calls to its PyNEST-like API. If the use-case
+ requires the execution of scripts via the ``/exec`` route, this variable can be set to ``1``. PLEASE BE AWARE THAT
+ THIS OPENS YOUR COMPUTER TO REMOTE CODE EXECUTION.
+* ``NEST_SERVER_DISABLE_RESTRICTION``: By default, NEST Server runs all code passed to the ``/exec`` route through
+ RestrictedPython to sanitize it. To disable this mechanism, this variable can be set to ``1``.
+* ``NEST_SERVER_MODULES``: For increased security, code passed in this way only allows explictly whitelisted modules to
+ be imported. To import modules, the variable can be set to a standard Python import line like this:
``NEST_SERVER_MODULES='import nest; import scipy as sp; from numpy import random'``
Run NEST Server
~~~~~~~~~~~~~~~
-All NEST Server operations are managed using the ``nest-server``
-command that can either be run directly:
+All NEST Server operations are managed using the ``nest-server`` command that can either be run directly:
.. code-block:: text
nest-server start
-or supplied to the execution command line for running the Docker
-container:
+or supplied to the execution command line for running the Docker container:
.. code-block:: text
docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -p 52425:52425 nest/nest-simulator:dev nest-server start
-The generic invocation command line for the ``nest-server`` command
-looks as follows:
+The generic invocation command line for the ``nest-server`` command looks as follows:
.. code-block:: text
nest-server [-d] [-h ] [-o] [-p ]
-Possible commands are ``start``, ``stop``, ``status``, or ``log``. The meaning
-of the other arguments is as follows:
+Possible commands are ``start``, ``stop``, ``status``, or ``log``. The meaning of the other arguments is as follows:
-d
Run NEST Server in the background (i.e., daemonize it)
@@ -145,56 +126,43 @@ of the other arguments is as follows:
Run with MPI
~~~~~~~~~~~~
-If NEST was compiled with support for :ref:`distributed computing via
-MPI `, it will usually execute the exact same
-simulation script on each of the :hxt_ref:`MPI` processes. With NEST Server, this
-would normally mean that one NEST Server instance would be spawned for
-each rank in a multi-process NEST simulation. To prevent this from
-happening, we provide a special version of the NEST Server command for
-use with MPI. It can be run as follows:
+If NEST was compiled with support for :ref:`distributed computing via MPI `, it will usually
+execute the exact same simulation script on each of the :hxt_ref:`MPI` processes. With NEST Server, this would normally
+mean that one NEST Server instance would be spawned for each rank in a multi-process NEST simulation. To prevent this
+from happening, we provide a special version of the NEST Server command for use with MPI. It can be run as follows:
.. code-block:: text
mpirun -np N nest-server-mpi [--host HOST] [--port PORT]
-If run like this, the RESTful API of the NEST Server will only be
-served by the :hxt_ref:`MPI` process with rank 0 (called the `master`), while all
-other N-1 ranks will start the NEST Server in `worker` mode. Upon
-receiving a request, the master relays all commands to the workers,
-which execute them, collect all result data, and send it back to the
-master. The master then receives and combines all worker responses,
-and replies to the caller of the NEST Server API.
+If run like this, the RESTful API of the NEST Server will only be served by the :hxt_ref:`MPI` process with rank 0
+(called the `master`), while all other N-1 ranks will start the NEST Server in `worker` mode. Upon receiving a request,
+the master relays all commands to the workers, which execute them, collect all result data, and send it back to the
+master. The master then receives and combines all worker responses, and replies to the caller of the NEST Server API.
-The response data in such a distributed scenario looks almost
-completely the same as one coming from the serial version of the NEST
-Server. The only difference may be that information pertaining to
-process-local data structures is being replaced by generic values.
+The response data in such a distributed scenario looks almost completely the same as one coming from the serial version
+of the NEST Server. The only difference may be that information pertaining to process-local data structures is being
+replaced by generic values.
.. _nest_client:
The NEST Client
---------------
-The easiest way to interact with the NEST Server is the `NEST Client`
-provided in ``_. It can be used
-either by directly starting a Python session in a clone of that
-repository, or by installing it by running ``python3 setup.py
-install`` therein. NEST itself does not have to be installed in order
-to use the NEST Client.
+The easiest way to interact with the NEST Server is the `NEST Client` provided in
+``_. It can be used either by directly starting a Python session in a clone of
+that repository, or by installing it by running ``python3 setup.py install`` therein. NEST itself does not have to be
+installed in order to use the NEST Client.
-Using a dynamic function mapping mechanism, the NEST Client supports
-the same functions as PyNEST does. However, instead of directly
-executing calls in NEST, it forwards them together with their
-arguments to the NEST Server, which in turn executes them. To you as a
-user, everything looks much like a typical simulation code for NEST
-Simulator.
+Using a dynamic function mapping mechanism, the NEST Client supports the same functions as PyNEST does. However, instead
+of directly executing calls in NEST, it forwards them together with their arguments to the NEST Server, which in turn
+executes them. To you as a user, everything looks much like a typical simulation code for NEST Simulator.
Basic usage
~~~~~~~~~~~
-To give you an idea of the usage, the following table shows a
-comparison of a typical simulation once for PyNEST and once using the
-NEST Client.
+To give you an idea of the usage, the following table shows a comparison of a typical simulation once for PyNEST and
+once using the NEST Client.
.. list-table::
@@ -252,11 +220,9 @@ NEST Client.
Run scripts
~~~~~~~~~~~
-The NEST Client is able to send complete simulation scripts to
-the NEST Server using the functions ``exec_script`` and ``from_file``.
-The following listing shows a Python snippet using the NEST Server
-Client to execute a simple script on the Server using the
-``exec_script`` function:
+The NEST Client is able to send complete simulation scripts to the NEST Server using the functions ``exec_script`` and
+``from_file``. The following listing shows a Python snippet using the NEST Server Client to execute a simple script on
+the Server using the ``exec_script`` function:
.. code-block:: Python
@@ -272,10 +238,8 @@ Client to execute a simple script on the Server using the
models = response['data']
print(models) # the list of models
-In a more realistic scenario, you probably already have your
-simulation script stored in a file. Such scripts can be sent to the
-NEST Server for execution using the ``from_file`` function provided by
-the NEST Client.
+In a more realistic scenario, you probably already have your simulation script stored in a file. Such scripts can be
+sent to the NEST Server for execution using the ``from_file`` function provided by the NEST Client.
.. code-block:: Python
@@ -289,10 +253,9 @@ the NEST Client.
.. note::
- By default, the NEST Server only imports the PyNEST module during
- startup for security reasons. In case you require additional
- Python modules for your simulation script, please see the section
- on :ref:`security and modules ` below.
+ By default, the NEST Server only imports the PyNEST module during startup for security reasons. In case you require
+ additional Python modules for your simulation script, please see the section on :ref:`security and modules
+ ` below.
NEST Client API
@@ -304,18 +267,17 @@ NEST Client API
.. py:method:: NESTClient.(*args, **kwargs)
- Execute a PyNEST function ```` on the NEST Server; the
- arguments ``args`` and ``kwargs`` will be forwarded to the function
+ Execute a PyNEST function ```` on the NEST Server; the arguments ``args`` and ``kwargs`` will be forwarded to
+ the function
.. py:method:: NESTClient.exec_script(source, return_vars=None)
- Execute a Python script on the NEST Server; the script has to be
- given as a string in the ``source`` argument
+ Execute a Python script on the NEST Server; the script has to be given as a string in the ``source`` argument
.. py:method:: NESTClient.from_file(filename, return_vars=None)
- Execute a Python script on the NEST Server; the argument
- ``filename`` is the name of the file in which the script is stored
+ Execute a Python script on the NEST Server; the argument ``filename`` is the name of the file in which the script is
+ stored
REST API overview
-----------------
@@ -345,9 +307,8 @@ REST API overview
Low-level API usage
~~~~~~~~~~~~~~~~~~~
-The preferred command line tool for interacting with NEST Server using
-a terminal is ``curl``. For more information, please visit the `curl
-website `_.
+The preferred command line tool for interacting with NEST Server using a terminal is ``curl``. For more information,
+please visit the `curl website `_.
To obtain basic information about the running server, run:
@@ -381,27 +342,22 @@ Send API request with function arguments in JSON format:
.. note::
- You can beautify the output of NEST Server by piping the output of
- ``curl`` through the JSON processor ``jq``. A sample command line
- to display the available functions in this way looks like this::
+ You can beautify the output of NEST Server by piping the output of ``curl`` through the JSON processor ``jq``. A
+ sample command line to display the available functions in this way looks like this::
curl -s localhost:52425/api | jq -r .
- For more information, check the `documentation on jq
- `_.
+ For more information, check the `documentation on jq `_.
API access from Python
~~~~~~~~~~~~~~~~~~~~~~
-If you prefer Python over ``curl``, you can use the ``requests`` module,
-which provides a convenient API for communicating with RESTful APIs.
-On most systems this is already installed or can be easily installed
-using ``pip``. Extensive documentation is available on the pages about
-`HTTP for Humans `_.
+If you prefer Python over ``curl``, you can use the ``requests`` module, which provides a convenient API for
+communicating with RESTful APIs. On most systems this is already installed or can be easily installed using ``pip``.
+Extensive documentation is available on the pages about `HTTP for Humans `_.
-Sending a simple request to the NEST Server using Python works as
-follows:
+Sending a simple request to the NEST Server using Python works as follows:
.. code-block::
@@ -430,28 +386,22 @@ Create neurons in NEST and return a list of IDs for the new nodes::
Security considerations
-----------------------
-As explained above, the ``/exec`` route of the NEST Server API allows
-you to run custom Python scripts within the NEST Server context. This
-can greatly simplify your workflow in situations where you already
-have the simulation description in the form of a Python script. On the
-technical side, however, this route exposes a potential risk
-for the remote execution of malicious code.
-
-In order to protect the execution environment from such security
-breaches, we execute all user supplied code in a `RestrictedPython
-`_ trusted
-environment. Consequently, this environment blocks
-your scripts from importing additional Python modules, unless
-they are explicitly safelisted during the start-up of NEST Server.
-
-To mark modules as safe for execution within NEST Server and make them
-available to code from user supplied scripts that run through the ``/exec``
-route, a comma separated list of Python module names can be assigned
-to the environment variable ``NEST_SERVER_MODULES`` prior to starting
-the NEST Server.
-
-For instance, if your script requires NumPy in addition to PyNEST, the
-command line for starting up the server would look like this:
+As explained above, the ``/exec`` route of the NEST Server API allows you to run custom Python scripts within the NEST
+Server context. This can greatly simplify your workflow in situations where you already have the simulation description
+in the form of a Python script. On the technical side, however, this route exposes a potential risk for the remote
+execution of malicious code.
+
+In order to protect the execution environment from such security breaches, we execute all user supplied code in a
+`RestrictedPython `_ trusted environment. Consequently, this
+environment blocks your scripts from importing additional Python modules, unless they are explicitly safelisted during
+the start-up of NEST Server.
+
+To mark modules as safe for execution within NEST Server and make them available to code from user supplied scripts that
+run through the ``/exec`` route, a comma separated list of Python module names can be assigned to the environment
+variable ``NEST_SERVER_MODULES`` prior to starting the NEST Server.
+
+For instance, if your script requires NumPy in addition to PyNEST, the command line for starting up the server would
+look like this:
.. code-block:: sh
@@ -469,23 +419,20 @@ After this, NumPy can be used from within scripts in the regular way:
.. danger::
- Each modification to the default security settings of NEST Server
- should be carefully evaluated on a case-by-case basis.
+ Each modification to the default security settings of NEST Server should be carefully evaluated on a case-by-case
+ basis.
- We are aware that some simulation code might not work (well) in a
- RestrictedPython environment. To support such codes, the security
- features of NEST Server can be completely disabled by starting it
- in the following way:
+ We are aware that some simulation code might not work (well) in a RestrictedPython environment. To support such
+ codes, the security features of NEST Server can be completely disabled by starting it in the following way:
.. code-block:: sh
export NEST_SERVER_RESTRICTION_OFF=true
nest-server start
- Please be aware that running NEST Server like this bears a high
- risk of arbitrary remote code execution, and this mode of operation
- should only be used in exceptional cases. We cannot provide
- any support for problems arising from such a use of NEST Server.
+ Please be aware that running NEST Server like this bears a high risk of arbitrary remote code execution, and this
+ mode of operation should only be used in exceptional cases. We cannot provide any support for problems arising from
+ such a use of NEST Server.
.. _nest_server_advanced:
@@ -495,22 +442,35 @@ Advanced topics
Run scripts in NEST Server using `curl`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-As shown above, you can send custom simulation code to
-``localhost:52425/exec``. On the command line, this approach might be a
-bit more challenging in the case your script does not fit on a single
-line. For such situations, we recommend using a JSON file as input for
-``curl``:
+As shown above, you can send custom simulation code to ``localhost:52425/exec``. On the command line, this approach
+might be a bit more challenging in the case your script does not fit on a single line. For such situations, we recommend
+using a JSON file as input for ``curl``:
.. code-block:: json
{
- "source": "import nest\n# Reset kernel\nnest.ResetKernel()\n# Create nodes\nparams = {'rate': 6500.}\npg = nest.Create('poisson_generator', 1, params)\nneurons = nest.Create('iaf_psc_alpha', 1000)\nsr = nest.Create('spike_recorder')\n# Connect nodes\nnest.Connect(pg, neurons, syn_spec={'weight': 10.})\nnest.Connect(neurons[::10], sr)\n# Simulate\nnest.Simulate(1000.0)\n# Get events\nn_events = nest.GetStatus(sr, 'n_events')[0]\nprint('Number of events:', n_events)\n",
+ "source": "
+ import nest\n
+ # Reset kernel\n
+ nest.ResetKernel()\n
+ # Create nodes\nparams = {'rate': 6500.}\n
+ pg = nest.Create('poisson_generator', 1, params)\n
+ neurons = nest.Create('iaf_psc_alpha', 1000)\n
+ sr = nest.Create('spike_recorder')\n
+ # Connect nodes\n
+ nest.Connect(pg, neurons, syn_spec={'weight': 10.})\n
+ nest.Connect(neurons[::10], sr)\n
+ # Simulate\n
+ nest.Simulate(1000.0)\n
+ # Get events\n
+ n_events = nest.GetStatus(sr, 'n_events')[0]\n
+ print('Number of events:', n_events)\n
+ ",
"return": "n_events"
}
-If we assume that the above JSON object is stored in a file called
-``simulation_script.json``, you can execute it using the following
-command:
+If we assume that the above JSON object is stored in a file called ``simulation_script.json``, you can execute it using
+the following command:
.. code-block:: sh
@@ -520,12 +480,10 @@ command:
Interact with NEST Server using JavaScript
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-As the NEST Server is built on modern web technologies, it may be
-desirable to create a frontend to it in the form of a
-website. In this context, JavaScript is the natural choice for the
-client-side language as it is widely supported by all web browsers and
-provides libraries for handling HTTP requests and responses out of the
-box. Here is a small example showing the basic idea:
+As the NEST Server is built on modern web technologies, it may be desirable to create a frontend to it in the form of a
+website. In this context, JavaScript is the natural choice for the client-side language as it is widely supported by all
+web browsers and provides libraries for handling HTTP requests and responses out of the box. Here is a small example
+showing the basic idea:
.. grid::
@@ -574,9 +532,8 @@ Using the above code, we can already send API-requests to NEST Server:
getAPI('GetKernelStatus'); // the current kernel status dict
-Sending API calls with data requires a POST request, which can handle
-the data in JSON-format. To allow for this, we can define a function
-with a callback for POST requests:
+Sending API calls with data requires a POST request, which can handle the data in JSON-format. To allow for this, we can
+define a function with a callback for POST requests:
.. code-block:: JavaScript
@@ -601,10 +558,9 @@ Using this function, sending an API-request to NEST Server becomes easy:
// default values of iaf_psc_alpha
postAPI('GetDefaults', {"model": "iaf_psc_alpha"});
-The third type of request we might want to make is sending a custom
-Python script to NEST Server. As outlined above, this is supported by
-the ``exec`` route. to make use of that, we define a function with
-callback for POST requests to execute a script:
+The third type of request we might want to make is sending a custom Python script to NEST Server. As outlined above,
+this is supported by the ``exec`` route. to make use of that, we define a function with callback for POST requests to
+execute a script:
.. code-block:: JavaScript
@@ -632,10 +588,8 @@ Now, we can send a custom Python script to NEST Server:
.. note::
- A full HTML client for NEST Server based on the ideas outlined
- above is available in the `nest-jsclient repository
- `_ on the GitHub
- account of Steffen Graber.
+ A full HTML client for NEST Server based on the ideas outlined above is available in the `nest-jsclient repository
+ `_ on the GitHub account of Steffen Graber.
Control NEST from Bash
~~~~~~~~~~~~~~~~~~~~~~
diff --git a/doc/htmldoc/related_projects.rst b/doc/htmldoc/related_projects.rst
index c69e2d8a85..1bcd309ab5 100644
--- a/doc/htmldoc/related_projects.rst
+++ b/doc/htmldoc/related_projects.rst
@@ -8,23 +8,20 @@ biologically realistic neural networks.
Here you can find further information about some of these projects.
-
NESTML
------
:doc:`NESTML ` allows you to modify and create models for NEST in a simplified format.
-It is a domain-specific language that supports the specification of neuron and synapse
-models in a precise and concise syntax, based on the syntax of Python. Model equations can either be given as a simple
-string of mathematical notation or as an algorithm written in the built-in procedural language. The equations are
-analyzed by the associated toolchain, written in Python, to compute an exact solution if possible or use an appropriate
-numeric solver otherwise.
+It is a domain-specific language that supports the specification of neuron and synapse models in a precise and concise
+syntax, based on the syntax of Python. Model equations can either be given as a simple string of mathematical notation
+or as an algorithm written in the built-in procedural language. The equations are analyzed by the associated toolchain,
+written in Python, to compute an exact solution if possible or use an appropriate numeric solver otherwise.
* :doc:`Get started with NESTML `
* :doc:`List of available models `
-
NEST extension module
---------------------
@@ -33,18 +30,19 @@ without messing with the source code of NEST itself. It makes sharing custom ext
* :doc:`Get started with the extension module `
-NEST desktop
+NEST Desktop
------------
-:doc:`NEST Desktop ` is a web-based GUI application for the NEST Simulator.
-The app enables the rapid construction, parametrization, and instrumentation of neuronal network models.
+:doc:`NEST Desktop ` is a web-based GUI application for the NEST Simulator. The app enables the rapid
+construction, parametrization, and instrumentation of neuronal network models.
* :doc:`Get started with NEST desktop `
NEST GPU
--------
-NEST GPU is a GPU-MPI library for simulation of large-scale networks of spiking neurons. It can be used in Python, in C++ and in C.
+NEST GPU is a GPU-MPI library for simulation of large-scale networks of spiking neurons. It can be used in Python, in
+C++ and in C.
* :doc:`Get started with NEST GPU `
@@ -62,8 +60,8 @@ number of neuromorphic hardware systems.
Elephant
--------
-:doc:`Elephant (Electrophysiology Analysis Toolkit) ` is an open-source, community-centered
-library for the analysis of electrophysiological data in the Python programming language.
+:doc:`Elephant (Electrophysiology Analysis Toolkit) ` is an open-source, community-centered library for
+the analysis of electrophysiological data in the Python programming language.
* :doc:`Get started with Elephant `
@@ -80,10 +78,10 @@ multi-compartment, morphologically-detailed cells, from single cell models to ve
Neuromorphic hardware
---------------------
-:doc:`SpiNNaker and BrainScaleS ` are neuromorphic computing systems, which enable
-energy-efficient, large-scale neuronal network simulations with simplified spiking neuron models.
-The BrainScaleS system is based on physical (analog) emulations of neuron models and offers highly accelerated
-operation (:math:`10^4` x real time). The SpiNNaker system is based on a digital many-core architecture and provides
+:doc:`SpiNNaker and BrainScaleS ` are neuromorphic computing systems, which enable energy-efficient,
+large-scale neuronal network simulations with simplified spiking neuron models. The BrainScaleS system is based on
+physical (analog) emulations of neuron models and offers highly accelerated operation (:math:`10^4` x real time). The
+SpiNNaker system is based on a digital many-core architecture and provides
real-time operation.
* :doc:`Get started with SpiNNaker `
@@ -92,8 +90,8 @@ real-time operation.
TheVirtualBrain (TVB)
---------------------
-:ref:`TVB ` is a framework for the simulation of the dynamics of large-scale brain
-networks with biologically realistic connectivity.
+:ref:`TVB ` is a framework for the simulation of the dynamics of large-scale brain networks with
+biologically realistic connectivity.
* :ref:`Get started with TVB `