{
"info": {
"author": "Andreas St\u00f6ckel",
"author_email": "astoecke@uwaterloo.ca",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 3 - Alpha",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
"Programming Language :: Python :: 3",
"Topic :: Scientific/Engineering"
],
"description": " [](https://badge.fury.io/py/nengo-bio) [](https://travis-ci.org/astoeckel/nengo-bio) [](https://coveralls.io/github/astoeckel/nengo-bio?branch=master)\n\n# NengoBio \u2012 Biologically (more) plausible Nengo models\n\n> **\u26a0 Warning:** This project is work-in progress. Everything described here, including the name of the project and the API, is subject to change.\n\n*NengoBio* is an add-on library for the [Nengo](https://nengo.ai/) spiking neural network simulator. Nengo is used by scientists to construct detailed models of neurobiological systems. However, Nengo and, to some degree, the underlying [Neural Engineering Framework](http://compneuro.uwaterloo.ca/research/nef.html), have restrictions that limit the biological plausibility of the created networks. *NengoBio* lifts some of these restrictions by implementing the following:\n\n* **Dale's Principle** (:ballot_box_with_check: *Fully implemented*)
\n While it is possible to work around this limitation, Nengo usually does not explicitly mark neurons as excitatory or inhibitory. This means that a single can connect to post-neurons both excitatorily and inhibitorily, depending on the sign of the weights computed by of the weight solver. *NengoBio* marks neurons as either excitatory or inhibitory and accounts for this while solving for connection weights.\n* **Bias current elimination** (:ballot_box_with_check: *Fully implemented*)
\n The Neural Engineering Framework assumes that each neuron is connected to a constant bias current source. This bias current is used to diversify the avilable neuron tuning curves, yet is a little unrealistic from a biological perspective. *NengoBio* eliminates the bias current by solving for synaptic weights in current space, effectively decoding the bias current from the pre-population state.\n* **Support for dendritic computation** (:ballot_box_with_check: *Fully implemented*)
\n Dendritic nonlinearities play a key role in information processing in central nervous systems and can be systematically exploited to perfrom nonlinear, multivariate computations. *NengoBio* adds support for dendritic computation to Nengo by allowing an arbitrary number of neuron ensembles as pre-objects in a connection.\n* **Support for conductance-based synapses as well as neurons with arbitrary passive dendritic trees** (*Planned*)\n Dendritic computation relies on nonlinear effects in the dendritic tree and the specific tree topology. *NengoBio* adds support for arbitrary passive multicompartment neuron models to Nengo.\n\n## Installing NengoBio\n\n**Dependencies:** *NengoBio* requires Python 3 and depends on `numpy>=1.16.3`, `scipy>=1.2.0`, `cvxopt>=1.2.2`, `nengo>=3.0.0.dev0`.\n\nClone this repository by running\n```sh\ngit clone https://github.com/astoeckel/nengo_bio\n```\nYou can then install the package by running the following inside the `nengo_bio` repository\n```sh\npip3 install -e .\n```\nThis will automatically install all dependencies. Note that *NengoBio* currently requires the most recent development version of *Nengo*, which has to be installed separately.\n\n## Using NengoBio\n\n### [\ud83d\udcdd See the example notebook](https://github.com/astoeckel/nengo_bio/blob/master/examples/nengo_bio_examples.ipynb)\n\nAssuming that you know how to use Nengo, using *NengoBio* should be quite simple. Just add the following to your list of imports\n```py\nimport nengo_bio as bio\n```\nand replace `nengo.Ensemble` with `bio.Ensemble` and `nengo.Connection` with `bio.Connection` where applicable.\n\n### The `bio.Ensemble` class\n\nThe `bio.Ensemble` class acts like a normal Nengo ensemble but has two additional parameters: `p_exc` and `p_inh`. These parameters describe the relative number of excitatory/inhibitory neurons in the population. Note that `p_exc` and `p_inh` have to sum to one. These parameters are only relevant if an ensemble is a pre-object.\n\n**Note:** Neurons will be assigned a synapse type at build time. If any of `p_exc` or `p_inh` is set, each neuron will either be excitatory or inhibitory. Without `p_exc` and `p_inh`, the ensemble will behave just like a normal Nengo ensemble.\n\n**Warning:** `bio.Ensemble` can be used in conjunction with the normal `nengo.Connection` class. The excitatory/inhibitory nature of the neurons in a `bio.Ensemble` will only be taken into account when using `bio.Connection` (see below).\n\n### Examples\n\n**Examples 1:** An ensemble exclusively consisting of excitatory neurons\n```py\nens_exc = bio.Ensemble(n_neurons=101, dimensions=1, p_exc=1.0)\n```\n**Examples 2:** An ensemble exclusively consisting of inhibitory neurons\n```py\nens_inh = bio.Ensemble(n_neurons=101, dimensions=1, p_inh=1.0)\n```\n**Examples 3:** An ensemble consisting of 80% excitatory and 20% inhibitory neurons (both lines are equivalent):\n```py\nens_mix = bio.Ensemble(n_neurons=101, dimensions=1, p_exc=0.8)\nens_mix = bio.Ensemble(n_neurons=101, dimensions=1, p_inh=0.2)\n```\n\n### The `bio.Connection` class\n\nA `bio.Connection` connection connects *n*-pre ensembles to a single target ensemble. It will automatically account for the synapse type assigned to each neuron.\n\n### Notable Parameters\n\n* `pre`: This can be either a single pre-population or a tuple of pre-populations. The dimensions of the values represented by the pre-populations will be stacked.\n\n* `decode_bias` (default `True`): if `True` the post-neuron bias current will be decoded from the pre-population instead of being assumed constant. Set this to `False` for any but the first `bio.connection` targeting the same post population.\n\n* `solver` (default `QPSolver()`): an `ExtendedSolver` instance from `nengo_bio.solvers`. `ExtendedSolvers` can solve for currents and take neuron parameters into account.\n\n### Examples\n\n**Example 1:** Simple communication channel between `ens_a` and `ens_b` taking neuron/synapse types into account and decoding the bias current:\n```py\nbio.Connection(ens_a, ens_b)\n```\n\n**Example 2:** 2D communication channel where `ens_a`, `ens_b` represent a one-dimensional value and `ens_c` represents a two-dimensional value.\n```py\nbio.Connection((ens_a, ens_b), ens_c)\n```\n\n**Example 3:** Linear \"Dendritic Computation\"\n```py\nbio.Connection((ens_a, ens_b), ens_c, function=lambda x: np.mean(x))\n```\n\n## Citing\n\nThe techniques used in this library are described in more detail in this arXiv preprint: https://arxiv.org/abs/1904.11713. We would appreciate it if you could cite this paper in case you use this library in a published model.\n\n```bib\n@misc{stoeckel2019passive,\n author = {Andreas St\u00f6ckel and Chris Eliasmith},\n title = {Passive nonlinear dendritic interactions as a general computational resource in functional spiking neural networks},\n year = {2019},\n eprint = {arXiv:1904.11713},\n}\n```\n\n## License\n\n```\nnengo_bio -- Extensions to Nengo for more biological plausibility\nCopyright (C) 2019 Andreas St\u00f6ckel\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see .\n```\n\n\n",
"description_content_type": "text/markdown",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/astoeckel/nengo-bio",
"keywords": "",
"license": "GPLv3",
"maintainer": "",
"maintainer_email": "",
"name": "nengo-bio",
"package_url": "https://pypi.org/project/nengo-bio/",
"platform": "",
"project_url": "https://pypi.org/project/nengo-bio/",
"project_urls": {
"Homepage": "https://github.com/astoeckel/nengo-bio"
},
"release_url": "https://pypi.org/project/nengo-bio/0.2.0/",
"requires_dist": [
"cvxopt (>=1.2.2)",
"nengo (>=2.8)",
"numpy (>=1.16.3)",
"scipy (>=1.2.0)",
"posix-ipc (>=1.0.4)"
],
"requires_python": "",
"summary": "Dendritic Computation Primitives for Nengo",
"version": "0.2.0"
},
"last_serial": 5413211,
"releases": {
"0.1": [
{
"comment_text": "",
"digests": {
"md5": "20b2ffb6c8f18540ba0bdd6b2c5e4f42",
"sha256": "fdc394c9aff870cad80a346b757488202a8f1abb77f388de5bf9288ca45febe2"
},
"downloads": -1,
"filename": "nengo_bio-0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "20b2ffb6c8f18540ba0bdd6b2c5e4f42",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 25043,
"upload_time": "2019-06-02T17:04:44",
"url": "https://files.pythonhosted.org/packages/7e/6b/6ba778c72317b9edafdd22067189719a2e77199ead86dc3e3abc30e86120/nengo_bio-0.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "426bb82c4dff2eccb05dde4e67cf0946",
"sha256": "f85d38c5217ea46bd30e710a28230efa6d2d9a1de8baa3291cb532f467880b15"
},
"downloads": -1,
"filename": "nengo_bio-0.1.tar.gz",
"has_sig": false,
"md5_digest": "426bb82c4dff2eccb05dde4e67cf0946",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12314,
"upload_time": "2019-06-02T17:04:46",
"url": "https://files.pythonhosted.org/packages/93/20/b02f6609fe70ee5efa6f75e17072fec9efff33d158ca9d4335652cc2e8e4/nengo_bio-0.1.tar.gz"
}
],
"0.1.1": [
{
"comment_text": "",
"digests": {
"md5": "d0e759900b2197288fb74cd98f087e47",
"sha256": "f9c3bea5add9894eba868b9b478d1d1135cc7a848c830e1003a71a8d94e2cabd"
},
"downloads": -1,
"filename": "nengo_bio-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d0e759900b2197288fb74cd98f087e47",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 35582,
"upload_time": "2019-06-02T18:50:51",
"url": "https://files.pythonhosted.org/packages/00/5e/2b968d7fac18294f18736e261908c52e7b14454b1c89956758fa5380d95b/nengo_bio-0.1.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "20563877a0159297459964a5aefbdb42",
"sha256": "2cc1224ed1697cfb98a3aea7cb5b8ef58c00b09aecf5cfebdcdcd70f0be01d29"
},
"downloads": -1,
"filename": "nengo_bio-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "20563877a0159297459964a5aefbdb42",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19210,
"upload_time": "2019-06-02T18:50:53",
"url": "https://files.pythonhosted.org/packages/cc/3d/e66acdb29a3f361bb04458ddc0d0e2193e61fbd107eee9564522c07afa3c/nengo_bio-0.1.1.tar.gz"
}
],
"0.2.0": [
{
"comment_text": "",
"digests": {
"md5": "8fb609bca836ee13a47361d216f70981",
"sha256": "d05c7887e463d00b7c1bc6bb0212ef03b367952d1cdc106ce40e5bb14b0e21cc"
},
"downloads": -1,
"filename": "nengo_bio-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8fb609bca836ee13a47361d216f70981",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 63754,
"upload_time": "2019-06-18T04:01:16",
"url": "https://files.pythonhosted.org/packages/05/74/7149aa0fbb5b4cdba67bd1f91c440036408e2d530010536a77be9442a8f8/nengo_bio-0.2.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "1861d1ad0c0426645a58a39d4b24502d",
"sha256": "1208a8c119f108faed97acba743713215c987bc50172a7c0e75742e494b7d766"
},
"downloads": -1,
"filename": "nengo_bio-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "1861d1ad0c0426645a58a39d4b24502d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 37912,
"upload_time": "2019-06-18T04:01:19",
"url": "https://files.pythonhosted.org/packages/dd/3f/a0b6068209307814ce743d3f710d45045a781341040bf0bfc0f03a7708ca/nengo_bio-0.2.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "8fb609bca836ee13a47361d216f70981",
"sha256": "d05c7887e463d00b7c1bc6bb0212ef03b367952d1cdc106ce40e5bb14b0e21cc"
},
"downloads": -1,
"filename": "nengo_bio-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8fb609bca836ee13a47361d216f70981",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 63754,
"upload_time": "2019-06-18T04:01:16",
"url": "https://files.pythonhosted.org/packages/05/74/7149aa0fbb5b4cdba67bd1f91c440036408e2d530010536a77be9442a8f8/nengo_bio-0.2.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "1861d1ad0c0426645a58a39d4b24502d",
"sha256": "1208a8c119f108faed97acba743713215c987bc50172a7c0e75742e494b7d766"
},
"downloads": -1,
"filename": "nengo_bio-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "1861d1ad0c0426645a58a39d4b24502d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 37912,
"upload_time": "2019-06-18T04:01:19",
"url": "https://files.pythonhosted.org/packages/dd/3f/a0b6068209307814ce743d3f710d45045a781341040bf0bfc0f03a7708ca/nengo_bio-0.2.0.tar.gz"
}
]
}