[docs]classMechAccessor:def__init__(self,section,mod:"Mod",point_process=None):self._section_name=section.hname()self._section=weakref.proxy(section)self._mod=modself._pp=point_processself._references=[]def__neuron__(self):ifself._ppisnotNone:try:frompatchimporttransformreturntransform(self._pp)exceptException:passreturnself._ppelse:raiseTypeError("Density mechanisms can't be retrieved as a standalone Patch/NEURON ""entity. ")def__ref__(self,other):self._references.append(other)def__deref__(self,other):self._references.remove(other)@propertydef_connections(self):try:returnself._pp._connectionsexceptAttributeError:raiseTypeError("Can't connect Patch/NEURON entities to a density mechanism.")fromNone@_connections.setterdef_connections(self,value):self._pp._connections=value
[docs]defstimulate(self,*args,**kwargs):ifself._ppisnotNone:returnself._pp.stimulate(*args,**kwargs)else:raiseTypeError("Can't stimulate a DensityMechanism.")
def__record__(self):ifself._ppisnotNone:returnself._pp.__record__()else:raiseTypeError("No default record for DensityMechanisms, use .record('param') instead.")
[docs]defset_parameter(self,param,value,x=None):mod=self._mod.mod_nameifself._ppisnotNone:ifparamnotinself._pp.parameters:raiseAttributeError(f"Point process {self._mod.mod_name} has no parameter '{param}'")returnsetattr(self._pp,param,value)try:ifxisNone:setattr(self._section.__neuron__(),f"{param}_{mod}",value)else:setattr(getattr(self._section(x),mod),value)exceptReferenceError:raiseReferenceError("Trying to set attribute on section"f" '{self._section_name}' that has since been garbage collected")fromNone
[docs]defget_parameter(self,param,x=None):ifself._ppisnotNone:returngetattr(self._pp,param)mod=self._mod.mod_nametry:ifxisNone:returngetattr(self._section.__neuron__(),f"{param}_{mod}")else:returngetattr(getattr(self._section(x),mod),param)exceptReferenceError:raiseReferenceError("Trying to set attribute on section"f" '{self._section_name}' that has since been garbage collected")fromNoneexceptAttributeError:raiseAttributeError(f"Parameter '{param}' does not exist on {self._mod.asset_name}")fromNone
@propertydefparameters(self):raiseNotImplementedError("Parameter overview not implemented yet. Use `get_parameter` instead.")