Skip to main content

A Pythonic, object-oriented, monkey patch for NEURON

Project description

Build Status codecov Code style: black Documentation Status

*No ducks were punched during the construction of this monkey patch.

Installation

pip install nrn-patch

Inline replacement of NEURON by Patch

Be aware that the interface is currently incomplete, this means that most parts are still "just" NEURON. I've only patched holes I frequently encounter myself when using the h.Section, h.NetStim and h.NetCon functions. Feel free to open an issue or fork this project and open a pull request for missing or broken parts of the interface.

Philosophy

Python interfaces should be Pythonic, this wrapper offers just that:

  • Full Python objects: each wonky C-like NEURON object is wrapped in a full fledged Python object, easily handled and extended through inheritance.
  • Duck typed interface: take a look at the magic methods I use and any object you create with those methods present will work just fine with Patch.
  • Correct garbage collection, objects connected to eachother don't dissapear: Objects that rely on eachother store a reference to eachother. As is the basis for any sane object oriented interface.

Basic usage

Use it like you would use NEURON. The wrapper doesn't make any changes to the interface, it just patches up some of the more frequent and ridiculous gotchas.

Patch supplies a new HOC interpreter p, the PythonHocInterpreter which wraps the standard HOC interpreter h provided by NEURON. Any objects returned will either be PythonHocObject's wrapping their corresponding NEURON object, or whatever NEURON returns.

When using just Patch the difference between NEURON and Patch objects is handled transparently, but if you wish to mix interpreters you can transform all Patch objects back to NEURON objects with obj.__neuron__().

from patch import p
import glia as g

section = p.Section()
point_process = g.insert(section, "AMPA")
stim = p.NetStim()
stim.start = 10
stim.number = 5
stim.interval = 10

# And here comes the magic! This explicitly defined connection
# isn't immediatly garbage collected! What a crazy world we live in.
# Has science gone too far?
p.NetCon(stim, point_process)

# It's fully compatible using __neuron__
from neuron import h
nrn_section = h.Section()
nrn_section.connect(section.__neuron__())

Magic methods

__neuron__

Get the object's NEURON pointer

Whenever an object with this method present is sent to the NEURON HOC interpreter, the result of this method is passed instead. This allows Python methods to encapsulate NEURON pointers transparently

__netcon__

Get the object's NetCon pointer

Whenever an object with this method present is used in a NetCon call, the result of this method is passed instead. The connection is stored on the original object. This allows to simplify the calls to NetCon, or to add more elegant default behavior, like inserting the connection on a random segment of a section and being able to use just p.NetCon(section, synapse)

Known unpatched holes

  • When inserting point processes the returned object is unwrapped. This can be resolved using Glia, or by using this syntax:
  # In neuron
  process = h.MyMechanismName(my_section(0.5), *args, **kwargs)
  # In patch
  point_process = p.PointProcess(p.MyMechanismName, my_section(0.5), *args, **kwargs)

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nrn_patch-1.3.1-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file nrn_patch-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: nrn_patch-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 12.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.6

File hashes

Hashes for nrn_patch-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 863d45cb951f9c48a7d553b8956e60d498a804df424818013298fbb08f1e2f83
MD5 a310912758c0bbd97b2d68616ba2fffb
BLAKE2b-256 673be623f31ccfc44ec82daa188156173c318a9e006465010fea7482bcb857a3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page