2 # Copyright (C) 2007-2013 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 Ce module contient la classe MCSIMP qui sert à controler la valeur
23 d'un mot-clé simple par rapport à sa définition portée par un objet
27 from __future__ import absolute_import
30 from Noyau.N_ASSD import ASSD
31 from Noyau.N_CO import CO
32 from . import N_OBJECT
33 from .N_CONVERT import ConversionFactory
34 from .N_types import force_list, is_sequence
37 class MCSIMP(N_OBJECT.OBJECT):
43 def __init__(self, val, definition, nom, parent):
47 - val : valeur du mot clé simple
57 - valeur : valeur du mot-clé simple en tenant compte de la valeur par défaut
60 self.definition = definition
64 self.convProto = ConversionFactory('type', typ=self.definition.type)
65 self.valeur = self.GETVAL(self.val)
67 self.jdc = self.parent.jdc
68 self.niveau = self.parent.niveau
69 self.etape = self.parent.etape
71 # Le mot cle simple a été créé sans parent
76 def GETVAL(self, val):
78 Retourne la valeur effective du mot-clé en fonction
79 de la valeur donnée. Defaut si val == None
81 if (val is None and hasattr(self.definition, 'defaut')):
82 val = self.definition.defaut
84 val = self.convProto.convert(val)
89 Retourne la "valeur" d'un mot-clé simple.
90 Cette valeur est utilisée lors de la création d'un contexte
91 d'évaluation d'expressions à l'aide d'un interpréteur Python
94 # Si singleton et max=1, on retourne la valeur.
95 # Si une valeur simple et max='**', on retourne un singleton.
96 # (si liste de longueur > 1 et max=1, on sera arrêté plus tard)
97 # Pour accepter les numpy.array, on remplace : "type(v) not in (list, tuple)"
98 # par "not has_attr(v, '__iter__')".
101 elif is_sequence(v) and len(v) == 1 and self.definition.max == 1:
103 elif not is_sequence(v) and self.definition.max != 1:
105 # traitement particulier pour les complexes ('RI', r, i)
106 if 'C' in self.definition.type and self.definition.max != 1 and v != None and v[0] in ('RI', 'MP'):
112 Une autre méthode qui retourne une "autre" valeur du mot clé simple.
113 Elle est utilisée par la méthode get_mocle
117 def accept(self, visitor):
119 Cette methode permet de parcourir l'arborescence des objets
120 en utilisant le pattern VISITEUR
122 visitor.visitMCSIMP(self)
125 """ Retourne une copie de self """
126 objet = self.makeobjet()
127 # il faut copier les listes et les tuples mais pas les autres valeurs
128 # possibles (réel,SD,...)
129 if type(self.valeur) in (list, tuple):
130 objet.valeur = copy(self.valeur)
132 objet.valeur = self.valeur
133 objet.val = objet.valeur
137 return self.definition(val=None, nom=self.nom, parent=self.parent)
139 def reparent(self, parent):
141 Cette methode sert a reinitialiser la parente de l'objet
144 self.jdc = parent.jdc
145 self.etape = parent.etape
147 def get_sd_utilisees(self):
149 Retourne une liste qui contient la ou les SD utilisée par self si c'est le cas
150 ou alors une liste vide
153 if isinstance(self.valeur, ASSD):
154 l.append(self.valeur)
155 elif type(self.valeur) in (list, tuple):
156 for val in self.valeur:
157 if isinstance(val, ASSD):
161 def get_sd_mcs_utilisees(self):
163 Retourne la ou les SD utilisée par self sous forme d'un dictionnaire :
164 - Si aucune sd n'est utilisée, le dictionnaire est vide.
165 - Sinon, la clé du dictionnaire est le mot-clé simple ; la valeur est
166 la liste des sd attenante.
169 { 'VALE_F': [ <Cata.cata.fonction_sdaster instance at 0x9419854>,
170 <Cata.cata.fonction_sdaster instance at 0x941a204> ] }
172 l = self.get_sd_utilisees()
178 def get_mcs_with_co(self, co):
180 Cette methode retourne l'objet MCSIMP self s'il a le concept co
183 if co in force_list(self.valeur):
187 def get_all_co(self):
189 Cette methode retourne la liste de tous les concepts co
190 associés au mot cle simple
192 return [co for co in force_list(self.valeur)
193 if isinstance(co, CO) and co.is_typco()]