Salome HOME
travail sur monPlusieurs
[tools/eficas.git] / Noyau / N_MCSIMP.py
index 2ff4d1f9116532214b79c81de21f7e4102cd3b23..438b8ee08c744c93df6e9b894b88432fb83f5692 100644 (file)
@@ -1,30 +1,27 @@
-#@ MODIF N_MCSIMP Noyau  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
-# RESPONSABLE COURTOIS M.COURTOIS
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2011  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.
+# Copyright (C) 2007-2013   EDF R&D
 #
-# 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.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
 #
-# 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.
+# This library 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
+# Lesser General Public License for more details.
 #
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-# ======================================================================
 
 
 """
-    Ce module contient la classe MCSIMP qui sert a controler la valeur
-    d'un mot-cle simple par rapport a sa definition portee par un objet
+    Ce module contient la classe MCSIMP qui sert à controler la valeur
+    d'un mot-clé simple par rapport à sa définition portée par un objet
     de type ENTITE
 """
 
@@ -34,6 +31,7 @@ from Noyau.N_ASSD import ASSD
 from Noyau.N_CO import CO
 import N_OBJECT
 from N_CONVERT import ConversionFactory
+from N_types import force_list, is_sequence
 
 class MCSIMP(N_OBJECT.OBJECT):
    """
@@ -42,13 +40,18 @@ class MCSIMP(N_OBJECT.OBJECT):
    def __init__(self,val,definition,nom,parent):
       """
          Attributs :
-          - val : valeur du mot cle simple
+
+          - val : valeur du mot clé simple
+
           - definition
+
           - nom
+
           - parent
+
         Autres attributs :
 
-          - valeur : valeur du mot-cle simple en tenant compte de la valeur par defaut
+          - valeur : valeur du mot-clé simple en tenant compte de la valeur par défaut
 
       """
       self.definition=definition
@@ -62,15 +65,15 @@ class MCSIMP(N_OBJECT.OBJECT):
          self.niveau = self.parent.niveau
          self.etape = self.parent.etape
       else:
-         # Le mot cle simple a ete cree sans parent
+         # Le mot cle simple a été créé sans parent
          self.jdc = None
          self.niveau = None
          self.etape = None
 
    def GETVAL(self,val):
       """
-          Retourne la valeur effective du mot-cle en fonction
-          de la valeur donnee. Defaut si val == None
+          Retourne la valeur effective du mot-clé en fonction
+          de la valeur donnée. Defaut si val == None
       """
       if (val is None and hasattr(self.definition,'defaut')) :
          val = self.definition.defaut
@@ -80,21 +83,21 @@ class MCSIMP(N_OBJECT.OBJECT):
 
    def get_valeur(self):
       """
-          Retourne la "valeur" d'un mot-cle simple.
-          Cette valeur est utilisee lors de la creation d'un contexte
-          d'evaluation d'expressions a l'aide d'un interpreteur Python
+          Retourne la "valeur" d'un mot-clé simple.
+          Cette valeur est utilisée lors de la création d'un contexte
+          d'évaluation d'expressions à l'aide d'un interpréteur Python
       """
       v = self.valeur
       # Si singleton et max=1, on retourne la valeur.
       # Si une valeur simple et max='**', on retourne un singleton.
-      # (si liste de longueur > 1 et max=1, on sera arrete plus tard)
+      # (si liste de longueur > 1 et max=1, on sera arrêté plus tard)
       # Pour accepter les numpy.array, on remplace : "type(v) not in (list, tuple)"
       # par "not has_attr(v, '__iter__')".
       if v is None:
           pass
-      elif type(v) in (list, tuple) and len(v) == 1 and self.definition.max == 1:
+      elif is_sequence(v) and len(v) == 1 and self.definition.max == 1:
          v = v[0]
-      elif not hasattr(v, '__iter__') and self.definition.max != 1:
+      elif not is_sequence(v) and self.definition.max != 1:
           v = (v, )
       # traitement particulier pour les complexes ('RI', r, i)
       if 'C' in self.definition.type and self.definition.max != 1 \
@@ -104,8 +107,8 @@ class MCSIMP(N_OBJECT.OBJECT):
 
    def get_val(self):
       """
-          Une autre methode qui retourne une "autre" valeur du mot cle simple.
-          Elle est utilisee par la methode get_mocle
+          Une autre méthode qui retourne une "autre" valeur du mot clé simple.
+          Elle est utilisée par la méthode get_mocle
       """
       return self.valeur
 
@@ -120,7 +123,7 @@ class MCSIMP(N_OBJECT.OBJECT):
       """ Retourne une copie de self """
       objet = self.makeobjet()
       # il faut copier les listes et les tuples mais pas les autres valeurs
-      # possibles (reel,SD,...)
+      # possibles (réel,SD,...)
       if type(self.valeur) in (list, tuple):
          objet.valeur = copy(self.valeur)
       else:
@@ -141,7 +144,7 @@ class MCSIMP(N_OBJECT.OBJECT):
 
    def get_sd_utilisees(self):
       """
-          Retourne une liste qui contient la ou les SD utilisee par self si c'est le cas
+          Retourne une liste qui contient la ou les SD utilisée par self si c'est le cas
           ou alors une liste vide
       """
       l=[]
@@ -155,14 +158,14 @@ class MCSIMP(N_OBJECT.OBJECT):
 
    def get_sd_mcs_utilisees(self):
       """
-          Retourne la ou les SD utilisee par self sous forme d'un dictionnaire :
-            - Si aucune sd n'est utilisee, le dictionnaire est vide.
-            - Sinon, la cle du dictionnaire est le mot-cle simple ; la valeur est
+          Retourne la ou les SD utilisée par self sous forme d'un dictionnaire :
+            - Si aucune sd n'est utilisée, le dictionnaire est vide.
+            - Sinon, la clé du dictionnaire est le mot-clé simple ; la valeur est
               la liste des sd attenante.
 
               Exemple ::
-                      { 'VALE_F': [ <Cata.cata.para_sensi instance at 0x9419854>,
-                                    <Cata.cata.para_sensi instance at 0x941a204> ] }
+                      { 'VALE_F': [ <Cata.cata.fonction_sdaster instance at 0x9419854>,
+                                    <Cata.cata.fonction_sdaster instance at 0x941a204> ] }
       """
       l=self.get_sd_utilisees()
       dico = {}
@@ -175,21 +178,14 @@ class MCSIMP(N_OBJECT.OBJECT):
           Cette methode retourne l'objet MCSIMP self s'il a le concept co
           comme valeur.
       """
-      lval=self.valeur
-      if type(self.valeur) not in (list, tuple):
-        lval=(self.valeur,)
-      if co in lval:return [self,]
+      if co in force_list(self.valeur):
+          return [self,]
       return []
 
    def get_all_co(self):
       """
           Cette methode retourne la liste de tous les concepts co
-          associes au mot cle simple
+          associés au mot cle simple
       """
-      lval=self.valeur
-      if type(self.valeur) not in (list, tuple):
-        lval=(self.valeur,)
-      l=[]
-      for c in lval:
-        if isinstance(c,CO) or hasattr(c,"_etape"):l.append(c)
-      return l
+      return [co for co in force_list(self.valeur) \
+                 if isinstance(co, CO) and co.is_typco()]