From fa541db627d9e43481bf48e5d7d808932c395200 Mon Sep 17 00:00:00 2001 From: Pascale Noyret Date: Tue, 12 Jun 2007 08:08:56 +0000 Subject: [PATCH] *** empty log message *** --- Aster/Cata/cataSTA9/Macro/Sensibilite.py | 193 +++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 Aster/Cata/cataSTA9/Macro/Sensibilite.py diff --git a/Aster/Cata/cataSTA9/Macro/Sensibilite.py b/Aster/Cata/cataSTA9/Macro/Sensibilite.py new file mode 100644 index 00000000..f9dd3530 --- /dev/null +++ b/Aster/Cata/cataSTA9/Macro/Sensibilite.py @@ -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 ' 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 ' 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 ' 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 ' 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 -- 2.39.2