Constant declaration in Python (const.py)

Accueil  Précédent  Suivant

# -*- coding: UTF-8 -*-

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

#

#    const.py

#

#    Auteur J.L. PLOIX

#    Societe NETRAL

#

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

 

class _const(object):

 

  MonalCfgDef = "Monal.cfg"

  DLLKey = 'general.monaldll'

  xmldatefmt = "%Y-%m-%dT%H:%M:%S"

  datetimefmt = "%d/%m/%Y %H:%M:%S"

  datetimesfmt = "%d/%m/%Y %H:%M"

  datetimessfmt = "%d/%m/%y %H:%M"

  sqldatetime = "%d-%m-%Y %H:%M:%S"

  sqldatetime2 = "%d-%m-%Y %H:%M"

  datefmt = "%d/%m/%Y"

  SecPerDay = 86400

  MinPerDay = 1440

 

  MaxInt2 = 32767

 

  # constantes de fonctions d'activation

  (IDENTITY,    # 0

  UNIT,         # 1

  TANH,         # 2

  STEP,         # 3

  GAUSS,        # 4

  SINE,         # 5

  EXP,          # 6

  QUADRATIC,    # 7

  ATAN,         # 8

  MOMENT0,      # 9

  MOMENT1,      # 10

  REVERSE,      # 11

  LOG,          # 12

  CUBIC,        # 13

  QUASIABS,     # 14

  SIGMOID,      # 15

  COMPLEMLENT,  # 16

  ROOT,         # 17

  ARCSH,        # 18

  SQR ,         # 19

  COS,          # 20

  ERF,          # 21

  GAUSSN        # 22

  ) = range(23)

 

  # constantes des fonction de cout

  (NULL,                   # 0

  SQUAREDELTA,             # 1

  SQUARELOGDELTA,          # 2

  LEASTSQUAREDELTA,        # 3

  WEIGHTEDSQUAREDELTA,     # 4

  UNCLASSIFIED,            # 5

  WEIGHTEDCLASSIFICATION,  # 6

  RELATIVESQUAREDELTA,     # 7

  GAUSSSQUAREDELTA,        # 8

  CROSSEDENTROPY,          # 9

  EXPSQUAREDELTA           # 10

  ) = range(11)

 

  # constantes des fonction de proximite (Kohonen)

  PSQUARE, PGAUSS = range(2)

 

  # constantes des fonction de decroissance (Kohonen)

  DREVERSE, DREVERSEROOT, DEXPONENT = range(3)

 

  # constantes de type de fonction  

  ACTIVATION, COST, PROXY, DECAY = range(4)

 

  # constantes d'appel a getInfo

  (INPUT_COUNT,      # 0

  OUTPUT_COUNT,      # 1

  ORDER,             # 2

  TRAINABLE,         # 3

  TRANSPOSED,        # 4

  DIMENSION,         # 5

  LAYER_COUNT,       # 6

  DRIVER_CLASS,      # 7

  HIDDEN_COUNT,      # 8

  TRAIN_COUNT,       # 9

  BOOTSTRAP,         # 10

  STATUS,            # 11

  NODE_COUNT,        # 12

  MODEL_INPUT_COUNT, # 13

  SYNAPSE_COUNT,     # 14

  DATA_COUNT,        # 15

  TRAIN_FUNC_INDEX,  # 16

  TRAINING_END,      # 17

  DATA_LOADED,       # 18

  IS_LIN,            # 19

  COMMENT_COUNT,     # 20

  MODEL_CLASS,       # 21

  FUNC_ACT_COUNT,    # 22

  FUNC_COST_COUNT,   # 23

  FUNC_PROX_COUNT,   # 24

  FUNC_DECAY_COUNT,  # 25

  VALID_HANDLE,      # 26

  BIN_STORE,         # 27

  TRAIN_MODEL_COUNT, # 28

  BOOTSTRAP_TYPE,    # 29

  TRAINING_ALGORITHM,# 30

  SELECTED_OUTPUT,   # 31

  PROXIMITY,         # 32

  DECAY,             # 33

  PROXIMITYDECAY,    # 34

  REVERSEMODE        # 35

  ) = range(36)

 

# const de minimisation des inputs

  (icNone,

   icMinimisation,

   icMaximisation,

   icReverse,

   icReverseSqrMin,

   icReverseSqrDeltaMin) = range(6)

 

 

# const d'appel de GetIndexInfo

  (iipIsTest,           #   1 La ligne de datas fait partie du test

  iipLayer,             #   1 Couche du neurone dans son modèle

  iiNodeNetIndex,       #   1 Modele contenant le neurone (si multi modèles)

  iiNLayer,             #   1 number de couches dans le modele d'index Index

  iipNodeLayerIndex,    #   1 Index du neurone dans sa couche

  iipNeuronClass,       #   2 Class du neurone

  iipLayerLength,       #   2 Longueur de la couche d'index Index

  iipSynChildren,       #   2 number de synapses enfants du neurone

  iipSynChildChild ,    #   2 Numero du neurone enfant d'indice Hi(Index) du neurone d'indice Lo(Index)

  iipSynChildType,      #   2 Type de lien du lien d'indice Hi(Index) du neurone d'indice Lo(Index)

  iipSynChildNum,       #   2 Numero de la synapse enfant d'indice Hi(Index) du neurone d'indice Lo(Index)

  iiRangJacob,          #   2 Rang du Jacobien de la output d'index Index      

  iiStateLayer,         #   3 Couche du neurone de output d'state d'index Index

  iiStateNodeLayerIndex #   3 Indixe dans sa couche du neurone de output d'state d'index Index  *)

  ) = range(14)

 

 

# const de NeuronType  

  (ntNone,

  ntSigma,    # neurone somme pondéré

  ntSigma2,   # obsolete (somme des carrés pondérés)

  ntPi,       # neurone produit pondéré

  ntSigmaPlus # reserve

  ) = range(5)

 

# const de fin d'apprentissage (return de TRAINING_END)

  (Current,      # 0

  OKTarget,      # 1

  EpochCount,    # 2

  Accuracy,      # 3

  HighWeight,    # 4

  ComputeError,  # 5

  UserDemand,    # 6

  BestValid      # 7

  ) = range(8)

 

# constantes de type de fichier model (return de TestFile)

  (NotAModel,        # 0

  BinaryModelFile,   # 1

  ASCIIModelFile,    # 2

  XMLModelFile,      # 3

  XMLModelString,    # 4

  XMLMetaModelFile,  # 5

  CompiledModelFile  # 6

  ) = range(7)

 

# constantes de type de fichier paramétres (return de TestFile)

  (BinaryParamFile,  # 129

  ASCIIParamFile,    # 130

  XMLParamFile,      # 131

  XMLParamString,    # 132

  ) = range(129, 129 + 4)

 

# const de Classes de driver (return de DRIVER_CLASS)

  (UnknownClass, TRnDrv, TRnDrv_Stat, TRnDrv_Dyn, TRnDrvReseauFonction) = range(5)

  (TRealVector, TRealMatrix, TSquareRealMatrix, TSymetricRealMatrix) = range(11, 15)

  TLibModel = 32

  ClassList = range(5)

  ClassList.extend(range(11, 15))

  ClassList.append(32)

 

# const de Classes de modeles (return de MODEL_CLASS)

  (Unknown, TNeuronNetwork, TLibModel, TKohonenNetwork, TNodeModel,

   TMultiParallelModel, TMultiSerieModel, TMultiModel, TModel) = range(9)

 

#  styles de modification de reseau, avec le type du parametre

  (UnknownClass,         # 0

  BetonnerReseau,        # 1  -> NA

  ModifierNeurone,       # 2  -> TNeuronData

  AjoutBoucle,           # 3  -> TLoopDataEx

  BouclageDifferentiel,  # 4  -> TBoucleDiff

  AjoutNeurone,          # 5  -> TNeuronData

  SupprimerNeurone,      # 6  -> TNeuronData

  DeplacerNeurone,       # 7  -> TSynapseData

  AbsorberNeurone,       # 8  -> TSynapseData

  NouvelleSynapse,       # 9  -> TSynapseData

  DetruireSynapse,       # 10 -> TSynapseData

  ModifierSynapse,       # 11 -> TSynapseData

  NouvelleCouche,        # 12 -> TLayerData

  DetruireCouche,        # 13 -> TLayerData

  FusionReseauNDK,       # 14 -> ResFusionRec

  CompacterReseau        # 15 -> NA Compactage du modèle

  ) = range(16)

  StyleModifList = range(16)

 

# listes de styles de modification  

  _ActionsNeuron = [ModifierNeurone, AjoutNeurone, SupprimerNeurone]

  _ActionsSynazpse = [DeplacerNeurone, AbsorberNeurone, NouvelleSynapse, DetruireSynapse, ModifierSynapse]

  _ActionsLayer = [NouvelleCouche, DetruireCouche]

  _ActionsNetwork = [BetonnerReseau, CompacterReseau]

 

#  TIndexPilotInfo = (

  (iipIsTest,

  iipNeuronClass,

  iipLayer,

  iipNodeLayerIndex,

  iipLayerLength,    

  iipNSynEnfants,

  iipSynEnfantEnfant,  

  iipSynEnfantType,

  iipSynEnfantNum,

  iiStateLayer,

  iiStateNodeLayerIndex

  ) = range(11)

 

  # Style de callback par les fonctions de training

  (cbk_None,         # = 0

  cbk_TrainNumber,   # = 1

  cbk_TrainProgress, # = 2

  cbk_TrainEnd,      # = 3

  cbk_InitWeight,    # = 4

  cbk_StartCycle,    # = 5

  cbk_EndCycle       # = 6

  ) = range(7)

  cbkstr = ["None", "TrainNumber", "TrainProgress", "TrainEnd", "InitWeight",

             "StartCycle", "EndCycle"]

 

# style d'action modele

  (maInitParams,          #  Initialisation des paramètres

  maLoadTrainingData,     #  Chargement des training data

  maNormalizeData,        #  Normalisation des datas

  maClearComment,         #  Effacement des commentaires.

  maConfidenceComputation,#  Calcul de la matrix de dispersion

  maClearTrainModelList   #  Effacement de la liste de modèles d'apprentissage

  ) = range(6)

 

# style d'apprentissage

  TrS_Std = 0    #      1  Apprentissage standard

  TrS_Simple = 0 #      1  Apprentissage standard

  (

  TrS_InitParam, # = 1  1  Apprentissage avec initialisation des poids dès le premier cycle

  TrS_Quiet,     # = 2  1  Apprentissage silencieux (pas d'envoi d'information dans ACallBack)

  TrS_leverage,  # = 4  1  Apprentissage puis calcul des leviers.

  TrS_BootStrap  # = 8  3  Apprentissage de bootstrap

  ) = (2**i for i in range(4))

 

# style de value reelle

  (rpNone,  #            rien

  rpNoiseVar,  #       1 ecart-type du bruit

  rpInputPotentiel,  # 3 Potentiel d'input

  rpMaxError,  #       1 Residu Max

  rpTrainAccuracy,  #  1 Précision de l'apprentissage

  rpStdDev,  #         1 EQMA

  rpPress,  #          1 EQVC

  rpMu,  #             1 Mu

  rpTrainParam,  #     3 Parametre supplémentaire de la fonction de coût

  rpCost,  #           1 Coût d'apprentissage

  rpIniDev,  #

  rpScale,  #          1 Echelle de normalisation

  rpConfLevel,  #      2 Level de confiance

  rpWeighting,

  rpBootStrapAccuracy,

  rpAmplitudeParam,

  rpDecayParam,

  rpProximityParam,

  rpProximityInitParam

  ) = range(19)

 

 

# style de lectture et d'ecriture de vector

  (veTrainingData, #         1 : table interne, complet, dans l'ordre de la table

  veTrainingDataLong,

  veTrain, #                 1 : table interne, apprentissage, ordre de l'apprentissage

  veTest, #                  1 : table interne, test

  veOutputVector, #          1 : table interne, outputs

  veStateVector, #           3 : table interne, states

  veLocalCost, #             2 : table interne, cout local

  veErrors,

  veVariables, #             1 : poids ( ou inputs pour les pilotes d'optimisation)

  veNormalizationSet, #      1 : jeu de normalisation

  veInOutNormalizationSet, # 1 : jeu de normalisation

  veExperimentalDomain, #    2 : domaine expérimental

  veOutputDomain, #          2 : domaine de output

  veParamDomain, #           2 : domaine paramètrique

  veParamIni, #              1 : paramètres d'initialisation des poids

  veJacobian, #              2 : matrix jacobienne

  veDispersionMatrix, #      2 : matrix de dispersion.

  veConfidenceParam, #

  veConfidenceMultiplyer, #

  veParamUpDownList, #

  veBoolInputs,

  veTrainingResult,

  veBootStrapParam,

  veLeverages,              # 2 : table interne, leviers

  veResiduals               # 2 : table interne, residus

  ) = range(25)

 

# style de transfert

  (trSimple,  #    1 Transfert simple

  trConfidence,  # 2 Transfert avec confiance

  trGradDir,  #    3 Transfert avec gradient direct

  trGrad,  #       1 Transfert avec gradient

  trGrads,  #      2 Transfert avec gradient/poids et gradient/inputs

  trGradHess,  #   2 Transfert avec gradient et hessien

  trGradLev,  #    2 Transfert avec gradient et leviers

  trInGrad,  #     2 Transfert avec gradeint/inputs

  trInGradHess,  # 2 Transfert avec gradeint/inputs et hessien/inputs

  trLev ,  #       2 Transfert avec leviers

  trMixHess, #     3 Transfert avec Hessien mixte.

  trBootstrap, #   2 Transfert avec bootstrap.

  trKohonen  #     2 Transfert de Kohonen.

  ) = range(13)

 

 

# Style de creation de code

  (cd_Unknown,  #     = 0

  cd_MainUse,  #     = 1

  cd_MainTrain,  #   = 2

  cd_Transfer,  #    = 3

  cd_Gradient,  #    = 4

  cd_TransferLev,  # = 5

  cd_Training,  #    = 6

  cd_MakeUse,  #     = 7

  cd_MakeTrain,  #   = 8

  cd_MakeDLM,  #     = 9

  cd_SourceDLM  #   = 10

  ) = range(11)

 

# Style de lecture/écriture de texte

#                value      Handle  Ind0     Ind1      Level Returnne :

  (gt_Caller,        # = 0   NA      NA       NA        1     programme appelant

  gt_ProductInfo,    # = 1   NA      NA       NA        1     info sur NDK

  gt_Version,        # = 2   NA      NA       NA        1     version NDK

  gt_FunctionName,   # = 3   NA      fType    Index     2     fonctions disponibles(activation, co?t, voisinnage, decroissance)

  gt_ModelName,      # = 4   Handle  NA       NA        1     nom du mod?le

  gt_Formula,        # = 5   Handle  NA       NA        1     formule de calcul du mod?le

  gt_ModelString,    # = 6   Handle  NA       NA        1     XML du mod?le

  gt_Comment,        # = 7   Handle  Index    NA        1     Commentaire

  gt_InputName,      # = 8   Handle  Index    NA        1     Nom d'entr?e

  gt_OutputName,     # = 9   Handle  Index    NA        1     Nom de output

  gt_Sticker,        # = 10  Handle  IndLayer IndNeuron 2     Etiquette d'un noeud

  gt_ParameterName,  # = 11  Handle  Index    NA        1     Nom d'un poids

  gt_ModelClassName, # = 12  Handle  NA       NA        3     Nom de classe du mod?le

  gt_StateName,      # = 13  Handle  Index    NA        3     Nom d'?tat

  gt_NodeName,       # = 14  Handle  IndLayer IndNeuron 2     Nom d'un noeud

  gt_SaveDir,        # = 15  NA      NA       NA        2     Repertoire de sauvegarde

  gt_MatrixSubDir,   # = 16  NA      NA       NA        2     Sous repertoire de sauvegarde des matrixs

  gt_ParamFile,      # = 17  Handle  Index    NA        0     Fichier de sauvegarde des apprentissages indexé

  gt_MGL,            # = 18  Handle  NA       NA        3     code MGL du mod?le

  gt_NoiseModelFile, # = 19  Handle  NA       NA        3     Fichier de modèle de bruit (Ecart-typa fonction des inputs)

  gt_MMLFunction,    # = 20  Handle  NA       NA        3     Enregistrement d'une fonction MathML (Activation, Cost, Proxy, Decay)

  gt_AddTrainModel,  # = 21  Handle  NA       NA        2     Enregistrement d'un fichier de modele en liste pour l'apprentissage

  gt_WorkSheet,      # = 22  Handle  Ind0     Ind1      2     code feuille de calcul Excel  / a developper

                     #                                          Ind0:

                     #                                          Ind1:

  gt_Code            # = 23  Handle  IndLang  IndFct    3     code du mod?le      / a developper

                     #                                          IndLang : 1: C

                     #                                          IndFct  : Style de creation de code    

  ) = range(24)

 

# IndLang du code fourni avec gt_Code

  (cl_None, # 0

  cl_VB,    # 1  Macro Excel

  cl_CHead, # 2  En-tete C

  cl_CBody  # 3  Corps C

  ) = range(4)

 

# IndFct du code fourni avec gt_Code

  (cd_Unknown,    # = 0

  cd_MainUse,     # = 1

  cd_MainTrain,   # = 2

  cd_Transfer,    # = 3

  cd_Gradient,    # = 4

  cd_TransferLev, # = 5

  cd_Training,    # = 6

  cd_MakeUse,     # = 7

  cd_MakeTrain,   # = 8

  cd_MakeDLM,     # = 9

  cd_SourceDLM    # = 10

  ) = range(11)

 

     

  def __init__( self ):

      # dictionnaire des noms des classes de pilotes

      self.driverClassNames = {

          self.UnknownClass: 'Unknown',

          self.TRnDrv: 'TRnDrv',

          self.TRnDrv_Stat: 'TRnDrv_Stat',

          self.TRnDrv_Dyn: 'TRnDrv_Dyn',

          self.TRnDrvReseauFonction: 'TRnDrvReseauFonction',

          self.TRealVector: 'TRealVector',

          self.TRealMatrix: 'TRealMatrix',

          self.TSquareRealMatrix: 'TSquareRealMatrix',

          self.TSymetricRealMatrix: 'TSymetricRealMatrix',

          self.TLibModel: 'TLibModel'}

      # dictionnaire des noms des classes de modeles

      self.modelClassNames = {

          self.UnknownClass: 'Unknown',

          self.TNeuronNetwork: 'TNeuronNetwork',

          self.TLibModel: 'TLibModel',

          self.TKohonenNetwork: 'TKohonenNetwork',

          self.TNodeModel: 'TNodeModel',

          self.TMultiParallelModel: 'TMultiParallelModel',

          self.TMultiSerieModel: 'TMultiSerieModel',

 

          self.TMultiModel: 'TMultiModel',

          self.TModel: 'TModel'}

      # dictionnaire des noms des motifs d'arrete d'apprentissage

      self.trainingEndNames = {

          self.Current: 'Current',

          self.OKTarget: 'OKTarget',

          self.EpochCount: 'EpochCount',

          self.Accuracy: 'Accuracy',

          self.HighWeight: 'HighWeight',

          self.ComputeError: 'ComputeError',

          self.UserDemand: 'UserDemand',

          self.BestValid: 'BestValid'}

      # dictionnaire des noms de fonctions d'activation

      self.activName = {

          self.IDENTITY: "IDENTITY",

          self.UNIT: "UNIT",

          self.TANH: "TANH",

          self.STEP: "STEP",

          self.GAUSS: "GAUSS",

          self.SINE: "SINE",

          self.EXP: "EXP",

          self.QUADRATIC: "QUADRATIC",

          self.ATAN: "ATAN",

          self.MOMENT0: "MOMENT0",

          self.MOMENT1: "MOMENT1",

          self.REVERSE: "REVERSE",

          self.LOG: "LOG",

          self.CUBIC: "CUBIC",

          self.QUASIABS: "QUASIABS",

          self.SIGMOID: "",

          self.COMPLEMLENT: "SIGMOID",

          self.ROOT: "ROOT",

          self.ARCSH: "ARCSH",

          self.SQR: "SQR",

          self.COS: "COS",

          self.ERF: "ERF",

          self.GAUSSN: "GAUSSN",

          }

     

      # dictionnaire des indices de fonction d'activation

      self.activByName = {

          '': self.IDENTITY,

          'IDENTITY': self.IDENTITY,

          'UNIT': self.UNIT,

          'UNITY': self.UNIT,

          'TANH': self.TANH,

          'TH': self.TANH,

          'STEP': self.STEP,

          'GAUSS': self.GAUSS,

          'GAUSSIAN': self.GAUSS,

          'SINE': self.SINE,

          'SIN': self.SINE,

          'EXP': self.EXP,

          'EXPONENT': self.EXP,

          'QUADRATIC': self.QUADRATIC,

          'ATAN': self.ATAN,

          'ARCTAN': self.ATAN,

          'MOMENT0': self.MOMENT0,

          'MOMENT1': self.MOMENT1,

          'REVERSE': self.REVERSE,

          'LOG': self.LOG,

          'LOGARITHM': self.LOG,

          'CUBIC': self.CUBIC,

          'QUASIABS': self.QUASIABS,

          'SIGMOID': self.SIGMOID,

          'COMPLEMLENT': self.COMPLEMLENT,

          'ROOT': self.ROOT,

          'ARCSH': self.ARCSH,

          'SQR': self.SQR,

          'SQARE': self.SQR,

          'COS': self.COS,

          'COSINE': self.COS,

          'ERF': self.ERF,

          'ERRORFUNCTION': self.ERF,

          'NORMALIZEDGAUSS': self.GAUSSN,

          'GAUSSN': self.GAUSSN}

      # dictionnaire des indices des fonctions de cout

      self.costByName = {

          'NULL': self.NULL,

          'SQUAREDELTA': self.SQUAREDELTA,

          'LEASTSQUAREDELTA': self.LEASTSQUAREDELTA,

          'LEASTSQUAREDELTA': self.LEASTSQUAREDELTA,

          'WEIGHTEDSQUAREDELTA': self.WEIGHTEDSQUAREDELTA,

          'UNCLASSIFIED': self.UNCLASSIFIED,

          'BADCLASSICATION': self.UNCLASSIFIED,

          'WEIGHTEDCLASSIFICATION': self.WEIGHTEDCLASSIFICATION,

          'RELATIVESQUAREDELTA': self.RELATIVESQUAREDELTA,

          'GAUSSSQUAREDELTA': self.GAUSSSQUAREDELTA,

          'CROSSEDENTROPY': self.CROSSEDENTROPY,

          'EXPSQUAREDELTA': self.EXPSQUAREDELTA,

          'EXPONENTSQUAREDELTA': self.EXPSQUAREDELTA}

      # dictionnaire des indices de fonctions de proximite de Kohonen

      self.proxyByName = {

          'SQUARE': self.PSQUARE,

          'GAUSS': self.PGAUSS}

      # dictionnaire des indices des fonctions de decroissance de Kohonen

      self.decayByName = {

          'REVERSE': self.DREVERSE,

          'REVERSEROOT': self.DREVERSEROOT,

          'EXPONENT': self.DEXPONENT}

 

  def getActivIndex(self, activ):

      """Recherche de l'indice de la fonction d'activation decrite par activ.

"activ" peut etre un indice entierou un nom raccourci de fonction. Les noms

acceptes sont :

  '': Identite

  'IDENTITY': Identite

  'UNIT': Unite

  'UNITY': Unite

  'TANH': Tangente hyperbolique

  'TH': Tangente hyperbolique

  'STEP': Echelon

  'GAUSS': Gaussienne

  'GAUSSIAN': Gaussienne

  'SINE': Sinus

  'SIN': Sinus

  'EXP':Exponentielle,

  'EXPONENT': Exponentielle

  'QUADRATIC': Demi carre

  'ATAN': Arc tangente

  'ARCTAN': Arc tangente

  'MOMENT0': Moment 0

  'MOMENT1': Moment 1

  'REVERSE': self.REVERSE,

  'LOG': Logarithme

  'LOGARITHM': Logarithme

  'CUBIC': Cibique

  'QUASIABS': Quasi absolu

  'SIGMOID': Sigmoïde,

  'COMPLEMLENT': Complement à 1

  'ROOT': Racine carree

  'ARCSH': Argument Sinus Hyperbolique

  'SQR': Carre,

  'SQARE': Carre,

  'COS': Cosinus

  'COSINE': Cosinus

  'ERF': Fonction d'erreur

  'ERRORFUNCTION': Fonction d'erreur

  'NORMALIZEDGAUSS':Gaussienne normalisee

  'GAUSSN': Gaissienne normalisee"""

      import const

      try:

          if isinstance(activ, (int, long)): return activ

          if isinstance(activ, (str, unicode)):

              try:

                  return int(activ)

              except:

                  return self.activByName[activ.upper()]

      except: pass

      raise Exception("Cannot find activation function %s" % str(activ))

 

  class ConstError(TypeError): pass

 

  def __setattr__(self, name, value):

      if name in self.__dict__:

          raise self.ConstError, "Cannot rebind const.%s" % name

      self.__dict__[name] = value

     

  def __delattr__(self, name):

      if name in self.__dict__:

          raise self.ConstError, "Cannot unbind const.%s" % name

      raise NameError, name

 

import sys

sys.modules[__name__] = _const()

 


NETRAL Neuro Developer Kit version 7.0