diff --git a/documentation/5/.buildinfo b/documentation/5/.buildinfo
index d37ee0323..581d2c436 100644
--- a/documentation/5/.buildinfo
+++ b/documentation/5/.buildinfo
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: f495d85ded1f289701b492e681ecef7c
+config: 00b64a1bd6622c25a3d981e53c278f23
tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/documentation/5/_downloads/1eed1518b8928bc24e721527ef1f9970/mnist_mb_classifier.ipynb b/documentation/5/_downloads/1eed1518b8928bc24e721527ef1f9970/mnist_mb_classifier.ipynb
index 2928dc2d7..7103373b3 100644
--- a/documentation/5/_downloads/1eed1518b8928bc24e721527ef1f9970/mnist_mb_classifier.ipynb
+++ b/documentation/5/_downloads/1eed1518b8928bc24e721527ef1f9970/mnist_mb_classifier.ipynb
@@ -35,7 +35,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.12"
+ "version": "3.11.5"
}
},
"nbformat": 4,
diff --git a/documentation/5/_downloads/26866b29b5e6aaf47b3ba4c4dbee6718/userproject_jupyter.zip b/documentation/5/_downloads/26866b29b5e6aaf47b3ba4c4dbee6718/userproject_jupyter.zip
index 3c789d01c..d8d30bcc7 100644
Binary files a/documentation/5/_downloads/26866b29b5e6aaf47b3ba4c4dbee6718/userproject_jupyter.zip and b/documentation/5/_downloads/26866b29b5e6aaf47b3ba4c4dbee6718/userproject_jupyter.zip differ
diff --git a/documentation/5/_downloads/3e0a0a579abc8e5181823f00a5779b71/userproject_python.zip b/documentation/5/_downloads/3e0a0a579abc8e5181823f00a5779b71/userproject_python.zip
index c81d904c2..45d34ee8f 100644
Binary files a/documentation/5/_downloads/3e0a0a579abc8e5181823f00a5779b71/userproject_python.zip and b/documentation/5/_downloads/3e0a0a579abc8e5181823f00a5779b71/userproject_python.zip differ
diff --git a/documentation/5/_downloads/64c7fcd62013f68609d54d02d741b663/potjans_microcircuit.ipynb b/documentation/5/_downloads/64c7fcd62013f68609d54d02d741b663/potjans_microcircuit.ipynb
index 2ae0ae9fc..bc8c4ec31 100644
--- a/documentation/5/_downloads/64c7fcd62013f68609d54d02d741b663/potjans_microcircuit.ipynb
+++ b/documentation/5/_downloads/64c7fcd62013f68609d54d02d741b663/potjans_microcircuit.ipynb
@@ -35,7 +35,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.12"
+ "version": "3.11.5"
}
},
"nbformat": 4,
diff --git a/documentation/5/_downloads/f57116a727438d4e47eb66f1b799aa48/superspike_demo.ipynb b/documentation/5/_downloads/f57116a727438d4e47eb66f1b799aa48/superspike_demo.ipynb
index 8263a6d20..0c238c92e 100644
--- a/documentation/5/_downloads/f57116a727438d4e47eb66f1b799aa48/superspike_demo.ipynb
+++ b/documentation/5/_downloads/f57116a727438d4e47eb66f1b799aa48/superspike_demo.ipynb
@@ -35,7 +35,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.12"
+ "version": "3.11.5"
}
},
"nbformat": 4,
diff --git a/documentation/5/_sources/custom_models.rst.txt b/documentation/5/_sources/custom_models.rst.txt
index fad9baa1b..ef2d6391c 100644
--- a/documentation/5/_sources/custom_models.rst.txt
+++ b/documentation/5/_sources/custom_models.rst.txt
@@ -29,6 +29,7 @@ Random number generation
Random numbers are useful in many forms of custom model. For example as a source of noise or a probabilistic spiking mechanism.
In GeNN this can be implemented by using the following functions within GeNNCode:
+- ``gennrand()`` returns a random 32-bit unsigned integer
- ``gennrand_uniform()`` returns a number drawn uniformly from the interval :math:`[0.0, 1.0]`
- ``gennrand_normal()`` returns a number drawn from a normal distribution with a mean of 0 and a standard deviation of 1.
- ``gennrand_exponential()`` returns a number drawn from an exponential distribution with :math:`\lambda=1`.
diff --git a/documentation/5/_static/_sphinx_javascript_frameworks_compat.js b/documentation/5/_static/_sphinx_javascript_frameworks_compat.js
index 81415803e..8549469dc 100644
--- a/documentation/5/_static/_sphinx_javascript_frameworks_compat.js
+++ b/documentation/5/_static/_sphinx_javascript_frameworks_compat.js
@@ -1,9 +1,20 @@
-/* Compatability shim for jQuery and underscores.js.
+/*
+ * _sphinx_javascript_frameworks_compat.js
+ * ~~~~~~~~~~
+ *
+ * Compatability shim for jQuery and underscores.js.
+ *
+ * WILL BE REMOVED IN Sphinx 6.0
+ * xref RemovedInSphinx60Warning
*
- * Copyright Sphinx contributors
- * Released under the two clause BSD licence
*/
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+
/**
* small helper function to urldecode strings
*
diff --git a/documentation/5/_static/basic.css b/documentation/5/_static/basic.css
index 1506b6540..d64b53cc2 100644
--- a/documentation/5/_static/basic.css
+++ b/documentation/5/_static/basic.css
@@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- basic theme.
*
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -324,17 +324,17 @@ aside.sidebar {
p.sidebar-title {
font-weight: bold;
}
-
nav.contents,
aside.topic,
+
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
-
nav.contents,
aside.topic,
+
div.topic {
border: 1px solid #ccc;
padding: 7px;
@@ -375,6 +375,7 @@ div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
+
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
@@ -384,6 +385,7 @@ div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
+
div.topic::after,
div.admonition::after,
blockquote::after {
@@ -609,6 +611,25 @@ ul.simple p {
margin-bottom: 0;
}
+/* Docutils 0.17 and older (footnotes & citations) */
+dl.footnote > dt,
+dl.citation > dt {
+ float: left;
+ margin-right: 0.5em;
+}
+
+dl.footnote > dd,
+dl.citation > dd {
+ margin-bottom: 0em;
+}
+
+dl.footnote > dd:after,
+dl.citation > dd:after {
+ content: "";
+ clear: both;
+}
+
+/* Docutils 0.18+ (footnotes & citations) */
aside.footnote > span,
div.citation > span {
float: left;
@@ -633,6 +654,8 @@ div.citation > p:last-of-type:after {
clear: both;
}
+/* Footnotes & citations ends */
+
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
@@ -645,6 +668,10 @@ dl.field-list > dt {
padding-right: 5px;
}
+dl.field-list > dt:after {
+ content: ":";
+}
+
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
@@ -670,16 +697,6 @@ dd {
margin-left: 30px;
}
-.sig dd {
- margin-top: 0px;
- margin-bottom: 0px;
-}
-
-.sig dl {
- margin-top: 0px;
- margin-bottom: 0px;
-}
-
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
@@ -748,14 +765,6 @@ abbr, acronym {
cursor: help;
}
-.translated {
- background-color: rgba(207, 255, 207, 0.2)
-}
-
-.untranslated {
- background-color: rgba(255, 207, 207, 0.2)
-}
-
/* -- code displays --------------------------------------------------------- */
pre {
diff --git a/documentation/5/_static/doctools.js b/documentation/5/_static/doctools.js
index d06a71d75..c3db08d1c 100644
--- a/documentation/5/_static/doctools.js
+++ b/documentation/5/_static/doctools.js
@@ -4,19 +4,12 @@
*
* Base JavaScript utilities for all Sphinx HTML documentation.
*
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
-const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
- "TEXTAREA",
- "INPUT",
- "SELECT",
- "BUTTON",
-]);
-
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
@@ -25,11 +18,73 @@ const _ready = (callback) => {
}
};
+/**
+ * highlight a given string on a node by wrapping it in
+ * span elements with the given class name.
+ */
+const _highlight = (node, addItems, text, className) => {
+ if (node.nodeType === Node.TEXT_NODE) {
+ const val = node.nodeValue;
+ const parent = node.parentNode;
+ const pos = val.toLowerCase().indexOf(text);
+ if (
+ pos >= 0 &&
+ !parent.classList.contains(className) &&
+ !parent.classList.contains("nohighlight")
+ ) {
+ let span;
+
+ const closestNode = parent.closest("body, svg, foreignObject");
+ const isInSVG = closestNode && closestNode.matches("svg");
+ if (isInSVG) {
+ span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+ } else {
+ span = document.createElement("span");
+ span.classList.add(className);
+ }
+
+ span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+ parent.insertBefore(
+ span,
+ parent.insertBefore(
+ document.createTextNode(val.substr(pos + text.length)),
+ node.nextSibling
+ )
+ );
+ node.nodeValue = val.substr(0, pos);
+
+ if (isInSVG) {
+ const rect = document.createElementNS(
+ "http://www.w3.org/2000/svg",
+ "rect"
+ );
+ const bbox = parent.getBBox();
+ rect.x.baseVal.value = bbox.x;
+ rect.y.baseVal.value = bbox.y;
+ rect.width.baseVal.value = bbox.width;
+ rect.height.baseVal.value = bbox.height;
+ rect.setAttribute("class", className);
+ addItems.push({ parent: parent, target: rect });
+ }
+ }
+ } else if (node.matches && !node.matches("button, select, textarea")) {
+ node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
+ }
+};
+const _highlightText = (thisNode, text, className) => {
+ let addItems = [];
+ _highlight(thisNode, addItems, text, className);
+ addItems.forEach((obj) =>
+ obj.parent.insertAdjacentElement("beforebegin", obj.target)
+ );
+};
+
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
+ Documentation.highlightSearchWords();
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
},
@@ -71,6 +126,51 @@ const Documentation = {
Documentation.LOCALE = catalog.locale;
},
+ /**
+ * highlight the search words provided in the url in the text
+ */
+ highlightSearchWords: () => {
+ const highlight =
+ new URLSearchParams(window.location.search).get("highlight") || "";
+ const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
+ if (terms.length === 0) return; // nothing to do
+
+ // There should never be more than one element matching "div.body"
+ const divBody = document.querySelectorAll("div.body");
+ const body = divBody.length ? divBody[0] : document.querySelector("body");
+ window.setTimeout(() => {
+ terms.forEach((term) => _highlightText(body, term, "highlighted"));
+ }, 10);
+
+ const searchBox = document.getElementById("searchbox");
+ if (searchBox === null) return;
+ searchBox.appendChild(
+ document
+ .createRange()
+ .createContextualFragment(
+ '
' +
+ '' +
+ Documentation.gettext("Hide Search Matches") +
+ "
"
+ )
+ );
+ },
+
+ /**
+ * helper function to hide the search marks again
+ */
+ hideSearchWords: () => {
+ document
+ .querySelectorAll("#searchbox .highlight-link")
+ .forEach((el) => el.remove());
+ document
+ .querySelectorAll("span.highlighted")
+ .forEach((el) => el.classList.remove("highlighted"));
+ const url = new URL(window.location);
+ url.searchParams.delete("highlight");
+ window.history.replaceState({}, "", url);
+ },
+
/**
* helper function to focus on search bar
*/
@@ -110,11 +210,15 @@ const Documentation = {
)
return;
+ const blacklistedElements = new Set([
+ "TEXTAREA",
+ "INPUT",
+ "SELECT",
+ "BUTTON",
+ ]);
document.addEventListener("keydown", (event) => {
- // bail for input elements
- if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
- // bail with special keys
- if (event.altKey || event.ctrlKey || event.metaKey) return;
+ if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements
+ if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys
if (!event.shiftKey) {
switch (event.key) {
@@ -136,6 +240,10 @@ const Documentation = {
event.preventDefault();
}
break;
+ case "Escape":
+ if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
+ Documentation.hideSearchWords();
+ event.preventDefault();
}
}
diff --git a/documentation/5/_static/documentation_options.js b/documentation/5/_static/documentation_options.js
index b57ae3b83..a750e4d5e 100644
--- a/documentation/5/_static/documentation_options.js
+++ b/documentation/5/_static/documentation_options.js
@@ -10,5 +10,5 @@ var DOCUMENTATION_OPTIONS = {
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false,
SHOW_SEARCH_SUMMARY: true,
- ENABLE_SEARCH_SHORTCUTS: true,
+ ENABLE_SEARCH_SHORTCUTS: false,
};
\ No newline at end of file
diff --git a/documentation/5/_static/jquery-3.6.0.js b/documentation/5/_static/jquery-3.6.0.js
new file mode 100644
index 000000000..fc6c299b7
--- /dev/null
+++ b/documentation/5/_static/jquery-3.6.0.js
@@ -0,0 +1,10881 @@
+/*!
+ * jQuery JavaScript Library v3.6.0
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright OpenJS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2021-03-02T17:08Z
+ */
+( function( global, factory ) {
+
+ "use strict";
+
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get jQuery.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info.
+ module.exports = global.document ?
+ factory( global, true ) :
+ function( w ) {
+ if ( !w.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+ }
+ return factory( w );
+ };
+ } else {
+ factory( global );
+ }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var flat = arr.flat ? function( array ) {
+ return arr.flat.call( array );
+} : function( array ) {
+ return arr.concat.apply( [], array );
+};
+
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+ // Support: Chrome <=57, Firefox <=52
+ // In some browsers, typeof returns "function" for HTML