Function declaration in Python (monaldecl.py)

Accueil  Précédent  Suivant

#-*- coding: ISO-8859-15 -*-

#=================================================

#  Module  monaldecl.py

#

#  Déclarations pour Monal

#

#  Author: Jean-Luc PLOIX  -  NETRAL

#  Mars 2007

#

#=================================================

 

from ctypes import Structure, sizeof, c_short, c_ushort, c_double, c_char, \

  c_int, c_byte

import const as C

 

class TLoopData (Structure):

  _fields_ = [

      ("ILayer", c_short),

      ("INeuron", c_short),

      ("NState", c_short),

      ("Redondancy", c_ushort),

      ("DoNotCreateSynapses", c_ushort),

      ("ExistingNeuron", c_ushort)]

 

  def __init__(self, layer=0, node=0, order=0, nosynapse=0, existingnode=0):

      Structure.__init__(self)

      self.ILayer = layer

      self.INeuron = node

      self.NState = order

      self.Redondancy = 1

 

      self.DoNotCreateSynapses = nosynapse

      self.ExistingNeuron = existingnode

 

#---------------------------------------

class TSynapseData (Structure):

  """Données de lien entre noeuds.Utilisé pour :

  _DeplacerNeurone

  _AbsorberNeurone

  _NouvelleSynapse

  _DetruireSynapse

  _ModifierSynapse"""

          # Pour DeplacerNeurone, si <> 0, l'input de rang

          # RangOrigine est déplacé dans la couche constante

          # avec la value "Value"

          # Pour AbsorberNeurone si <> 0, absorbtion des synapses parents

  _fields_ = [

      ("Size", c_int ),

      ("OriginLayer", c_short),

      ("OriginIndex", c_short),

      ("TargetLayer", c_short),

      ("TargetIndex", c_short),

      ("LinkStyle", c_ushort), # style de lien synaptique. Constantes ls...

      ("InputBool", c_ushort),

      ("OutputBool", c_ushort), # Pour AbsorberNeurone si <> 0, absorbtion des synapses enfants

      ("Value", c_double),

      ("SName", c_char*256),

      ("NetIndex", c_int),

      ("SynIndex", c_int)]

 

  def __init__(self, name='', originlayer=-2, originindex=-1, targetlayer=-2,

               targetindex=-1, style=0, inputbool=0, outputbool=0, netindex=0, value=0.0):

      Structure.__init__(self)

      self.Size = sizeof(self)

      self.OriginLayer = originlayer

      self.OriginIndex = originindex

      self.TargetLayer = targetlayer

      self.TargetIndex = targetindex

      self.LinkStyle = style

      self.InputBool = inputbool

      self.OutputBool = outputbool

      self.Value = value

      self.SName = name

      self.NetIndex = netindex

      self.SynIndex = netindex

 

#---------------------------------------

class TNeuronData (Structure):

  """Données de noeud de modèle neuronal. Utilisé pour:

  GetNeuroneInfoEx

  ModifyNetworkEx, avec les styles:

      _ModifierNeurone

      _AjoutNeurone

      _SupprimerNeurone

  et pour les modifications de nom de modèle."""

  _fields_ = [

      ("Size", c_int ),      

      ("Name", c_char*256),

      ("ModelName", c_int),

      ("LayerIndex", c_int),

      ("NeuronIndex", c_int),

      ("Activation", c_int),

      ("NeuronID", c_int),

      ("NeuronType", c_int),     # TNeuronType : (ntNone, ntSigma, ntSigma2, ntPi, ntSigmaPlus)

      ("StylePos", c_int),       # TPositionStyle : (psBegin, psEnd)

      ("NeuronPosition", c_int), # TAddNeuronType : (anDontCare, anConstant, anInput, anOutPut, anOutState)

      ("ActivationPlus", c_int),

      ("IndexNet", c_int),

      ("Value", c_double)]

 

  def __repr__(self):

      res = ["Object TNeuronData"]

      res.append("Name %s"%self.Name)

      res.append("ModelName %d"% self.NetWorkName)

      res.append("LayerIndex %d"% self.LayerRank)

      res.append("NeuronIndex %d"% self.NeuronRank)

      res.append("Activation %d"% self.Activation)

      res.append("NeuronID %d"% self.NeuronID)

      res.append("NeuronType %d"% self.NeuronType)

      res.append("StylePos %d"% self.StylePos)

      res.append("NeuronPosition %d"% self.NeuronPosition)

      res.append("Value %f"% self.Value)

      res.append("ActivationPlus %d"% self.ActivationPlus)

      res.append("IndexNet %d"% self.IndexNet)

      return '\n'.join(res)

 

  def __init__(self, name='', isnetname=0, layerindex=-2, nodeindex=-1,

               activation='TANH', nodeID=0, nodetype=1, style=0, nodeposition=0, value=0.0, netindex=-1, Model=None):

      Structure.__init__(self)

      self.Size = sizeof(self)

      if Model:

          self.Name = Model.Name

          self.ModelName = Model.NetWorkName

          self.LayerIndex = Model.LayerRank

          self.NeuronIndex = Model.NeuronRank

          self.Activation = Model.Activation

          self.NeuronID = Model.NeuronID

          self.NeuronType = Model.NeuronType

          self.StylePos = Model.StylePos

          self.NeuronPosition = Model.NeuronPosition

          self.value = Model.value

          self.ActivationPlus = Model.ActivationPlus

          self.IndexNet = Model.IndexNet

      else:

          self.Name = name

          self.ModelName = isnetname

          self.LayerIndex = layerindex

          self.NeuronIndex = nodeindex

          self.Activation = C.getActivIndex(activation)

          self.NeuronID = nodeID

          self.NeuronType = nodetype

          self.StylePos = style

          self.NeuronPosition = nodeposition

          self.value = value

          self.ActivationPlus = 0

          self.IndexNet = netindex

     

#---------------------------------------

class TLayerData (Structure):

  """Données de couche. Utimisée pour :

  _NouvelleCouche

  _DetruireCouche."""

  _fields_ = [

      ("Size", c_int ),

      ("Index", c_short),

      ("Length", c_short),

      ("Activation", c_short),

      ("NeuronType", c_ushort),

      ("StylePos", c_ushort),

      ("ActivationPlus", c_short),

      ("Name", c_char*256),

      ("NetIndex", c_int)]

 

  def __init__(self, index=0, len=0, activfunc='TANH', ntype=1):

      Structure.__init__(self)

      self.Size = sizeof(self)

      self.Index = index

      self.Length = len

      self.Activation = C.getActivIndex(activfunc)

      self.NeuronType = ntype

      self.StylePos = 0

      self.ActivationPlus = 0

      self.Name = ''

      self.NetIndex = 0

 

#---------------------------------------

class TMergeData( Structure ):

  _fields_ = [("Size", c_int ),

              ("FichierSource", c_char*256),

              ("NInputMerge", c_short),

              ("NLayerShift", c_short),

              ("NNodeShift", c_short),

              ("AutoMerge", c_ushort),

              ("PlugIn", c_ushort),

              ("SharedSynapses", c_ushort),

              ("ByName", c_ushort)]

 

#---------------------------------------

class TNetworkData( Structure ):

  # ancienne structure. Pour compatibilité.

  _fields_ = [("NEntree", c_int),

              ("NOutput", c_int),

              ("NCache", c_int),

              ("AActivCache", c_short)]

  def __init__(self, ninput=0, noutput=0, nhidden=0, activ='IDENTITY'):

      Structure.__init__(self)

      self.NEntree = ninput

      self.NOutput = noutput

      self.NCache = nhidden

      self.AActivCache = C.getActivIndex(activ)

 

#---------------------------------------

class TModelData( Structure ):

  _fields_ = [( "Size", c_int ),

              ( "NModelInput", c_int ),

              ( "NModelOutput", c_int ),

              ( "NHidden", c_int ),

              ( "AHiddenActiv", c_short ),

              ( "ILayer", c_short ),

              ( "INeuron", c_short ),

              ( "NState", c_short ),

              ( "Redondancy", c_byte ),

              ( "DoNotCreateSynapses", c_byte ),

              ( "ExistingNeuron", c_byte ),

              ( "PolyType", c_short)]

 

  def __init__(self, input=1, output=1, hidden=2, activfunc="TANH"):

      self.Size = sizeof(self)

      self.NModelInput = input

 

 

 

 

 

 

      self.NModelOutput = output

      self.NHidden = hidden

      self.AHiddenActiv = C.getActivIndex(activfunc)

 

  def getShort(self):

      return TNetworkData(self.NEntree, self.NOutput, self.NCache, self.AActivCache)

 

#---------------------------------------

 


NETRAL Neuro Developer Kit version 7.0