]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA9/SD/sd_util.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA9 / SD / sd_util.py
1 #@ MODIF sd_util SD  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
10 #
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
15 #
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
20
21 """
22    Utilitaires pour la vérification des SD
23 """
24
25 # pour utilisation dans eficas
26 try:
27    import aster
28 except:
29    pass
30
31 from sets import Set
32 import copy
33
34
35 #  1) Utilitaires pour vérifier certaines propriétés.
36 #     Ces utilitaires ne provoquent pas d'arret mais écrivent des messages dans un "checker"
37 #  -----------------------------------------------------------------------------------------
38
39
40 #   1.1 Utilitaires pour des scalaires :
41 #   ------------------------------------
42
43 def sdu_assert(ojb, checker, bool,comment=''):
44     # Vérifie que le booléen (bool) est vrai
45     if not bool :
46             checker.err(ojb, "condition non respectée :  (%s)" % (comment,))
47
48 def sdu_compare(ojb, checker, val1, comp, val2, comment=''):
49     # Vérifie que la relation de comparaison entre val1 et val2 est respectée :
50     #   comp= '==' / '!=' / '>=' / '>' / '<=' / '<'
51     comp=comp.strip()
52     ok = 0
53     if comp == "==" :
54        ok = val1 == val2
55     elif comp == "!=" :
56        ok = val1 != val2
57     elif comp == ">=" :
58        ok = val1 >= val2
59     elif comp == "<=" :
60        ok = val1 <= val2
61     elif comp == ">" :
62        ok = val1 > val2
63     elif comp == "<" :
64        ok = val1 < val2
65     else :
66        sdu_assert(ojb, checker, 0, 'sdu_compare: opérateur de comparaison interdit: '+comp)
67
68     if not ok :
69             checker.err(ojb, "condition non respectée : %s  %s  %s (%s)" % (val1,comp,val2,comment))
70
71
72 #   1.2 Utilitaires pour des séquences :
73 #   ------------------------------------
74
75 def sdu_tous_differents(ojb,checker,sequence=None,comment=''):
76     # Vérifie que les éléments de la séquence sont tous différents.
77     # Si l'argument sequence est None, on prend l'ensemble de l'ojb.
78
79     if sequence :
80         seq=sequence
81     else :
82         seq=ojb.get()
83
84     sdu_compare(ojb, checker, len(seq), '==', len(Set(seq)), comment='Tous différents: '+comment)
85
86
87 def sdu_tous_non_blancs(ojb,checker,sequence=None,comment=''):
88     # Vérifie que les éléments (chaines) de la séquence sont tous "non blancs".
89     # Si l'argument sequence est None, on prend l'ensemble de l'ojb.
90
91     if sequence :
92         seq=sequence
93     else :
94         seq=ojb.get()
95
96     for elem in seq :
97         assert len(elem.strip()) > 0 , (seq,self, 'tous "non blancs" '+comment)
98
99
100 def sdu_tous_compris(ojb,checker,sequence=None,vmin=None,vmax=None,comment=''):
101     # Vérifie que toutes les valeurs de la sequence sont comprises entre vmin et vmax
102     # Les bornes vmin et vmax sont autorisées
103     # Si l'argument sequence est None, on prend l'ensemble de l'ojb.
104
105     assert (not vmin is None) or (not vmax is None),'Il faut fournir au moins une des valeurs vmin ou vmax'
106     if sequence :
107         seq=sequence
108     else:
109         seq=ojb.get()
110
111     ier = 0
112     for v in seq :
113        if vmin and v < vmin : ier = 1
114        if vmax and v > vmax : ier = 1
115     if ier == 1 : checker.err( ojb, "L'objet doit contenir des valeurs dans l'intervalle : [%s, %s] "  % (vmin,vmax))
116
117
118
119 def sdu_monotone(seqini) :
120     #-------------------------------
121     # vérifie qu'une séquence est triée par ordre croissant (ou décroissant)
122     # retourne :
123     #    3 : ni croissant ni décroissant  (désordre)
124     #    1 : croissant
125     #   -1 : décroissant
126     #    0 : constant
127
128     n=len(seqini)
129     if isinstance(seqini,tuple) :
130         seq=list(seqini)
131     else :
132         seq=seqini
133
134     seq2=copy.deepcopy(seq)
135     seq2.sort()
136     seq3=copy.deepcopy(seq)
137     seq3.sort()
138     seq3.reverse()
139
140     croiss=1
141     decroiss=1
142     for k in range(n) :
143         if seq[k] != seq2[k] :
144             croiss=0
145         if seq[k] != seq3[k] :
146             decroiss=0
147
148     if   croiss==1 and decroiss==1 :
149         return 0
150     elif croiss==1 and decroiss==0 :
151         return 1
152     elif croiss==0 and decroiss==1 :
153         return -1
154     elif croiss==0 and decroiss==0 :
155         return 3
156
157
158
159 #  2) Utilitaires de questionnement :
160 #  -----------------------------------------------------------------------------------------
161
162 def sdu_nom_gd(numgd) :
163     # retourne le nom de la grandeur de numéro (numgd)
164     assert numgd > 0 and numgd <1000 , numgd
165     ptn=aster.getvectjev('&CATA.GD.NOMGD')
166     return ptn[numgd-1].strip()
167
168 def sdu_licmp_gd(numgd) :
169     # retourne la liste des cmps de la grandeur de numéro (numgd)
170     nomgd=sdu_nom_gd(numgd)
171     nocmp=aster.getcolljev('&CATA.GD.NOMCMP')
172     return nocmp[nomgd.ljust(8)]
173
174
175
176 #  3) Utilitaires pour la vérification de l'existence des objets :
177 #  -----------------------------------------------------------------------------------------
178
179 def sdu_ensemble(lojb) :
180     # vérifie que les objets JEVEUX de lojb existent simultanément :
181     assert len(lojb) > 1 , lojb
182     lexi=[]
183     for obj1 in lojb :
184         lexi.append(obj1.exists)
185     for x in lexi[1:] :
186         assert x==lexi[0] , (lojb,lexi)