]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
*** empty log message ***
authorPascale Noyret <pascale.noyret@edf.fr>
Tue, 12 Jun 2007 08:08:56 +0000 (08:08 +0000)
committerPascale Noyret <pascale.noyret@edf.fr>
Tue, 12 Jun 2007 08:08:56 +0000 (08:08 +0000)
Aster/Cata/cataSTA9/Macro/Sensibilite.py [new file with mode: 0644]

diff --git a/Aster/Cata/cataSTA9/Macro/Sensibilite.py b/Aster/Cata/cataSTA9/Macro/Sensibilite.py
new file mode 100644 (file)
index 0000000..f9dd353
--- /dev/null
@@ -0,0 +1,193 @@
+#@ MODIF Sensibilite Macro  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+"""
+Module traite de la gestion des concepts sensibles :
+   - classe permettant de stocker les noms des concepts et leurs dérivées
+   - corps de la macro MEMO_NOM_SENSI
+"""
+
+# proctection eficas
+try:
+   import aster
+   from Utilitai.Utmess import U2MESS as UTMESS
+except:
+   pass
+
+_VIDE_ = '????????'
+
+#-------------------------------------------------------------------------------
+class MEMORISATION_SENSIBILITE:
+   """Classe pour la mémorisation des concepts sensibles et leurs dérivées.
+   """
+   def __init__(self, debug=False):
+      """Initialisation de la structure
+      """
+      self._debug = debug
+      # dictionnaire de correspondance : ('nom concept', 'nom parasensi') : 'nom compose'
+      self._corr = {}
+      self._nsnp = {}   # l'inverse
+      # dictionnaire donnant les 3 tuples de mots-clés, valeurs, mots-clés facteurs
+      self._mcle = {}
+
+
+   def key(self, nosimp, nopase):
+      """Retourne la clé d'accès aux dictionnaires
+      """
+      if not type(nosimp) in (str, unicode) or not type(nopase) in (str, unicode) or \
+         len(nosimp.strip()) > 8 or len(nopase.strip()) > 8:
+            UTMESS('F', 'SENSIBILITE_57', valk=(nosimp, nopase))
+      return nosimp.strip(), nopase.strip()
+   
+   
+   def set(self, nosimp, nopase, nocomp=None, limocl=None, livale=None, limofa=None,
+           verbose=False):
+      """On renseigne la structure de mémorisation : CHOIX='E'
+      """
+      key = self.key(nosimp, nopase)
+      if self._corr.has_key(key):
+         UTMESS('F', 'SENSIBILITE_90', valk=(nosimp, nopase))
+      limocl = limocl or ()
+      livale = livale or ()
+      limofa = limofa or ()
+      if not (len(limocl) == len(livale) == len(limofa)):
+         UTMESS('F', 'SENSIBILITE_97')
+      
+      if nocomp is None:
+         nocomp = aster.get_nom_concept_unique('S')
+      self._corr[key] = nocomp
+      self._nsnp[nocomp] = key
+      self._mcle[key] = (limocl, livale, limofa)
+      
+      if verbose or self._debug:
+         UTMESS('I', 'SENSIBILITE_58', valk=(nosimp, nopase, nocomp))
+         if len(limocl) != 0:
+            UTMESS('I', 'SENSIBILITE_59', valk=(str(limocl), str(livale), str(limofa)))
+
+
+   def get_nocomp(self, nosimp, nopase):
+      """On récupère le nom composé associé à un nom simple.
+      """
+      key = self.key(nosimp, nopase)
+      nocomp = self._corr.get(key, _VIDE_)
+      if self._debug:
+         print '<DBG> memo_sensi.get_nocomp'
+         print '      nosimp, nopase = "%s", "%s"' % (nosimp, nopase)
+         print '      nom composé    = "%s"' % nocomp
+      return nocomp
+
+
+   def get_nsnp(self, nocomp):
+      """On récupère le nom du concept et le parasensi associé au nom composé fourni.
+      """
+      key = self._nsnp.get(nocomp, (_VIDE_, _VIDE_))
+      if self._debug:
+         print '<DBG> memo_sensi.get_nsnp'
+         print '      nom composé    = "%s"' % nocomp
+         print '      nosimp, nopase = "%s", "%s"' % key
+      return nocomp
+
+
+   def get_mcle(self, nosimp, nopase):
+      """On récupère les mots-clés associés à un couple ('nom concept', 'nom parasensi')
+      """
+      key = self.key(nosimp, nopase)
+      tup3 = self._mcle.get(key, ((), (), ()) )
+      if self._debug:
+         print tup3
+         print '<DBG> memo_sensi.get_mcle      nbmocl =',len(tup3[0])
+         print '      nosimp, nopase = "%s", "%s"' % (nosimp, nopase)
+         print '      mots-clés      = ', tup3
+      return tup3
+
+
+   def psinfo(self, nosimp):
+      """Pendant de l'ex-routine psnosd : retour selon le type de `nosimp`.
+      """
+      # est-ce une structure dérivée ?
+      if nosimp in self._nsnp.keys():
+         t_couples = self._nsnp[nosimp]
+         ideriv = 1
+      else:
+         t_couples = self.get_deriv(nosimp)
+         ideriv = 0
+      # on met le tuple des couples à plat : un tuple de longueur double
+      l_res = []
+      for coupl in t_couples:
+         l_res.extend(coupl)
+      t_res = tuple(l_res)
+      if self._debug:
+         print '<DBG> memo_sensi.psinfo'
+         print '      nosimp = "%s"' % nosimp
+         print '      ideriv = ', ideriv
+         print '      result = ', t_res
+      return ideriv, t_res
+
+
+   def get_deriv(self, nosimp):
+      """On récupère la liste des couples ('nom composé', 'nom parasensi') associé à
+      un nom simple.
+      """
+      res = []
+      # liste des clés d'accès concernant `nosimp`.
+      l_key = [(ns, np) for ns, np in self._corr.keys() if ns == nosimp.strip()]
+      for ns, np in l_key:
+         res.append((self._corr[ns, np], np))
+      return tuple(res)
+
+
+   def delete(self, nosimp, nopase):
+      """On récupère les mots-clés associés à un couple ('nom concept', 'nom parasensi')
+      """
+      key = self.key(nosimp, nopase)
+      nocomp = self.get_nocomp(nosimp, nopase)
+      if nocomp != _VIDE_:
+         del self._corr[key]
+         del self._mcle[key]
+         del self._nsnp[nocomp]
+
+
+#-------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
+def memo_nom_sensi_ops(self, NOM, **args):
+   """Macro MEMO_NOM_SENSI.
+   Transitoire : l'appel aux méthodes de MEMORISATION_SENSIBILITE devraient
+      à terme etre fait directement sans introduire de commandes MEMO_NOM_SENSI.
+   
+   Faut-il traiter les mots-clés NOM_ZERO et NOM_UN ?
+   Il me semble que NOM_COMPOSE est toujours présent : obligatoire
+   """
+   ier=0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # boucle sur les occurrences du mot-clé facteur NOM
+   for occ in NOM:
+      dNOM = occ.cree_dict_valeurs(occ.mc_liste)
+      
+      nosimp = dNOM['NOM_SD']
+      nopase = dNOM['PARA_SENSI'].nom
+      nocomp = dNOM['NOM_COMPOSE']
+      
+      self.jdc.memo_sensi.set(nosimp, nopase, nocomp,
+                              dNOM['MOT_CLE'], dNOM['VALEUR'], dNOM['MOT_FACT'],
+                              verbose=True)
+
+   return ier