From 400c35d48a31c14d5dd5a3323c53ae9ed8188f50 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Fri, 20 Aug 2021 09:49:54 +0200 Subject: [PATCH 01/27] draft new install page --- doc/userdoc/installation/index.rst | 325 ++++++----------------------- 1 file changed, 63 insertions(+), 262 deletions(-) diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index f0053f6510..64dd664373 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -4,336 +4,137 @@ Install NEST Standard installation --------------------- -These installation instructions should work for most users who do -not need custom configurations for their systems. If you want to -compile NEST from source, check the :ref:`advanced_install` section -and :doc:`cmake_options`. +NEST can be installed -.. tabs:: +Via pip: +without openmpi: - .. tab:: Ubuntu - Ubuntu users can install NEST via the PPA repository. + .. code-block:: bash - 1. Add the PPA repository for NEST and update apt: + pip3 install nest-simulator - .. code-block:: bash - sudo add-apt-repository ppa:nest-simulator/nest - sudo apt-get update +with openmpi: - 2. Install NEST: - .. code-block:: bash + .. code-block:: bash - sudo apt-get install nest + pip3 install nest-simulator +.. note:: - .. tab:: Debian - Debian users can install NEST via the Ubuntu PPA repository. + macOS may need special installation instructions. see here + for windows, there is native biuld, use docker or virtual machine - 1. Create a new ``apt`` repository entry in ``/etc/apt/sources.list.d/nest-simulator-ubuntu-nest-XXX.list`` by: +Install NEST using containers and virtual environments +------------------------------------------------------ - .. code-block:: bash +virtual box +~~~~~~~~~~~ - sudo apt install devscripts build-essential software-properties-common dpkg-dev - sudo add-apt-repository --enable-source ppa:nest-simulator/nest - - 2. Disable the binary package in the repository file created under ``/etc/apt/sources.list.d/`` by commenting - out the ``deb`` line, while keeping the ``deb-src`` line. It should look similar to this: - - .. code-block:: bash - - #deb http://ppa.launchpad.net/nest-simulator/nest/ubuntu focal main - deb-src http://ppa.launchpad.net/nest-simulator/nest/ubuntu focal main - - - 3. Import the PPA GPC key and rebuild the package: - - .. code-block:: bash - - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \ - --recv-keys 0CF7539642ABD23CBCA8D487F0B8B6C5EC02D7DD - sudo apt update - sudo apt source --build nest - - 4. Install any missing dependencies, if ``apt`` tells you so. - In addition, install: - - .. code-block:: bash - - sudo apt install python3-all dh-python - - 5. After installing the dependencies, enter ``sudo apt source --build nest`` again. - When the build finished, look for lines like - - .. code-block:: bash - - dpkg-deb: building package 'nest-dbgsym' in '../nest-dbgsym_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb'. - dpkg-deb: building package 'nest' in '../nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb'. - #dh binary - dpkg-genbuildinfo --build=binary - dpkg-genchanges --build=binary >../nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.changes - - and note down the full package name. In the above example this would be - `nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb`, where the number `202001311135` and potentially the - Ubuntu version number may be different. - - 6. Install the ready Debian package after the rebuild: - - .. code-block:: bash - - sudo dpkg --install nest-simulator-x.y.z~NUMBER~ubuntu20.04.1_amd64.deb - - The package name is taken from the result of the previous step. `NUMBER` and potentially the Ubuntu - version might differ. - - 7. Test the package: - - .. code-block:: bash - - python3 - import nest - - - .. tab:: NeuroFedora - - The NeuroFedora team has generously provided the latest - versions of NEST on their platform. As that is available in the - standard Fedora platform repositories, it can simply be - installed using ``dnf``: - - .. code-block:: bash - - sudo dnf install python3-nest - - Find out more on the NeuroFedora site: https://neuro.fedoraproject.org. - - .. tab:: Homebrew (macOS) - - 1. `Install Homebrew `_. - - 2. Install NEST via: - - .. code-block:: bash - - brew install nest - - .. _conda_forge_install: - - .. tab:: Conda (Linux/macOS) - - 1. To keep your conda setup tidy, we recommend that you install NEST into - a separate `conda environment `_ - together with Python packages that you will use when working with NEST; - see also our :doc:`conda_tips`. - - To install the latest version of NEST in a new environment called ``ENVNAME``, just run - - .. code-block:: sh - - conda create --name ENVNAME -c conda-forge nest-simulator - - To install additional packages into the environment, just list them together with ``nest-simulator``. - - .. code-block:: sh - - conda create --name ENVNAME -c conda-forge nest-simulator jupyterlab seaborn - - #. To see all NEST versions available via conda, either run - - .. code-block:: sh - - conda search -c conda-forge nest-simulator - - or browse the `conda forge file list - `_ (note - there are multiple pages). To install, e.g., NEST 2.18.0, run - - .. code-block:: sh - - conda create --name nest_2_18_0 -c conda-forge nest-simulator=2.18.0=* - - The syntax for this install follows the pattern: ``nest-simulator==``. - - #. Activate your environment: - - .. code-block:: sh - - conda activate ENVNAME - - #. Note the following: - - - We currently provide NEST with thread-based parallelization on Conda. This should suffice for most - uses on personal computers. - - Until dedicated conda builds for Apple's M1 chip (arm64) become available, you should expect relatively - poor performance on computers with the M1 chip. You need to :doc:`build NEST yourself ` on - M1 systems for good performance. - - -.. _docker_vm_install: - -In addition to native installations from ready-made packages, we -provide containerized versions of NEST in several formats: - -.. tabs:: - - .. tab:: Docker (Linux/macOS) - - Docker provides an isolated container to run applications. The - NEST Docker container includes a complete install of NEST and - is set up so you can create, modify, and run Juptyer Notebooks - and save them on your host machine. (See the Note below for - alternative ways to use the Docker container.) - - 1. If you do not have Docker installed, follow the Docker - installation instructions for your system here: - https://docs.docker.com/install/. - - If you are using **Linux**, we **strongly recommend** you - also create a Docker group to manage Docker as a non-root - user. See instructions on the Docker website: - https://docs.docker.com/install/linux/linux-postinstall/ - - - 2. Create a directory or change into a directory that you want - to use for your Jupyter Notebooks. + We have live media (.ova) if you want to run NEST in a virtual machine. This option is suitable for Windows users, since we don't support + NEST natively on Windows, - .. code-block:: bash + :ref:`Download the live media here `, and follow the :doc:`instructions to set up the virutal machine ` . - mkdir my_nest_scripts - cd my_nest_scripts - 3. Run the Docker container. Replace the ```` with one - of the latest NEST versions (e.g., ``2.20.0``) or use - ``latest`` for the most recent build from the source code. +docker containers +~~~~~~~~~~~~~~~~~ - .. code-block:: bash +With open-mpi + jupyter notebook +Without open-mpi + jupyter notebook ... - docker run --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -p 8080:8080 nestsim/nest: notebook +install docker-compose (docker desktop for windows, mac?) + .. code-block:: bash - 4. Once completed, a link to a Jupyter Notebook will be - generated, as shown below. You can then copy and paste the - link into your browser. + docker-compose up - .. image:: ../static/img/docker_link.png - :align: center - :width: 1000px +You can check for updates to the Docker build by typing: + .. code-block:: bash - 5. You can now use the Jupyter Notebook as you normally - would. Anything saved in the Notebook will be placed in the - directory you started the Notebook from. + docker pull nestsim/nest: - 6. You can shutdown the Notebook in the terminal by typing - :kbd:`Ctrl-c` twice. Once the Notebook is shutdown the - container running NEST is removed. + See the `README `_ to find out more, but note some functionality, such as DISPLAY, will not be available. +---- - .. note:: +Advanced installation +--------------------- - You can check for updates to the Docker build by typing: +Compile NEST from source code: - .. code-block:: bash +* Download the source code for the `current release _` - docker pull nestsim/nest: +* Unpack the tarball - .. note:: - You can also create an instance of a terminal within the container itself and, for example, run Python scripts. +* Or Fork NEST and clone the repository on `GitHub `_. See details on :doc:`GitHub workflows here <../contribute/development_workflow>`). - .. code-block:: +create a build directory - docker run --rm -it -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -p 8080:8080 nestsim/nest: /bin/bash +.. code-block:: bash - See the `README `_ to find out more, but note some functionality, such as DISPLAY, will not be available. + mkdir build/ - .. tab:: Live Media (cross-platform) +change into build directory - We have live media (.ova) if you want to run NEST in a virtual machine. This option is suitable for Windows users, since we don't support - NEST natively on Windows, +.. code-block:: bash - :ref:`Download the live media here `, and follow the :doc:`instructions to set up the virutal machine ` . + cd build/ +compile and build NEST: +.. code-block:: bash + cmake /source/directory/ -**Once NEST is installed, you can run it in Python, IPython, or Jupyter Notebook** +See our :doc:`cmake_options` for different configuration options -For example, in the terminal type: +.. code-block:: bash - .. code-block:: bash + make + make install + make installcheck - python3 -Once in Python you can type: - .. code-block:: python - import nest -**or as a stand alone application**:: +High performance computer +------------------------- - nest + :doc:`Instructions for high performance computers ` provides some instructions for certain machines. +Developer tools +--------------- -If installation was successful, you should see the NEST splash screen in the terminal: +A complete list of required packages to run tests, build documentation, nest-server, NEST +is available in a conda yaml file. -.. figure:: ../static/img/import_nest.png - :scale: 50% - :alt: import nest +See development workflows here -**Installation is now complete!** -**:doc:`Now we can start creating simulations! <../getting_started>`** ---- If installation didn't work, see the :doc:`troubleshooting section <../troubleshooting>`. -.. seealso:: - - * :doc:`PyNEST tutorials <../tutorials/index>` - - * :doc:`Example networks <../examples/index>` - - ----- - -.. _advanced_install: - -Advanced installation ---------------------- - -**If you need special configuration options or want to compile NEST yourself, follow -these instructions.** - - -.. tabs:: - - .. tab:: Ubuntu/Debian - - Download the source code for the `current release `_. - - Follow instructions for :doc:`linux_install` and take a look at our :doc:`cmake_options`. - - - .. tab:: GitHub - - Get the latest developer version on `GitHub `_. Fork NEST into your GitHub repository (see details on :doc:`GitHub workflows here <../contribute/development_workflow>`). - .. tab:: macOS - For further options on installing NEST on macOS, see :doc:`mac_install` for Macs. +Alternative installation options +--------------------------------- - .. tab:: HPC systems +macOS +~~~~~ - :doc:`Instructions for high performance computers ` provides some instructions for certain machines. +* For macOS see :doc:`mac_install` .. toctree:: From a8ec81cdf974237cd4a5c7d9d55cb62bcc6cc758 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Tue, 24 Aug 2021 09:24:47 +0200 Subject: [PATCH 02/27] fix up formatting --- doc/userdoc/installation/index.rst | 84 +++++++++++++++--------------- 1 file changed, 41 insertions(+), 43 deletions(-) diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index 64dd664373..69912402dc 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -4,9 +4,8 @@ Install NEST Standard installation --------------------- -NEST can be installed +NEST can be installed via pip. -Via pip: without openmpi: @@ -23,26 +22,17 @@ with openmpi: pip3 install nest-simulator -.. note:: + .. note:: - macOS may need special installation instructions. see here - for windows, there is native biuld, use docker or virtual machine + macOS may need special installation instructions. see here + for windows, there is native biuld, use docker or virtual machine -Install NEST using containers and virtual environments ------------------------------------------------------- +Docker and live media installation +---------------------------------- -virtual box -~~~~~~~~~~~ - - We have live media (.ova) if you want to run NEST in a virtual machine. This option is suitable for Windows users, since we don't support - NEST natively on Windows, - - :ref:`Download the live media here `, and follow the :doc:`instructions to set up the virutal machine ` . - - -docker containers -~~~~~~~~~~~~~~~~~ +Docker container +~~~~~~~~~~~~~~~~ With open-mpi + jupyter notebook Without open-mpi + jupyter notebook ... @@ -59,7 +49,16 @@ You can check for updates to the Docker build by typing: docker pull nestsim/nest: - See the `README `_ to find out more, but note some functionality, such as DISPLAY, will not be available. +See the `README `_ to find out more, but note some functionality, such as DISPLAY, will not be available. + +Live media for virtual machines +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +We have live media (.ova) if you want to run NEST in a virtual machine. This option is suitable for Windows users, since we don't support +NEST natively on Windows, + +:ref:`Download the live media here `, and follow the :doc:`instructions to set up the virutal machine ` . + ---- @@ -72,43 +71,53 @@ Compile NEST from source code: * Unpack the tarball + .. code-block:: + + tar -xzvf nest-simulator-x.y.z.tar.gz * Or Fork NEST and clone the repository on `GitHub `_. See details on :doc:`GitHub workflows here <../contribute/development_workflow>`). +If not already installed on your system, the following packages are recommended (see also the Dependencies section) + create a build directory -.. code-block:: bash + .. code-block:: bash - mkdir build/ + mkdir build/ change into build directory -.. code-block:: bash + .. code-block:: bash - cd build/ + cd build/ compile and build NEST: -.. code-block:: bash + .. code-block:: bash - cmake /source/directory/ + cmake /source/directory/ See our :doc:`cmake_options` for different configuration options -.. code-block:: bash + .. code-block:: bash + + make + make install + make installcheck + - make - make install - make installcheck +Installation for specific machines and clusters +----------------------------------------------- +- Ebrains +- Supercomputer +- some specific mac -High performance computer -------------------------- +:doc:`Instructions for high performance computers ` provides some instructions for certain machines. - :doc:`Instructions for high performance computers ` provides some instructions for certain machines. Developer tools --------------- @@ -119,7 +128,6 @@ is available in a conda yaml file. See development workflows here - ---- If installation didn't work, see the :doc:`troubleshooting section <../troubleshooting>`. @@ -127,16 +135,6 @@ If installation didn't work, see the :doc:`troubleshooting section <../troublesh - -Alternative installation options ---------------------------------- - -macOS -~~~~~ - -* For macOS see :doc:`mac_install` - - .. toctree:: :hidden: From c6946722f517adbba3367da18f72eb883238dccc Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Thu, 2 Sep 2021 13:04:36 +0200 Subject: [PATCH 03/27] draft modify installation after notes hackathon --- doc/userdoc/installation/index.rst | 89 ++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index 69912402dc..87fe46c702 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -1,6 +1,91 @@ Install NEST ============ +Who are you? + +I'm a Linux or mac user who wants to run simulation scripts for NEST on my computer. + +:: + + pip3 install nest + +See sample code + +- Jochen - sample with links + +Add models + +- NESTML + +Extend NEST + +- NEST extension module + +Perform analyses + +- Elephant + +Run benchmarks + +- benchmark docs + +.. note:: + + For Windows see neurofedora live media | future WSL + +.. note:: + + Exceptional cases that need other steps? + + +---- + +I'm a lecturer who wants to set up a temporary NEST environment for a classroom or workshop to demonstrate neuroscientifc concepts + +For a centralized installation workflow where NEST is made available through a port? Participants do no need to install +NEST themselves, but need access NEST Server or .... (requirement mac or Linux - does MS work?) + +- Docker installation + +- NEST Server? + +- Check out graphical user interface NEST-Desktop, to help visualize and illustrate complex network simulations. + + +For situations where particpants will need to install NEST, we recommend the compneurolab live media (all operating systems) + +---- + +I'm an administrator of a lab or cluster that requires a semi-permanent or permanent installation of NEST for researchers and students. +I am responsible for deploying NEST on a machine + +- For small clusters (what is small?) see docker installation / spack + +- For supercomputers and HPC sytstems, please contact us (see also some notes on set up from older versions of HPC systems) + + + +---- + +I am a developer and wants to contribute to the code or documentation of NEST + +- compile from source + +- developer workflows / tools + +- Run benchmarks + + + +* User installation :ref:`std_install` + +* Deployer - (for classrooms) :ref:`container_install` + +* Developer installation :ref:`adv_install` + + +.. _std_install: + Standard installation --------------------- @@ -28,6 +113,8 @@ with openmpi: macOS may need special installation instructions. see here for windows, there is native biuld, use docker or virtual machine +.. _container_install: + Docker and live media installation ---------------------------------- @@ -62,6 +149,8 @@ NEST natively on Windows, ---- +.. _adv_install: + Advanced installation --------------------- From d04fc6f4071ccb97feca5bab915f48a754266ef2 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Tue, 7 Sep 2021 13:17:50 +0200 Subject: [PATCH 04/27] add some icons, separate user type, create visual index --- doc/userdoc/installation/admin.rst | 33 +++ doc/userdoc/installation/developer.rst | 61 +++++ doc/userdoc/installation/index.rst | 225 +++--------------- doc/userdoc/installation/lecturer.rst | 35 +++ doc/userdoc/installation/user.rst | 37 +++ doc/userdoc/static/css/custom.css | 21 +- doc/userdoc/static/img/001-shuttle.png | Bin 0 -> 8857 bytes .../img/005-artificial-intelligence-1.png | Bin 0 -> 15929 bytes doc/userdoc/static/img/010-book-1.png | Bin 0 -> 11794 bytes doc/userdoc/static/img/012-brain.png | Bin 0 -> 11272 bytes doc/userdoc/static/img/014-teacher.png | Bin 0 -> 4870 bytes doc/userdoc/static/img/019-programmer-1.png | Bin 0 -> 5798 bytes doc/userdoc/static/img/020-user.png | Bin 0 -> 11316 bytes doc/userdoc/static/img/037-network.png | Bin 0 -> 2840 bytes 14 files changed, 223 insertions(+), 189 deletions(-) create mode 100644 doc/userdoc/installation/admin.rst create mode 100644 doc/userdoc/installation/developer.rst create mode 100644 doc/userdoc/installation/lecturer.rst create mode 100644 doc/userdoc/installation/user.rst create mode 100644 doc/userdoc/static/img/001-shuttle.png create mode 100644 doc/userdoc/static/img/005-artificial-intelligence-1.png create mode 100644 doc/userdoc/static/img/010-book-1.png create mode 100644 doc/userdoc/static/img/012-brain.png create mode 100644 doc/userdoc/static/img/014-teacher.png create mode 100644 doc/userdoc/static/img/019-programmer-1.png create mode 100644 doc/userdoc/static/img/020-user.png create mode 100644 doc/userdoc/static/img/037-network.png diff --git a/doc/userdoc/installation/admin.rst b/doc/userdoc/installation/admin.rst new file mode 100644 index 0000000000..b00b9b482b --- /dev/null +++ b/doc/userdoc/installation/admin.rst @@ -0,0 +1,33 @@ +Administrator installation instructions +--------------------------------------- + +If you need to deploy NEST on a machine + +- For small clusters (what is small?) see docker installation / spack + +Docker container +~~~~~~~~~~~~~~~~ + +With open-mpi + jupyter notebook +Without open-mpi + jupyter notebook ... + +install docker-compose (docker desktop for windows, mac?) + + .. code-block:: bash + + docker-compose up + +You can check for updates to the Docker build by typing: + + .. code-block:: bash + + docker pull nestsim/nest: + +See the `README `_ to find out more, but note some functionality, such as DISPLAY, will not be available. + + +- For supercomputers and other HPC sytstems, please contact us (see also some notes on set up from older versions of HPC systems) +:doc:`Instructions for high performance computers ` provides some instructions for certain machines. + + +EBRAINS set up? diff --git a/doc/userdoc/installation/developer.rst b/doc/userdoc/installation/developer.rst new file mode 100644 index 0000000000..f81eef5356 --- /dev/null +++ b/doc/userdoc/installation/developer.rst @@ -0,0 +1,61 @@ +Developer installation instructions +----------------------------------- + +- compile from source + +- developer workflows / tools + +- Run benchmarks + +Compile NEST from source code: + +* Download the source code for the `current release _` + +* Unpack the tarball + + .. code-block:: + + tar -xzvf nest-simulator-x.y.z.tar.gz + +* Or Fork NEST and clone the repository on `GitHub `_. See details on :doc:`GitHub workflows here <../contribute/development_workflow>`). + +If not already installed on your system, the following packages are recommended (see also the Dependencies section) + +create a build directory + + .. code-block:: bash + + mkdir build/ + +change into build directory + + .. code-block:: bash + + cd build/ + +compile and build NEST: + + .. code-block:: bash + + cmake /source/directory/ + +See our :doc:`cmake_options` for different configuration options + + .. code-block:: bash + + make + make install + make installcheck + + + + +Developer tools +~~~~~~~~~~~~~~~ + +A complete list of required packages to run tests, build documentation, nest-server, NEST +is available in a conda yaml file. + +See development workflows here + + diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index 87fe46c702..a920553c97 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -1,234 +1,83 @@ Install NEST ============ -Who are you? - -I'm a Linux or mac user who wants to run simulation scripts for NEST on my computer. - -:: - - pip3 install nest - -See sample code - -- Jochen - sample with links -Add models +Who are you? +~~~~~~~~~~~~ -- NESTML +.. container:: twocol -Extend NEST + .. container:: leftside -- NEST extension module + .. image:: ../static/img/020-user.png + :target: user.html -Perform analyses -- Elephant + .. container:: rightside -Run benchmarks + **User** -- benchmark docs + I'm a Linux or macOS user who wants to run simulation scripts for NEST on my computer. +| .. note:: - For Windows see neurofedora live media | future WSL - -.. note:: - - Exceptional cases that need other steps? - - ----- - -I'm a lecturer who wants to set up a temporary NEST environment for a classroom or workshop to demonstrate neuroscientifc concepts - -For a centralized installation workflow where NEST is made available through a port? Participants do no need to install -NEST themselves, but need access NEST Server or .... (requirement mac or Linux - does MS work?) - -- Docker installation - -- NEST Server? - -- Check out graphical user interface NEST-Desktop, to help visualize and illustrate complex network simulations. - - -For situations where particpants will need to install NEST, we recommend the compneurolab live media (all operating systems) - ----- - -I'm an administrator of a lab or cluster that requires a semi-permanent or permanent installation of NEST for researchers and students. -I am responsible for deploying NEST on a machine - -- For small clusters (what is small?) see docker installation / spack - -- For supercomputers and HPC sytstems, please contact us (see also some notes on set up from older versions of HPC systems) - - - ----- - -I am a developer and wants to contribute to the code or documentation of NEST - -- compile from source - -- developer workflows / tools - -- Run benchmarks - - - -* User installation :ref:`std_install` - -* Deployer - (for classrooms) :ref:`container_install` - -* Developer installation :ref:`adv_install` - - -.. _std_install: - -Standard installation ---------------------- + Windows users see here -NEST can be installed via pip. +| +.. container:: twocol -without openmpi: + .. container:: leftside + .. image:: ../static/img/014-teacher.png + :target: lecturer.html - .. code-block:: bash - pip3 install nest-simulator + .. container:: rightside + **Lecturer** -with openmpi: + I'm a lecturer who wants to set up a temporary NEST environment for a classroom or workshop to demonstrate neuroscientifc concepts. +| +| - .. code-block:: bash - pip3 install nest-simulator +.. container:: twocol - .. note:: + .. container:: leftside + .. image:: ../static/img/001-shuttle.png + :target: admin.html - macOS may need special installation instructions. see here - for windows, there is native biuld, use docker or virtual machine -.. _container_install: + .. container:: rightside -Docker and live media installation ----------------------------------- + **Deployer** -Docker container -~~~~~~~~~~~~~~~~ + I'm an administrator responsible for deploying NEST on a cluster or high performance machine for researchers and students. -With open-mpi + jupyter notebook -Without open-mpi + jupyter notebook ... +| +| -install docker-compose (docker desktop for windows, mac?) - .. code-block:: bash +.. container:: twocol - docker-compose up + .. container:: leftside -You can check for updates to the Docker build by typing: + .. image:: ../static/img/019-programmer-1.png + :target: developer.html - .. code-block:: bash - docker pull nestsim/nest: + .. container:: rightside -See the `README `_ to find out more, but note some functionality, such as DISPLAY, will not be available. + **Developer** -Live media for virtual machines -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -We have live media (.ova) if you want to run NEST in a virtual machine. This option is suitable for Windows users, since we don't support -NEST natively on Windows, - -:ref:`Download the live media here `, and follow the :doc:`instructions to set up the virutal machine ` . - - ----- - -.. _adv_install: - -Advanced installation ---------------------- - -Compile NEST from source code: - -* Download the source code for the `current release _` - -* Unpack the tarball - - .. code-block:: - - tar -xzvf nest-simulator-x.y.z.tar.gz - -* Or Fork NEST and clone the repository on `GitHub `_. See details on :doc:`GitHub workflows here <../contribute/development_workflow>`). - -If not already installed on your system, the following packages are recommended (see also the Dependencies section) - -create a build directory - - .. code-block:: bash - - mkdir build/ - -change into build directory - - .. code-block:: bash - - cd build/ - -compile and build NEST: - - .. code-block:: bash - - cmake /source/directory/ - -See our :doc:`cmake_options` for different configuration options - - .. code-block:: bash - - make - make install - make installcheck - - - -Installation for specific machines and clusters ------------------------------------------------ - -- Ebrains - -- Supercomputer - -- some specific mac - -:doc:`Instructions for high performance computers ` provides some instructions for certain machines. - - -Developer tools ---------------- - -A complete list of required packages to run tests, build documentation, nest-server, NEST -is available in a conda yaml file. - -See development workflows here + I am a developer and want to contribute to the code or documentation of NEST. ---- If installation didn't work, see the :doc:`troubleshooting section <../troubleshooting>`. - - - -.. toctree:: - :hidden: - - linux_install - mac_install - hpc_install - livemedia - cmake_options diff --git a/doc/userdoc/installation/lecturer.rst b/doc/userdoc/installation/lecturer.rst new file mode 100644 index 0000000000..203f695bd6 --- /dev/null +++ b/doc/userdoc/installation/lecturer.rst @@ -0,0 +1,35 @@ +Lecturer installation instructions +---------------------------------- + +For a centralized installation workflow where participants connect to NEST over the internet (i.e, participants do not need to install NEST themselves). +.... (requirement mac or Linux - does MS work?) + +* Check out graphical user interface NEST-Desktop, to help visualize and illustrate complex network simulations. + +* Docker installation + +* where should i install nest? (any considerations / requirements) what about wifi / internet connections + +* see here for installing docker + +* what information do particpants need + + * what do they need to install? + + * NEST Server? + +* For situations where particpants will need to install NEST, we recommend the compneurolab live media (all operating systems) + + * suggest participants to look at main page (interasctivs sample script) to get an idea + +* here are some teaching resources + + * PyNEST tutorials + + * nestml tutorials + + * NEST-Desktop analysis of . . . + + + + diff --git a/doc/userdoc/installation/user.rst b/doc/userdoc/installation/user.rst new file mode 100644 index 0000000000..0df467d509 --- /dev/null +++ b/doc/userdoc/installation/user.rst @@ -0,0 +1,37 @@ +User install instructions +------------------------- + +For macOS and Linux users (Windows users see below): + +:: + + pip3 install nest + +.. comment: this section below should be modelled after the main page with pretty icons and such, not just a + bullet list + +* Once you've installed NEST, you can explore a sample script to see how we build +simulations + +* Want to add your own model? With NESTML you can quickly write a model without messing with + any C++ code + +* Need to analyze your simulation? Check out these tools + + * Elephant + * ?NEST-Desktop + +* If you need to run benchmarks, see our documentation for tips + +See the main page for other options + + +.. note:: + + For Windows see neurofedora live media | future WSL + +.. note:: + + Exceptional cases that need other steps? + + diff --git a/doc/userdoc/static/css/custom.css b/doc/userdoc/static/css/custom.css index 67c37a61e7..fa4b522344 100644 --- a/doc/userdoc/static/css/custom.css +++ b/doc/userdoc/static/css/custom.css @@ -1,10 +1,29 @@ -.wy-breadcrumbs-aside { + .wy-breadcrumbs-aside { display: none !important; } .keep-us-sustainable { background-color: #272525; } +div.twocol { + width: 430px; + height: 150px; + border-top-width: 1px; + border-top-style: solid; + border-bottom-width: 1px; + border-bottom-style: solid; +} + + +div.leftside { + width: 150px; + padding: 0px 3px 0px 0px; + float: left; +} + +div.rightside { + margin-left: 160px; +} .rst-content dl:not(.docutils) [class^="sig-prename descclassname"] { display: none; diff --git a/doc/userdoc/static/img/001-shuttle.png b/doc/userdoc/static/img/001-shuttle.png new file mode 100644 index 0000000000000000000000000000000000000000..d68656d696c726422929d4d16f0a7f1b0b7d1c8f GIT binary patch literal 8857 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 literal 0 HcmV?d00001 diff --git a/doc/userdoc/static/img/005-artificial-intelligence-1.png b/doc/userdoc/static/img/005-artificial-intelligence-1.png new file mode 100644 index 0000000000000000000000000000000000000000..095e31fe6435ffab6e882ad8146e7dcadce7bdce GIT binary patch literal 15929 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 literal 0 HcmV?d00001 diff --git a/doc/userdoc/static/img/012-brain.png b/doc/userdoc/static/img/012-brain.png new file mode 100644 index 0000000000000000000000000000000000000000..a2c535ea366dce832ff6a3bb5e625c95b531d304 GIT binary patch literal 11272 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 Cm(2hG literal 0 HcmV?d00001 diff --git a/doc/userdoc/static/img/019-programmer-1.png b/doc/userdoc/static/img/019-programmer-1.png new file mode 100644 index 0000000000000000000000000000000000000000..27d4b7cb0646d82e55031187e08ce3d2f534c88a GIT binary patch literal 5798 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 b<1oTYRXB4P>F?hF*{|UK$2MQDtMv;=D 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 literal 0 HcmV?d00001 diff --git a/doc/userdoc/static/img/037-network.png b/doc/userdoc/static/img/037-network.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ced37abb5e889d92b45096b2619c558294c67a GIT binary patch literal 2840 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 WNna2>6RAGM0-kO@uGKE2fBX)H6gr~- literal 0 HcmV?d00001 From a682275fd79f16c1561ce8d9728d060b2c55d3cd Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Mon, 13 Sep 2021 13:27:34 +0200 Subject: [PATCH 05/27] update user text --- doc/userdoc/installation/index.rst | 6 +----- doc/userdoc/installation/user.rst | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index a920553c97..1681f211f4 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -17,13 +17,9 @@ Who are you? **User** - I'm a Linux or macOS user who wants to run simulation scripts for NEST on my computer. + I'm a student or researcher who wants to run neural network simulation scripts for NEST on my computer. | -.. note:: - - Windows users see here - | .. container:: twocol diff --git a/doc/userdoc/installation/user.rst b/doc/userdoc/installation/user.rst index 0df467d509..f2992f462c 100644 --- a/doc/userdoc/installation/user.rst +++ b/doc/userdoc/installation/user.rst @@ -1,34 +1,37 @@ User install instructions ------------------------- -For macOS and Linux users (Windows users see below): +For macOS and Linux users (:ref:`Windows users see below `): :: pip3 install nest + +.. comment: any options? + .. comment: this section below should be modelled after the main page with pretty icons and such, not just a bullet list -* Once you've installed NEST, you can explore a sample script to see how we build -simulations +* Once you've installed NEST, you can explore ouur `interactive script `_ + and find out how to create network simulations. + -* Want to add your own model? With NESTML you can quickly write a model without messing with +* Want to add your own model? With :doc:`NESTML ` you can quickly write a model without messing with any C++ code * Need to analyze your simulation? Check out these tools - * Elephant - * ?NEST-Desktop + * For analyzing your output, checki out :doc:`Elephant `. + * To explore simulations in a graphically-friendly way see :doc:`NEST-Desktop ` -* If you need to run benchmarks, see our documentation for tips +* If you need to run benchmarks, see our :doc:`benchmarking documentation <../benchmarking>` for tips See the main page for other options +.. _windows: -.. note:: - - For Windows see neurofedora live media | future WSL + We recommend the neurofedora live media for Windows users .. note:: From f6e960d34730c3bda689e52f614695212fad2887 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Fri, 5 Nov 2021 08:09:35 +0100 Subject: [PATCH 06/27] add orange images --- doc/userdoc/static/css/custom.css | 2 +- doc/userdoc/static/img/001-shuttle.png | Bin 8857 -> 20207 bytes doc/userdoc/static/img/001-shuttle_black.png | Bin 0 -> 8857 bytes doc/userdoc/static/img/014-teacher.png | Bin 4870 -> 13408 bytes doc/userdoc/static/img/014-teacher_black.png | Bin 0 -> 4870 bytes doc/userdoc/static/img/019-programmer-1.png | Bin 5798 -> 15231 bytes .../static/img/019-programmer-1_black.png | Bin 0 -> 5798 bytes doc/userdoc/static/img/020-user.png | Bin 11316 -> 18168 bytes doc/userdoc/static/img/020-user_black.png | Bin 0 -> 11316 bytes doc/userdoc/static/img/linux.png | Bin 0 -> 7103 bytes doc/userdoc/static/img/macos.png | Bin 0 -> 11142 bytes doc/userdoc/static/img/windows.png | Bin 0 -> 17069 bytes 12 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 doc/userdoc/static/img/001-shuttle_black.png create mode 100644 doc/userdoc/static/img/014-teacher_black.png create mode 100644 doc/userdoc/static/img/019-programmer-1_black.png create mode 100644 doc/userdoc/static/img/020-user_black.png create mode 100644 doc/userdoc/static/img/linux.png create mode 100644 doc/userdoc/static/img/macos.png create mode 100644 doc/userdoc/static/img/windows.png diff --git a/doc/userdoc/static/css/custom.css b/doc/userdoc/static/css/custom.css index fa4b522344..98b78eb2ba 100644 --- a/doc/userdoc/static/css/custom.css +++ b/doc/userdoc/static/css/custom.css @@ -7,7 +7,7 @@ } div.twocol { width: 430px; - height: 150px; + height: 160px; border-top-width: 1px; border-top-style: solid; border-bottom-width: 1px; diff --git a/doc/userdoc/static/img/001-shuttle.png b/doc/userdoc/static/img/001-shuttle.png index d68656d696c726422929d4d16f0a7f1b0b7d1c8f..5afc5b2dc22fa73d110c2952086d7505f20c5e35 100644 GIT binary patch literal 20207 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 diff --git a/doc/userdoc/static/img/001-shuttle_black.png b/doc/userdoc/static/img/001-shuttle_black.png new file mode 100644 index 0000000000000000000000000000000000000000..d68656d696c726422929d4d16f0a7f1b0b7d1c8f GIT binary patch literal 8857 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 literal 0 HcmV?d00001 diff --git a/doc/userdoc/static/img/014-teacher.png b/doc/userdoc/static/img/014-teacher.png index fbddeba37c8e45a5ed989b305782fb9496d3f5e7..56808df92300c90e3f436b5a12c6b237165a2b26 100644 GIT binary patch literal 13408 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 literal 4870 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 Cm(2hG diff --git a/doc/userdoc/static/img/014-teacher_black.png b/doc/userdoc/static/img/014-teacher_black.png new file mode 100644 index 0000000000000000000000000000000000000000..fbddeba37c8e45a5ed989b305782fb9496d3f5e7 GIT binary patch literal 4870 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 Cm(2hG literal 0 HcmV?d00001 diff --git a/doc/userdoc/static/img/019-programmer-1.png b/doc/userdoc/static/img/019-programmer-1.png index 27d4b7cb0646d82e55031187e08ce3d2f534c88a..724671814d9f99d1edd1214fa7bb3be78d904346 100644 GIT binary patch literal 15231 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 Lp2*k9nuq@{K-4=E literal 5798 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 literal 11316 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 b<1oTYRXB4P>F?hF*{|UK$2MQDtMv;=D z@AWCFNLxi*<@LFZHP!bFSMw+n9pm&_mO%`2cBIRo1z$)qcUmcZ7VeY$-nsQJpX}{( zq^={xbfZ|8X^b3uMigD-zKK}am#w`Z(e>$z3Kuaszqszmqt`&nho_w{N5Qp4ul&d) zNucTs>7zFHHkln3UJsF#NaHc?BcLSMYY&n|`Emm30?4R}?Z_0J$|7BF(Y7AlJ!LH2 zQA!Age5%m&X13t5+L5C?#G!a0RXl0e*7&&6c#s+hqQJ!d$zW~?ffM|x0`giMN0GFu z(|y%r)iBsRCU^X_i?)Bu6rU^d%Oo-d+y%B^dsgEQV|rx-V2_cY7KdPq;Jn_t>My zHMYJIF17=-7+^%99WT?VMmQQ%K4)6Js|^2RvKM+mhN4m3kJ7;GU@#9*QsW^cMRs-}e7>~<#yRCy+ckcC zMF(eZIl^kR;6}MQHq^fN!TLn=2HNq%T2m)C-Nah*KuV*Ial+W{>>|>wn7eB*##GFR zF)N|^Q&u?eAM~W+8u+CsJMPfmjQ0xJEP#uUvsT|8Ac4;VXX~0iZFManQEwXv!@L(RW zh05&i(YrvM(8evlXSaotU@sE@AHh$mDue^Lzvr~Ct>h{^cO2UIhC|UIw2LOjhtl_g{Xme-z?A2$8w|H&rY)I zu1r50F?s~(%vH^OBQHNev$7YT^P^{2}JFX1d9RhPS4Uu`!N<~ zd+8OQlY4ga8QC#L=uGIeGP7Vgfu{Pr`ZTIeM1f^Yu2IhPQ#z?g_u%@C*$4wA7|PmW zr0D=uzHEoumaMsW$)y15uPS}xEEi1sxSX2 zla_%OJ|K&J06j+gf}*}*-5)-ha-!3jwG+h% zzXp&T`?6u$PXf2P=!P{ndKp+#5DZdg7rn8&E*%%-!c8p76h zO*r>0L|6#d^3HfqfMN8G2+91M&Xo%W=AQG7?Nw!jL!Xa-X&!V%WjV3|@&U?R?cOh+ zhr~pn-ABR8=QxtyPE`nBuM9~w)9MntA5p+pzl|pc65qCkneQHRs`J~JVmd1b4No}B z3H4SXr{(VMH<9&J=juqps37d%4%fq`+RF5u;qhKAQ#s!hKd|S-80YEUj~P7n;3sWT zgz26~-M3J?I(;2jmwp7}>&3}mZ%KQuGXc2WpFhUncA?Kl>Be6kl<$tT9g|#--{!}p zFm-5s6(QAP)r5h*>msm)MZQ+( z1z$>zhIOD|%^QM986jZ7#{7)sNEqRO)!C5JB2=NtPkoEGQV~e+>E+?08IJPbk>opP zqc^nhJWL!_Mrm0H+YF!>6Ev+b1s~s}{wyRYVRo?2%nB-Hcj6(VR&S*!62RL4_6tS- zGjc6z9dY>FY)*DJjSmglFvkf2h?H$DwfAcK{*`AeWAhZs_a;50O8J=_jO6+ zbbafIaA+vFW=UKh7lwlwx!*9{zqr}@rb?=9YbNG!S!x~;N6<~47z;Lr&&eax+Jl}7 zav{g#R(lZ+$+V(FnTB~7x538*&`DCz`SsJbSEAsNmN^Ql7pKdYTM3$M>O9Q+vP4mA zI{vwi^NNDozMNlpkvKs2O5*y33sg`mHwZ0(y>-nfl;FJC7mt(&!`#8R>Nm?-I7QAW zO4HsnxRTRiwSshy@KWXSr7AqxY7)6BGXP-kEb{FzdWTw2W3bi9n9g(o}O-S9v6FmFm$Csd6A;PWeIr!c$i7gDK# zP4lRUxH;X)^}grhjn3a0Px!!-!WOHqNwQ}qC7c^d{r#Hz#esL1abd9E1+`zBuo07b zWE)*+R1j!AH(dGzylR(u=wpp`51eH67nTTJ5WpPY(GSbs60M4U);_8!Xk*lRb!L?A z2k`Q}sJ)I`jOm6g#?G3@K9DLTYvJUj=AS%i`R4+KykO*tcs?U~oeAEj>MlH*w`DkF z2-F08Wb?k8&7QW1^I_&4-bN7hIZZpCbjp<9sUV2N+C4he6NcglB4%+{z;TyR zawAEC>CCN|5UZUtvB~jUiJbYQp2jA{Q)9M}gr8;$u|v|4=Qke#bJGl}KOT0cB$0m- zE5Ekye2ti^|7m=s+3`^XDD#G|EOE-tD45YDnZ`Z2-r;`4ZGc&ty;m~Lt3Sy?>H#e% ze+nE+re#kj7ciZxF=IMuqWhN&$bBZ4HkwTC7B8|>4$0nm@vjG^2bhEZgZ8l)pbsEF zFnD@!!AY2uf%BO20XAWV`?~Y3W=l|Z6@=QafR?u45ChB%6CAi$Id=4EX;|iANnkBo z{WfyYGosWSu8(nItWuF?*erS2XzOUW``K7n1A}>+P|T6G)vEl2Rc!eiNgho8gY5J@ zhLmLa{1+sVa7zxxa)#U5BB>okk=1xIFEeL%v^LfN&`9JcB;5SkC+{jRB#w%JKK;g7 z<}yM3b`1jZ4|ia+p*%72|FG8b>64KC>Y;8}*(GFJ0``=&OdH&{ijaAXNPITi^j#O1 zr072D?VMgU_`_~X@JT)-QyI@+LP+?x^F%PuL+A@-Ce-sRMd}j2!(6PUO^Q=Y$+N9d zL}zfY`mW92v!77_z*_oWEdW>$d^oPM{7k8qUr+gV2}}dPP4J)kB!U@pp;_?))np9e zrbIl%s9d>dkKEU8RL=zv<#)O@Aoc6Yb-Q5T64TQd{A%hHHQ-wBjCQ$k%7ZG)fmD>D zdYmrNF)_nLHM;>SM)ZHa_=*)Hw_f&0kH9I(aioh zJlpAkU&TnL`FM%8BWQA1WPF*pA+>|sHbc44F=v4 zUV7VFp#8h^Zq_Kk_I5V5#sWg!b^R93v(@$li6Xt#e;47|x;&47GO76h$D=o0vlxh{6&y8W;{ zYdyBn>-{QlWV^3a8H6iBeI3;qpdoB}Ek;dNm8ugDHl--GhWn*4x^J2AfGYt0HsCg8<^ZoE<3XV^I@a@eW3maUHq1J)3_uH5`GAw`6uAzlv5N8@v9X8>#3j| zlq3WD4%GgAiX8V}rKalnc$n>dL25E#aL`8A(h%+LZ4XWb@f)?VR(^LFw&@K0rAjg8 zUkr7}6U^Aeq-+pC_3#b|{ooYU5z^5qmDdv3#*iRDV~v5HdA^SN zP-_pmltgY}Ju11vs_Ryt&MJhd(Y@sG02Z`H4ZW}IqIlz2{Vwk3unvID zwtda?R0-f)>httlWvKLhx^I_rEm4wGr{;b}Gw#*jjdk_9q4Rg$&&}3}G;mIWs8g8B zu20&)at?nn!Y317k7;oV!CZ;qO7I%@=w)guUHv7z9bioT*U0@`I~?%qlQlnedR+{u z(KA$h%e9_ngrNyvDMOoDjx^yq1<D7 zMaO8^E%hI|m{k&8MY}wGFX&7tl%fHRP!D9yyqbp&Rup%gn)eoKee%eD3E(Lw3&&+W zlx4Ex`335)xPupdoG97l_4|R~@0-{Wr9foVv~+P@aX3H~6iAirbmkE;>n*s=747)y zcNosv`MzZ@f>9HoA5elWiuKCxB^XCvlp_qbt(8gU?I~QBir}QboRj_)#rNw-EgURV{D+x$=DU@%@&*XX-e;bN6bpH~^f)?|~i3wJ%50x1{Qd2^*m5Up76g zB*)rhQ51b;omv6rla2k_SEguj8D2rp4mE4MR)qJDXU++aMz;~MVW^uQ4UX(7n{^?FTGv~|^)E+uuNmqZ$5jBKc=Bze?FHz5 zB8LR({A2QM3Vi#*i7iRjLp4e|3{eQ9dpdiCG8&-pIa3M)#xxA_5=Y_d8($|c+v zZW?rYT-uRe9tXkgmS*cge3ooJ=aHJ|IWeJ?E9i^pA7DAiF8x38VzrLW)h^gC|A#wv z9dGw-C`kwR1{HLDiOW238HGy1ldlrz+rtECT+V$2K0T{)I{EaB?h7iYFA+{+R$w1e z;W-LosEN6bgNX(E5w!iS!`sk^I*V)(eZh{Hz0wdM|?eE&vcTdHLdvn{&O`89{J{*NNmsRNbxAkTYO0R0aKoq&!*AnwHU| zbt`a#qChjVPW=P}X-c44fl*77ce98XCy-Z}I%M%8+8T%ggji)P^)r+L>2-4{v%D`q zX#uwp8oDgJ&aarKA%l>?y)SN@X`8dH<_u=wOxg0ETO_2>rH#)?x6}ckK!<8Yk$If7 zc*2A|yXk}ZtQ2HY%!yKDRu@obvUyW@XKA+1KCeXOLhes>oGRKq!d{Ys;(RvPEsScm z!EDIZOusfn-+Q0OH&x)8es6%pxIUoca5L@uAV@#LdaeR%aOv@{z)A7fD^?+9aR)vL zc$r7W=YoZ5!Wg*y89OpViwF6>e+9i0NA*D@J}xO(2DHTnUwl!%{EvC(rU=p&N>$xd zan@(x{sk^8Up7K6%f;QIZ%^+sR<_3bG&k3MW;Ha`A&5z5J|!wT`j~fLZhq&36@`3m zb*afB0t(2DL9p8XpYLUpmrYzcl%y5^ns_7AOtS<2g)JriPO&9DiAk~waddYGDmyEr zFQ~iO-Ar<+4cXF82xe*mp8W9eY*ssZ{JD{c%Q=Ls^o*3}t;D3~oV75yq46Iz6#NZ` zBx^(dkfL$W80gUso)E=;vs8gvK2X4TZ*z24KigHo1VRss6@MMch<|+-7}k}c!m&(S z35*U~7ZkGh;jb&! zh;%HAH6$5nyo9xFL=Ue2>I5Bx5;N)TO=pAHq4SzIrcJsT|KzgUr71oY(uYQ}KaGv~ zhWkvf4`lA=Br!WD6QVfmvg_!5yj0s|d5YPKHFn#)xD+U^K4v1vBcl{a57#l$6Rk_k zk2Srsn7i*!)~-dkp1MO(lU!e$_E8#3)5jrJ9FF1^wmzcb_ z5lrBETF*wWwnRpY9Ip^>+&Sy%ER^466x*WM<3_#|1b{Zvybw^hc!7*k;(i;`By+ME zGH30-^2^R-qE^+-8d3jaZ5J<9x$X53l7lzDywFF`LL9=iR=&!s2HJC}`VHhSHv8oz zNK+~0+&+CrAZlSLbS{%46lI1@I=2az3pu<`d9BGXC8PBb#FdPHM}haTZQWGTic^g( zpj3Y(y!6UXKubM?;7!ss;@mgSNNC`med!Ws>ow}LopA~)ts6{Ii}5;EVSJ$_&mZ|; zzzl^aZx4hr30LpnN>OiApu8i$#|QtP`qjXru2M|kpfk+=UhWA|OsfAbwf*l<<4l)q x{pan`RsX2Q;}a3NODFZD&aa@HJAY}Q+V-2FDT+G6^a@|#s*xGG>Z0?*{{!}W5MlrT diff --git a/doc/userdoc/static/img/020-user_black.png b/doc/userdoc/static/img/020-user_black.png new file mode 100644 index 0000000000000000000000000000000000000000..807349b5494df5ad8631abb1fee3377bfd71aa03 GIT binary patch literal 11316 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 b<1oTYRXB4P>F?hF*{|UK$2MQDtMv;=D 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 literal 0 HcmV?d00001 diff --git a/doc/userdoc/static/img/linux.png b/doc/userdoc/static/img/linux.png new file mode 100644 index 0000000000000000000000000000000000000000..615e0ce9d144968ac5d19289907dd7a8a719f72f GIT binary patch literal 7103 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 Date: Fri, 5 Nov 2021 08:09:52 +0100 Subject: [PATCH 07/27] modify text --- doc/userdoc/installation/admin.rst | 2 ++ doc/userdoc/installation/index.rst | 3 +- doc/userdoc/installation/user.rst | 57 ++++++++++++++++++++++-------- 3 files changed, 46 insertions(+), 16 deletions(-) diff --git a/doc/userdoc/installation/admin.rst b/doc/userdoc/installation/admin.rst index b00b9b482b..99aa4cb7db 100644 --- a/doc/userdoc/installation/admin.rst +++ b/doc/userdoc/installation/admin.rst @@ -1,3 +1,5 @@ +.. _admin_install: + Administrator installation instructions --------------------------------------- diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index 1681f211f4..868e34ae99 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -17,7 +17,8 @@ Who are you? **User** - I'm a student or researcher who wants to run neural network simulation scripts for NEST on my computer. + I'm a student or researcher who wants to run neural network simulation scripts for :ref:`NEST on my computer `. + If you want to install NEST on a cluster or supercomputer, see our HPC page. | | diff --git a/doc/userdoc/installation/user.rst b/doc/userdoc/installation/user.rst index f2992f462c..aa496cb58f 100644 --- a/doc/userdoc/installation/user.rst +++ b/doc/userdoc/installation/user.rst @@ -1,40 +1,67 @@ +.. _user_install: + User install instructions -------------------------- +========================= + + +For Linux and macOS, you can install NEST with pip |linux| |macos| + + + +.. |linux| image:: ../static/img/linux.png + :scale: 15% + +.. |macos| image:: ../static/img/macos.png + :scale: 15% + +:: -For macOS and Linux users (:ref:`Windows users see below `): + pip3 install nest-simulator + + +With mpi? :: - pip3 install nest + pip3 install nest-simulator with-mpi=on +:ref:`Windows users see below ` .. comment: any options? .. comment: this section below should be modelled after the main page with pretty icons and such, not just a bullet list -* Once you've installed NEST, you can explore ouur `interactive script `_ - and find out how to create network simulations. - +Explore what you can do with NEST: -* Want to add your own model? With :doc:`NESTML ` you can quickly write a model without messing with - any C++ code +* :doc:`../tutorials/index` -* Need to analyze your simulation? Check out these tools +* :doc:`../examples/index` - * For analyzing your output, checki out :doc:`Elephant `. - * To explore simulations in a graphically-friendly way see :doc:`NEST-Desktop ` +* :doc:`../models/models-main` -* If you need to run benchmarks, see our :doc:`benchmarking documentation <../benchmarking>` for tips -See the main page for other options +.. |windows| image:: ../static/img/windows.png + :scale: 15% .. _windows: +|windows| Windows + We recommend the neurofedora live media for Windows users -.. note:: - Exceptional cases that need other steps? +Use NEST with EBRAINS +--------------------- + +If you have an EBRAINS account you can check out . . . + + + +Install NEST on HPC +------------------- + +See details :ref:`about installing NEST with docker ` +Find out how to :doc:`optimize your configuration ` From e7c1028edc4467da565aeb5ca4a0a7e5cf3b5a14 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Thu, 11 Nov 2021 10:04:58 +0100 Subject: [PATCH 08/27] add updated icons --- doc/userdoc/static/img/020-user_black.png | Bin 11316 -> 24481 bytes doc/userdoc/static/img/class_black.png | Bin 0 -> 13030 bytes doc/userdoc/static/img/dev_black.png | Bin 0 -> 19477 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/userdoc/static/img/class_black.png create mode 100644 doc/userdoc/static/img/dev_black.png diff --git a/doc/userdoc/static/img/020-user_black.png b/doc/userdoc/static/img/020-user_black.png index 807349b5494df5ad8631abb1fee3377bfd71aa03..286a28e2ffde270920b5fb583fedde147b2ee874 100644 GIT binary patch literal 24481 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 b<1oTYRXB4P>F?hF*{|UK$2MQDtMv;=D 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 diff --git a/doc/userdoc/static/img/class_black.png b/doc/userdoc/static/img/class_black.png new file mode 100644 index 0000000000000000000000000000000000000000..4b8c31710d57ad30c0e9d91afaf584ca5df8a0e5 GIT binary patch literal 13030 zcmeHuc{r5c|M!_0OqRh^_N^u=gqX3EwW6}6Xdy&okhSbf%v3TZl!URiSVCDogb;Tn zDq{&n5>skQ_K)mi<~jO)e}6pBzt4Zq^|&tAec$Ik_gUZXb6)55e$DlxM-Jfxqy+!~ zIP=4%wg8~vEgEd#gO@+yeJk+76SUv__y+hFz2O`UKJy12b_jy```70CI5H*^3?^EG$gj+utY1{cNCzdcZ}`tSJL&0JZ>g(|yOovnRhq)Onn^^pm?- zD~jUHMjzf6-Y0om()>8#%69azZSN#6XY9Nn-tfb-uiH&_XQKHa4@vR8V(?3wZlR6G zOqQsM*S0F6n@_q|)Z`nh6vEY+@Uo?LBAuW zzBmK?fSCO!qfqCWaSPW~TWyPN!4ehH_Pw0F+{K{g;al`YiPAvoZgA7lbV7hln2BaO zAU5dFRuLId)Bv;#j}bOno!D&nL$g{6Ux}F^Fb^|dBM;k8Dtd350_x~aj8PVS+(O(P zNYZHoNrj)f3}Z@;D)*zg$Q3Gccz?*vlQL7n54~5g#5LC)#rlir^q#9!L9HO`5nf4f zkU+@AHA*j?U>=KWclagD+=MvLBSOa9$PO|yN!TRb1>Og~W+{bRs6Lb`YA_D1#X<-bN&4Cht+Q*=0jxKgJoTiAoUMTZ}SqU+VroY+Q?HxUu*7V8Q*TexJ4U~ z3&+mvZ4GMb-%`Pkuhf`XMdmE}3B?(zlsj5;ncfNmU^j;F?E?jgXaZz?o$bX@S4R<6D8$7{C13q=a8UAbmw*A=Y$cy?jS@h-Ep14#| zJQn;!>!+8Q^)MgvCcR^H*^IiX7G4mwb}^lh!l$D>ZEfbT1N=+&rqSwzT&MaBBeRxL zN_)k!m(H8APd1=qstImprr8!%;%<+N z!WFICUQv?|wiLHt3iz`bp_sNDA@#Q_IMt_7m!p_J=*u}haaPb64$oyO*w%}i6Mwof zJ?IfX6}hm#qWDVV8FSa#o~J^69f+p$^8B znzrzh(jy1hx|40x*c&w6yXxnp2U)S&Ioiav$esGW}tW9NP%GLgFtv=0Gilqp06hlTuGZ!<=W;dI35x%`g;*cPVeyxpM zv}`6lELHuS<)BZP@#%VD^M{MS83sX?v2Q{5!-d}89!M2zlNQ%F@Fda4#;;6;Z>U|o+gG0BJshR;)(#lbXp5lPxjxCFaR)KBC>S3!=(uvm z88+y{V1S*>BPp;~9It`plmyG&jffy~tj7p|@a-ZqqG0^i@h7TUb4cQv2*xCy;AX>2 zK(<--+tM2-o*pb+3voO?9xajjcwY+T6}0NOSTFGFu&M6>;{0k=flqN?GkVpN^<0TB zKzDRWV5WNGsAZ2qKRQZd$nb+1<;xzitXT6da70;;Qwq&Y`dSg}wI7@eVbc~o0&5oq zhsdnuOTv=)&!`a)IvwO>K6ulSQgn{>B`B6Dgru6axKoK1{r9oi@0+$?+AE*coPYLH z4(s_CijOk3YRJ4$kkE~h$NstGz^pV(-eI0l`6B905h&bA$Th1{d-CGEeGJdU9lFa@ zc%%0c%k#d2NqKCukSxx?=f=~JF){jbzq7C?UP3eb^V%>bT2fD&7@+EW z^LQ3*fL9N%hZ?8}+!LhU$&k2$a#bO?IWiBrroSxk?OgPp+O&3^(Rd*fn?&0IG%&-$ z2IS1P+5{&`-oc_n;Lc`Y731N0*d|NF3M^-F)nm4It z+45C4XP3P7T$RI$-J%X@`oxvJx|(+e9lLYw>yxaPuuM;_xvLDefBzK^Rv2-Phv_+3 z8UHI^I6x-)+@Ut-$2@1~^l8hYh5UVQTURNkY>jwi`S~c`dVJxwV+3*gLv#Eyar6kk zkt?38r}X9hnJxO&ab%mqh>k)PLJi*;gUM0#_p4fSqj5gBs--5oeys|m&wir~3~Gb+ z&3Ko>y)JgS`=@CRp(jQ>D+GM@|IEDM8?lfIwTbr_cd7lsxnW=AMk!e`e z!xl=1W~9Z|nxXZWbq@t`w5xWneg3#4otbI*If;DxTXkwCs_vb2O#Y`n&cvA$Ug4e~ z?WKGHH4#vR<3fmu-04rcGC~)m7|YQhD3b@(Dt~a*=V_J?~`TMA_YFetH2dw#}=)#SfpiKkfg8NyAbgt?>Aroy%i&HWIxC{TqcqN{Jh= z&$PAvc7wq-j%%H=UX?B1Noquy*q(q*tFpX*q4~7e&_)Zxe%taVe|wiHCy?ma8#7&y z>r>o+GUdi@uqzRDFNzPC|E8i`y@kLRA~5?#zj9F~DUq(gUK(Sv2rKKuU=ZI& z-VObkxuuF??y%;NxK?L}|Dyt1Yq#3{qiIKfKa&QECtiaJQYQ%RlKO82*{EN+#Qzl4 zqlf7>^aP56||Rf9yL}nfPVTvCInv!^YVt`^z=^hU~qT{HW=hr5i*v z?pw`a>n`l+a7iKGM!AkP9S@ucGi&*ErfOl&^HNv-zq9TZ+>wt>7nfZfLsSKlM(&>K zHmJ2#SJkUg6#FVoQMy4ZLida9`nsK|>`wp3zyCxuX5gW#RFns+KRpQagTtArK7efc zdFRK?yUvO*uU;Ot`OKf{$MH$~%vSOimjc`EBHu0L;AaP3YVUGfl^u4dyV+A-us)?3 zR&PT9Nap3}5NcGM+FAw&xoNCtsmE8Irmh?4ojnS5&4D-#o^=McNys{@If_+OzeHquKZl+Xit8l zP+)6y;^;(ANOdTmy28I>l$x4$se^M^y{KJL$`G0ff%dud0>KPV8RkR$?ES6Ia-w)g zvzB;Da!;S$<^z$Fip61k6puFy4Rm^HnLD)>ErC0mN2$4%AlZ7kd0E}tMc=$64duEV zQxuGnncdIK!p~++o{l?X)}jON5MAZi;*nONS?xRdXP#{c6!0n*FpHB z=cOa6ltsJHsF99m1fodx!air7o!++U=xo1f4QGTrfy(BM-a|-Aq)iqXnwa`3;M>qH z{%z9d=i<*cpG@hK@dSm61dderk+HqvU*(w!)H#Zv)?AIb@J4(Ch({elH*fIOe=5*0 zr$JvHQWu^OqU4+3jpXhIR_3M#o0jqzA0NMqWS(aVBIlVOd7IIXc|sj$#*L5|#&FQu zGX~pM0;{`jCn#4Q!napQ76dPeD~HLUp)wvASd5(bLtAzX*lMtR^dq=e*XbL z*SK>L&)iUrV@(!}cOPhc-pZh%?Qo3 z#UE)#>)$OaxLAwndc$yRkbeWVc-!WpC2!Y!mBnV1y)$Rl8D%yrb`UTohqUH4GBE|? zj|Q-V{U#~Z_+0d_qfw`t+9`P&&Xyi!Ji_l73iI0cih!c^J3FwgPv>4bS~s<!3r8Pa*b0PBY^s`<+s%rT8fF=UBCr1C)>gAF0X^Wb0)A>6B_- zK1yzNRJQ{EkYjxszFtD_pVCVlCGVR;!0;WzlA3;YLq=f~HT|iJqj?V@Ld*n(zp%Sw zGCU0K+czB#&An|7pIcN}@2U#rMm28S#7VMF)`yCT@BWXc33zv%GRA7)vs-XTkikz4 z^E*Vaxv$LLm_iFw=Gc1S3#x8A;vi*lN@UtbyC=>Gp4HW7g1RKiLp~GXyMq%Pv>l5Y)$VW{LB*JxP zEDL-b3N0xkZyB-b&TlU6!N4ho>z@!H?jq#!HVW&Bhg*HUC_cW5d_r8vED1{qqT0GW zX#p=cd?hY$=gc^=75V6)8cAEFCQy@65@gn|scT-~7D*XHDI^eLg!C@6Y+qiXI1AqW zhp$ekZnK^-vDxlX(izEhTLAZtn6}t?Uq)UaMCy*+Yp?UhsWMcJ_d06~_DX7-BX<2>95qLh zNF4#IiR_gbt-B|Gs%P45DE;iByRaH?j^(OzSPMMT!Q)9)3Gt{XlrgV?c%4igc4_-e z7b$F}kwlC={;2N-5gH^Rbo7Py%(H9F*r~YPrT$osF%!+4CeD?myp{yV6KLVPW?ZQK zz{csjaRYv7Q)X%G)WoA|x(CSkXPp7Kg_U?^Sm3qqch7T@kBB-@f5XUHRY$kK_;W>1I0T zVUPU&HjLo|9rd{~+-MExR*|v+fkGe)k57KETo^4lQ}^0y22KJ}Q8B*pwb%mDn%Me8gxZOJj+^>!Z-U*{;PY2K&oP?al5W zV+Wz8(3`yjlf26*sdZdF)9i5U(;3c#*rrbe(Kzsgrng~fLr15rtpW!u zJ^A6J3`eFLR}ITbphtL*5iEAjb2KxYX9(YB@w5G;u;i-cQkwv*(I)(XXuH%jC4#&R zzWKnM@~X2?)$)O=f{MuF2EerC1}&V}VeJv~B-pUzqa~$u+qWI?d}IAeNSm`KW@g;s zy&ag`ZWN0%Xtu}qTx-HMZXq^Tr^bF)2DsNkR`UVxI_S?1!P+1B<4jCtH?VPMy2`&U z8_lo_t^y3jBI|3b@lP!M*`@U?WSoiq53WBmXn?J4m5efyz<2F(rd2Bu^*%H!ho!6E z(|O(rs_i(jyp8v2_Z7TVi`%fI*wmVu z=Iy`T)w~Fkubx;j+qFy{L!a+$SEkVPK;6cyW^!^7hO}W@=I@cz;*p03vic(cjh5b> zJsoS+?`|%q$@3^fK$@GaYAJCv>qtKw4^?V&%jfy?vO3SUBibOd25&PTz(_>yK-#WA zQ2A`|DU@l;b>vXxvX4PF|Iwc+D=o$&d3}Ry%irht?)haCb6g?zH+|5ry-Yuj0=R5`N3*N>hK3e~gC``eGzPZ?b%^ zfhbxCoK}%B2C>=n=417=9^uGH z+T02;CJk@9?uHlV{r+=F;L8G`JyV5X1}khwi#kQR^@B}^9VDUB65x;Vkz;k^`gZ1^GyL0+r0S+Zl#(o zbAF>E$X;eLRm6j}Xd&?sXB{oDg&>^o@Tc|zNl@i`OlEPhHu8I+lKi5)6fPTXVkaRX zgO#@lYWU@eiAQz4D7BP#^D2Ub$t;2*m46=f{&>)!W-VlD@pDf!p%G`_z`U?6(1YAL zlz7&cEmJY8@xtl}%ByQNmd?UOo_zA~nf})Z#Ec$s=xZcAyJn5YVq!4mqzIF@0KzAf zO_BFfQ1Xr=V>6{xRhB$`d0tsA?DyY-Y+T7`lc-_t#!SmRa)&e%omm*`O&)fvlUF-t z`Z(WVU$oWO>1+2)p{49Vm1ECfCWd+|YEhn;B2QL-q;yc#f12}Z7cWJ(cNZ%|EDTfB z+Zf?A>ak-~6mopi1^>$JSQP-1MQg7px@e93iT<@biZRA0hrT#(SO@1rhohWv9dzf8 zG~|9-Ds&Oa=70Q-;V97m01`Oulw`ZvK}s3MWR=K0$P7XJos+bwPZ6$Qv>q{FGIF;J zm(Q1NM^Z&G%c(BoW!c5gM8gk}&p6hLhNu!^c$XYia42V93gl(<`1Nwh?}u-F;brRt zo+b|)PhR=Fr0Y65jW99LS$UiW{r0qn;sR~SXO7j2&KI#ncTa-d?uoJY$0@oVERSBj zjK7T)#_ffk@eyf8MTMMsf6l+~)5(9cd*UA5JbeJEMk6`$7f5_c&wzs!J#FI6=$YlR>MjgG};g(4=7a6E_%K}F&8N# zzl*ZX97P%piN^NzqBtAtt**tWdk zMbuDtrd=yd6Rj8kN4-b$rc05p^oWOldyJAi4T(K}>w??rYKcN% z_0u30(M2p zt}Ndbn90o{<+1%Zr&Ad0;|=aiuLDT*-#jiNmG7nCq+KKb;EGNy)XMAi1#wO%(Uv?i zSNGji;bC-ufu*PXIvlCp)l!sK@ca-@ehMA6J%yf^M01yN*ibR+v&ok|_`tdYIBjUm z=U$Zm#$ZH;j1frk+p_uVurkf^r2Zx2@5;TOG&9U7_)21+>W`5v#v-!cw;RKS?izU8 zYWxbeR7_^M%H<(jX0(I!d3BJj9YSCBX4<>{4okWdStGnOjcg*$IqSr#y>2CgCLV)_ zR(nMBT4h!r`Ak|NJ19>q`w43A_cC9RelGc~5dB5hU3?5VWwBYSOPl`8<*W2@{sR>9 z&BWNN*DeY$>o%J03bY+V9~ZH~dL0~keZ_8Vx_a41TD%iPi!F^^{1JGTEPpaE`h*H0 z>4AgfFDuHm@9Of6*}U`bW$svW@E zmMtF$>VV_)`W)+7_+Ar_4(oa27sW9lelb9=&R#4~x1xl(w9$3LQB9qgd4HJr2qs37 zhiwC+$57Y6{F~NtHv;iG?F%IZ7tUog)-#uS4%BTok^5J+S^j7w&gAVFR~ymhZA;fF z$>9%I?&R@`oI)E>@|LtgkR!*a$`vQ^y>;sF@uQ}X!2&i3ETB%-h)_OEjtWBJ^921_ zlWETHGvr(eyaq2v*b|+mLT#rCQp(X>!MYq4%j`4ChA&r;jh-R2uFXGBAY=0E{8prI zJhKB5y=;&+^X>l7lrEu$_Xs$`6Y2oL7*0=YDUdwed%{mem5|gTT4C?wU07?JM%Pti zDVVlcFs%_8YFntiNAUxE2iyB-z+zEtp$Y*(>L3+LZ2nz_c8vc_uUR974OBxo8zVYLd+yXEX z!%rvDQdX58ZKFrXm+=o|JVjz3ekxq(GtV+MA(#1uVJ;CnSguuM&K}OlKg&LE&;v3{ zkUMEMAaV=42dWcSb`{2oTusK5%MK3mS;rGmBK8YAI33q%{pi?zpK$NQ+ilpH_HRo; z?rAsIOq*j8V$xBaD)rA$Js0XK-+S%ZwEMXYJL?V|?vCT%2JA?S*SXhYzV$y=mID57 z82SQ$^sAf27JYbVLL~NQMEfE`R*O_KJ#GNc->Wv3&w^k9$pg zh-=MpoQ#$Jazu?U@U(u~!JWjeq9oBk{h826U$!7y;@-5T?(5d__x7j>d#?%YxYjt9 zZL^WM(bW5-g4@y&8!|?gY~C^yQg;%F0f1A{GB7u=q`g;_0$C|%2p_(D|JfoRZ%`>` zw@v${=x$nTGa^Nj5xhI&;mel3FNQ3{wW@1lDvT3GzI#fCdbjn_5*2xbDrYew47Afp zucZ*3n8aftL;&6Pg^iMX2}Mc}Rg2l7$%fdh ze*dU6AX#X4g2zMux=6jwP|3%knqLMUK-jHZEU|m(XEfxdl9fqieZ^pkSN@Fagq+q~ zSrayqraxx<=W#p3_LSqJTQogcz4)&alHvLtiKRwb2dud${OsY(4@*kEIdrarmv5p| zWftm~mxmu&{L^q%pG1A%+zAH^KWgOur+>n>L-0&n(##a?t>rQp_pj(!X3xCo5;Q;v33@ICEDXIx;V#TyOvTMux%R@4HR07qfCQo zSA)dZ&O3sM`f25P*NTq=dv|avvfFNb_+w*D;k%f)R<);7CLudR?q(2yt;?V&jIE|A zD@2yf8ehnV8G-~7SJ(EBmIxOtT-OALFTG=^Qu9!qc`v_;>u}!3*e24xP+e3=Y+ZrG z(%T8N6#dtc0w%v5$uSzlaYc~s{)@#lG_0kano({{cik8kK9eYK79md&B(sgr6Bs=!D?S<%o3 zHLMhfbOYUKrY$u{SMODd*yJ`!7R5)as_)CpjT^KCssv=%ir}M8i}Zck2BsZyjJJKD z7j$pJP^yFRvt(wnK-$a!=6m{{KEE7o7<3hz8NRGEgqoO;2If~byEZZ!QyJ-O`hFM&(|HlAA70xVyFd@zIXcLK`gqr9go$o_^P7GRO z8wc~5^!)Q_sbF7J+e?-R9Fca{(R9A)8;r(4ckU}l4!wotGxWUe{yw~i4_1425X(RH zaf9)$HcmW`9LS^T5hnNSLqMygcq zlxZf-8D-Et)ma+#eD`*gp?0dS2iLe~ZZ!4U9R|mZt)HU?G9gaC}$IjaDsmx=Gp`YZBI> z;OfJ?gTHVt-hCGgeoNw~`TW6fa)*m_f=JJJgX+~p3JJku(y{RAk*+$^V!3f^o({Ss8jDq^2NiJ-m8r8?k-zXGGTZoyXR*sdUy}pwzq1` zL+-SgB-4DH0^LwqC#HA{Y;E2M6vh@Tlm~aCo?1l;6RkM~v1bWtK z=uARz2|le3J9h;x5Zl*XA_KBsw(uJ~Eadbq_=W(T($NhL(mGXZ2fv|70Yx?FV=6FI zMrv!-IMD*OyoDF|{sU~*2?o5v0pRJs= z93)^UBzdlIHb2_~#v}vPQusQ-mW~<)kjG;r;6$f8)XAF@;aApe3g~9Q-c@lzWYpQb z_m4519yY%_H~%*Oy*E3qF>Y=gJ!pEOt5&DLWrQ|>*Q0C~f}k!4d6gcq6h#@QmZMw> zyjMm}vow`Xbgr-2CdStmRt~m=B27paMwL2AIkYRBvG%D3d4hzHIym(U7Y>lirk9it zm;86$mR2l!zCGUQOi?udod-i#`2uhV%u8WJ(vo#US-?tk(PFOC3Ex^3WnM)kQghnPS^MS*n+Rb1{zlQrH}d^As;NR^x24a zaC35TF|R88E(A!p9V#gZ}!mFSsVYhTZ-mS#OTni zkA2;H(yZk|uaQ?2<3z7fnWA}>zyGnJ2(wbJkA!S7d}-l@y<4P9DOH2+mMQrW1me$y zH_dVbg~9ufXNco=XUPHeCH+LI^=iZ6#|rA`)cn^Ds9W@Liltz`*3X^H6`G!h@+yyM zi#q;-K*xFRKJ8fZlxy3yvP7)#vwX}y|NJm$iDarUqnU!FQ@a?>Pb>bpG;yHn)d)vu zX>Y9Y)`eGa12~<%jB-82JZa!Le0{4f4H7S#?j_yhKOXc|Kwik%cFeQS=`wnYffRM>}*g zu2JJ>>^8CQLKH={PCg=_N9g)z6Hoii87Hu`a}U1C6x`$)@+_xH(R)Rw<~+xWIhZ?s z)c7RIZsbCxVd0BoDdfYxzAPPrFt7Tr=ImJ&L$jgWa_;6Y&OdG=@97c#huT~=+n^5j zeDfs%cyRcE%tbySw^-=VLZ3n{h`gLg$fl0ToCIe%=(hQ zcbevW%Hw1jPuj08>g6hWqqA_ZTf~mUkg4$^*^vL(tJ(|kfZRLuJZ#eReen?YymcE^ zd+}f@H=XW@R+y;S9CGeQ8u#7KzsY0?l>dxG*6VW;==k8%?+=SP@r3WFIMDT~teqhj zCBG>Ue@{{E;{yyZF`d}pgq!%_V7BeVZgBjAs83W=3aQvE2c2<;9)^y`j7%2Fny2)| zEAavfgDqa65cuU!`)x(@OZFE51-Bo0-K%yeMRES@0{}#_h4nU<3*S=oW?9JspcQn9 zoV%e>T30Yd(VM(W6)?OP`Smu`;?fkow_7Oz1f$P4g~=v9akogx_qS35CPC8_hQT#5 zl_}P1P@`y`nOn?9*+Y-8Cd+S-<#YP{S`rp?F^6Y8ZEJ<@%xPwtdRvO3c|vXe6H2=F zQ5atc6EhGWka%={{CI8a&v}tHelA!VE+Iyv5Z33=9}F2e{oVk-pkhs{q&hD)Ld(J&~u{ z8}b5R=q811U33a{I3@oq+)Gl9Z(U!V#Qy*7{~w3{_l%%K6AYbj>!uCdzou!KGnCrY z=c6qz*_ijVoEHKGMo;99{WmcOb&C}ApR`E@e8V4Yd;O1`ONq63Z9^BRS?S1znwVl6 zA63exDA{S#cTG+Ilm3R$qy0yPkc)LX;{|bzA#tuy9ebT-2oa87gRCe1d_)tL%o2-h zP0POy>4>8j>q8xx)ihcepI7oF=^t6feRI)^)MGrzhejxC=#KbKA_ zEy+f~uz@ZpN{2#?|B4&E$~5vCTBD(;F`nGkutr}4y5n7oOANL`LBg$k^FCP+%Ijai z-gB;_kSDa=N&}Tjx^r#edWr6&%%V1wEimd^SsLDHCuG2B&vbPYV*9k5Iq}J$9RT=B zxfz`6V$V~r!XdPQ5^)+b+Hkr3Ek#+tHU2rMm1$TCkrLVY193esdRKxBEd4pk45sXhE;rJ*gO(z7M zp!yXz7(*W`c$jkV{)!z48q{5Ys@?l9_O`)~t+G)tpc#`*wj9i{?0>M&K@h4$b<@>N zQwm>8Q6dI)mmX49E&3n4s1wn92lM+10l{;upVU!HSb|>DTJEjrKk`K_i|7FXs{mffEPai?5s7N;Y2lvYM-LrcIo5?K2zBhzcC8kPc9>VGeG! z1wLc%`v(uHsl(AOCh$?r&KF%3DM%{Cbn?WMUCMT-PKk-WMShXj%SkEuN|YsF^VUk=6KV2nKq-FqkQ|}VSM;FROoR>sy;XCk9Xex z^mzm}?DStHP!@4cGL!f6snjx0bU*5lCu>}5Zc1(K2cuD+=z^8)@I51TfwyCSv-{9z z7u!h#-rZ*S3p-~}Oz#4pPnXLv&A4pCu_IxVN3OS_cVKLC-29yD#MgsJFnnSzEr3B% zpC-Gek_d#=1)rA_k8~w@&k_^LApObU<4UYLJOtpu37TfC|T3ONMLC z{8E-%(aHQWp^oNkB~EAbTu6r@Zd@aU^-LZ;p;d5TWZ#@q*WX`26b3t)mt02OgHmPb za6*OZIvTHM_TMEHi8OsN^3Pgaea3Bqf_!22>zg!?D{MgBzQG`7*qsx*FS=|y?afJnu;tc5)l#v1O%$QoRkIx1SHM-$$$X&Ub0-yg#rPA zQ|G6p=b>TlP4436Y-Q^JBKPoh0g;1zY^@+5eAdrD>U(|QZ1=vS2_a~7S^sHk3h!t8hl$V5d&(!a^UDXZ(maX|^1NTU4O zPA1=yl11YxFg@R$^g|bm?q~rJ3XuCY9hN?x6=F$T7l`R#E#>${GoWznOnBIKN5%8mxE3*!p^blK+>bP&(q|z2t*KES*(I%LmHAn()k=6YujwF95s&^3 zOVMpufwg>TL7~2}!jAi!hP`8J`y6GFElc}?o&9I;x;4U1cdw(6Em;EBGIOVWbr}-J zTlvQ+F2_TCt9-{hTpgpG(TUnmUF)YC&I-1bj)Ip>Kb>+(`F}`xFEpm9^8apG6m34- zc6{2Kb+(-DZ^m<~@GyIvBD&1H0fgh{WxL6I4OJ|N$1e{FMVnaD3{()$(VQv3J4QlQ zT1am`$N+F;x1oDI%U&4yfV6U+3U3Y-{-m~FZClMSc=qRXiXNU@>l>C7Z$w|RYN-{< z-CsY}2`{lWJq(Y;_P-1LGYi|7R6%s}71hs~-1)kc zmsPbgPo#U=vX>Ok%)I4edwu+nZQ4#5H}9zI`fCnd3^nIKq)W`~eGJKqK41omH|5TH zb{fYEA+D|}5Yn|cv-hh}L865*RoMl?pprNH#Bl{ZAO$FRi0h3O7kUJ8W|)>2XY=dU zRh+#L`5iTegVZL|ULaAtvLcLs{W+?Y^svQ?DdLd&MCnVR4G02{zfD-@s7X+@uG`xR zVqyNfyB^AKF*y9yfa)F*f1k`jsEw%&$_Hi6Z~BM{2@lORF8yj^9wa!*EEh{jr#t(B zPUaPRSv9GgYOM<(1zs)u+eQqUZD_}&s-;3X09~&pnIK&Vn__U|MBXfq@d}vjRd}`i zNPB=H(jIaNGMf}yv}Ru(M)xK==nP}FtWOuhI=kARZ}?K`m^NacM#jn?OW;sXYm0{p zgR2EjI~^_1HN4ezq?Js8>j?Ci9hWN*nZ=ABOglV}K?4dkPO>n14p2E+LJN&#U>@*9 z_i&mlHH;17rSAlVeh%d??qwzWCRvKHQHI9kK?8z>b6Ya_`H3IiAzI@jbQ*gVI#Ent z?8d>0<5HXEM#OGQqy+L)_?Ws7gvSiMRE63noHNcj;iK_S>KTO#Hk~CS6mqtQUtoWD z*p{ELoEIQrZ#CA2I?Of&iq?M7pC3eNC7~sbp0Ucvn@b)|$l;M%VL&k}6*eNpV|=0f z!bjLbTgMZozPK3WVIgGXUHU+)=DK7uPk3xHS>`6x653Um7b`-n@erOQ<4m<6%NHYb z2P3Bt%ajf?KPO5rz6%?-M8!w=I2Opv2z~V{?rp_6Fe=w+2!zL%?_2ZRFg{6r&=Zle zc;Te#vb5?+=|s1%IM!yg>t%tx?5gCU`Fr+iVqO7e!g6MSPV^GNjn8^^?14PbM!_e0 z#FmcZG_x-YA=EzH5OXX(-_|8%V2UuT1f|s@15_dHK12KL94JY&rom|-tj9kIm6B7- zXxDui=!(ic4+%-LQ280(0jP+ou#6cugJvhyVyY~wCL$RHM zj!yCwqggSFc8;16%O7ft^Z}4{p{xtCOq@;a^15I_u4Wi;`7e{9pU#XcfAwTZ7urn6bm z{T9`YuiO?d#P=}WSxLt4+8#JZFurSZE_J~L3_qcRtS!=_2xrD4-J6XoRC?!+c)$7+voNaoW`#`6sbI~iP?VaknCty>gvfng$rXp# z_aX=1BX}^x3$BHP^1_pJE|re;IC(Z$S&UaXDhXlU38cYnWbE@@R`GWIKK`>d#6^Z* zi8LYsdAU-ks7!Q$r1%$fx|+)yt6?gNrvZALTuW6mJzFTd2->5uh&ee(Ocba+b3c^D zQ$pkeDcq)KIyH+1x`UjPcy?mDEj8yOwYX<&IY^v!-%{noIUIBzuuexxIt9y)V>qE1 zO~TP22Kz#b8tLw`=>UQw#dm5e46z8S!!F|${31UNq=lrYE$InvFd7PSSfAonBl$;| z(-52z9-&0*&jfi|G`jTL3W3nK^o(J0%R-=GG#_q@K@^odk3~frUqU{${QL0_zVME4 zIVQeH*BHbY=f!ZezmYuhiNRT=pAl`{8h&<^l*wt5bk)RoHJTHiD6c8+mi0J(KER8H zLQ9hU!HT94kbuW-1St_`H-d#@5PM89oZODelgY1h3bW1hof$SWi6C4VJBlHDiTYqc zT)3Tf0r#8*0!|>g0RaX^q}ZAv#CjA^^b)otl^kb-6&yiI5iB=&0vo@qyo6E>C1!amFa~EWWJ|0=6zem5ob!70Cx;hEreq_N@(KKqyMC3n&7tyRKUWIQjfxk zNv@omTWO}OEN5;stO~-CQGVEmm4+|%dP?BiwFR5{O+)Xr7@t8nupkn;g*pr{dL0?c zh!Ktf&57awYGREN)5!TH${gQ{57NJ=T)L*ag-5sgE!krz@-_4klSgJLHy5D+%w-DUFwS3q6{zw+nO~ONueL#NGy0rh8x=6pB4#Os7b=oDBoS3j zw4z!5gpCnn*U6d*r^ySK2EHV8$>aMJy__`wzkqe;OQ0s`Odv1y`Ltau!#?YB?gJO2 zHK=H~gbsfk0M}lMgMpCUGkvSh+hFA% zOkU<$X`m%KQYFmnw)UT8R=Ri-co z<$kxS**|DmL{tak3lSqKMWNaip3Tu}i~dJWZL^dvd3wSymph`!dRWiOJ3B*=5?kT7 z>>QuDjWBGhEkz;-OkFO!@B%Aofc8Vwt=zWO33GOWm+QLJH38C}tFh60W->12#NQ{M z%4vp!A3D?|HiB7;DJ?54S zknr2!FW2YFT?v za)j!87>NZ)Izb)AlS1xY)O9Dsc@ZXPyRg%xz_kKC?MjJX?-Ukt`7aiDtsO(pQ1L`C zB4UzP_$7&+U!;Q7Trs^kHie6(nFN+V=gT{ZCs|RO6#m?M4AC}bS{bovK1zy|NH5?z z`4-){Vwmr~VUk2F=QT$sW3~|wO+Ux?BqC0ZJ|bxdc<4@jJFkztkv}PtLy;n@N^eA8 zK({WQrT%6*JC%NCa#%b*NFy-DTT+z4v9;c{n7`p9#iE{ack=XZytTlU$OE}4uab}5 zh;eWpg(^?#qe5QsvR5m6Uh%9cz4~kAyw103 zx0hpWN{B?1dVq~{$IQTd@|-Z%_xThBdsJU39m^hXeGD3`pt#k&nU1+_T6gmd;V^zt zed~rxY+LwMv{S=&FGWZN_^_*N_|*b?krp>4)1JKM_)NXp${;}{+Y)&lTu@mO(m=hM zT|s{lRK{d8{rR(rpRAzIoPP-$uUG!$f@ast=MTu3UqB>bInLKM_3#;fl6szlFx29W zKMcPPcXUTBuyu6Q`(Kf7vkbd?|Csb!@ojkovr8lh&muqzO*L$#bPn+X7DK$a+H0}$ z^q6iw75fy`W53xw+|$0H`#)dMb$nt8ngX~EczX{fCo%jMv!R~v``x8#=OgKEV zd11>u8qYiJJjw-Srd;!oBSbbA4RSdKt8zkugMnN5M zqv-&+MsH0$$y5#j0V>|M3zRvVh2VI(_zzhPh&tPk6x0&Et)3Y@TZrabQ?4ZImgZ1i z?TN{GE1vb3-FEIN2M4al@()HHyd)x8Z#@?*$s1`mU^VsE6dNelF`5>9aq3KpPjplp z09P?uJUneigvE2wa_76oHsXuwql&Ry$vX)tRR3*P5W?n~fRM0%Ir7z1xOFINv!aQ5 zK)t^%!}>S9NzmKd{`AX9aerp}Y~!XW$shY)jJRuUW+`a2Jl|1=A7^B@j7(AW`brdu zgo^|fR_(LXS&wkoY{>g)WAGEP`b1Kcc6F z?V>;5bVOTC-};2hdSuZr(C*vew-H{KVaX~{`C!mexl1bcf1>;j?RU}@gUXl$M)kCj z&xzbe3Y0P9RnV1qEoCm%K1Dq4z&d@0S;hUmJy#P=!Ho2ZiMXXe%HM6U2aLLf`6w4^ z@ssw`=7PR%!;dgGO!~tZeqMd6+vk-h?@3wHN6BJ{SC`=)?<&UMD#|@hY`iZ0raWmh zd~-Yy!n5CbhPA&e1X;$L!E+D%7$pQ18KNE=ryH!zg*r(IcYT2L`X`L4)UJ8#|Q&*1razrR<%|5s7y7tXnVKAcg)%LNp- zJzmlKHSZ_pQlYrtS2T%i-&Zd6l$8X4&W^0+md+L+Rv$-~_mxcu2q94)7jvLJ$b;Mh zWNqstOnKSePf2cTDNL!$t<0|MA_=mwmGg50Y5J*X0sZWO{FaoWB1l3$0`CBhAP;kL zA4dl#cL5(^%71VL-mm`_vr&@&BjRB%OsS`=MlR{>1|sKT0&HyF-rlU`Nzdx4xhsQxR2CGbD=T|C_! z{t3qt$Odu%Ilha!zgq?TH7b~OAcNTJ2#MrodpC0 z^0RQ6oAa}nb8+&ru=DWpSXh_?cmezz{{>3k$=$=;2?+WN^$yNz`;NoU$;WTWW5v$` zFz4oC;o<^;SS*0N>@2(>9v(h!5Wl%459q%@sJhv{XQjErfA#7wl;t}VuO&AZkjsjj zg^SPJiiOL{ikHQLgO8KNij#|-pUa$s9c1+{C`+J#jI*1g`FnHPI+|O9*j${f|FQ9x zZ~<{Od0|QpR`&laQFAc&uzFVzrc|%J39zd z{&k7`ujW7LO)m7WMv=31f0yw6oALja^AhIP|N8c?F5qDMPZc@&KWQsq4*Zu9cXKb0 zDi|3tOZVMJJ3jj9@Kgfcgg~yVY z&m6?ZZV9sZf1$fOTX}e!yMe^5-y?mG<~@P_iH4m1A1WFCyD#20puaq^a{yQX?+3dU zfM0-}M*zUd#10T(XQyQQw}9FH_UeC+ScvWa!->#80{>+gc-Q+^+57PFK3cK;$8hy; zoc*Qo|KjW4+T#DBg?H%xHS#~=_kZd7U%LKB4E&FT|2Mn-m#+U21OFr8|IM!d-{?a6 z&l?_))B7yQ`~7x?v{3BR`(}@DTS-YZc}dBC-`@cNL7x(sA}lwkh7+NxDP4^#E*Q;c zS*3y}B~9FlBwdAJ7okIQ+D<86>UiXfB5wWVQ94pUw=#Ngh)lx=Nmb$}ry0_%vK@cTV%s`dY)GK4tdxWcB ztRv0O+b^Ad%Xz~gA#y^KD2udP{we3kXg?)i7@Sb9TP)X{2c z(uknd==th23kvCbSF*R{pIKw&$+a*tiLhEl;$AO1!B_rmIzet<6_G~4Gx(#A1dv@` zV3}#xz9f=LS16c5FjMbA{Sr7wb-|v6#SiAz5gPv+i}D&Yt9Qs3I!PXoF46+tjqlD& zd>;cc$|h7Xx3kl1ej?^|;6eX}!$Gp>Taqw*LoMw8FcM>i4ZQV%&dA#?OJScu4CTT|u? zIcj-K*+_6v18JSqN1{I}V{@X7@JW>nNy&;y!{SKCd@^^utLW|*JvHj(>fL=kX!JXP-IZk0x+>eRl4BL0f{2{D7}Q#R8%T1m32h1dal1p?8*w@g3vx`rqIU7&6)x48z8pIL7&JaA|&NLGFR0 z*kzCHj5b^RQciqQ8cXO&*om?sKj}d4_I}3GPts}COz*9Rc7njGEtdPlk_o8N^wheU zQrj^x%OZ+cYBA=ZmDCo_5CUNNpx9_pC9kj01GzMowGndw0}lCDIrhzu+#ml^iGfx0frg?Ir`}13xV9hkl~&)MneWytAmq0nq`C&7bGxW#;sqEu~HG zm6e5q-Bmqo+=N{sehI;L5L`!?d{8>@4XiByo8B^qn9W!l$>qfB1-t-%kB_k=O;5>E zixB$h<9l~h&Ssl_jW-Wg5g9EpL(L2NG1g9__%0yLfUKFMenz(#$oUK!gm#xv>e=NsK^ZMFe(hHqe zw>u+LIjQ$&CF^MHn>I!Hm~#Wh8>IVU2rJ`-*)b*XR500#;?#KxR}z3Y6;N1XBOTx1 zId;!*&aqq^z>cK1r=Fq%fvr8&XKLP75M_S6!jvJV#ha)*JP=(p8#__#@Ks=>Dx<<4Lc$9? z&%i1DS(0@VNMQ^C2N<<_!BlMCy`C9nez;@#*^7yt(^FQ3i}iSv!Z4sz)I4};gdBk9 z&Za7l`QjSvSw@=XBBH7VISTy^YIc{-aa8B=!v3JW#*KDQ)3vbHme5a^ReNdo)$QEC z%tK{g7upEwnP^q&dHj}l+}TtjD3&@NkHkGNMzh3YxMu! zW^4d!r0CsC_ zil!3GhpWSl=5|tXm_rJtn>r-E+;g}K(jDFv6~&)3`XV|k+&VK1V=|p%Bak+&p8eUx z$QCdMHX#z!CwX-L5PeJ7wI*@li|bEOZ(kRu~5rMj;s}3inf>?);r6mP>pjpk%@%SQLg=kE~U=q zj7vHqD&79r9u4GP{t??><_9b9LO(oZ8j_NWQ5sQ^m+sIa!qNV?wn#<3CH=BI5qv#1 zE#i|pTAw|b@5u{f#NQ1iO7XhxwgJupG_o;)wOL;4(%(!;4)wb0GJ=DVj`4oEzhOO4 zHc;*DnV|L{5FhPym!aGQwnUoKf*7#|Y^uT3R-^)2zCj`&kY@xJ!? zTtw)f%C5&D76i)u0&8NOZ8JQ`H<+FQKNh`~_pUQ@bCz?iq|D)C$T;Pcx)xS9Jbavn zWw>V08Efu2s;>V{Ir&L5p*u7SxV-71MCUrxsaFu`5>b{^Dc?ovE?g>5p5{~|REkcu zNe9tOa5&c6D0i5*fTl^pu>A-*R>FC~w!#Cs4eJLgdh6ZSH+D8W+U0Q#*2ue*Bh_3! zYe`@_y88|u+apEa$ZF=Gk7^cjFug>SlD&}0-!kzX0*B~Ae1}dR))jIvY&uirUmxVT zV}d-E_n!AP)E6o_v^E{#*Jz1>9J4@h;*_329ZFglz4r3z9uxSfc{AqxAlPwbg)IH>K3c;cv9Y=4*X`UmBWZdko?#m=FMDuVjP5nrCm8*#(TbF(CW zK6Z#uSGqni#3ECF|-g$A#k~QNy{s5h7$Mp-x$qKRpcMMqi#sQj0sloq`f#tW z+D8GUo1hQk-*Kav1ITx3H2n}t)ZNmRHu890^M-J$3?8E0rg7` zW=W`)xi{ki3^8`H5bOMB!_#(`EEwuIU_+dbsd7kX=7=HV7;#|SWrm=_AcQ~#ycd6@ zgki!=V_w+aUeJ!h>~=8t;D`)KNj$Or;jB4(3{)Q27W*lcpp@%I?W;SVw#Ojre&7f5 zvJCn;LYs!<(Q-Ryg+mQweqIb6#vepyO$g1rJE8)#f4h2HnPWQh z^-Ei#U6T5i=}#0GY*);Vh{ns*n|{+xBl@Ir=>@cLDs*bmap~BOS|twe>bku^x4o7n zCoIs$&B7IaT!MziBC1VJ&|nUt`6e@N<@*g`O1rd7W*pNKF+qDhhsm9#)v$w$u>5i0 zFeJkqDB&Dv%rGpdV{6?!)oMgQ^PBEOL0(tkhx3n~rwpT@&Od1$jWJR8t1xh zw&^1V0d0^z;t8pB=^jsb$ZTfbU-?#!20OVFMhyb)W(V#DaKBVoPK(RGmC21w1l0g5|GKlC;#w)4}|r5)HJ6TZkhDvv*pOU$SqNy&sUA30pM)TcWzAEB8^ ztKfXGGISC0L()ZpZm5-OBBygRpm1mNtS#pvC@)|AZZw01%pzh4nODwJDLI3sPXmzA zFVR0NAS&03n7~rR`uNK(U1R8JHR7QV;a01Akycn*Mm>iO_}+d; zGPbTWv@>ihBHd&zIqL;Hol2JJL#vi4!-&(qms)1J;9qI{nlQN~>C@RZdt3A@CoD~k zDUMqfUqoVzVSmQ9c%6|eN>`2lfbkpDu-exC(1O0*ntt+uKV3hed`iQAafdoiB`|vt z(Ic*$;|vC_mgG%TsHbDxaOEwf|HjW5PT}Yw4i6;eD@3=#@V$93-Rug&%p%%ny4gmKDM*v1=R|C<^MPLE_E%O` zM8YtB{!H^g33t;3jiOqb5PM<=)21=lg?p}eFj09(o3o)?9Y#OYmfMx^J64W3!?1v=fEoQl&s%u&6u>)$P2cAe6d zXzKZ^lWezbgE8%J4@wYjkMXy|8Af`LqSB7d%p2ngYC##z5SaVkPD^* zQ)#RoQSGk<-1_F68swgl?cO=^L(;}5K#oEf3M(%N4+O4ir+7-|3r&)$27X5({(QPb z%Og*e_17B;NQ2m}z?t7%>T#MMw-h*jK!@$OxBFh~b=Jt7Tcj26w^Bgzd`TcfG$9#i~n%qD9CW7Jqk$`S`;B8PD4=gk%T-Vuim@{9qY`E{yYN_0AY0--O*G-V?iMR%&zoK35wBoLK792R9|q#~D=F_ruH z;<%HY8RHJi_AqhyYDpI}(QLriYUf7}K}}VUr!gWG;OH}}sSk<3hi&$e)CgeaC=b9W z6`YO`-}S5i5djD24mTdm{i`3O?Ri(7hT~3WBlp}NG+f?WNT7byM*T$aac=WIHuGF1 zQeel*jQe`{t?cvXuhb4d>rXLqmNL%0z|-GzXp3@BrS${wd{9>NfxxAv^O60H*ALoB zO~;YOYEE{SbvkC=!SZa1UP|~omoB+jJWF>RE|?#Un{X0GF19SCKMJu*2kvO-{^cZ8+v#tXl5Xdd}^y1-tMEPSYJMM`sdBiUhV>Z%$wVyR-Y zgWwiZeKgd(-43*jV@Dy7`;(ZQlze`}3sAWhy5^6Yt;^ysv@6wG1qK-;Xhac*^Q#Ne z(9AYt`k3fAC=MgA3=S1{lo_UgiQtH1#{GO;zP{AM^`XbZvwop&(JW1WpD%-RR$+S% zz-$(*Nwl3HeZ*&+2c$y}wv**a^MUg0=(7yONvl?ZN};Q!h&(H+@-$t2k0x+~JJUH` zZD|?p2FDJMnI)VhH`IgdGfo-v@6*NnaO2+2?y1fyjxI(f5)x1~3LSh6L|}+0HG5|! z^di7jRUbs}lIDQFo4E~T=29f!+f?o#11c}g*e#4+pU;INepVf0q^XNpLJ(5nnQ+gV ztPCL}fVa;x{Eh+5>fDq(F2kYox><2{!wE)xejs>}{Y_x)NSb=M46z+O|JIU&Q+XU6 zt*qZN1rp4+<8Q2iBD}5Ntw-^6HG~Yv52(PcgJX@erRhTE6UFG%9yf|(jH}lF+3?xa z)?);|2kXIH$@$WLE_(kfb#6Rj`0Y8wn*qcPQ9gcfDpUW$XF{?oe<9U)xEe3mk}zLH ziY?kabobZ_AKN)-lMHVTRoxDB{g@;Jh2cdj9fDzJG;??3_rUi;gcWSoa%j$n^Z!^u zAd*uW_sx0bbcM2EGxL(X6hMlO47CbPXBxO;_G%U!^H+>Q?Fa~ z(#DvMiwU|?$g!Q7;Nj`0-5Ol0SDNj8~wIHJ1tr6Ep5}(tp=$F|x0r zZ&4eJA7uH>X@J?Fsx4 zf*&HzaK6z_ocN1YsWH6Fce;t}OF4Yq*Sv{U1e%kt@#y?oOQYi#`PEP_V6wO*`U!@; zsr0A$pdFW<;4~Lgm6m|lv1+!%7?{Gq5+Lk3&VUbE%Cbtj+#PE6*Ie6~H!aBL zp&uQl$!4ZOpvN;#1e}d$mW1rm2WlOdpTrD@OyTMT#Tp}=rx^*_17#==ivo~uG2Kj( z@U(MLlAw!y{(k*#<~E#}TbP2i42_@=`ASSEV=$YZ!}#{F(dnlNInzS#GH6l7oyW_T zfWu*!8PrUub-A9=R8z0ActeC*W)HR!`o^h^qi^~e8yj z_Eil&k#}3Z^|hYrAeUrus5+Tt#N}CVfeHL3eS1p56tdVjNvsxwNJk*^Jb!gBxR9_Y zEL!Pka43^g+xY{a2zLC{^T|V<(N9^)FdZpnm=}OgJ3F#@a3jsTLs_zHX#aKdgV5#z zIVz;n`_9I<%WPCle5D#Z!xtaq;Q2FXDyPqeR)W*GR3s>;F9ikXT=26iID@$jX320C z7D1W78|Yr<87Ur1 zV?)En|0-=|Um6}-fQmMZ3nH!lI8dZ7t^GsVq)jLR?YE6l0VOFvoXShQ9e*kJTRa^( zZ!-x@q?hktd3OAE^R6v$!PNbgk*rzaM_(R(5XuSiw&?N~PL{916~jnMtR+9$A>&yB zJ-R`|T=Unl)e_G-^_b@tHwHVGR1dvKOl6l7NYw|v4cXCFO zfrsTvA*=<~MoLU&?PxCb$j?M|gIE*NZ>j;{RI3y8y^9t)xa zGwqwu!K24K=$Cxi8U8^q#@pGkz6!+)W;ZO^LTi)6sZFcK>O`jjU>PC{`+QwF?NftH zx;c5Au3W9cvGW)9;ZBRL@8GR?<#|Q!`&L+{2G#1h_;Fld+_`q>`GfMXIv1bY}^E5`O;f!zOYUTzCwwjKE#w#}la-1h~qm z=WW`D#3{PC$r@9%wpqk785LnSENMhJX#DDMablyK%ad0pjLM~7i^KYJ&OnN)LGncU z#A`@UA!@D?Fu`5&G=5ZKwQYnJPysW12_H}iUFp@yRFMW`S2_ZcZQ#)i9YD#tTjzZ& z4t!q#GvieY($?SD4jf(lP~mbG9Hw+EvkBu_m-^YNvr$4A;Js49*Lgp7=PHL-d#G+9 z=Oy^jVFQpMtuo~NT7h(?$eoc3-%VE05cxTtRQ=cDU7t@JG-OsYN}bnLZkDgcm4w+o zdF(oU&j}bs!IpPs^CuKN)F)b2dJz41$Q|E z5b|^n@2YiB7Hi*=Q)Cdft|4HgFulXhGo{2A(|kYfenw9g>4EyZklpj^1%W3tZF8Yw zn5FyKc8a*b#Mk>}Sa&;oZqg&iYupU~-6Q+qeNLky!Fg6D{3sQV3o+FK59+u^J12$0 zyk=s=-d?SOw)@Qr!3%c^_JzaMe&I07UovMjvv|YN_zT-;i4PmCP1^d|6l9AYlSlS! znkT4=wXC{LWD^OsfaoA<27 z+qux1If}Jq_wwGoupdpikPuz!BuOC?(CAAz%N4K3!k)taEr`#z)r5OP@#tdLeMLyD zaC_VSfgSPK&tRgu!Q$iPm&bG9@NN9C`)9`kX^tf~!)&eC!y-OCxY1$qo|&zbp|&6< zT{^tL5PKJF0{y(~Hwq;a68vjT?d;oj^;+LgP%~eZ0KIf1yGk}=xi~yi1x5B5 zlzQ8|eMr4o;pltLrT$!O?|kpT<{6!Wumau0nxTrWQ|KD(9dSaxKT8ll@d|P&O-nOX zRJkhTvoq*yH)o?%s+s)RXhYG+grbjo1b!9RfCw;{jv^C@>Bf%c(qX8^8Qk|9ZZQc^ zlGO;xZzRpuETdPskeMo9H%Du8sOK}G5RR&Tf4UFX`|>T^^UjW&Bq%35w`ij3{8zz~ zZb!U-v*eL?V^Z~Iw{sw1jf@xbyzEF<3Vq?HehbLGQ{s>C_2HEWw|HPet%UnU{?@(V z=2m()N?lBGQbzV-jV)>3HYWqy*C#V2!dm(hXI@}x>+d#pxw`!Ie!AD#E@5J#Wj9W} zTkSMVbnF*&ImbYQ>F?`8ixbMA^BICp>4w`hGR9Sgmxl;9BX~7;``ruAkhBZ z3vk(m+vZR?%P0zhhyy*QH-vwp+)b@>wa32B*r zc*t&Qe7q?;_4!L57ou#TZ?M`#B-ZCDE} z%}WB-s8){z%oWjd11MC2b(yb%56 zJ;1lNwhyM{et$N+L-wxllMVF%f#?sayWQuejQI_0jY}roDwRGwC+N@k7dQUx%dcVr z3d>q%yH$xpePULB=g8VKHUmb^eAIA~n`GE+$?tPIF^{j`0(p!nU>h?0h2RETKHkN_ zkM!C#m6Khu&vOK>KzmPmTbB3N@l9KJ>c?st2Fiie;#`BCc$B6&Ql4PQnda&j6=o?UCC4i zqfqt6m5WTnsroC-gD`Qk>pJvi6rz{XhkS4vVCIxQ(4Q;~zssFmz%4m`xq#rd1QR>M zv|3ZM8j=>GpL#16ThQ`@uUM?*JT!J5J`JZ>+Jkr`Y!P+@%WGn`hdB)-^`q{lMoj0b zA5VpfJ}`d7mXp@6OBQK=4*o%8eqs9pXRrW7=Z#JnHw{R9b7(Of z@IZ*tq(6dmA?A7Y8vHVER4ue%DN^Nw_ppf1|*aRcKD%lwtvZPg`VS|L=9`y zKVTCL<_}~DWZ-1o4h-!$sK`|#(;2Z@xLK2BHV6rf>o^7j)?YL_6a8KHO$shK5(9` z@X1$TzB*ZCo0UUu(r1d2Wc)2X@7i~VS85h?Ui*1a%d1l+K-3sI)mQgqk$Yj(lOgSe z((IE8Dvf+%hP+!V^S4~hRWE2ZNY0R7a!0sXZG3VCzLB@)-U^@|*z6iZ?)ynI8lo4# zm#`CdYO?TpLk#>IHzNAzAkxAbeTmU(>IG*>&qdKDDjjO;O|78>D8)Cs{9>Wn8^-vJ? z6~PI@z|xA>LhGpICmb4H6xa(`uWC#=Z0Y`??7>^5$H8~ZUQAdS81!j1GxJdgUbd>Fpx!GUuP+|Ee`x=~B?c=I rOW(u~e^z|9#3xY1m3XAt`ky~Z^x Date: Thu, 11 Nov 2021 10:05:48 +0100 Subject: [PATCH 09/27] small updates to text css --- doc/userdoc/installation/index.rst | 14 ++++++++------ doc/userdoc/installation/user.rst | 11 ++++++----- doc/userdoc/static/css/custom.css | 4 ++-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index 868e34ae99..ae37b33f70 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -9,7 +9,7 @@ Who are you? .. container:: leftside - .. image:: ../static/img/020-user.png + .. image:: ../static/img/020-user_black.png :target: user.html @@ -17,8 +17,10 @@ Who are you? **User** - I'm a student or researcher who wants to run neural network simulation scripts for :ref:`NEST on my computer `. - If you want to install NEST on a cluster or supercomputer, see our HPC page. + I'm a student or researcher who wants to run neural network simulation scripts + + * :ref:`on my computer ` or + * :ref:`on a cluster of supercomputer `. | | @@ -27,7 +29,7 @@ Who are you? .. container:: leftside - .. image:: ../static/img/014-teacher.png + .. image:: ../static/img/class_black.png :target: lecturer.html @@ -45,7 +47,7 @@ Who are you? .. container:: leftside - .. image:: ../static/img/001-shuttle.png + .. image:: ../static/img/001-shuttle_black.png :target: admin.html @@ -63,7 +65,7 @@ Who are you? .. container:: leftside - .. image:: ../static/img/019-programmer-1.png + .. image:: ../static/img/dev_black.png :target: developer.html diff --git a/doc/userdoc/installation/user.rst b/doc/userdoc/installation/user.rst index aa496cb58f..3274a8010c 100644 --- a/doc/userdoc/installation/user.rst +++ b/doc/userdoc/installation/user.rst @@ -4,8 +4,8 @@ User install instructions ========================= -For Linux and macOS, you can install NEST with pip |linux| |macos| - +For Linux and macOS, you can install NEST with pip +|linux| |macos| .. |linux| image:: ../static/img/linux.png @@ -46,7 +46,8 @@ Explore what you can do with NEST: .. _windows: -|windows| Windows +Windows +|windows| We recommend the neurofedora live media for Windows users @@ -58,8 +59,8 @@ If you have an EBRAINS account you can check out . . . -Install NEST on HPC -------------------- +Install NEST on HPC systems +--------------------------- See details :ref:`about installing NEST with docker ` diff --git a/doc/userdoc/static/css/custom.css b/doc/userdoc/static/css/custom.css index 98b78eb2ba..b5138e6755 100644 --- a/doc/userdoc/static/css/custom.css +++ b/doc/userdoc/static/css/custom.css @@ -7,7 +7,7 @@ } div.twocol { width: 430px; - height: 160px; + height: 180px; border-top-width: 1px; border-top-style: solid; border-bottom-width: 1px; @@ -17,7 +17,7 @@ div.twocol { div.leftside { width: 150px; - padding: 0px 3px 0px 0px; + padding: 10px 3px 0px 0px; float: left; } From 1ff46a8ca2c88d9179f3ad43b7e2f419607f84c7 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Thu, 2 Dec 2021 20:20:33 +0100 Subject: [PATCH 10/27] add all install ways as of now --- doc/userdoc/installation/admin.rst | 3 +- doc/userdoc/installation/docker.rst | 76 ++++++++++++++ doc/userdoc/installation/old_vers.rst | 72 +++++++++++++ doc/userdoc/installation/user.rst | 141 ++++++++++++++++++++++---- 4 files changed, 273 insertions(+), 19 deletions(-) create mode 100644 doc/userdoc/installation/docker.rst create mode 100644 doc/userdoc/installation/old_vers.rst diff --git a/doc/userdoc/installation/admin.rst b/doc/userdoc/installation/admin.rst index 99aa4cb7db..bdc205ed72 100644 --- a/doc/userdoc/installation/admin.rst +++ b/doc/userdoc/installation/admin.rst @@ -10,6 +10,8 @@ If you need to deploy NEST on a machine Docker container ~~~~~~~~~~~~~~~~ +.. include:: docker.rst + With open-mpi + jupyter notebook Without open-mpi + jupyter notebook ... @@ -32,4 +34,3 @@ See the `README `_ to find out more, but no :doc:`Instructions for high performance computers ` provides some instructions for certain machines. -EBRAINS set up? diff --git a/doc/userdoc/installation/docker.rst b/doc/userdoc/installation/docker.rst new file mode 100644 index 0000000000..13482d746e --- /dev/null +++ b/doc/userdoc/installation/docker.rst @@ -0,0 +1,76 @@ +.. _docker: + +|macos| |linux| |windows| Docker +-------------------------------- + +Docker provides an isolated container to run applications. The +NEST Docker container includes a complete install of NEST and +is set up so you can create, modify, and run Juptyer Notebooks +and save them on your host machine. (See the Note below for +alternative ways to use the Docker container.) + +1. If you do not have Docker installed, follow the Docker + installation instructions for your system here: + https://docs.docker.com/install/. + + If you are using **Linux**, we **strongly recommend** you + also create a Docker group to manage Docker as a non-root + user. See instructions on the Docker website: + https://docs.docker.com/install/linux/linux-postinstall/ + + +2. Create a directory or change into a directory that you want + to use for your Jupyter Notebooks. + +.. code-block:: bash + + mkdir my_nest_scripts + cd my_nest_scripts + +3. Run the Docker container. Replace the ```` with one + of the latest NEST versions (e.g., ``2.20.0``) or use + ``latest`` for the most recent build from the source code. + +.. code-block:: bash + + docker run --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -p 8080:8080 nestsim/nest: notebook + + +4. Once completed, a link to a Jupyter Notebook will be + generated, as shown below. You can then copy and paste the + link into your browser. + + .. image:: ../static/img/docker_link.png + :align: center + :width: 1000px + + +5. You can now use the Jupyter Notebook as you normally + would. Anything saved in the Notebook will be placed in the + directory you started the Notebook from. + +6. You can shutdown the Notebook in the terminal by typing + :kbd:`Ctrl-c` twice. Once the Notebook is shutdown the + container running NEST is removed. + + +.. note:: + + You can check for updates to the Docker build by typing: + + .. code-block:: bash + + docker pull nestsim/nest: + +.. note:: + + You can also create an instance of a terminal within the container itself and, for example, run Python scripts. + + .. code-block:: + + docker run --rm -it -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -p 8080:8080 nestsim/nest: /bin/bash + + See the `README `_ to find out more, but note some functionality, such as DISPLAY, will not be available. + + + diff --git a/doc/userdoc/installation/old_vers.rst b/doc/userdoc/installation/old_vers.rst new file mode 100644 index 0000000000..4f52ad9e8b --- /dev/null +++ b/doc/userdoc/installation/old_vers.rst @@ -0,0 +1,72 @@ +.. _install_old: + +For NEST 2.X +------------ + +You can take a look at our Conda-forge package + +.. _conda_forge_install: + +1. To keep your conda setup tidy, we recommend that you install NEST into + a separate `conda environment `_ + together with Python packages that you will use when working with NEST; + see also our :doc:`conda_tips`. + + To install the latest version of NEST in a new environment called ``ENVNAME``, just run + + .. code-block:: sh + + conda create --name ENVNAME -c conda-forge nest-simulator + + To install additional packages into the environment, just list them together with ``nest-simulator``. + + .. code-block:: sh + + conda create --name ENVNAME -c conda-forge nest-simulator jupyterlab seaborn + +#. To see all NEST versions available via conda, either run + + .. code-block:: sh + + conda search -c conda-forge nest-simulator + + or browse the `conda forge file list + `_ (note + there are multiple pages). To install, e.g., NEST 2.18.0, run + + .. code-block:: sh + + conda create --name nest_2_18_0 -c conda-forge nest-simulator=2.18.0=* + + The syntax for this install follows the pattern: ``nest-simulator==``. + +#. Activate your environment: + + .. code-block:: sh + + conda activate ENVNAME + +#. Note the following: + + - We currently provide NEST with thread-based parallelization on Conda. This should suffice for most + uses on personal computers. + - Until dedicated conda builds for Apple's M1 chip (arm64) become available, you should expect relatively + poor performance on computers with the M1 chip. You need to :doc:`build NEST yourself ` on + M1 systems for good performance. + +NeuroFedora +----------- + +The NeuroFedora team has generously provided the latest +versions of NEST on their platform. As that is available in the +standard Fedora platform repositories, it can simply be +installed using ``dnf``: + +.. code-block:: bash + + sudo dnf install python3-nest + +Find out more on the NeuroFedora site: https://neuro.fedoraproject.org. + + + diff --git a/doc/userdoc/installation/user.rst b/doc/userdoc/installation/user.rst index 3274a8010c..fd75039e88 100644 --- a/doc/userdoc/installation/user.rst +++ b/doc/userdoc/installation/user.rst @@ -3,6 +3,129 @@ User install instructions ========================= +* Linux install + +* macOS + +* Windows + +* Docker (cross-platform) + +* NEST in EBRAINS + +|linux| Linux +--------------- + +Ubuntu +~~~~~~ + +Ubuntu users can install NEST via the PPA repository. + +1. Add the PPA repository for NEST and update apt: + + .. code-block:: bash + + sudo add-apt-repository ppa:nest-simulator/nest + sudo apt-get update + +2. Install NEST: + + .. code-block:: bash + + sudo apt-get install nest + +Debian +~~~~~~ + +Debian users can install NEST via the Ubuntu PPA repository. + +1. Create a new ``apt`` repository entry in ``/etc/apt/sources.list.d/nest-simulator-ubuntu-nest-XXX.list`` by: + + .. code-block:: bash + + sudo apt install devscripts build-essential software-properties-common dpkg-dev + sudo add-apt-repository --enable-source ppa:nest-simulator/nest + +2. Disable the binary package in the repository file created under ``/etc/apt/sources.list.d/`` by commenting + out the ``deb`` line, while keeping the ``deb-src`` line. It should look similar to this: + + .. code-block:: bash + + #deb http://ppa.launchpad.net/nest-simulator/nest/ubuntu focal main + deb-src http://ppa.launchpad.net/nest-simulator/nest/ubuntu focal main + + +3. Import the PPA GPC key and rebuild the package: + + .. code-block:: bash + + sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \ + --recv-keys 0CF7539642ABD23CBCA8D487F0B8B6C5EC02D7DD + sudo apt update + sudo apt source --build nest + +4. Install any missing dependencies, if ``apt`` tells you so. + In addition, install: + + .. code-block:: bash + + sudo apt install python3-all dh-python + +5. After installing the dependencies, enter ``sudo apt source --build nest`` again. + When the build finished, look for lines like: + + .. code-block:: bash + + dpkg-deb: building package 'nest-dbgsym' in '../nest-dbgsym_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb'. + dpkg-deb: building package 'nest' in '../nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb'. + #dh binary + dpkg-genbuildinfo --build=binary + dpkg-genchanges --build=binary >../nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.changes + + and note down the full package name. In the above example this would be + `nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb`, where the number `202001311135` and potentially the + Ubuntu version number may be different. + +6. Install the ready Debian package after the rebuild: + + .. code-block:: bash + + sudo dpkg --install nest-simulator-x.y.z~NUMBER~ubuntu20.04.1_amd64.deb + + The package name is taken from the result of the previous step. `NUMBER` and potentially the Ubuntu + version might differ. + +7. Test the package: + + .. code-block:: bash + + python3 + import nest + +|macos| macOS +------------- + +1. `Install Homebrew `_. + +2. Install NEST via: + +.. code-block:: bash + + brew install nest + +----- + +:ref:`See our docker installation instructions ` + +|macos| |linux| |windows| Live media +------------------------------------ + +We have live media (.ova) if you want to run NEST in a virtual machine. + +:ref:`Download the live media here `, and follow the :doc:`instructions to set up the virtual machine ` . + + + For Linux and macOS, you can install NEST with pip |linux| |macos| @@ -25,37 +148,19 @@ With mpi? pip3 install nest-simulator with-mpi=on -:ref:`Windows users see below ` .. comment: any options? .. comment: this section below should be modelled after the main page with pretty icons and such, not just a bullet list -Explore what you can do with NEST: - -* :doc:`../tutorials/index` - -* :doc:`../examples/index` - -* :doc:`../models/models-main` - .. |windows| image:: ../static/img/windows.png :scale: 15% -.. _windows: - -Windows -|windows| - - We recommend the neurofedora live media for Windows users -Use NEST with EBRAINS ---------------------- -If you have an EBRAINS account you can check out . . . From de92e41f38d26760de696659962da10da722b546 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Mon, 7 Feb 2022 16:23:45 +0100 Subject: [PATCH 11/27] add links and refs to text --- doc/userdoc/installation/admin.rst | 4 ++++ doc/userdoc/installation/index.rst | 8 +++----- doc/userdoc/installation/lecturer.rst | 2 ++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/doc/userdoc/installation/admin.rst b/doc/userdoc/installation/admin.rst index bdc205ed72..0c722e86ab 100644 --- a/doc/userdoc/installation/admin.rst +++ b/doc/userdoc/installation/admin.rst @@ -5,6 +5,10 @@ Administrator installation instructions If you need to deploy NEST on a machine +.. seealso:: + + :ref:`Optimize NEST for HPC systems <>` + - For small clusters (what is small?) see docker installation / spack Docker container diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index e516203971..09b81ac6fb 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -7,11 +7,6 @@ Install NEST Who are you? ~~~~~~~~~~~~ -These installation instructions should work for most users who do -not need custom configurations for their systems. If you want to -compile NEST from source, check the :ref:`advanced_install` section -and :ref:`cmake_options`. - .. container:: twocol .. container:: leftside @@ -46,6 +41,7 @@ and :ref:`cmake_options`. I'm a lecturer who wants to set up a temporary NEST environment for a classroom or workshop to demonstrate neuroscientifc concepts. + Take me to :ref:`lecturer install instructionsi `, | | @@ -64,6 +60,7 @@ and :ref:`cmake_options`. I'm an administrator responsible for deploying NEST on a cluster or high performance machine for researchers and students. + Take me to the :ref`admin installation ` | | @@ -82,6 +79,7 @@ and :ref:`cmake_options`. I am a developer and want to contribute to the code or documentation of NEST. + Take me to the :ref:`source installation ---- If installation didn't work, see the :ref:`troubleshooting section `. diff --git a/doc/userdoc/installation/lecturer.rst b/doc/userdoc/installation/lecturer.rst index 203f695bd6..ad00a50cb8 100644 --- a/doc/userdoc/installation/lecturer.rst +++ b/doc/userdoc/installation/lecturer.rst @@ -1,3 +1,5 @@ +.. _lecturer: + Lecturer installation instructions ---------------------------------- From 4f93c20fa67f2af457c08041aff1b0d9ce08715e Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Tue, 8 Feb 2022 12:44:47 +0100 Subject: [PATCH 12/27] fix up links and rearrange text --- doc/userdoc/installation/admin.rst | 27 +--- doc/userdoc/installation/developer.rst | 30 ++--- doc/userdoc/installation/docker.rst | 179 ++++++++++++++++++++----- doc/userdoc/installation/index.rst | 7 +- doc/userdoc/installation/lecturer.rst | 45 ++++--- doc/userdoc/installation/user.rst | 118 ++++++---------- 6 files changed, 244 insertions(+), 162 deletions(-) diff --git a/doc/userdoc/installation/admin.rst b/doc/userdoc/installation/admin.rst index 0c722e86ab..4a6bff9dfe 100644 --- a/doc/userdoc/installation/admin.rst +++ b/doc/userdoc/installation/admin.rst @@ -7,34 +7,17 @@ If you need to deploy NEST on a machine .. seealso:: - :ref:`Optimize NEST for HPC systems <>` + Check out our guides to :ref:`optimizing NEST for HPC systems ` -- For small clusters (what is small?) see docker installation / spack -Docker container -~~~~~~~~~~~~~~~~ +Docker install +~~~~~~~~~~~~~~ -.. include:: docker.rst +Check out the :ref:`docker installation instructions `. -With open-mpi + jupyter notebook -Without open-mpi + jupyter notebook ... -install docker-compose (docker desktop for windows, mac?) +See the `nest-docker README `_ to find out more. - .. code-block:: bash - docker-compose up - -You can check for updates to the Docker build by typing: - - .. code-block:: bash - - docker pull nestsim/nest: - -See the `README `_ to find out more, but note some functionality, such as DISPLAY, will not be available. - - -- For supercomputers and other HPC sytstems, please contact us (see also some notes on set up from older versions of HPC systems) -:doc:`Instructions for high performance computers ` provides some instructions for certain machines. diff --git a/doc/userdoc/installation/developer.rst b/doc/userdoc/installation/developer.rst index f81eef5356..06db42de30 100644 --- a/doc/userdoc/installation/developer.rst +++ b/doc/userdoc/installation/developer.rst @@ -1,47 +1,45 @@ +.. _dev_install: + Developer installation instructions ----------------------------------- -- compile from source - -- developer workflows / tools - -- Run benchmarks Compile NEST from source code: -* Download the source code for the `current release _` +* Download the source code for the `current release `_. -* Unpack the tarball +* Unpack the tarball. - .. code-block:: +.. code-block:: tar -xzvf nest-simulator-x.y.z.tar.gz -* Or Fork NEST and clone the repository on `GitHub `_. See details on :doc:`GitHub workflows here <../contribute/development_workflow>`). +* Or Fork NEST and clone the repository on `GitHub `_. + See details on :ref:`GitHub workflows here `. If not already installed on your system, the following packages are recommended (see also the Dependencies section) create a build directory - .. code-block:: bash +.. code-block:: bash mkdir build/ change into build directory - .. code-block:: bash +.. code-block:: bash cd build/ compile and build NEST: - .. code-block:: bash +.. code-block:: bash cmake /source/directory/ See our :doc:`cmake_options` for different configuration options - .. code-block:: bash +.. code-block:: bash make make install @@ -53,9 +51,9 @@ See our :doc:`cmake_options` for different configuration options Developer tools ~~~~~~~~~~~~~~~ -A complete list of required packages to run tests, build documentation, nest-server, NEST -is available in a conda yaml file. +A complete list of required packages to install NEST, run tests, and build documentation, is available in the +``environment.yml`` file on the `NEST simulator GitHub page `_. -See development workflows here +Check out all the :ref:`development workflows here `. diff --git a/doc/userdoc/installation/docker.rst b/doc/userdoc/installation/docker.rst index 13482d746e..ddaaa84651 100644 --- a/doc/userdoc/installation/docker.rst +++ b/doc/userdoc/installation/docker.rst @@ -3,11 +3,7 @@ |macos| |linux| |windows| Docker -------------------------------- -Docker provides an isolated container to run applications. The -NEST Docker container includes a complete install of NEST and -is set up so you can create, modify, and run Juptyer Notebooks -and save them on your host machine. (See the Note below for -alternative ways to use the Docker container.) +Docker provides an isolated container to run applications. 1. If you do not have Docker installed, follow the Docker installation instructions for your system here: @@ -20,57 +16,178 @@ alternative ways to use the Docker container.) 2. Create a directory or change into a directory that you want - to use for your Jupyter Notebooks. + to use for your project. .. code-block:: bash mkdir my_nest_scripts cd my_nest_scripts -3. Run the Docker container. Replace the ```` with one - of the latest NEST versions (e.g., ``2.20.0``) or use - ``latest`` for the most recent build from the source code. + +Usage + + +You can use the docker images directly out of docker-registry.ebrains.eu like this: + +.. code-block:: bash + + docker pull docker-registry.ebrains.eu/nest/nest-simulator:TAG + +``TAG`` can be a version of NEST ``2.20.2`` or later. Alternatively, you can use ``dev`` for the +development branch (master). + + +To run NEST 2.20.2 +^^^^^^^^^^^^^^^^^^ + +Jupyter notebook with NEST 2.20.2: .. code-block:: bash - docker run --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -p 8080:8080 nestsim/nest: notebook + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=notebook / + -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:2.20.2 + +Jupyter lab with NEST 2.20.2 +.. code-block:: bash -4. Once completed, a link to a Jupyter Notebook will be - generated, as shown below. You can then copy and paste the - link into your browser. + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=jupyterlab / + -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:2.20.2 - .. image:: ../static/img/docker_link.png - :align: center - :width: 1000px +NEST 3.2 +^^^^^^^^ +As of NEST 3.2, you can use the docker-compose feature. -5. You can now use the Jupyter Notebook as you normally - would. Anything saved in the Notebook will be placed in the - directory you started the Notebook from. +To use 'docker-compose' you need the definition file from the git repository. Download it: + +.. code-block:: bash -6. You can shutdown the Notebook in the terminal by typing - :kbd:`Ctrl-c` twice. Once the Notebook is shutdown the - container running NEST is removed. + wget https://raw.githubusercontent.com/steffengraber/nest-docker/master/docker-compose.yml -.. note:: +You can then run ``docker-compose up`` with one of the following options: + +- NEST server + +.. code-block:: bash + + docker-compose up nest-server - You can check for updates to the Docker build by typing: +or + +.. code-block:: bash + + docker run -it --rm -e NEST_CONTAINER_MODE=nest-server -p 5000:5000 / + docker-registry.ebrains.eu/nest/nest-simulator:3.2 + +Starts the NEST API server container and opens the corresponding port 5000. Test it with `curl localhost:5000/api`. +See the :ref:`nest_server` documentation for more details. + +- NEST desktop + +.. code-block:: bash + + docker-compose up nest-desktop + +or + +.. code-block:: bash + + docker run -it --rm -e NEST_CONTAINER_MODE=nest-server -p 5000:5000 / + docker-registry.ebrains.eu/nest/nest-simulator:3.2 + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -p 8000:8000 / + -e NEST_CONTAINER_MODE=nest-desktop docker-registry.ebrains.eu/nest/nest-simulator:3.2 + +Starts the NEST server and the NEST desktop web interface. Port 8000 is also made available. +Open NEST Desktop in the web browser using the following http link: `http://localhost:8000` + +Visit the :doc:`NEST Desktop ` documentation to learn more. + +- Jupyter notebook with NEST + +.. code-block:: bash + + docker-compose up nest-notebook + +or + +.. code-block:: bash + + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=notebook / + -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:3.2 + +Starts a notebook server with pre-installed NEST 3.2. The corresponding URL is displayed in the console. You can copy an +d paste into your browser. + + +- Jupyter lab with NEST + +.. code-block:: bash + + docker-compose up nest-jupyterlab + +or + +.. code-block:: bash + + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=jupyterlab / + -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:3.2) + +Starts a Jupyter lab server with pre-installed NEST 3.2. The corresponding URL is displayed in the console. +Copy and paste the URL into your browser. + + + +To stop and delete running containers use `docker-compose down`. + +NEST dev +^^^^^^^^ + +If you want to use the compose configuration for the ``dev`` NEST version, you can use the following file option: + +.. code-block:: bash + + wget https://raw.githubusercontent.com/steffengraber/nest-docker/master/docker-compose.yml + docker-compose -f docker-compose-dev.yml up nest-notebook + +On Windows +^^^^^^^^^^ + +The following commands should work on Windows. Please note that NEST does not officially +support Windows! + +.. code-block:: bash + + docker run -it --rm -v %cd%:/opt/data -p 8080:8080 -e NEST_CONTAINER_MODE= / + docker-registry.ebrains.eu/nest/nest-simulator: + +In Powershell, '%cd%' might not work for the current directory. Then +you should explicitly specify a folder with existing write permissions. + +In any case, this will download the docker image with the pre-installed +NEST master from docker-registry.ebrains.eu and start it. After booting an URL is presented. +Click on it or copy it to your browser. Voilá Jupyter notebook starts from +the docker image. + +You can update the image with: + +.. code-block:: bash - .. code-block:: bash + docker pull docker-registry.ebrains.eu/nest/nest-simulator: - docker pull nestsim/nest: -.. note:: - You can also create an instance of a terminal within the container itself and, for example, run Python scripts. +For more information, you can checkout the `nest-docker repository `_ - .. code-block:: +.. |linux| image:: ../static/img/linux.png + :scale: 15% - docker run --rm -it -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -p 8080:8080 nestsim/nest: /bin/bash +.. |macos| image:: ../static/img/macos.png + :scale: 15% - See the `README `_ to find out more, but note some functionality, such as DISPLAY, will not be available. +.. |windows| image:: ../static/img/windows.png + :scale: 15% diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index 09b81ac6fb..41ed7d32e4 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -41,7 +41,7 @@ Who are you? I'm a lecturer who wants to set up a temporary NEST environment for a classroom or workshop to demonstrate neuroscientifc concepts. - Take me to :ref:`lecturer install instructionsi `, + Take me to :ref:`lecturer install instructions `, | | @@ -60,7 +60,8 @@ Who are you? I'm an administrator responsible for deploying NEST on a cluster or high performance machine for researchers and students. - Take me to the :ref`admin installation ` + Take me to the :ref:`admin installation `. + | | @@ -79,7 +80,7 @@ Who are you? I am a developer and want to contribute to the code or documentation of NEST. - Take me to the :ref:`source installation + Take me to the :ref:`source installation . ---- If installation didn't work, see the :ref:`troubleshooting section `. diff --git a/doc/userdoc/installation/lecturer.rst b/doc/userdoc/installation/lecturer.rst index ad00a50cb8..1815293e48 100644 --- a/doc/userdoc/installation/lecturer.rst +++ b/doc/userdoc/installation/lecturer.rst @@ -3,34 +3,49 @@ Lecturer installation instructions ---------------------------------- -For a centralized installation workflow where participants connect to NEST over the internet (i.e, participants do not need to install NEST themselves). -.... (requirement mac or Linux - does MS work?) -* Check out graphical user interface NEST-Desktop, to help visualize and illustrate complex network simulations. +NEST Desktop +~~~~~~~~~~~~ -* Docker installation +* :doc:`NEST Desktop ` is a graphical user interface designed for illustrating neural network concepts + ideal for the classroom setting. -* where should i install nest? (any considerations / requirements) what about wifi / internet connections +We recommend you checkout the NEST desktop project and see if it fits your needs! -* see here for installing docker -* what information do particpants need +Docker install +~~~~~~~~~~~~~~ - * what do they need to install? +We provide a docker container for NEST, with options to include NEST-Desktop, Jupyter notebooks or Jupyterlab. - * NEST Server? +See :ref:`instructions for docker here `. -* For situations where particpants will need to install NEST, we recommend the compneurolab live media (all operating systems) - * suggest participants to look at main page (interasctivs sample script) to get an idea -* here are some teaching resources +Live media +~~~~~~~~~~ - * PyNEST tutorials - * nestml tutorials +We provide an OVA live media format that can work in virtual machines (like Virtualbox). +See the :ref:`live media install instructions here ` + +Alternatively, you can check out the `Comp-Neuro Fedora Project `_. +They provide an image of many computational neuroscience tools including NEST! + +.. note:: + + NEST developers do not officially support the Comp-Neuro Fedora Project. Questions and issues regarding the image from + Comp-Neuro Fedora should be directed to that community. + +.. admonition:: Teaching material + + Here is some material that you find useful for your students: + + * :ref:`PyNEST tutorials ` + + * For creating and modifying models, see :doc:`NESTML tutorials ` + - * NEST-Desktop analysis of . . . diff --git a/doc/userdoc/installation/user.rst b/doc/userdoc/installation/user.rst index fd75039e88..33062725fa 100644 --- a/doc/userdoc/installation/user.rst +++ b/doc/userdoc/installation/user.rst @@ -3,15 +3,24 @@ User install instructions ========================= -* Linux install +Cross-platform +-------------- -* macOS +|macos| |linux| |windows| -* Windows +Docker +~~~~~ -* Docker (cross-platform) +:ref:`See our docker installation instructions `. -* NEST in EBRAINS +Live media +~~~~~~~~~ + +We have live media (.ova) if you want to run NEST in a virtual machine. + +:ref:`Download the live media here `, and follow the :doc:`instructions to set up the virtual machine ` . + +------------- |linux| Linux --------------- @@ -23,14 +32,14 @@ Ubuntu users can install NEST via the PPA repository. 1. Add the PPA repository for NEST and update apt: - .. code-block:: bash +.. code-block:: bash sudo add-apt-repository ppa:nest-simulator/nest sudo apt-get update 2. Install NEST: - .. code-block:: bash +.. code-block:: bash sudo apt-get install nest @@ -41,66 +50,66 @@ Debian users can install NEST via the Ubuntu PPA repository. 1. Create a new ``apt`` repository entry in ``/etc/apt/sources.list.d/nest-simulator-ubuntu-nest-XXX.list`` by: - .. code-block:: bash +.. code-block:: bash - sudo apt install devscripts build-essential software-properties-common dpkg-dev - sudo add-apt-repository --enable-source ppa:nest-simulator/nest + sudo apt install devscripts build-essential software-properties-common dpkg-dev + sudo add-apt-repository --enable-source ppa:nest-simulator/nest 2. Disable the binary package in the repository file created under ``/etc/apt/sources.list.d/`` by commenting out the ``deb`` line, while keeping the ``deb-src`` line. It should look similar to this: - .. code-block:: bash +.. code-block:: bash - #deb http://ppa.launchpad.net/nest-simulator/nest/ubuntu focal main - deb-src http://ppa.launchpad.net/nest-simulator/nest/ubuntu focal main + #deb http://ppa.launchpad.net/nest-simulator/nest/ubuntu focal main + deb-src http://ppa.launchpad.net/nest-simulator/nest/ubuntu focal main 3. Import the PPA GPC key and rebuild the package: - .. code-block:: bash +.. code-block:: bash - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \ - --recv-keys 0CF7539642ABD23CBCA8D487F0B8B6C5EC02D7DD - sudo apt update - sudo apt source --build nest + sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \ + --recv-keys 0CF7539642ABD23CBCA8D487F0B8B6C5EC02D7DD + sudo apt update + sudo apt source --build nest 4. Install any missing dependencies, if ``apt`` tells you so. In addition, install: - .. code-block:: bash +.. code-block:: bash - sudo apt install python3-all dh-python + sudo apt install python3-all dh-python 5. After installing the dependencies, enter ``sudo apt source --build nest`` again. When the build finished, look for lines like: - .. code-block:: bash +.. code-block:: bash - dpkg-deb: building package 'nest-dbgsym' in '../nest-dbgsym_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb'. - dpkg-deb: building package 'nest' in '../nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb'. - #dh binary - dpkg-genbuildinfo --build=binary - dpkg-genchanges --build=binary >../nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.changes + dpkg-deb: building package 'nest-dbgsym' in '../nest-dbgsym_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb'. + dpkg-deb: building package 'nest' in '../nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb'. + #dh binary + dpkg-genbuildinfo --build=binary + dpkg-genchanges --build=binary >../nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.changes - and note down the full package name. In the above example this would be - `nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb`, where the number `202001311135` and potentially the - Ubuntu version number may be different. +and note down the full package name. In the above example this would be +`nest_2.20.0-0~202001311135~ubuntu20.04.1_amd64.deb`, where the number `202001311135` and potentially the +Ubuntu version number may be different. 6. Install the ready Debian package after the rebuild: - .. code-block:: bash +.. code-block:: bash - sudo dpkg --install nest-simulator-x.y.z~NUMBER~ubuntu20.04.1_amd64.deb + sudo dpkg --install nest-simulator-x.y.z~NUMBER~ubuntu20.04.1_amd64.deb The package name is taken from the result of the previous step. `NUMBER` and potentially the Ubuntu version might differ. 7. Test the package: - .. code-block:: bash +.. code-block:: bash - python3 - import nest + python3 + import nest |macos| macOS ------------- @@ -115,59 +124,18 @@ Debian users can install NEST via the Ubuntu PPA repository. ----- -:ref:`See our docker installation instructions ` - -|macos| |linux| |windows| Live media ------------------------------------- - -We have live media (.ova) if you want to run NEST in a virtual machine. - -:ref:`Download the live media here `, and follow the :doc:`instructions to set up the virtual machine ` . - -For Linux and macOS, you can install NEST with pip -|linux| |macos| - - .. |linux| image:: ../static/img/linux.png :scale: 15% .. |macos| image:: ../static/img/macos.png :scale: 15% -:: - - pip3 install nest-simulator - - -With mpi? - -:: - - pip3 install nest-simulator with-mpi=on - - -.. comment: any options? - -.. comment: this section below should be modelled after the main page with pretty icons and such, not just a - bullet list - .. |windows| image:: ../static/img/windows.png :scale: 15% - - - - -Install NEST on HPC systems ---------------------------- - -See details :ref:`about installing NEST with docker ` - -Find out how to :doc:`optimize your configuration ` - From 63fe13bed005dc43c30beb6b5abd689d66a8bd65 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Tue, 8 Feb 2022 12:52:38 +0100 Subject: [PATCH 13/27] fix broken link --- doc/userdoc/installation/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index 41ed7d32e4..bfe63bf677 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -80,7 +80,7 @@ Who are you? I am a developer and want to contribute to the code or documentation of NEST. - Take me to the :ref:`source installation . + Take me to the :ref:`source installation `. ---- If installation didn't work, see the :ref:`troubleshooting section `. From 024213ce0ce305a4c2612eaf8b45ba84af643f0d Mon Sep 17 00:00:00 2001 From: Melissa Lober Date: Tue, 8 Feb 2022 16:44:24 +0100 Subject: [PATCH 14/27] added conda install description for linux installs --- doc/userdoc/installation/linux_install.rst | 39 +++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/doc/userdoc/installation/linux_install.rst b/doc/userdoc/installation/linux_install.rst index 7de26aaa8a..328d9ef44e 100644 --- a/doc/userdoc/installation/linux_install.rst +++ b/doc/userdoc/installation/linux_install.rst @@ -42,6 +42,43 @@ If you want to use PyNEST, we recommend to install the following along with thei .. _source-install: +Installation from source in a conda environment +-------------------------------------------------------- + +* Get nest-simulator from Github `https://github.com/nest/nest-simulator`_ or download a zip `here`_. +* Create a conda environment from this `environment.yml https://github.com/nest/nest-simulator/blob/master/environment.yml`_ file. + +.. code-block:: bash + conda env create -f nest-simulator/environment.yml -p + conda activate + +* Create a build directory: + +.. code-block:: sh + + mkdir build_dir + +* Change to the build directory: + +.. code-block:: sh + + cd build_dir + +* Configure NEST. Add the cmake option -CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX to link nest to your active conda environment. You may need additional ``cmake`` options (see :ref:`cmake_options`). + +.. code-block:: sh + + cmake -CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX + +* Compile and install NEST: + +.. code-block:: sh + + make + make install + make installcheck + + Installation from source in a virtual Python environment -------------------------------------------------------- @@ -72,7 +109,7 @@ further adjust settings for your system. python -m venv nest_env source nest_env/bin/activate -* Unpack the tarball +* Unpack the tarball `missing_link_to_tarball`_ .. code-block:: sh From 41f2e9d3baac7f6e681ad9aa237383e0d271c9dc Mon Sep 17 00:00:00 2001 From: Melissa Lober Date: Tue, 8 Feb 2022 16:50:11 +0100 Subject: [PATCH 15/27] fixed links --- doc/userdoc/installation/linux_install.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/userdoc/installation/linux_install.rst b/doc/userdoc/installation/linux_install.rst index 328d9ef44e..90e66afff8 100644 --- a/doc/userdoc/installation/linux_install.rst +++ b/doc/userdoc/installation/linux_install.rst @@ -45,8 +45,8 @@ If you want to use PyNEST, we recommend to install the following along with thei Installation from source in a conda environment -------------------------------------------------------- -* Get nest-simulator from Github `https://github.com/nest/nest-simulator`_ or download a zip `here`_. -* Create a conda environment from this `environment.yml https://github.com/nest/nest-simulator/blob/master/environment.yml`_ file. +* Get nest-simulator from Github ``_ or download a zip `here`_. +* Create a conda environment from this `environment.yml `_ file. .. code-block:: bash conda env create -f nest-simulator/environment.yml -p @@ -109,7 +109,7 @@ further adjust settings for your system. python -m venv nest_env source nest_env/bin/activate -* Unpack the tarball `missing_link_to_tarball`_ +* Unpack the tarball ``_ .. code-block:: sh From 9ab2f97205899b523bf0731fb4bca17757f685a3 Mon Sep 17 00:00:00 2001 From: Melissa Lober Date: Tue, 8 Feb 2022 16:50:56 +0100 Subject: [PATCH 16/27] fixed links --- doc/userdoc/installation/linux_install.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/userdoc/installation/linux_install.rst b/doc/userdoc/installation/linux_install.rst index 90e66afff8..6f998de579 100644 --- a/doc/userdoc/installation/linux_install.rst +++ b/doc/userdoc/installation/linux_install.rst @@ -45,7 +45,7 @@ If you want to use PyNEST, we recommend to install the following along with thei Installation from source in a conda environment -------------------------------------------------------- -* Get nest-simulator from Github ``_ or download a zip `here`_. +* Get nest-simulator from Github ``_ or download a zip ``_. * Create a conda environment from this `environment.yml `_ file. .. code-block:: bash From 4581e3565bf447770e5451fc660a262846d3e163 Mon Sep 17 00:00:00 2001 From: Melissa Lober Date: Thu, 10 Feb 2022 10:26:06 +0100 Subject: [PATCH 17/27] added conda commands --- doc/userdoc/installation/linux_install.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/userdoc/installation/linux_install.rst b/doc/userdoc/installation/linux_install.rst index 6f998de579..361c78b7c6 100644 --- a/doc/userdoc/installation/linux_install.rst +++ b/doc/userdoc/installation/linux_install.rst @@ -48,7 +48,8 @@ Installation from source in a conda environment * Get nest-simulator from Github ``_ or download a zip ``_. * Create a conda environment from this `environment.yml `_ file. -.. code-block:: bash +.. code-block:: sh + conda env create -f nest-simulator/environment.yml -p conda activate From 18bd7bafe7f9e4e9f5f2c2c433f37309aff3afb4 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Fri, 25 Feb 2022 09:32:31 +0100 Subject: [PATCH 18/27] update developer text, move from linux_install --- doc/userdoc/installation/developer.rst | 217 +++++++++++++++++++-- doc/userdoc/installation/linux_install.rst | 185 ------------------ 2 files changed, 197 insertions(+), 205 deletions(-) diff --git a/doc/userdoc/installation/developer.rst b/doc/userdoc/installation/developer.rst index 06db42de30..7dc40e6181 100644 --- a/doc/userdoc/installation/developer.rst +++ b/doc/userdoc/installation/developer.rst @@ -1,51 +1,228 @@ .. _dev_install: Developer installation instructions ------------------------------------ +=================================== +We encourage developes to install NEST and its dependencies in an environment, such as conda. +We have an environment.yml file that contatins all possible tools needed for NEST development. -Compile NEST from source code: +If you require multiple versions, and different frameworks, consider using builder. Builder +is . . . -* Download the source code for the `current release `_. +Install from source in a conda environment +------------------------------------------ -* Unpack the tarball. +* Clone nest-simulator from Github ``_ or download a zip ``_. -.. code-block:: +.. note:: - tar -xzvf nest-simulator-x.y.z.tar.gz + For more info on using git see our :ref:`git_workflow` -* Or Fork NEST and clone the repository on `GitHub `_. - See details on :ref:`GitHub workflows here `. +* Create a conda environment from the `environment.yml `_ file. + We recommend specifying a dedicated location ``--prefix `` for your environment. + See the `conda documentation on using a custom location rather than the default envs folder `_ -If not already installed on your system, the following packages are recommended (see also the Dependencies section) +.. code-block:: sh -create a build directory + conda env create -f nest-simulator/environment.yml --prefix + conda activate -.. code-block:: bash +* Create a build directory: + +.. code-block:: sh + + mkdir build_dir + +* Change to the build directory: + +.. code-block:: sh + + cd build_dir + +* Configure NEST. Add the cmake option -CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX to link nest to your active conda environment. ] + You may need additional ``cmake`` options (see :ref:`cmake_options`). + +.. code-block:: sh + + cmake -CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX + +* Compile and install NEST: + +.. code-block:: sh + + make + make install + make installcheck + + + +Install from source in a virtual Python environment +---------------------------------------------------- - mkdir build/ +The following are the basic steps to compile and install NEST from source code. See the +:ref:`CMake Options ` or the :ref:`High Performance Computing ` instructions to +further adjust settings for your system. -change into build directory +* If not already installed on your system, the following packages are recommended (see also the `Dependencies`_ + section) .. code-block:: bash - cd build/ + sudo apt install -y \ + cython \ + libgsl-dev \ + libltdl-dev \ + libncurses-dev \ + libreadline-dev \ + openmpi-bin \ + libopenmpi-dev -compile and build NEST: +* When NEST is installed with Python and without ``cmake`` option ``-DCMAKE_INSTALL_PREFIX=``, + only `virtual environments `_ are supported. + Activate the virtual environment you want to use, or if you don't already have one, create a new virtual environment for NEST: .. code-block:: bash - cmake /source/directory/ + python -m venv nest_env + source nest_env/bin/activate + +* Unpack the tarball ``_ + +.. code-block:: sh + + tar -xzvf nest-simulator-x.y.z.tar.gz + +* Create a build directory: + +.. code-block:: sh + + mkdir nest-simulator-x.y.z-build + +* Change to the build directory: + +.. code-block:: sh + + cd nest-simulator-x.y.z-build + +* Configure NEST. You may need additional ``cmake`` options (see :ref:`cmake_options`). + +.. code-block:: sh + + cmake + +* Compile and install NEST: + +.. code-block:: sh -See our :doc:`cmake_options` for different configuration options + make + make install + make installcheck + +NEST should now be successfully installed in your active Python environment. + + + +Install from source without a virtual environment +------------------------------------------------- + +The following are the basic steps to compile and install NEST from source code. See the +:ref:`CMake Options ` or the :ref:`High Performance Computing ` instructions to +further adjust settings for your system. + +* If not already installed on your system, the following packages are recommended (see also the `Dependencies`_ + section) + + +.. note:: + + The complete list of packages for an entire development environment can be found in the environment.yml file .. code-block:: bash - make - make install - make installcheck + sudo apt install -y \ + libtool \ + cmake \ + gsl-bin \ + libgsl-dev \ + libboost-dev \ + cython3 \ + libreadline-dev \ + python3-all-dev \ + python3-numpy \ + python3-scipy \ + python3-matplotlib \ + python3-nose \ + ipython3 \ + python30-future \ + python3-mpi4py \ + openmpi-bin \ + libopenmpi-dev + libmusic-dev \ + music-bin \ + python3-pip \ + python3-pytest \ + python3-pytest-timeout \ + python3-pytest-xdist + +* Clone the NEST repository or unpack the tarball + +.. code-block:: sh + + git clone https://github.com//nest-simulator/ + +.. code-block:: sh + + tar -xzvf nest-simulator-x.y.z.tar.gz + +* Create an intall directory + + mkdir nest-x.y.z + +We will refer to the full path of this directory by . + +* Create a build directory: + +.. code-block:: sh + + mkdir nest-simulator-x.y.z-build + +* Change to the build directory: + +.. code-block:: sh + + cd nest-simulator-x.y.z-build + +* Configure NEST. You may need additional ``cmake`` options (see :ref:`cmake_options`). + Installing NEST with Python outside a virtual Python environment requires the + ``cmake`` option ``-DCMAKE_INSTALL_PREFIX=``. + +.. code-block:: sh + + cmake -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_BUILD_TYPE:STRING=Debug + +.. note:: + + ```` should be an absolute path + +.. note:: + + Python bindings are enabled by default. Add the configuration option ``-Dwith-python=OFF`` to disable them. + +* Compile and install NEST: + +.. code-block:: sh + + make + export PYTHONPATH=/lib/python3.8/site-packages:${PYTHONPATH} + make install + PYTHONUSERBASE= pip3 install --user junitparser export PATH=/bin:${PATH} + make installcheck +NEST should now be successfully installed on your system. +* Before using NEST, make sure that all required environment variables are set correctly. In short, this can be + established by sourcing the shell script ``nest_vars.sh``, which is installed into the path for binaries selected + during the CMake run. See the section `Environment variables`_ for details. Developer tools diff --git a/doc/userdoc/installation/linux_install.rst b/doc/userdoc/installation/linux_install.rst index 361c78b7c6..417ce44706 100644 --- a/doc/userdoc/installation/linux_install.rst +++ b/doc/userdoc/installation/linux_install.rst @@ -42,191 +42,6 @@ If you want to use PyNEST, we recommend to install the following along with thei .. _source-install: -Installation from source in a conda environment --------------------------------------------------------- - -* Get nest-simulator from Github ``_ or download a zip ``_. -* Create a conda environment from this `environment.yml `_ file. - -.. code-block:: sh - - conda env create -f nest-simulator/environment.yml -p - conda activate - -* Create a build directory: - -.. code-block:: sh - - mkdir build_dir - -* Change to the build directory: - -.. code-block:: sh - - cd build_dir - -* Configure NEST. Add the cmake option -CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX to link nest to your active conda environment. You may need additional ``cmake`` options (see :ref:`cmake_options`). - -.. code-block:: sh - - cmake -CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX - -* Compile and install NEST: - -.. code-block:: sh - - make - make install - make installcheck - - -Installation from source in a virtual Python environment --------------------------------------------------------- - -The following are the basic steps to compile and install NEST from source code. See the -:ref:`CMake Options ` or the :ref:`High Performance Computing ` instructions to -further adjust settings for your system. - -* If not already installed on your system, the following packages are recommended (see also the `Dependencies`_ - section) - -.. code-block:: bash - - sudo apt install -y \ - cython \ - libgsl-dev \ - libltdl-dev \ - libncurses-dev \ - libreadline-dev \ - openmpi-bin \ - libopenmpi-dev - -* When NEST is installed with Python and without ``cmake`` option ``-DCMAKE_INSTALL_PREFIX=``, - only `virtual environments `_ are supported. - Activate the virtual environment you want to use, or if you don't already have one, create a new virtual environment for NEST: - -.. code-block:: bash - - python -m venv nest_env - source nest_env/bin/activate - -* Unpack the tarball ``_ - -.. code-block:: sh - - tar -xzvf nest-simulator-x.y.z.tar.gz - -* Create a build directory: - -.. code-block:: sh - - mkdir nest-simulator-x.y.z-build - -* Change to the build directory: - -.. code-block:: sh - - cd nest-simulator-x.y.z-build - -* Configure NEST. You may need additional ``cmake`` options (see :ref:`cmake_options`). - -.. code-block:: sh - - cmake - -* Compile and install NEST: - -.. code-block:: sh - - make - make install - make installcheck - -NEST should now be successfully installed in your active Python environment. - -* See the :ref:`Getting started ` pages to find out how to get going with NEST or check out our - :ref:`example networks `. - - -Installation from source without a virtual Python environment -------------------------------------------------------------- - -The following are the basic steps to compile and install NEST from source code. See the -:ref:`CMake Options ` or the :ref:`High Performance Computing ` instructions to -further adjust settings for your system. - -* If not already installed on your system, the following packages are recommended (see also the `Dependencies`_ - section) - -.. code-block:: bash - - sudo apt install -y \ - cython \ - libgsl-dev \ - libltdl-dev \ - libncurses-dev \ - libreadline-dev \ - python3-all-dev \ - python3-numpy \ - python3-scipy \ - python3-matplotlib \ - python3-nose \ - python3-junitparser \ - python3-mpi4py \ - openmpi-bin \ - libopenmpi-dev - -* Unpack the tarball - -.. code-block:: sh - - tar -xzvf nest-simulator-x.y.z.tar.gz - -* Create a build directory: - -.. code-block:: sh - - mkdir nest-simulator-x.y.z-build - -* Change to the build directory: - -.. code-block:: sh - - cd nest-simulator-x.y.z-build - -* Configure NEST. You may need additional ``cmake`` options (see :ref:`cmake_options`). - Installing NEST with Python outside a virtual Python environment requires the - ``cmake`` option ``-DCMAKE_INSTALL_PREFIX=``. - -.. code-block:: sh - - cmake -DCMAKE_INSTALL_PREFIX:PATH= - -.. note:: - - ``/install/path`` should be an absolute path - -.. note:: - - Python bindings are enabled by default. Add the configuration option ``-Dwith-python=OFF`` to disable them. - -* Compile and install NEST: - -.. code-block:: sh - - make - make install - make installcheck - -NEST should now be successfully installed on your system. - -* Before using NEST, make sure that all required environment variables are set correctly. In short, this can be - established by sourcing the shell script ``nest_vars.sh``, which is installed into the path for binaries selected - during the CMake run. See the section `Environment variables`_ for details. - -* See the :ref:`Getting started ` pages to find out how to get going with NEST or check out our - :ref:`example networks `. - What gets installed where ------------------------- From ee60a14fdcfe97cddac90ac0c5949e70ffabf11a Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Mon, 28 Feb 2022 13:50:16 +0100 Subject: [PATCH 19/27] update links and add text --- doc/userdoc/installation/developer.rst | 101 +++++++++++++-------- doc/userdoc/installation/linux_install.rst | 26 ------ 2 files changed, 64 insertions(+), 63 deletions(-) diff --git a/doc/userdoc/installation/developer.rst b/doc/userdoc/installation/developer.rst index 7dc40e6181..1c2fcc5ea3 100644 --- a/doc/userdoc/installation/developer.rst +++ b/doc/userdoc/installation/developer.rst @@ -3,24 +3,38 @@ Developer installation instructions =================================== -We encourage developes to install NEST and its dependencies in an environment, such as conda. -We have an environment.yml file that contatins all possible tools needed for NEST development. +We encourage developers to install NEST and its dependencies in an environment, such as conda. +We have an `environment.yml `_ +file that contains all possible tools needed for NEST development. -If you require multiple versions, and different frameworks, consider using builder. Builder -is . . . +* Clone nest-simulator from Github ``_: -Install from source in a conda environment ------------------------------------------- +.. code-block:: sh -* Clone nest-simulator from Github ``_ or download a zip ``_. + git clone git@github.com:/nest-simulator.git .. note:: - For more info on using git see our :ref:`git_workflow` + * For more information on using git see our :ref:`git_workflow`. + + +or download the tarball `here `_ and unpack it: + +.. code-block:: sh + + tar -xzvf nest-simulator-x.y.z.tar.gz + +* Check out all the :ref:`development workflows here `. + + + +Install from source in a conda environment +------------------------------------------ * Create a conda environment from the `environment.yml `_ file. We recommend specifying a dedicated location ``--prefix `` for your environment. - See the `conda documentation on using a custom location rather than the default envs folder `_ + See the `conda documentation `_. + on using a custom location rather than the default envs folder. .. code-block:: sh @@ -39,7 +53,7 @@ Install from source in a conda environment cd build_dir -* Configure NEST. Add the cmake option -CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX to link nest to your active conda environment. ] +* Configure NEST. Add the cmake option ``-CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX`` to link nest to your active conda environment. You may need additional ``cmake`` options (see :ref:`cmake_options`). .. code-block:: sh @@ -54,7 +68,9 @@ Install from source in a conda environment make install make installcheck +.. note:: + To build the developer or user documentation see :ref:`doc_workflow` Install from source in a virtual Python environment ---------------------------------------------------- @@ -120,7 +136,7 @@ further adjust settings for your system. NEST should now be successfully installed in your active Python environment. - +.. _sec_no_env: Install from source without a virtual environment ------------------------------------------------- @@ -129,19 +145,18 @@ The following are the basic steps to compile and install NEST from source code. :ref:`CMake Options ` or the :ref:`High Performance Computing ` instructions to further adjust settings for your system. -* If not already installed on your system, the following packages are recommended (see also the `Dependencies`_ - section) - +* If not already installed on your system, the following packages are recommended. .. note:: - The complete list of packages for an entire development environment can be found in the environment.yml file + The complete list of packages for an entire development environment can be found in the environment.yml file + The list below does not include the requirements for building documentation or running NEST server. .. code-block:: bash sudo apt install -y \ libtool \ - cmake \ + cmake \ # require >= 3.12 gsl-bin \ libgsl-dev \ libboost-dev \ @@ -153,7 +168,7 @@ further adjust settings for your system. python3-matplotlib \ python3-nose \ ipython3 \ - python30-future \ + python3-future \ python3-mpi4py \ openmpi-bin \ libopenmpi-dev @@ -164,19 +179,12 @@ further adjust settings for your system. python3-pytest-timeout \ python3-pytest-xdist -* Clone the NEST repository or unpack the tarball -.. code-block:: sh - - git clone https://github.com//nest-simulator/ +* Create an install directory .. code-block:: sh - tar -xzvf nest-simulator-x.y.z.tar.gz - -* Create an intall directory - - mkdir nest-x.y.z + mkdir nest-simulator-x.y.z-install We will refer to the full path of this directory by . @@ -184,7 +192,7 @@ We will refer to the full path of this directory by . .. code-block:: sh - mkdir nest-simulator-x.y.z-build + mkdir nest-simulator-x.y.z-build * Change to the build directory: @@ -212,17 +220,19 @@ We will refer to the full path of this directory by . .. code-block:: sh - make - export PYTHONPATH=/lib/python3.8/site-packages:${PYTHONPATH} - make install - PYTHONUSERBASE= pip3 install --user junitparser export PATH=/bin:${PATH} - make installcheck + make + export PYTHONPATH=/lib/python3.8/site-packages:${PYTHONPATH} + make install + PYTHONUSERBASE= pip3 install --user junitparser export PATH=/bin:${PATH} + make installcheck -NEST should now be successfully installed on your system. +For your convenience, a shell script setting all required environment variables is provided in +``/bin/nest_vars.sh``. Setting the environment variables in your active shell session requires +sourcing the script: + +.. code-block:: sh -* Before using NEST, make sure that all required environment variables are set correctly. In short, this can be - established by sourcing the shell script ``nest_vars.sh``, which is installed into the path for binaries selected - during the CMake run. See the section `Environment variables`_ for details. + source /bin/nest_vars.sh Developer tools @@ -231,6 +241,23 @@ Developer tools A complete list of required packages to install NEST, run tests, and build documentation, is available in the ``environment.yml`` file on the `NEST simulator GitHub page `_. -Check out all the :ref:`development workflows here `. + +What gets installed where +------------------------- + +By default, everything will be installed to the subdirectories ``/{bin,lib,share}``, where +``/install/path`` is the install path given to ``cmake``: + +- Executables ``/bin`` +- Dynamic libraries ``/lib/`` +- SLI libraries ``/share/nest/sli`` +- Documentation ``/share/doc/nest`` +- Examples ``/share/doc/nest/examples`` +- PyNEST ``/lib/pythonX.Y/site-packages/nest`` +- PyNEST examples ``/share/doc/nest/examples/pynest`` + +If you want to run the ``nest`` executable or use the ``nest`` Python module without providing explicit paths, you +have to add the installation directory to your search paths. +Please refer to the :ref:`next section ` section for this. diff --git a/doc/userdoc/installation/linux_install.rst b/doc/userdoc/installation/linux_install.rst index 417ce44706..0f88aed8e5 100644 --- a/doc/userdoc/installation/linux_install.rst +++ b/doc/userdoc/installation/linux_install.rst @@ -43,24 +43,6 @@ If you want to use PyNEST, we recommend to install the following along with thei .. _source-install: -What gets installed where -------------------------- - -By default, everything will be installed to the subdirectories ``/{bin,lib,share}``, where -``/install/path`` is the install path given to ``cmake``: - -- Executables ``/bin`` -- Dynamic libraries ``/lib/`` -- SLI libraries ``/share/nest/sli`` -- Documentation ``/share/doc/nest`` -- Examples ``/share/doc/nest/examples`` -- PyNEST ``/lib/pythonX.Y/site-packages/nest`` -- PyNEST examples ``/share/doc/nest/examples/pynest`` - -If you want to run the ``nest`` executable or use the ``nest`` Python module without providing explicit paths, you -have to add the installation directory to your search paths. -Please refer to the :ref:`next section ` section for this. - .. _environment_variables: @@ -71,14 +53,6 @@ A number of environment variables are used to specify where the components of a particular when installing to a custom directory, it is typically necessary to explicitly set these variables, so that your operating system can find the NEST binaries, its libraries and custom extension modules. -For your convenience, a shell script setting all required environment variables is provided in -``/bin/nest_vars.sh``. Setting the environment variables in your active shell session requires -sourcing the script: - -.. code-block:: sh - - source /bin/nest_vars.sh - You may want to include this line in your ``.bashrc`` file, so that the environment variables are set automatically whenever you open a new terminal. From 3b8cb147b4d20f83e4f1d56fa0fc4a77daf35280 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Thu, 3 Mar 2022 14:14:59 +0100 Subject: [PATCH 20/27] fix typo --- doc/userdoc/installation/developer.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/userdoc/installation/developer.rst b/doc/userdoc/installation/developer.rst index 1c2fcc5ea3..23ad064acb 100644 --- a/doc/userdoc/installation/developer.rst +++ b/doc/userdoc/installation/developer.rst @@ -58,7 +58,7 @@ Install from source in a conda environment .. code-block:: sh - cmake -CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX + cmake -DCMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX * Compile and install NEST: From e1b19e7bf8b2006929770f643530135c8b4b733e Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Wed, 9 Mar 2022 11:19:34 +0100 Subject: [PATCH 21/27] separate intall instructions, update text --- doc/userdoc/installation/condaenv_install.rst | 57 +++++ doc/userdoc/installation/developer.rst | 231 +----------------- doc/userdoc/installation/docker.rst | 58 ++--- doc/userdoc/installation/index.rst | 2 +- doc/userdoc/installation/noenv_install.rst | 99 ++++++++ 5 files changed, 198 insertions(+), 249 deletions(-) create mode 100644 doc/userdoc/installation/condaenv_install.rst create mode 100644 doc/userdoc/installation/noenv_install.rst diff --git a/doc/userdoc/installation/condaenv_install.rst b/doc/userdoc/installation/condaenv_install.rst new file mode 100644 index 0000000000..7bd25de0bf --- /dev/null +++ b/doc/userdoc/installation/condaenv_install.rst @@ -0,0 +1,57 @@ +.. _condaenv: + +Install from source in a conda environment +========================================== + +* Create a conda environment from the `environment.yml `_ file. + We recommend specifying a dedicated location ``-p `` for your environment. + See the `conda documentation `_. + on using a custom location rather than the default envs folder. + +.. code-block:: sh + + conda env create -f nest-simulator/environment.yml --p + conda activate + +* Create a build directory: + +.. code-block:: sh + + mkdir build_dir + +* Change to the build directory: + +.. code-block:: sh + + cd build_dir + +* Configure NEST. Add the cmake option ``-CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX`` to link nest to your active conda environment. + You may need additional ``cmake`` options (see :ref:`cmake_options`). + +.. code-block:: sh + + cmake -DCMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX + +* Compile and install NEST: + +.. code-block:: sh + + make + make install + make installcheck + +For your convenience, a shell script setting all required environment variables is provided in +``/bin/nest_vars.sh``. Setting the environment variables in your active shell session requires +sourcing the script: + +.. code-block:: sh + + source /bin/nest_vars.sh + + + +.. note:: + + To build the developer or user documentation see :ref:`doc_workflow` + + diff --git a/doc/userdoc/installation/developer.rst b/doc/userdoc/installation/developer.rst index 23ad064acb..53e22b98db 100644 --- a/doc/userdoc/installation/developer.rst +++ b/doc/userdoc/installation/developer.rst @@ -1,246 +1,37 @@ .. _dev_install: -Developer installation instructions -=================================== +Install NEST from source +========================= -We encourage developers to install NEST and its dependencies in an environment, such as conda. -We have an `environment.yml `_ -file that contains all possible tools needed for NEST development. - -* Clone nest-simulator from Github ``_: - -.. code-block:: sh - - git clone git@github.com:/nest-simulator.git .. note:: - * For more information on using git see our :ref:`git_workflow`. - - -or download the tarball `here `_ and unpack it: - -.. code-block:: sh - - tar -xzvf nest-simulator-x.y.z.tar.gz - -* Check out all the :ref:`development workflows here `. - - - -Install from source in a conda environment ------------------------------------------- - -* Create a conda environment from the `environment.yml `_ file. - We recommend specifying a dedicated location ``--prefix `` for your environment. - See the `conda documentation `_. - on using a custom location rather than the default envs folder. - -.. code-block:: sh - - conda env create -f nest-simulator/environment.yml --prefix - conda activate - -* Create a build directory: - -.. code-block:: sh - - mkdir build_dir - -* Change to the build directory: + Please see our :ref:`development workflows and guidelines `, if you need + a refresher in git or need to review the coding or documentation guidelines. -.. code-block:: sh - - cd build_dir -* Configure NEST. Add the cmake option ``-CDMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX`` to link nest to your active conda environment. - You may need additional ``cmake`` options (see :ref:`cmake_options`). - -.. code-block:: sh - cmake -DCMAKE_INSTALL_PREFIX:PATH=$CONDA_PREFIX - -* Compile and install NEST: +* Clone nest-simulator from Github ``_: .. code-block:: sh - make - make install - make installcheck - -.. note:: - - To build the developer or user documentation see :ref:`doc_workflow` - -Install from source in a virtual Python environment ----------------------------------------------------- - -The following are the basic steps to compile and install NEST from source code. See the -:ref:`CMake Options ` or the :ref:`High Performance Computing ` instructions to -further adjust settings for your system. - -* If not already installed on your system, the following packages are recommended (see also the `Dependencies`_ - section) - -.. code-block:: bash - - sudo apt install -y \ - cython \ - libgsl-dev \ - libltdl-dev \ - libncurses-dev \ - libreadline-dev \ - openmpi-bin \ - libopenmpi-dev - -* When NEST is installed with Python and without ``cmake`` option ``-DCMAKE_INSTALL_PREFIX=``, - only `virtual environments `_ are supported. - Activate the virtual environment you want to use, or if you don't already have one, create a new virtual environment for NEST: - -.. code-block:: bash + git clone git@github.com:/nest-simulator.git - python -m venv nest_env - source nest_env/bin/activate -* Unpack the tarball ``_ +* or download the tarball `here `_ and unpack it: .. code-block:: sh tar -xzvf nest-simulator-x.y.z.tar.gz -* Create a build directory: - -.. code-block:: sh - - mkdir nest-simulator-x.y.z-build - -* Change to the build directory: - -.. code-block:: sh - - cd nest-simulator-x.y.z-build - -* Configure NEST. You may need additional ``cmake`` options (see :ref:`cmake_options`). - -.. code-block:: sh - - cmake - -* Compile and install NEST: - -.. code-block:: sh - - make - make install - make installcheck - -NEST should now be successfully installed in your active Python environment. - -.. _sec_no_env: - -Install from source without a virtual environment -------------------------------------------------- - -The following are the basic steps to compile and install NEST from source code. See the -:ref:`CMake Options ` or the :ref:`High Performance Computing ` instructions to -further adjust settings for your system. - -* If not already installed on your system, the following packages are recommended. - -.. note:: - - The complete list of packages for an entire development environment can be found in the environment.yml file - The list below does not include the requirements for building documentation or running NEST server. - -.. code-block:: bash - - sudo apt install -y \ - libtool \ - cmake \ # require >= 3.12 - gsl-bin \ - libgsl-dev \ - libboost-dev \ - cython3 \ - libreadline-dev \ - python3-all-dev \ - python3-numpy \ - python3-scipy \ - python3-matplotlib \ - python3-nose \ - ipython3 \ - python3-future \ - python3-mpi4py \ - openmpi-bin \ - libopenmpi-dev - libmusic-dev \ - music-bin \ - python3-pip \ - python3-pytest \ - python3-pytest-timeout \ - python3-pytest-xdist - - -* Create an install directory - -.. code-block:: sh - - mkdir nest-simulator-x.y.z-install - -We will refer to the full path of this directory by . - -* Create a build directory: - -.. code-block:: sh - - mkdir nest-simulator-x.y.z-build - -* Change to the build directory: - -.. code-block:: sh - - cd nest-simulator-x.y.z-build - -* Configure NEST. You may need additional ``cmake`` options (see :ref:`cmake_options`). - Installing NEST with Python outside a virtual Python environment requires the - ``cmake`` option ``-DCMAKE_INSTALL_PREFIX=``. - -.. code-block:: sh - - cmake -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_BUILD_TYPE:STRING=Debug - -.. note:: - - ```` should be an absolute path - -.. note:: - - Python bindings are enabled by default. Add the configuration option ``-Dwith-python=OFF`` to disable them. - -* Compile and install NEST: - -.. code-block:: sh - - make - export PYTHONPATH=/lib/python3.8/site-packages:${PYTHONPATH} - make install - PYTHONUSERBASE= pip3 install --user junitparser export PATH=/bin:${PATH} - make installcheck - -For your convenience, a shell script setting all required environment variables is provided in -``/bin/nest_vars.sh``. Setting the environment variables in your active shell session requires -sourcing the script: - -.. code-block:: sh - - source /bin/nest_vars.sh -Developer tools -~~~~~~~~~~~~~~~ +We have provided an `environment.yml `_ +file that contains all possible packages needed for NEST development. +See our instructions for installing NEST from source in a :ref:`conda environment ` -A complete list of required packages to install NEST, run tests, and build documentation, is available in the -``environment.yml`` file on the `NEST simulator GitHub page `_. +If you want to install NEST without any environment, see the :ref:`instructions here `. What gets installed where ------------------------- diff --git a/doc/userdoc/installation/docker.rst b/doc/userdoc/installation/docker.rst index ddaaa84651..60edf60c90 100644 --- a/doc/userdoc/installation/docker.rst +++ b/doc/userdoc/installation/docker.rst @@ -36,27 +36,9 @@ You can use the docker images directly out of docker-registry.ebrains.eu like th ``TAG`` can be a version of NEST ``2.20.2`` or later. Alternatively, you can use ``dev`` for the development branch (master). - -To run NEST 2.20.2 +NEST 3.2 and later ^^^^^^^^^^^^^^^^^^ -Jupyter notebook with NEST 2.20.2: - -.. code-block:: bash - - docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=notebook / - -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:2.20.2 - -Jupyter lab with NEST 2.20.2 - -.. code-block:: bash - - docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=jupyterlab / - -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:2.20.2 - -NEST 3.2 -^^^^^^^^ - As of NEST 3.2, you can use the docker-compose feature. To use 'docker-compose' you need the definition file from the git repository. Download it: @@ -79,7 +61,7 @@ or .. code-block:: bash docker run -it --rm -e NEST_CONTAINER_MODE=nest-server -p 5000:5000 / - docker-registry.ebrains.eu/nest/nest-simulator:3.2 + docker-registry.ebrains.eu/nest/nest-simulator: Starts the NEST API server container and opens the corresponding port 5000. Test it with `curl localhost:5000/api`. See the :ref:`nest_server` documentation for more details. @@ -95,9 +77,9 @@ or .. code-block:: bash docker run -it --rm -e NEST_CONTAINER_MODE=nest-server -p 5000:5000 / - docker-registry.ebrains.eu/nest/nest-simulator:3.2 + docker-registry.ebrains.eu/nest/nest-simulator: docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -p 8000:8000 / - -e NEST_CONTAINER_MODE=nest-desktop docker-registry.ebrains.eu/nest/nest-simulator:3.2 + -e NEST_CONTAINER_MODE=nest-desktop docker-registry.ebrains.eu/nest/nest-simulator: Starts the NEST server and the NEST desktop web interface. Port 8000 is also made available. Open NEST Desktop in the web browser using the following http link: `http://localhost:8000` @@ -115,9 +97,9 @@ or .. code-block:: bash docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=notebook / - -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:3.2 + -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator: -Starts a notebook server with pre-installed NEST 3.2. The corresponding URL is displayed in the console. You can copy an +Starts a notebook server with pre-installed NEST. The corresponding URL is displayed in the console. You can copy an d paste into your browser. @@ -132,15 +114,33 @@ or .. code-block:: bash docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=jupyterlab / - -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:3.2) + -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:) -Starts a Jupyter lab server with pre-installed NEST 3.2. The corresponding URL is displayed in the console. +Starts a Jupyter lab server with pre-installed NEST. The corresponding URL is displayed in the console. Copy and paste the URL into your browser. To stop and delete running containers use `docker-compose down`. + +To run NEST 2.20.2 +^^^^^^^^^^^^^^^^^^ + +Jupyter notebook with NEST 2.20.2: + +.. code-block:: bash + + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=notebook / + -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:2.20.2 + +Jupyter lab with NEST 2.20.2 + +.. code-block:: bash + + docker run -it --rm -e LOCAL_USER_ID=`id -u $USER` -v $(pwd):/opt/data -e NEST_CONTAINER_MODE=jupyterlab / + -p 8080:8080 docker-registry.ebrains.eu/nest/nest-simulator:2.20.2 + NEST dev ^^^^^^^^ @@ -154,8 +154,10 @@ If you want to use the compose configuration for the ``dev`` NEST version, you c On Windows ^^^^^^^^^^ -The following commands should work on Windows. Please note that NEST does not officially -support Windows! +.. note:: + + The following commands should work on Windows. Please note that NEST does not officially + support Windows! .. code-block:: bash diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index bfe63bf677..f2b527b84d 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -4,6 +4,7 @@ Install NEST ============ + Who are you? ~~~~~~~~~~~~ @@ -14,7 +15,6 @@ Who are you? .. image:: ../static/img/020-user_black.png :target: user.html - .. container:: rightside **User** diff --git a/doc/userdoc/installation/noenv_install.rst b/doc/userdoc/installation/noenv_install.rst new file mode 100644 index 0000000000..e714f1b068 --- /dev/null +++ b/doc/userdoc/installation/noenv_install.rst @@ -0,0 +1,99 @@ +.. _noenv: + +Install from source without a virtual environment +================================================= + +The following are the basic steps to compile and install NEST from source code. See the +:ref:`CMake Options ` or the :ref:`High Performance Computing ` instructions to +further adjust settings for your system. + +* If not already installed on your system, the following packages are recommended. + +.. important:: + + The list below does not include the requirements for building documentation or running NEST server. + The complete list of packages for an entire development environment can be found in the `environment.yml file + `_. + For more information see the documentation workflows :ref:`doc_workflow` and :ref:`nest_server` docs. + +.. code-block:: bash + + sudo apt install -y \ + cmake \ + gsl-bin \ + libgsl-dev \ + libboost-dev \ + cython3 \ + libreadline-dev \ + python3-all-dev \ + python3-numpy \ + python3-scipy \ + python3-matplotlib \ + python3-nose \ + python3-junitparser \ + ipython3 \ + python3-future \ + openmpi-bin \ + libopenmpi-dev \ + python3-mpi4py \ + libmusic-dev \ + music-bin \ + python3-pip \ + python3-pytest \ + python3-pytest-timeout \ + python3-pytest-xdist + +* Create an install directory + +.. code-block:: sh + + mkdir nest-install + +We will refer to the full path of this directory by . + +* Create a build directory: + +.. code-block:: sh + + mkdir nest-build + +* Change to the build directory: + +.. code-block:: sh + + cd nest-build + +* Configure NEST. You may need additional ``cmake`` options (see :ref:`cmake_options`). + Installing NEST with Python outside a virtual Python environment requires the + ``cmake`` option ``-DCMAKE_INSTALL_PREFIX=``. + +.. code-block:: sh + + cmake -DCMAKE_INSTALL_PREFIX:PATH= + +.. note:: + + ```` should be an absolute path + +.. note:: + + Python bindings are enabled by default. Add the configuration option ``-Dwith-python=OFF`` to disable them. + +* Compile and install NEST: + +.. code-block:: sh + + make + make install + make installcheck + +For your convenience, a shell script setting all required environment variables is provided in +``/bin/nest_vars.sh``. Setting the environment variables in your active shell session requires +sourcing the script: + +.. code-block:: sh + + source /bin/nest_vars.sh + + + From 799aad4c5e1e418f2e666868e47b83f87efc507e Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Wed, 9 Mar 2022 14:35:41 +0100 Subject: [PATCH 22/27] fix up text and figures --- doc/userdoc/installation/admin.rst | 7 +- doc/userdoc/installation/condaenv_install.rst | 4 +- doc/userdoc/installation/developer.rst | 2 +- doc/userdoc/installation/index.rst | 94 ++++++------------- doc/userdoc/installation/noenv_install.rst | 6 +- doc/userdoc/installation/user.rst | 6 +- 6 files changed, 45 insertions(+), 74 deletions(-) diff --git a/doc/userdoc/installation/admin.rst b/doc/userdoc/installation/admin.rst index 4a6bff9dfe..c8ce741cd8 100644 --- a/doc/userdoc/installation/admin.rst +++ b/doc/userdoc/installation/admin.rst @@ -5,10 +5,13 @@ Administrator installation instructions If you need to deploy NEST on a machine -.. seealso:: - Check out our guides to :ref:`optimizing NEST for HPC systems ` +* Check out our guides to :ref:`optimizing NEST for HPC systems ` +Configure HPC systems +~~~~~~~~~~~~~~~~~~~~~ + +Here are some :ref:`configuration options ` that may be useful on supercomputers and large clusters. Docker install ~~~~~~~~~~~~~~ diff --git a/doc/userdoc/installation/condaenv_install.rst b/doc/userdoc/installation/condaenv_install.rst index 7bd25de0bf..9b348aa8d5 100644 --- a/doc/userdoc/installation/condaenv_install.rst +++ b/doc/userdoc/installation/condaenv_install.rst @@ -4,8 +4,8 @@ Install from source in a conda environment ========================================== * Create a conda environment from the `environment.yml `_ file. - We recommend specifying a dedicated location ``-p `` for your environment. - See the `conda documentation `_. + We recommend specifying a dedicated location (``-p ``) for your environment. + See the `conda documentation `_ on using a custom location rather than the default envs folder. .. code-block:: sh diff --git a/doc/userdoc/installation/developer.rst b/doc/userdoc/installation/developer.rst index 53e22b98db..238604b617 100644 --- a/doc/userdoc/installation/developer.rst +++ b/doc/userdoc/installation/developer.rst @@ -30,6 +30,7 @@ We have provided an `environment.yml ` +OR If you want to install NEST without any environment, see the :ref:`instructions here `. @@ -49,6 +50,5 @@ By default, everything will be installed to the subdirectories ``` section for this. diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index f2b527b84d..75aac92688 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -4,83 +4,32 @@ Install NEST ============ +Install pre-built NEST package +------------------------------ -Who are you? -~~~~~~~~~~~~ - -.. container:: twocol - - .. container:: leftside - - .. image:: ../static/img/020-user_black.png - :target: user.html - - .. container:: rightside - - **User** - - I'm a student or researcher who wants to run neural network simulation scripts - - * :ref:`on my computer ` or - * :ref:`on a cluster of supercomputer `. +|user| I'm a user who wants to :ref:`install NEST on my computer ` | -| - -.. container:: twocol - .. container:: leftside +Install NEST for a class or workshop +------------------------------------ - .. image:: ../static/img/class_black.png - :target: lecturer.html +|lecturer| I'm a lecturer who wants to :ref:`use NEST to teach ` - - .. container:: rightside - - **Lecturer** - - I'm a lecturer who wants to set up a temporary NEST environment for a classroom or workshop to demonstrate neuroscientifc concepts. - - Take me to :ref:`lecturer install instructions `, | -| - - -.. container:: twocol - - .. container:: leftside - .. image:: ../static/img/001-shuttle_black.png - :target: admin.html +Install NEST for HPC +-------------------- - - .. container:: rightside - - **Deployer** - - I'm an administrator responsible for deploying NEST on a cluster or high performance machine for researchers and students. - - Take me to the :ref:`admin installation `. +|admin| I'm an administrator or user who wants to :ref:`set up NEST on a large cluster or supercomputer ` | -| - - -.. container:: twocol - - .. container:: leftside - .. image:: ../static/img/dev_black.png - :target: developer.html +Install NEST from source +------------------------ +|dev| I'm a developer who wants to :ref:`do development in NEST ` - .. container:: rightside - - **Developer** - - I am a developer and want to contribute to the code or documentation of NEST. - - Take me to the :ref:`source installation `. ---- If installation didn't work, see the :ref:`troubleshooting section `. @@ -88,9 +37,28 @@ If installation didn't work, see the :ref:`troubleshooting section `_. - For more information see the documentation workflows :ref:`doc_workflow` and :ref:`nest_server` docs. + The complete list of packages for an entire development environment can be found in the `environment.yml + `_ file. + For more information see the :ref:`doc_workflow` and :ref:`nest_server` docs. .. code-block:: bash diff --git a/doc/userdoc/installation/user.rst b/doc/userdoc/installation/user.rst index 33062725fa..2a37294a63 100644 --- a/doc/userdoc/installation/user.rst +++ b/doc/userdoc/installation/user.rst @@ -128,14 +128,14 @@ Ubuntu version number may be different. .. |linux| image:: ../static/img/linux.png - :scale: 15% + :scale: 11% .. |macos| image:: ../static/img/macos.png - :scale: 15% + :scale: 11% .. |windows| image:: ../static/img/windows.png - :scale: 15% + :scale: 11% From c22b668f85761efe2b7dbc1f2ae2fba663144fe9 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Wed, 9 Mar 2022 18:44:53 +0100 Subject: [PATCH 23/27] minor fixes --- doc/userdoc/installation/developer.rst | 4 ++-- doc/userdoc/installation/noenv_install.rst | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/userdoc/installation/developer.rst b/doc/userdoc/installation/developer.rst index 238604b617..2225d5b7fe 100644 --- a/doc/userdoc/installation/developer.rst +++ b/doc/userdoc/installation/developer.rst @@ -22,7 +22,7 @@ Install NEST from source .. code-block:: sh - tar -xzvf nest-simulator-x.y.z.tar.gz + tar -xzvf nest-simulator-x.y.tar.gz @@ -43,7 +43,7 @@ By default, everything will be installed to the subdirectories ``/bin`` - Dynamic libraries ``/lib/`` - SLI libraries ``/share/nest/sli`` -- Documentation ``/share/doc/nest`` +- SLI documentation ``/share/doc/nest`` - Examples ``/share/doc/nest/examples`` - PyNEST ``/lib/pythonX.Y/site-packages/nest`` - PyNEST examples ``/share/doc/nest/examples/pynest`` diff --git a/doc/userdoc/installation/noenv_install.rst b/doc/userdoc/installation/noenv_install.rst index 0398d76ae6..7c1a2ed7f9 100644 --- a/doc/userdoc/installation/noenv_install.rst +++ b/doc/userdoc/installation/noenv_install.rst @@ -69,7 +69,7 @@ We will refer to the full path of this directory by . .. code-block:: sh - cmake -DCMAKE_INSTALL_PREFIX:PATH= + cmake -DCMAKE_INSTALL_PREFIX:PATH= .. note:: From f73b818f1d3b62fbb34794e7f672a846bf30aa51 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Fri, 11 Mar 2022 09:39:57 +0100 Subject: [PATCH 24/27] remove old files --- doc/userdoc/download.rst | 70 -------------------- doc/userdoc/installation/index.rst | 1 - doc/userdoc/installation/linux_install.rst | 75 ---------------------- doc/userdoc/installation/livemedia.rst | 35 ++++++++-- 4 files changed, 31 insertions(+), 150 deletions(-) delete mode 100644 doc/userdoc/download.rst delete mode 100644 doc/userdoc/installation/linux_install.rst diff --git a/doc/userdoc/download.rst b/doc/userdoc/download.rst deleted file mode 100644 index c8faea3c2a..0000000000 --- a/doc/userdoc/download.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. _download: - -Download NEST -============= - -.. pull-quote:: - - For standard situations where you just want to use but not modify - NEST, you don't have to download the source code. - - Distribution packages ease the installation on Debian/Ubuntu, - Fedora, macOS and Conda. - - See our :ref:`installation instructions ` to - find the right option for you. - -Here you'll find the lastest versions of the source code and virtual machine (VM) images for download. -If you use NEST for your project, don't forget to :ref:`cite NEST `! - - -Download the source code ------------------------- - -* If you are compiling NEST from source, you can download the zip or tarball of the `latest release `_ from our GitHub page. - You can find the download link below the release notes in the section labeled "Assets". - -* Then, follow the installation instructions for :ref:`Linux ` or :ref:`macOS `. - -* You can also test out the `latest developer version `_ from GitHub. - - -.. _download_livemedia: - -Download the NEST image for VMs -------------------------------- - -The VM image of NEST is available in the OVA format, and is suitable, for example, for importing into VirtualBox. -If you run **Windows**, this is the option for you OR if you just want to run NEST without installing it on your computer. - -* Download the `latest live media image `_. - - `Checksum `_ - -* After downloading the virtual machine, check out the :ref:`install instructions for Live Media `. - - -Older versions of VM images ---------------------------- - - -`NEST Live Media 3.1 `_ - -`Checksum 3.1 `_ - -`NEST Live Media 2.20.2 `_ - -`Checksum 2.20.2 `_ - - -We continuously aim to improve NEST, implement features, and fix bugs with every new version; -thus, we encourage our users to use the **most recent version of NEST**. - - ----- - -NEST is available under the :ref:`GNU General Public License 2 or later `. This means that you can - -- use NEST for your research, -- modify and improve NEST according to your needs, -- distribute NEST to others under the same license. diff --git a/doc/userdoc/installation/index.rst b/doc/userdoc/installation/index.rst index 75aac92688..d3a3e95c6b 100644 --- a/doc/userdoc/installation/index.rst +++ b/doc/userdoc/installation/index.rst @@ -39,7 +39,6 @@ If installation didn't work, see the :ref:`troubleshooting section `_ and -`libtool `_; the latter should be available for most systems and is -probably already installed. - -.. note:: - - NEST requires CMake 3.12 or higher, but we recommend version 3.16. You can type ``cmake --version`` on the - commandline to check your current version. - -The `GNU readline library `_ is recommended if you use NEST interactively -**without Python**. Although most Linux distributions have GNU readline installed, you still need to install its -development package if you want to use GNU readline with NEST. GNU readline itself depends on -`libncurses `_ (or libtermcap on older systems). Again, the development packages -are needed to compile NEST. - -The `GNU Scientific Library `_ is needed by several neuron models, in particular -those with conductance based synapses. If you want these models, please install the GNU Scientific Library along with -its development packages. - -For efficient sorting algorithms the `Boost library `_ is used. Since this is an essential -factor for the communication of spikes, some simulations are significantly faster when NEST is compiled with Boost. - -If you want to use PyNEST, we recommend to install the following along with their development packages: - -- `Python 3.8 or higher `_ -- `Cython 0.28.3 or higher `_ -- `NumPy `_ -- `SciPy `_ -- `Matplotlib 3.0 or higher `_ -- `IPython `_ - - -.. _source-install: - - - -.. _environment_variables: - -Environment variables ---------------------- - -A number of environment variables are used to specify where the components of a NEST installation are found. In -particular when installing to a custom directory, it is typically necessary to explicitly set these variables, so that -your operating system can find the NEST binaries, its libraries and custom extension modules. - -You may want to include this line in your ``.bashrc`` file, so that the environment variables are set automatically -whenever you open a new terminal. - -The following variables are set in ``nest_vars.sh``: - -.. list-table:: - :header-rows: 1 - :widths: 10 30 - - * - Variable - - Description - * - ``PYTHONPATH`` - - Search path for non-standard Python module locations. Will be newly set or prepended to the already existing - variable if it is already set. - * - ``PATH`` - - Search path for binaries. Will be newly set or prepended to the already existing variable if it is already set. - -If your operating system does not find the ``nest`` executable or if Python does not find the ``nest`` module, your -path variables may not be set correctly. This may also be the case if Python cannot load the ``nest`` module due to -missing or incompatible libraries. diff --git a/doc/userdoc/installation/livemedia.rst b/doc/userdoc/installation/livemedia.rst index 7c8726ad85..d22cc36c02 100644 --- a/doc/userdoc/installation/livemedia.rst +++ b/doc/userdoc/installation/livemedia.rst @@ -25,12 +25,19 @@ SuSe:: sudo zypper install virtualbox -Windows users can follow instructions on the website (see above). -NEST image setup ------------------- -* Download the `NEST live medium `_ +.. _download_livemedia: + +Download the NEST image for VMs +------------------------------- + +The VM image of NEST is available in the OVA format, and is suitable, for example, for importing into VirtualBox. +If you run **Windows**, this is the option for you OR if you just want to run NEST without installing it on your computer. + +* Download the `latest live media image `_. + + `Checksum `_ * Start Virtual Box and import the virtual machine image (**File** > **Import Appliance**) @@ -38,6 +45,26 @@ NEST image setup * The user password is **nest**. + + +Older versions of VM images +--------------------------- + + +`NEST Live Media 3.1 `_ + +`Checksum 3.1 `_ + +`NEST Live Media 2.20.2 `_ + +`Checksum 2.20.2 `_ + + +We continuously aim to improve NEST, implement features, and fix bugs with every new version; +thus, we encourage our users to use the **most recent version of NEST**. + + + Notes ~~~~~~~~ From 6d80e4c4c7c201f34d0c392f31037f3539610b22 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Mon, 14 Mar 2022 18:18:41 +0100 Subject: [PATCH 25/27] add conda forge for nest 2.x --- .../{old_vers.rst => conda_forge.rst} | 34 ++++++------------- doc/userdoc/installation/user.rst | 12 ++++--- 2 files changed, 18 insertions(+), 28 deletions(-) rename doc/userdoc/installation/{old_vers.rst => conda_forge.rst} (72%) diff --git a/doc/userdoc/installation/old_vers.rst b/doc/userdoc/installation/conda_forge.rst similarity index 72% rename from doc/userdoc/installation/old_vers.rst rename to doc/userdoc/installation/conda_forge.rst index 4f52ad9e8b..10a6b2eed1 100644 --- a/doc/userdoc/installation/old_vers.rst +++ b/doc/userdoc/installation/conda_forge.rst @@ -1,16 +1,17 @@ -.. _install_old: +.. _conda_forge_install: -For NEST 2.X ------------- +Conda forge install +=================== -You can take a look at our Conda-forge package +.. warning:: -.. _conda_forge_install: + The conda package is only available for NEST 2.X. + If you want to use NEST 3.X, please see other :ref:`installation options ` 1. To keep your conda setup tidy, we recommend that you install NEST into a separate `conda environment `_ together with Python packages that you will use when working with NEST; - see also our :doc:`conda_tips`. + see also our :ref:`conda_tips`. To install the latest version of NEST in a new environment called ``ENVNAME``, just run @@ -48,25 +49,10 @@ You can take a look at our Conda-forge package #. Note the following: - - We currently provide NEST with thread-based parallelization on Conda. This should suffice for most + - We currently provide NEST with thread-based parallelization on conda. This should suffice for most uses on personal computers. - Until dedicated conda builds for Apple's M1 chip (arm64) become available, you should expect relatively - poor performance on computers with the M1 chip. You need to :doc:`build NEST yourself ` on - M1 systems for good performance. - -NeuroFedora ------------ - -The NeuroFedora team has generously provided the latest -versions of NEST on their platform. As that is available in the -standard Fedora platform repositories, it can simply be -installed using ``dnf``: - -.. code-block:: bash - - sudo dnf install python3-nest - -Find out more on the NeuroFedora site: https://neuro.fedoraproject.org. - + poor performance on computers with the M1 chip. You need to :ref:`build NEST yourself ` on + M1 systems for good performance... _conda_forge_install: diff --git a/doc/userdoc/installation/user.rst b/doc/userdoc/installation/user.rst index 2a37294a63..19e4e741bc 100644 --- a/doc/userdoc/installation/user.rst +++ b/doc/userdoc/installation/user.rst @@ -3,10 +3,8 @@ User install instructions ========================= -Cross-platform --------------- - -|macos| |linux| |windows| +Cross-platform |macos| |linux| |windows| +---------------------------------------- Docker ~~~~~ @@ -20,6 +18,12 @@ We have live media (.ova) if you want to run NEST in a virtual machine. :ref:`Download the live media here `, and follow the :doc:`instructions to set up the virtual machine ` . +Conda install +~~~~~~~~~~~~~ + +For NEST 2.x, you can install NEST with the :ref:`Conda forge package `. +Note that the Conda package does not work with NEST 3.x. + ------------- |linux| Linux From 54920db57b4da3d908775f4a33a3e525915c5600 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Mon, 28 Mar 2022 21:56:56 +0200 Subject: [PATCH 26/27] add conda forge install / remove warning --- doc/userdoc/installation/conda_forge.rst | 7 +------ doc/userdoc/installation/user.rst | 10 +++++----- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/doc/userdoc/installation/conda_forge.rst b/doc/userdoc/installation/conda_forge.rst index 10a6b2eed1..2bbffb493f 100644 --- a/doc/userdoc/installation/conda_forge.rst +++ b/doc/userdoc/installation/conda_forge.rst @@ -3,11 +3,6 @@ Conda forge install =================== -.. warning:: - - The conda package is only available for NEST 2.X. - If you want to use NEST 3.X, please see other :ref:`installation options ` - 1. To keep your conda setup tidy, we recommend that you install NEST into a separate `conda environment `_ together with Python packages that you will use when working with NEST; @@ -53,6 +48,6 @@ Conda forge install uses on personal computers. - Until dedicated conda builds for Apple's M1 chip (arm64) become available, you should expect relatively poor performance on computers with the M1 chip. You need to :ref:`build NEST yourself ` on - M1 systems for good performance... _conda_forge_install: + M1 systems for good performance. diff --git a/doc/userdoc/installation/user.rst b/doc/userdoc/installation/user.rst index 19e4e741bc..1005339a46 100644 --- a/doc/userdoc/installation/user.rst +++ b/doc/userdoc/installation/user.rst @@ -11,6 +11,11 @@ Docker :ref:`See our docker installation instructions `. +Conda install +~~~~~~~~~~~~~ + +You can install NEST with the :ref:`Conda forge package `. + Live media ~~~~~~~~~ @@ -18,11 +23,6 @@ We have live media (.ova) if you want to run NEST in a virtual machine. :ref:`Download the live media here `, and follow the :doc:`instructions to set up the virtual machine ` . -Conda install -~~~~~~~~~~~~~ - -For NEST 2.x, you can install NEST with the :ref:`Conda forge package `. -Note that the Conda package does not work with NEST 3.x. ------------- From 7e27f95ee7f94f418c94966985b2c8886603bcf8 Mon Sep 17 00:00:00 2001 From: Jessica Mitchell Date: Thu, 21 Apr 2022 14:25:21 +0200 Subject: [PATCH 27/27] fix static check error --- pynest/examples/store_restore_network.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pynest/examples/store_restore_network.py b/pynest/examples/store_restore_network.py index a3cf5a7aca..9de07b0fc9 100644 --- a/pynest/examples/store_restore_network.py +++ b/pynest/examples/store_restore_network.py @@ -72,6 +72,7 @@ # input. Excitatory connections are plastic (STDP). Spike activity of # the excitatory population is recorded. + class EINetwork: """ A simple balanced random network with plastic excitatory synapses.