eficas-6.4.0/0000755004705000470430000000000011674651110013233 5ustar courtoisasterdeveficas-6.4.0/Noyau/0000755004705000470430000000000011670106364014330 5ustar courtoisasterdeveficas-6.4.0/Noyau/N_OPS.py0000644004705000470430000000323611655732751015634 0ustar courtoisasterdev#@ MODIF N_OPS Noyau DATE 17/08/2011 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # 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. # # 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. # ====================================================================== from N_utils import import_object class OPS: """Wrapper to ops functions. This allows to import them only when they are needed.""" def __init__(self, uri): """Initialization""" self.uri = uri def __call__(self, *args, **kwargs): """Import the real function and call it.""" func = import_object(self.uri) return func(*args, **kwargs) # utilisé par exemple par des macros où tout est fait dans l'init. class NOTHING(OPS): """OPS which does nothing.""" def __call__(self, macro, *args, **kwargs): macro.set_icmd(1) return 0 EMPTY_OPS = NOTHING(None) eficas-6.4.0/Noyau/N_GEOM.py0000644004705000470430000000441111444664426015715 0ustar courtoisasterdev#@ MODIF N_GEOM Noyau DATE 29/03/2010 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ """ from N_ASSD import ASSD class GEOM(ASSD): """ Cette classe sert à définir les types de concepts géométriques comme GROUP_NO, GROUP_MA,NOEUD et MAILLE """ def __init__(self,nom,etape=None,sd=None,reg='oui'): """ """ self.etape=etape self.sd=sd if etape: self.parent=etape.parent else: self.parent=CONTEXT.get_current_step() if self.parent : self.jdc = self.parent.get_jdc_root() else: self.jdc = None if not self.parent: self.id=None elif reg == 'oui' : self.id = self.parent.reg_sd(self) self.nom=nom def get_name(self): return self.nom def __convert__(cls,valeur): if isinstance(valeur, (str,unicode)) and len(valeur.strip()) <= 8: return valeur.strip() raise ValueError, 'On attend un chaine de caractères (de longueur < 8).' __convert__=classmethod(__convert__) class geom(GEOM):pass eficas-6.4.0/Noyau/ascheckers.py0000644004705000470430000001151611444664426017030 0ustar courtoisasterdev#@ MODIF ascheckers Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 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. # ====================================================================== class Parmi(object): """Classe qui exprime une contrainte multiple pour un attribut""" def __init__(self, *args): self.values = list(args) def add_value(self, value ): if value not in self.values: self.values.append( value ) def __call__(self, obj, name, value, log ): if value not in self.values: log.err( obj, "l'attribut %s=%r n'est pas dans %r" % (name, value, self.values) ) def __repr__(self): l = [ "Parmi(", ] g = [ repr(v) for v in self.values ] l.append( ", ".join(g) ) l.append( ")" ) return "".join( l ) class CheckLog(object): """Un validateur qui enregistre toutes les erreurs trouvées. checkedXXX répond True si la "marq" courante est inférieure ou égale à la celle de la dernière vérification. Si on incrémentait "marq" à chaque étape, on revérifie à chaque fois. """ def __init__(self): self.msg = [] self.names = {} self.cksums = {} self.optional = False self._marq = 1 self._lastmarq = self._marq self._debug = False self._profond = False # True pour forcer des vérifications plus profondes def log(self, level, obj, msg ): if obj : self.msg.append( (level, obj.nomj(), msg) ) else : self.msg.append( (level, 'None', msg) ) def err(self, obj, msg ): self.log( 0, obj, msg ) def warn(self, obj, msg ): self.log( 1, obj, msg ) def visitOJB(self, obj): key = obj.nomj() self.names[key] = self._marq def checkSumOJB(self, obj, sd, maj='non'): # vérifie que le checksum de obj n'a pas changé # sd : concept qui contient obj # maj='maj', l'opérateur a le droit de modifier ojb if obj.exists : import md5 m=md5.new() m.update(str(obj.get())) cksum=m.digest() nom=obj.nomj() if not self.cksums.has_key(nom) : self.cksums[nom]=cksum else : if self.cksums[nom] != cksum : self.cksums[nom] = cksum #if maj.strip()=='maj' and nom[0:8].strip()==sd.nomj.nomj[0:8].strip() : # Remarque : ne pas tester 'maj' premet de résoudre (un peu) le problème # posé par la commande DETRUIRE if nom[0:8].strip()==sd.nomj.nomj[0:8].strip() : pass else : self.err(obj,'Le checksum a changé') def visitAsBase(self, obj): key = (obj.nomj(), obj.__class__.__name__) self.names[key] = self._marq def force(self, force=False): if not force: self._marq = 1 else: self._lastmarq += 1 self._marq = self._lastmarq def checkedOJB(self, obj): key = obj.nomj() res = self.names.get(key, 0) >= self._marq self.help_dbg([key,], res) return res def checkedAsBase(self, obj): key = (obj.nomj(), obj.__class__.__name__) res = self.names.get(key, 0) >= self._marq self.help_dbg(key, res) return res def help_dbg(self, key, res): if self._debug: if res: s = 'ignore' else: s = 'check ' print '#DBG %6d %s : %s' % (self._marq, s, ', '.join(key)) def __str__(self): d = { 0: "E", 1:"W" } return "\n".join( [ "%s:%s: %s" % (d[l],n,m) for l,n,m in self.msg ]) class CheckFail(CheckLog): """Un validateur qui lève une exception dès la première erreur""" def err(self, obj, msg ): raise AssertionError("%s: %s" % (obj.nomj(), msg) ) eficas-6.4.0/Noyau/N_MCCOMPO.py0000644004705000470430000004177011655732717016277 0ustar courtoisasterdev#@ MODIF N_MCCOMPO 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. # # 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. # # # ====================================================================== """ Ce module contient la classe MCCOMPO qui sert à factoriser les comportements des OBJECT composites """ from copy import copy import N_OBJECT class MCCOMPO(N_OBJECT.OBJECT): """ Classe support d'un OBJECT composite """ def build_mc(self): """ Construit la liste des sous-entites du MCCOMPO à partir du dictionnaire des arguments (valeur) """ if CONTEXT.debug : print "MCCOMPO.build_mc ",self.nom # Dans la phase de reconstruction args peut contenir des mots-clés # qui ne sont pas dans le dictionnaire des entites de definition (self.definition.entites) # de l'objet courant (self) # mais qui sont malgré tout des descendants de l'objet courant (petits-fils, ...) args = self.valeur if args == None : args ={} mc_liste=[] # On recopie le dictionnaire des arguments pour protéger l'original des delete (del args[k]) args = args.copy() # Phase 1: # On construit les sous entites presentes ou obligatoires # 1- les entites présentes dans les arguments et dans la définition # 2- les entités non présentes dans les arguments, présentes dans la définition avec un défaut # Phase 1.1 : on traite d'abord les SIMP pour enregistrer les mots cles globaux for k,v in self.definition.entites.items(): if v.label != 'SIMP':continue if args.has_key(k) or v.statut=='o' : # # Creation par appel de la methode __call__ de la definition de la sous entite k de self # si une valeur existe dans args ou est obligatoire (generique si toutes les # entites ont l attribut statut ) # objet=v(val=args.get(k,None),nom=k,parent=self) mc_liste.append(objet) # Si l'objet a une position globale on l'ajoute aux listes correspondantes if hasattr(objet.definition,'position'): if objet.definition.position == 'global' : self.append_mc_global(objet) elif objet.definition.position == 'global_jdc' : self.append_mc_global_jdc(objet) if args.has_key(k): del args[k] # Phase 1.2 : on traite les autres entites que SIMP # (FACT en fait car un BLOC ne peut avoir le meme nom qu'un mot-clef) for k,v in self.definition.entites.items(): if v.label == 'SIMP':continue if args.has_key(k) or v.statut=='o' : # # Creation par appel de la methode __call__ de la definition de la sous entite k de self # si une valeur existe dans args ou est obligatoire (generique si toutes les # entites ont l attribut statut ) # objet=v(val=args.get(k,None),nom=k,parent=self) mc_liste.append(objet) if args.has_key(k): del args[k] # Phase 2: # On construit les objets (en général, blocs) conditionnés par les mots-clés précédemment créés. # A ce stade, mc_liste ne contient que les fils de l'objet courant # args ne contient plus que des mots-clés qui n'ont pas été attribués car ils sont # à attribuer à des blocs du niveau inférieur ou bien sont des mots-clés erronés dico_valeurs = self.cree_dict_condition(mc_liste,condition=1) for k,v in self.definition.entites.items(): if v.label != 'BLOC':continue # condition and a or b : Equivalent de l'expression : condition ? a : b du langage C globs= self.jdc and self.jdc.condition_context or {} if v.verif_presence(dico_valeurs,globs): # Si le bloc existe : # 1- on le construit # 2- on l'ajoute à mc_liste # 3- on récupère les arguments restant # 4- on reconstruit le dictionnaire équivalent à mc_liste bloc = v(nom=k,val=args,parent=self) mc_liste.append(bloc) args=bloc.reste_val # On ne recalcule pas le contexte car on ne tient pas compte des blocs # pour évaluer les conditions de présence des blocs #dico_valeurs = self.cree_dict_valeurs(mc_liste) # On conserve les arguments superflus dans l'attribut reste_val self.reste_val=args # On ordonne la liste ainsi créée suivant l'ordre du catalogue # (utile seulement pour IHM graphique) mc_liste = self.ordonne_liste(mc_liste) # on retourne la liste ainsi construite return mc_liste def ordonne_liste(self,mc_liste): """ Ordonne la liste suivant l'ordre du catalogue. Seulement pour IHM graphique """ if self.jdc and self.jdc.cata_ordonne_dico != None : liste_noms_mc_ordonnee = self.get_liste_mc_ordonnee_brute( self.get_genealogie(),self.jdc.cata_ordonne_dico) return self.ordonne_liste_mc(mc_liste,liste_noms_mc_ordonnee) else: return mc_liste def cree_dict_valeurs(self,liste=[],condition=0): """ Cette méthode crée un contexte (sous la forme d'un dictionnaire) à partir des valeurs des mots clés contenus dans l'argument liste. L'opération consiste à parcourir la liste (d'OBJECT) et à la transformer en un dictionnaire dont les clés sont les noms des mots clés et les valeurs dépendent du type d'OBJECT. Ce dictionnaire servira de liste d'arguments d'appel pour les fonctions sd_prod de commandes et ops de macros ou de contexte d'évaluation des conditions de présence de BLOC. Si l'argument condition de la méthode vaut 1, on ne remonte pas les valeurs des mots clés contenus dans des blocs pour eviter les bouclages. Cette méthode réalise les opérations suivantes en plus de transformer la liste en dictionnaire : - ajouter tous les mots-clés non présents avec la valeur None - ajouter tous les mots-clés globaux (attribut position = 'global' et 'global_jdc') L'argument liste est, en général, une mc_liste en cours de construction, contenant les mots-clés locaux et les blocs déjà créés. """ dico={} for v in liste: if v.isBLOC(): # Si v est un BLOC, on inclut ses items dans le dictionnaire # représentatif du contexte. Les blocs sont retournés par get_valeur # sous la forme d'un dictionnaire : les mots-clés fils de blocs sont # donc remontés au niveau du contexte. if not condition: dadd = v.get_valeur() assert intersection_vide(dico, dadd) dico.update(dadd) else: assert not dico.has_key(v.nom), "deja vu : %s" % v.nom dico[v.nom]=v.get_valeur() # On rajoute tous les autres mots-clés locaux possibles avec la valeur # par défaut ou None # Pour les mots-clés facteurs, on ne traite que ceux avec statut défaut ('d') # et caché ('c') # On n'ajoute aucune information sur les blocs. Ils n'ont pas de défaut seulement # une condition. #XXX remplacer le not has_key par un dico différent et faire dico2.update(dico) # ce n'est qu'un pb de perf for k,v in self.definition.entites.items(): if not dico.has_key(k): if v.label == 'SIMP': # Mot clé simple dico[k]=v.defaut elif v.label == 'FACT' : if v.statut in ('c','d') : # Mot clé facteur avec défaut ou caché provisoire dico[k]=v(val=None,nom=k,parent=self) # On demande la suppression des pointeurs arrieres # pour briser les eventuels cycles dico[k].supprime() else: dico[k]=None # A ce stade on a rajouté tous les mots-clés locaux possibles (fils directs) avec leur # valeur par défaut ou la valeur None # On rajoute les mots-clés globaux sans écraser les clés existantes dico_mc = self.recherche_mc_globaux() dico_mc.update(dico) dico=dico_mc return dico def cree_dict_condition(self,liste=[],condition=0): """ Methode pour construire un contexte qui servira dans l'évaluation des conditions de présence de blocs. Si une commande a un concept produit réutilisé, on ajoute la clé 'reuse' """ dico=self.cree_dict_valeurs(liste,condition=1) # On ajoute la cle "reuse" pour les MCCOMPO qui ont un attribut reuse. A destination # uniquement des commandes. Ne devrait pas etre dans cette classe mais dans une classe dérivée if not dico.has_key('reuse') and hasattr(self,'reuse'): dico['reuse']=self.reuse return dico def recherche_mc_globaux(self): """ Retourne la liste des mots-clés globaux de l'étape à laquelle appartient self et des mots-clés globaux du jdc """ etape = self.get_etape() if etape : dict_mc_globaux_fac = self.recherche_mc_globaux_facultatifs() for k,v in etape.mc_globaux.items(): dict_mc_globaux_fac[k]=v.get_valeur() if self.jdc : for k,v in self.jdc.mc_globaux.items(): dict_mc_globaux_fac[k]=v.get_valeur() return dict_mc_globaux_fac else : return {} def recherche_mc_globaux_facultatifs(self): """ Cette méthode interroge la définition de self et retourne la liste des mots-clés fils directs de self de type 'global'. position='global' n'est donc possible (et n'a de sens) qu'au plus haut niveau. """ dico={} etape = self.get_etape() if not etape : return {} for k,v in etape.definition.entites.items(): if v.label != 'SIMP' : continue if v.position != 'global' : continue if v.statut == 'o':continue obj = v(val=None,nom=k,parent=etape) dico[k]=obj.get_valeur() return dico def supprime(self): """ Méthode qui supprime toutes les références arrières afin que l'objet puisse etre correctement détruit par le garbage collector """ N_OBJECT.OBJECT.supprime(self) for child in self.mc_liste : child.supprime() def __getitem__(self,key): """ Cette méthode retourne la valeur d'un sous mot-clé (key) """ return self.get_mocle(key) def get_mocle(self,key): """ Retourne la valeur du sous mot-clé key Ce sous mot-clé peut exister, avoir une valeur par defaut ou etre dans un BLOC fils de self """ # on cherche dans les mots cles presents, le mot cle de nom key # s'il est là on retourne sa valeur (méthode get_val) for child in self.mc_liste: if child.nom == key : return child.get_val() # Si on n a pas trouve de mot cle present on retourne le defaut # eventuel pour les mots cles accessibles dans la definition # a ce niveau try: d=self.definition.entites[key] if d.label == 'SIMP': return d.defaut elif d.label == 'FACT': # il faut construire les objets necessaires pour # evaluer les conditions des blocs eventuels (a faire) if d.statut == 'o' :return None if d.statut != 'c' and d.statut != 'd' : return None else : return d(val=None,nom=key,parent=self) except KeyError: # le mot cle n est pas defini a ce niveau pass # Si on a toujours rien trouve, on cherche dans les blocs presents # On suppose que tous les blocs possibles ont ete crees meme ceux # induits par un mot cle simple absent avec defaut (???) for mc in self.mc_liste : if not mc.isBLOC() : continue try: return mc.get_mocle(key) except: # On n a rien trouve dans ce bloc, on passe au suivant pass # On a rien trouve, le mot cle est absent. # On leve une exception raise IndexError,"Le mot cle %s n existe pas dans %s" % (key,self) def get_child(self,name,restreint = 'non'): """ Retourne le fils de self de nom name ou None s'il n'existe pas Si restreint vaut oui : ne regarde que dans la mc_liste Si restreint vaut non : regarde aussi dans les entites possibles avec defaut (Ce dernier cas n'est utilisé que dans le catalogue) """ for v in self.mc_liste: if v.nom == name : return v if restreint == 'non' : try: entite=self.definition.entites[name] if entite.label == 'SIMP' or (entite.label == 'FACT' and entite.statut in ( 'c', 'd')): return entite(None,name,None) except: pass return None def append_mc_global(self,mc): """ Ajoute le mot-clé mc à la liste des mots-clés globaux de l'étape """ etape = self.get_etape() if etape : nom = mc.nom etape.mc_globaux[nom]=mc def append_mc_global_jdc(self,mc): """ Ajoute le mot-clé mc à la liste des mots-clés globaux du jdc """ nom = mc.nom self.jdc.mc_globaux[nom]=mc def copy(self): """ Retourne une copie de self """ objet = self.makeobjet() # FR : attention !!! avec makeobjet, objet a le meme parent que self # ce qui n'est pas du tout bon dans le cas d'une copie !!!!!!! # FR : peut-on passer par là autrement que dans le cas d'une copie ??? # FR --> je suppose que non # XXX CCAR : le pb c'est qu'on vérifie ensuite quel parent avait l'objet # Il me semble preferable de changer le parent a la fin quand la copie est acceptee objet.valeur = copy(self.valeur) objet.val = copy(self.val) objet.mc_liste=[] for obj in self.mc_liste: new_obj = obj.copy() new_obj.reparent(objet) objet.mc_liste.append(new_obj) return objet def reparent(self,parent): """ Cette methode sert a reinitialiser la parente de l'objet """ self.parent=parent self.jdc=parent.get_jdc_root() self.etape=parent.etape for mocle in self.mc_liste: mocle.reparent(self) def get_sd_utilisees(self): """ Retourne la liste des concepts qui sont utilisés à l'intérieur de self ( comme valorisation d'un MCS) """ l=[] for child in self.mc_liste: l.extend(child.get_sd_utilisees()) return l def get_sd_mcs_utilisees(self): """ 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, les clés du dictionnaire sont les mots-clés derrière lesquels on trouve des sd ; la valeur est la liste des sd attenante. Exemple :: { 'VALE_F': [ , ], 'MODELE': [] } """ dico = {} for child in self.mc_liste: daux = child.get_sd_mcs_utilisees() for cle in daux.keys(): dico[cle] = dico.get(cle, []) dico[cle].extend(daux[cle]) return dico def get_mcs_with_co(self,co): """ Cette methode retourne l'objet MCSIMP fils de self qui a le concept co comme valeur. En principe, elle ne doit etre utilisee que pour les concepts instances de la classe CO """ l=[] for child in self.mc_liste: l.extend(child.get_mcs_with_co(co)) return l def get_all_co(self): """ Cette methode retourne tous les concepts instances de CO """ l=[] for child in self.mc_liste: l.extend(child.get_all_co()) return l def intersection_vide(dict1, dict2): """Verification qu'il n'y a pas de clé commune entre 'dict1' et 'dict2'.""" sk1 = set(dict1.keys()) sk2 = set(dict2.keys()) inter = sk1.intersection(sk2) ok = len(inter) == 0 if not ok: print 'ERREUR: Mot(s)-clef(s) vu(s) plusieurs fois :', tuple(inter) return ok eficas-6.4.0/Noyau/N_JDC.py0000644004705000470430000005047211667117123015570 0ustar courtoisasterdev#@ MODIF N_JDC Noyau DATE 25/10/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. # # 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. # # # ====================================================================== """ Ce module contient la classe JDC qui sert à interpréter un jeu de commandes """ # Modules Python import os,string,traceback import types,sys,linecache # Modules EFICAS import N_OBJECT import N_CR from N_Exception import AsException from N_ASSD import ASSD from N_info import message, SUPERV MemoryErrorMsg = """MemoryError : En général, cette erreur se produit car la mémoire utilisée hors du fortran (jeveux) est importante. Causes possibles : - le calcul produit de gros objets Python dans une macro-commande ou dans le jeu de commande lui-même, - le calcul appelle un solveur (MUMPS par exemple) ou un outil externe qui a besoin de mémoire hors jeveux, - utilisation de jeveux dynamique, - ... Solution : - distinguer la mémoire limite du calcul (case "Mémoire totale" de astk) de la mémoire réservée à jeveux (case "dont Aster"), le reste étant disponible pour les allocations dynamiques. """ class JDC(N_OBJECT.OBJECT): """ Cette classe interprete un jeu de commandes fourni sous la forme d'une chaine de caractères Attributs de classe : Attributs d'instance : """ nature = "JDC" CR=N_CR.CR exec_init=""" import Accas from Accas import _F from Accas import * NONE = None """ from N_utils import SEP def __init__(self,definition=None,procedure=None,cata=None, cata_ord_dico=None,parent=None, nom='SansNom',appli=None,context_ini=None,**args): self.procedure=procedure self.definition = definition self.cata=cata if type(self.cata) != types.TupleType and cata != None: self.cata=(self.cata,) self._build_reserved_kw_list() self.cata_ordonne_dico=cata_ord_dico self.nom = nom self.appli=appli self.parent=parent self.context_ini=context_ini # On conserve les arguments supplémentaires. Il est possible de passer # des informations globales au JDC par ce moyen. Il pourrait etre plus # sur de mettre en place le mecanisme des mots-cles pour verifier la # validité des valeurs passées. # Ceci reste à faire # On initialise avec les parametres de la definition puis on # update avec ceux du JDC self.args=self.definition.args self.args.update(args) self.nstep=0 self.nsd=0 self.par_lot='OUI' if definition: self.regles=definition.regles self.code = definition.code else: self.regles=() self.code = "CODE" # # Creation de l objet compte rendu pour collecte des erreurs # self.cr = self.CR(debut = "CR phase d'initialisation", fin = "fin CR phase d'initialisation") # on met le jdc lui-meme dans le context global pour l'avoir sous # l'etiquette "jdc" dans le fichier de commandes self.g_context={ 'jdc' : self } # Liste pour stocker tous les concepts produits dans le JDC self.sds=[] # Dictionnaire pour stocker tous les concepts du JDC (acces rapide par le nom) self.sds_dict={} self.etapes=[] self.index_etapes = {} self.mc_globaux={} self.current_context={} self.condition_context={} self.index_etape_courante=0 self.UserError="UserError" self.alea = None def compile(self): """ Cette methode compile la chaine procedure Si des erreurs se produisent, elles sont consignées dans le compte-rendu self.cr """ try: if self.appli != None : self.appli.affiche_infos('Compilation du fichier de commandes en cours ...') self.proc_compile=compile(self.procedure,self.nom,'exec') except SyntaxError, e: if CONTEXT.debug : traceback.print_exc() l=traceback.format_exception_only(SyntaxError,e) self.cr.exception("Compilation impossible : "+string.join(l)) except MemoryError, e: self.cr.exception(MemoryErrorMsg) except SystemError, e: erreurs_connues = """ Causes possibles : - offset too large : liste trop longue derrière un mot-clé. Solution : liste = (valeurs, ..., ) MOT_CLE = *liste, """ l=traceback.format_exception_only(SystemError,e) l.append(erreurs_connues) self.cr.exception("Compilation impossible : " + ''.join(l)) return def exec_compile(self): """ Cette méthode execute le jeu de commandes compilé dans le contexte self.g_context de l'objet JDC """ CONTEXT.set_current_step(self) # Le module nommage utilise le module linecache pour accéder # au source des commandes du jeu de commandes. # Dans le cas d'un fichier, on accède au contenu de ce fichier # Dans le cas d'une chaine de caractères il faut accéder # aux commandes qui sont dans la chaine import linecache linecache.cache[self.nom]=0,0,string.split(self.procedure,'\n'),self.nom try: exec self.exec_init in self.g_context for obj_cata in self.cata: if type(obj_cata) == types.ModuleType : init2 = "from "+obj_cata.__name__+" import *" exec init2 in self.g_context # Initialisation du contexte global pour l'évaluation des conditions de BLOC # On utilise une copie de l'initialisation du contexte du jdc self.condition_context=self.g_context.copy() # Si l'attribut context_ini n'est pas vide, on ajoute au contexte global # le contexte initial (--> permet d'évaluer un JDC en récupérant un contexte # d'un autre par exemple) if self.context_ini : self.g_context.update(self.context_ini) # Update du dictionnaire des concepts for sdnom,sd in self.context_ini.items(): if isinstance(sd,ASSD):self.sds_dict[sdnom]=sd if self.appli != None : self.appli.affiche_infos('Interprétation du fichier de commandes en cours ...') # On sauve le contexte pour garder la memoire des constantes # En mode edition (EFICAS) ou lors des verifications le contexte # est recalculé # mais les constantes sont perdues self.const_context=self.g_context message.debug(SUPERV, "pass") exec self.proc_compile in self.g_context CONTEXT.unset_current_step() if self.appli != None : self.appli.affiche_infos('') except EOFError: # Exception utilise pour interrompre un jeu # de commandes avant la fin # Fonctionnement normal, ne doit pas etre considere comme une erreur CONTEXT.unset_current_step() self.affiche_fin_exec() self.traiter_fin_exec('commande') except AsException,e: # une erreur a ete identifiee if CONTEXT.debug : traceback.print_exc() # l'exception a été récupérée avant (où, comment ?), # donc on cherche dans le texte txt = str(e) if txt.find('MemoryError') >= 0: txt = MemoryErrorMsg self.cr.exception(txt) CONTEXT.unset_current_step() except NameError,e: etype, value, tb = sys.exc_info() l= traceback.extract_tb(tb) s= traceback.format_exception_only("Erreur de nom",e)[0][:-1] msg = "erreur de syntaxe, %s ligne %d" % (s,l[-1][1]) if CONTEXT.debug : traceback.print_exc() self.cr.exception(msg) CONTEXT.unset_current_step() except self.UserError,exc_val: self.traiter_user_exception(exc_val) CONTEXT.unset_current_step() self.affiche_fin_exec() self.traiter_fin_exec('commande') except : # erreur inattendue # sys_exc_typ,sys_exc_value,sys_exc_frame = sys_exc.info() # (tuple de 3 éléments) if CONTEXT.debug : traceback.print_exc() exc_typ,exc_val,exc_fr=sys.exc_info() l=traceback.format_exception(exc_typ,exc_val,exc_fr) self.cr.exception("erreur non prevue et non traitee prevenir la maintenance "+ self.nom+'\n'+ string.join(l)) del exc_typ,exc_val,exc_fr CONTEXT.unset_current_step() def affiche_fin_exec(self): """ Cette methode realise l'affichage final des statistiques de temps apres l'execution de toutes les commandes en mode commande par commande ou par lot Elle doit etre surchargee pour en introduire un """ return def traiter_fin_exec(self,mode,etape=None): """ Cette methode realise un traitement final apres l'execution de toutes les commandes en mode commande par commande ou par lot Par defaut il n'y a pas de traitement. Elle doit etre surchargee pour en introduire un """ message.info(SUPERV, "FIN D'EXECUTION %s %s", mode, etape) def traiter_user_exception(self,exc_val): """Cette methode realise un traitement sur les exceptions utilisateur Par defaut il n'y a pas de traitement. La méthode doit etre surchargée pour en introduire un. """ return def register(self,etape): """ Cette méthode ajoute etape dans la liste des etapes : self.etapes et retourne un numéro d'enregistrement """ self.etapes.append(etape) self.index_etapes[etape] = len(self.etapes) - 1 message.debug(SUPERV, "#%d %s", self.index_etapes[etape], etape.nom) return self.g_register(etape) def o_register(self,sd): """ Retourne un identificateur pour concept """ self.nsd=self.nsd+1 nom=sd.idracine + self.SEP + `self.nsd` return nom def g_register(self,etape): """ Retourne un identificateur pour etape """ self.nstep=self.nstep+1 idetape=etape.idracine + self.SEP + `self.nstep` return idetape def create_sdprod(self,etape,nomsd): """ Cette methode doit fabriquer le concept produit retourne par l'etape etape et le nommer. Elle est appelée à l'initiative de l'etape pendant le processus de construction de cette etape : methode __call__ de la classe CMD (OPER ou MACRO) Ce travail est réalisé par le contexte supérieur (etape.parent) car dans certains cas, le concept ne doit pas etre fabriqué mais l'etape doit simplement utiliser un concept préexistant. Deux cas possibles : - Cas 1 : etape.reuse != None : le concept est réutilisé - Cas 2 : l'étape appartient à une macro qui a déclaré un concept de sortie qui doit etre produit par cette etape. Dans le cas du JDC, le deuxième cas ne peut pas se produire. """ sd= etape.get_sd_prod() if sd != None and (etape.definition.reentrant == 'n' or etape.reuse is None) : # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation # d un concept. Commande non reentrante ou reuse absent. self.NommerSdprod(sd,nomsd) return sd def NommerSdprod(self,sd,sdnom,restrict='non'): """ Nomme la SD apres avoir verifie que le nommage est possible : nom non utilise Si le nom est deja utilise, leve une exception Met le concept créé dans le concept global g_context """ o=self.sds_dict.get(sdnom,None) if isinstance(o,ASSD): raise AsException("Nom de concept deja defini : %s" % sdnom) if self._reserved_kw.get(sdnom) == 1: raise AsException("Nom de concept invalide. '%s' est un mot-clé réservé." % sdnom) # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja. # Ajoute a la creation (appel de reg_sd). self.sds_dict[sdnom]=sd sd.set_name(sdnom) # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC if restrict == 'non': self.g_context[sdnom]=sd message.debug(SUPERV, "g_context[%r] = %s", sdnom, sd) def reg_sd(self,sd): """ Methode appelee dans l __init__ d un ASSD lors de sa creation pour s enregistrer """ self.sds.append(sd) return self.o_register(sd) def delete_concept_after_etape(self,etape,sd): """ Met à jour les étapes du JDC qui sont après etape suite à la disparition du concept sd """ # Cette methode est définie dans le noyau mais ne sert que pendant # la phase de creation des etapes et des concepts. Il n'y a aucun # traitement particulier à réaliser. # Dans d'autres conditions, il faut surcharger cette méthode return def supprime(self): N_OBJECT.OBJECT.supprime(self) for etape in self.etapes: etape.supprime() def get_file(self,unite=None,fic_origine=''): """ Retourne le nom du fichier correspondant à un numero d'unité logique (entier) ainsi que le source contenu dans le fichier """ if self.appli : # Si le JDC est relié à une application maitre, on délègue la recherche file,text= self.appli.get_file(unite,fic_origine) else: file = None if unite != None: if os.path.exists("fort."+str(unite)): file= "fort."+str(unite) if file == None : raise AsException("Impossible de trouver le fichier correspondant" " a l unite %s" % unite) if not os.path.exists(file): raise AsException("%s n'est pas un fichier existant" % unite) fproc=open(file,'r') text=fproc.read() fproc.close() if file == None : return None,None text=string.replace(text,'\r\n','\n') linecache.cache[file]=0,0,string.split(text,'\n'),file return file,text def set_par_lot(self,par_lot): """ Met le mode de traitement a PAR LOT ou a COMMANDE par COMMANDE en fonction de la valeur du mot cle PAR_LOT et du contexte : application maitre ou pas """ if self.appli == None: # Pas d application maitre self.par_lot=par_lot else: # Avec application maitre self.par_lot='OUI' def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets en utilisant le pattern VISITEUR """ visitor.visitJDC(self) def interact(self): """ Cette methode a pour fonction d'ouvrir un interpreteur pour que l'utilisateur entre des commandes interactivement """ CONTEXT.set_current_step(self) try: # Le module nommage utilise le module linecache pour accéder # au source des commandes du jeu de commandes. # Dans le cas d'un fichier, on accède au contenu de ce fichier # Dans le cas de la console interactive, il faut pouvoir accéder # aux commandes qui sont dans le buffer de la console import linecache,code console= code.InteractiveConsole(self.g_context,filename="") linecache.cache[""]=0,0,console.buffer,"" banner="""*********************************************** * Interpreteur interactif %s ***********************************************""" % self.code console.interact(banner) finally: console=None CONTEXT.unset_current_step() def get_contexte_avant(self,etape): """ Retourne le dictionnaire des concepts connus avant etape On tient compte des commandes qui modifient le contexte comme DETRUIRE ou les macros Si etape == None, on retourne le contexte en fin de JDC """ # L'étape courante pour laquelle le contexte a été calculé est # mémorisée dans self.index_etape_courante # XXX on pourrait faire mieux dans le cas PAR_LOT="NON" : en # mémorisant l'étape # courante pendant le processus de construction des étapes. # Si on insère des commandes (par ex, dans EFICAS), il faut préalablement # remettre ce pointeur à 0 if etape: index_etape = self.index_etapes[etape] else: index_etape=len(self.etapes) if index_etape >= self.index_etape_courante: # On calcule le contexte en partant du contexte existant d=self.current_context if self.index_etape_courante==0 and self.context_ini: d.update(self.context_ini) liste_etapes=self.etapes[self.index_etape_courante:index_etape] else: d=self.current_context={} if self.context_ini: d.update(self.context_ini) liste_etapes=self.etapes for e in liste_etapes: if e is etape: break if e.isactif(): e.update_context(d) self.index_etape_courante=index_etape return d def get_global_contexte(self): """Retourne "un" contexte global ;-)""" # N'est utilisé que par INCLUDE (sauf erreur). # g_context est remis à {} en PAR_LOT='OUI'. const_context permet # de retrouver ce qui y a été mis par exec_compile. # Les concepts n'y sont pas en PAR_LOT='OUI'. Ils sont ajoutés # par get_global_contexte de la MACRO. d = self.const_context.copy() d.update(self.g_context) return d def get_contexte_courant(self, etape_courante=None): """ Retourne le contexte tel qu'il est (ou 'sera' si on est en phase de construction) au moment de l'exécution de l'étape courante. """ if etape_courante is None: etape_courante = CONTEXT.get_current_step() return self.get_contexte_avant(etape_courante) def get_concept(self, nomsd): """ Méthode pour recuperer un concept à partir de son nom """ return self.get_contexte_courant().get(nomsd.strip(), None) def del_concept(self, nomsd): """ Méthode pour supprimer la référence d'un concept dans le sds_dict. Ne détruire pas le concept (différent de supprime). """ try: del self.sds_dict[nomsd.strip()] except: pass def get_cmd(self,nomcmd): """ Méthode pour recuperer la definition d'une commande donnee par son nom dans les catalogues declares au niveau du jdc """ for cata in self.cata: if hasattr(cata,nomcmd): return getattr(cata,nomcmd) def append_reset(self,etape): """ Ajoute une etape provenant d'un autre jdc a la liste des etapes et remet à jour la parenté de l'étape et des concepts """ self.etapes.append(etape) self.index_etapes[etape] = len(self.etapes) - 1 etape.reparent(self) etape.reset_jdc(self) def sd_accessible(self): """On peut acceder aux "valeurs" (jeveux) des ASSD si le JDC est en PAR_LOT="NON". """ if CONTEXT.debug: print ' `- JDC sd_accessible : PAR_LOT =', self.par_lot return self.par_lot == 'NON' def _build_reserved_kw_list(self): """Construit la liste des mots-clés réservés (interdits pour le nommage des concepts).""" wrk = set() for cat in self.cata: wrk.update([kw for kw in dir(cat) if len(kw) <= 8 and kw == kw.upper()]) wrk.difference_update(['OPER', 'MACRO', 'BLOC', 'SIMP', 'FACT', 'FORM', 'GEOM', 'MCSIMP', 'MCFACT']) self._reserved_kw = {}.fromkeys(wrk, 1) eficas-6.4.0/Noyau/asojb.py0000644004705000470430000002542411655732717016021 0ustar courtoisasterdev#@ MODIF asojb Noyau DATE 28/06/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. # # 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. # ====================================================================== """ Description des OJB jeveux """ from basetype import Type from asnom import SDNom from ascheckers import CheckLog import traceback,sys # pour utilisation dans eficas try: import aster from Utilitai.Utmess import UTMESS except: pass # ----------------------------------------------------------------------------- class AsBase(Type): nomj = SDNom() optional = False def __init__(self, nomj=None, *args, **kwargs ): super(AsBase,self).__init__( nomj, *args, **kwargs ) assert self.nomj is not self.__class__.nomj if isinstance( nomj, str ): self.nomj.nomj = nomj elif isinstance( nomj, SDNom ): self.nomj.update( nomj.__getstate__() ) def set_name(self, nomj): """Positionne le nomj de self """ assert isinstance( self.nomj.nomj, str ), "uniquement pour les concepts" self.nomj.nomj = nomj def check(self, checker=None): if checker is None: checker = CheckLog() # vérif déjà faite ? (en tenant compte du type) if checker.checkedAsBase(self): return checker checker.visitAsBase( self ) # vérifie les enfants : optional = checker.optional checker.optional = checker.optional or self.optional for name in self._subtypes: v = getattr(self, name) if isinstance( v, (OJB,AsBase) ): v.check(checker) for name in dir(self): if name.startswith( 'check_' ): v = getattr(self, name) if callable(v): try : v( checker ) except : mess=60*'-'+'\n' mess=mess+'Erreur SDVERI (Attention : vérification incomplète)'+'\n' mess=mess.join(traceback.format_tb(sys.exc_traceback)) checker.err(self,mess) checker.optional = optional return checker def members( self ): pass def dump(self, indent=""): import pydoc l = [] checkers = [] nomj = self.nomj() if self.optional: f = "(f)" else: f = "(o)" l.append( f+" "+nomj ) #l.append( '-'*(len(nomj)+3) ) for name in self._subtypes: obj = getattr(self, name) if isinstance(obj,(AsBase,OJB)): l.append( obj.dump(indent) ) for name in dir(self): if name.startswith( 'check_' ): obj = getattr(self, name) if callable(obj) and name.startswith("check_"): checkers.append( obj ) indent = " "*len(nomj) for checker in checkers: doc = pydoc.text.document( checker ) for line in doc.splitlines(): l.append( indent + line ) return "\n".join( l ) def short_repr(self): return "<%s(%x,%r)>" % (self.__class__.__name__, id(self), self.nomj() ) def long_repr(self): if not hasattr(self, "accessible") or not self.accessible(): # hors Aster ou en par_lot='oui' return self.short_repr() else: from Cata.cata import IMPR_CO, _F IMPR_CO(CONCEPT=_F(NOM=self.nom), UNITE=6) return '' def __repr__(self): # par défaut, on fait court ! return self.short_repr() # ----------------------------------------------------------------------------- class JeveuxAttr(object): """Un attribut jeveux""" def __init__(self, name): self.name = name def __get__(self, obj, klass): raise NotImplementedError def check(self, attrname, obj, log ): checker = getattr(obj, "_"+attrname, None ) if checker is None: return True val = self.__get__( obj, obj.__class__ ) if callable( checker ): return checker( obj, attrname, val, log ) else: test = val == checker if not test: log.err( obj, "Attribut incorrect %s %r!=%r" % (self.name, val, checker ) ) return test # ----------------------------------------------------------------------------- class JeveuxExists(JeveuxAttr): def __init__(self): pass def __get__(self, obj, klass): if obj is None: return self nomj = obj.nomj() if len(nomj)!=24: raise AssertionError(repr(nomj)) return aster.jeveux_exists( nomj.ljust(24) ) # ----------------------------------------------------------------------------- class JeveuxIntAttr(JeveuxAttr): def __get__(self, obj, klass): if obj is None: return self nomj = obj.nomj() if aster.jeveux_exists( nomj ): return aster.jeveux_getattr( nomj, self.name )[0] else : return None # ----------------------------------------------------------------------------- class JeveuxStrAttr(JeveuxAttr): def __get__(self, obj, klass): if obj is None: return self nomj = obj.nomj() if aster.jeveux_exists( nomj ): return aster.jeveux_getattr( nomj, self.name )[1].strip() else : return None # ----------------------------------------------------------------------------- class OJB(AsBase): _clas = None _genr = None _type = None _ltyp = None _xous = None _docu = None _exists = True clas = JeveuxStrAttr("CLAS") genr = JeveuxStrAttr("GENR") type = JeveuxStrAttr("TYPE") ltyp = JeveuxIntAttr("LTYP") xous = JeveuxStrAttr("XOUS") docu = JeveuxStrAttr("DOCU") exists = JeveuxExists() #optional = False nomj = SDNom() def __init__(self, nomj=None, **attrs): super(OJB,self).__init__( nomj, **attrs ) self.foreachattr( self.setattribute, attrs ) self.optional = attrs.get('optional', False) def setattribute( self, name, prop, attrs ): _name = "_"+name if name in attrs: setattr( self, _name, attrs[name] ) def get(self): nomj = self.nomj() if aster.jeveux_exists( nomj ): obj_simple = aster.jeveux_getattr( nomj, 'XOUS')[1].strip() == 'S' if obj_simple : return aster.getvectjev( nomj ) else : return aster.getcolljev( nomj ) else: return None def get_stripped(self): """Fonction utilitaire, renvoie une liste de chaines 'strippées'""" data = self.get() if data is not None: return [ x.strip() for x in data ] else: return [] def foreachattr(self, callable, *args, **kwargs): klass = self.__class__ for k in dir(klass): v = getattr( klass, k ) if isinstance(v, JeveuxAttr): callable( k, v, *args, **kwargs ) def check(self, checker=None): if checker is None: checker = CheckLog() # l'objet a déjà été vérifié, on ne fait rien if checker.checkedOJB(self): return checker checker.visitOJB( self ) if self.exists: self.foreachattr( lambda k,v,obj,c: v.check(k, obj, c), self, checker ) else: if not self.optional and not checker.optional : checker.err( self, "n'existe pas (%r)" %self._parent ) return checker def dump(self, indent=""): if self.optional: f = "(f)" else: f = "(o)" return f +" "+ self.nomj() +" "+ str(self.exists) # ----------------------------------------------------------------------------- def Facultatif( ojb ): ojb.optional = True return ojb # ----------------------------------------------------------------------------- class OJBVect(OJB): lonmax = JeveuxIntAttr("LONMAX") lonuti = JeveuxIntAttr("LONUTI") _xous = "S" _genr = "V" # ----------------------------------------------------------------------------- class OJBPtnom(OJB): nommax = JeveuxIntAttr("NOMMAX") nomuti = JeveuxIntAttr("NOMUTI") _xous = "S" _genr = "N" _type = "K" # ----------------------------------------------------------------------------- class OJBCollec(OJB): stockage = JeveuxStrAttr("STOCKAGE") nutioc = JeveuxIntAttr( "NUTIOC" ) acces = JeveuxStrAttr( "ACCES" ) modelong = JeveuxStrAttr( "MODELONG" ) nmaxoc = JeveuxIntAttr( "NMAXOC" ) # ----------------------------------------------------------------------------- class AsVI(OJBVect): _type = "I" # ----------------------------------------------------------------------------- class AsVS(OJBVect): _type = "S" # ----------------------------------------------------------------------------- class AsVR(OJBVect): _type = "R" # ----------------------------------------------------------------------------- class AsVC(OJBVect): _type = "C" # ----------------------------------------------------------------------------- class AsVL(OJBVect): _type = "L" # ----------------------------------------------------------------------------- class AsVK8(OJBVect): _type = "K" _ltyp = 8 # ----------------------------------------------------------------------------- class AsVK16(OJBVect): _type = "K" _ltyp = 16 # ----------------------------------------------------------------------------- class AsVK24(OJBVect): _type = "K" _ltyp = 24 # ----------------------------------------------------------------------------- class AsVK32(OJBVect): _type = "K" _ltyp = 32 # ----------------------------------------------------------------------------- class AsVK80(OJBVect): _type = "K" _ltyp = 80 # Pour compatibilite AsObject = OJB AsColl = OJBCollec AsPn = OJBPtnom AsVect = OJBVect eficas-6.4.0/Noyau/N_BLOC.py0000644004705000470430000001523411655732717015715 0ustar courtoisasterdev#@ MODIF N_BLOC 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. # # 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. # # # ====================================================================== """ Ce module contient la classe de definition BLOC qui permet de spécifier les caractéristiques des blocs de mots clés """ import types,string,sys import traceback import N_ENTITE import N_MCBLOC from N_Exception import AsException from N_types import force_list class BLOC(N_ENTITE.ENTITE): """ Classe pour definir un bloc de mots-cles Cette classe a deux attributs de classe : - class_instance qui indique la classe qui devra etre utilisée pour créer l'objet qui servira à controler la conformité d'un bloc de mots-clés avec sa définition - label qui indique la nature de l'objet de définition (ici, BLOC) """ class_instance = N_MCBLOC.MCBLOC label = 'BLOC' def __init__(self,fr="",ang="",docu="",regles=(),statut='f',condition=None, **args): """ Un bloc est caractérisé par les attributs suivants : - fr : chaine de caractere commentaire pour aide en ligne (en francais) - ang : chaine de caractere commentaire pour aide en ligne (en anglais) - regles : liste d'objets de type REGLE pour vérifier la cohérence des sous-objets - statut : obligatoire ('o') ou facultatif ('f') - condition : chaine de caractère evaluable par l'interpreteur Python - entites : dictionnaire contenant les sous-objets de self (mots-clés). La clé du dictionnaire est le nom du mot-clé et la valeur l'objet de définition correspondant. Cet attribut est initialisé avec l'argument args de la méthode __init__ """ # Initialisation des attributs self.fr=fr self.ang=ang self.docu=docu if type(regles)== types.TupleType: self.regles=regles else: self.regles=(regles,) self.statut=statut self.condition=condition self.entites=args self.affecter_parente() def __call__(self,val,nom,parent=None): """ Construit un objet MCBLOC a partir de sa definition (self) de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent) """ return self.class_instance(nom=nom,definition=self,val=val,parent=parent) def verif_cata(self): """ Cette méthode vérifie si les attributs de définition sont valides. Les éventuels messages d'erreur sont écrits dans l'objet compte-rendu (self.cr). """ if type(self.fr) != types.StringType : self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" %`self.fr`) if type(self.docu) != types.StringType : self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu`) if type(self.regles) != types.TupleType : self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles` ) if self.statut not in ['f','o'] : self.cr.fatal("L'attribut 'statut' doit valoir 'o' ou 'f' : %s" %`self.statut` ) if self.condition != None : if type(self.condition) != types.StringType : self.cr.fatal("L'attribut 'condition' doit etre une chaine de caractères : %s" %`self.condition`) else: self.cr.fatal("La condition ne doit pas valoir None !") self.verif_cata_regles() def verif_presence(self,dict,globs): """ Cette méthode vérifie si le dictionnaire passé en argument (dict) est susceptible de contenir un bloc de mots-clés conforme à la définition qu'il porte. Si la réponse est oui, la méthode retourne 1 Si la réponse est non, la méthode retourne 0 Le dictionnaire dict a pour clés les noms des mots-clés et pour valeurs les valeurs des mots-clés """ # On recopie le dictionnaire pour protéger l'original dico = bloc_utils() dico.update(dict) if self.condition != None : try: test = eval(self.condition,globs,dico) return test except NameError: # erreur 'normale' : un mot-cle n'est pas present et on veut l'evaluer dans la condition if CONTEXT.debug: l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) print "WARNING : Erreur a l'evaluation de la condition "+string.join(l) return 0 except SyntaxError: # le texte de la condition n'est pas du Python correct --> faute de catalogue l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) raise AsException("Catalogue entite : ", self.nom,", de pere : ", self.pere.nom, '\n',"Erreur dans la condition : ", self.condition,string.join(l)) except: l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) raise AsException("Catalogue entite : ", self.nom,", de pere : ", self.pere.nom, '\n',"Erreur dans la condition : ", self.condition,string.join(l)) else : return 0 def bloc_utils(): """Définit un ensemble de fonctions utilisables pour écrire les conditions de BLOC.""" def au_moins_un(mcsimp, valeurs): """Valide si la (ou une) valeur de 'mcsimp' est au moins une fois dans la ou les 'valeurs'. Similaire à la règle AU_MOINS_UN, 'mcsimp' peut contenir plusieurs valeurs.""" test = set(force_list(mcsimp)) valeurs = set(force_list(valeurs)) return not test.isdisjoint(valeurs) def aucun(mcsimp, valeurs): """Valide si aucune des valeurs de 'mcsimp' n'est dans 'valeurs'.""" return not au_moins_un(mcsimp, valeurs) return locals() eficas-6.4.0/Noyau/N_info.py0000644004705000470430000002157211655732751016131 0ustar courtoisasterdev#@ MODIF N_info Noyau DATE 17/08/2011 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # 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. # # 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. # ====================================================================== # RESPONSABLE COURTOIS M.COURTOIS """Module to manage information printing : debug, info, error. Should replace 'print' and 'UTMESS' calls at least in the supervisor modules. Only used for debug right now. """ import os import os.path as osp import re import traceback from functools import partial from subprocess import Popen, PIPE from N_utils import Enum def default_print(text): """Basic print function.""" print text LEVEL = Enum( 'DEBUG', 'INFO', 'WARN', 'ERROR' ) class Category(object): """Define a category of message for different parts of the code. This allows to store different parameters for each category of message.""" def __init__(self): self._level = LEVEL.INFO self._fmt = "%-8s" self._header = { LEVEL.DEBUG : "DEBUG", LEVEL.INFO : None, LEVEL.WARN : "WARNING", LEVEL.ERROR : "ERROR", } def set_level(self, level): """Set the current level.""" self._level = level def get_level(self): """Return the current level.""" return self._level def set_header(self, level, header): """Set the header of ``level`` messages.""" self._header[level] = header def get_header(self, level): """Return the header at this ``level``.""" header = self._header.get(level, "") if header: header = self._fmt % header return header def active(self, level): """Tell if a message should be print at this ``level``.""" return self._level <= level ALL = Category() SUPERV = Category() SUPERV.set_header(LEVEL.ERROR, None) MISS = Category() REGEXP_ORIG = re.compile('File [\'\"]*(.*?)[\'\"]*, *line ([0-9]+), *in (.*)') # slighty different and very simplier than logger objects # from the logging module. class InfoLevel(object): """Store informations level.""" def __init__(self, level): """Initialization""" self._parts = [] for part in self._parts: part.level = level self.reset_print_function() self._msg_callback = [] #self.extend_message(ALL, stack_header_callback) self.extend_message(ALL, insert_header) def add(self, category): """Add a category of message.""" self._parts.append(category) def set_level(self, category, level): """Set the current level for ``category``.""" assert category in self._parts, "unknown category : %s" % category assert LEVEL.exists(level), "unknown level : %s" % level category.set_level(level) if category == ALL: for part in self._parts: part.set_level(level) def set_debug(self): """Set debug level for all categories.""" self.set_level(ALL, LEVEL.DEBUG) def set_header(self, category, level, header): """Set the header of ``level`` messages.""" category.set_header(level, header) def register_print_function(self, print_function): """Define the `print_function` to use.""" self._print = print_function def reset_print_function(self): """Register the default 'print function'.""" self._print = default_print def extend_message(self, category, callback): """Allow to extend the message calling an external function.""" self._msg_callback.append((category, callback)) def _message(self, category, level, msg, args, kwargs): """Print the message if the level is reached.""" if category.active(level): if kwargs.get('utmess'): func = self._message_utmess else: func = self._message_print func = self._message_print apply(func, (category, level, msg, args, kwargs)) def _message_print(self, category, level, msg, args, kwargs): """Print the message if the level is reached.""" for cat, cbk in self._msg_callback: if cat in (ALL, category): msg, args = cbk(category, level, msg, args, kwargs) if len(args) > 0: try: msg = msg % args except Exception, err: msg = repr((msg, args, err)) self._print(msg) def _message_utmess(self, category, level, msg, args, kwargs): """Print the message if the level is reached.""" # how to use callbacks ? valk ? from Utilitai.Utmess import MessageLog code = { LEVEL.DEBUG : 'I', LEVEL.INFO : 'I', LEVEL.WARN : 'A', LEVEL.ERROR : 'F', } valk = kwargs.get('valk', ()) vali = kwargs.get('vali', ()) valr = kwargs.get('valr', ()) msg = MessageLog.GetText(code[level], msg, valk, vali, valr) for cat, cbk in self._msg_callback: if cat in (ALL, category): msg, args = cbk(category, level, msg, args, kwargs) self._print(msg) def debug(self, category, msg, *args, **kwargs): """Print a debug message.""" self._message(category or ALL, LEVEL.DEBUG, msg, args, kwargs) def info(self, category, msg, *args, **kwargs): """Print an information message.""" self._message(category or ALL, LEVEL.INFO, msg, args, kwargs) def warn(self, category, msg, *args, **kwargs): """Print a warning message.""" self._message(category or ALL, LEVEL.WARN, msg, args, kwargs) def error(self, category, msg, *args, **kwargs): """Print an error message.""" self._message(category or ALL, LEVEL.ERROR, msg, args, kwargs) critical = error def add_memory_info(self, category): """Shortcut to add memory informations.""" self.extend_message(category, mem_msg_callback) def use_aster_print(self): """Shortcut to use aster.affiche function to print the messages.""" import aster self.register_print_function(partial(aster.affiche, 'MESSAGE')) # defined extensions def insert_header(category, level, msg, args, kwargs): """Insert the header.""" header = category.get_header(level) if header: msg = header + msg return msg, args def stack_header_callback(category, level, msg, args, kwargs): """To insert the origin.""" if level <= LEVEL.DEBUG: stack_id = -5 + kwargs.get('stack_id', 0) stack = traceback.format_stack(limit=10)[stack_id] mat = REGEXP_ORIG.search(stack) origin = '[%s:%s in %s] ' % (osp.basename(mat.group(1)), mat.group(2), mat.group(3)) msg = origin + msg return msg, args # objet singleton message = InfoLevel(LEVEL.INFO) message.add(ALL) message.add(SUPERV) message.add(MISS) # callback to add memory information _pid = os.getpid() RE_VMPEAK = re.compile('VmPeak:\s*([0-9]+)\s*([kMGBo]+)', re.M | re.I) def memory_used(pid): """Return the current VmPeak value.""" p = Popen(['cat', '/proc/%s/status' % pid], stdout=PIPE) output = p.communicate()[0] mat = RE_VMPEAK.search(output) return int(mat.group(1)) / 1024. current_memory_used = partial(memory_used, _pid) def mem_msg_callback(category, level, msg, args, kwargs): """Callback to add memory infos to message.""" if level <= LEVEL.DEBUG: msg = msg + " - VmPeak : %.2f Mo" args = tuple(list(args) + [current_memory_used(), ]) return msg, args if __name__ == "__main__": message.set_level(SUPERV, LEVEL.WARN) message.set_level(MISS, LEVEL.DEBUG) message.debug(None, "debug message") message.info(ALL, "information message") message.warn(None, "warning message") message.error(ALL, "error message") message.add_memory_info() message.debug(MISS, "debug supervisor message") message.info(SUPERV, "information supervisor message") message.warn(SUPERV, "warning supervisor message") message.error(SUPERV, "error supervisor message") message.critical(MISS, "test the critical alias") eficas-6.4.0/Noyau/N_OPER.py0000644004705000470430000001464111655732717015744 0ustar courtoisasterdev#@ MODIF N_OPER 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. # # 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. # # # ====================================================================== """ Ce module contient la classe de definition OPER qui permet de spécifier les caractéristiques d'un opérateur """ import types,string,traceback import N_ENTITE import N_ETAPE import nommage class OPER(N_ENTITE.ENTITE): """ Classe pour definir un opérateur Cette classe a trois attributs de classe - class_instance qui indique la classe qui devra etre utilisée pour créer l'objet qui servira à controler la conformité d'un opérateur avec sa définition - label qui indique la nature de l'objet de définition (ici, OPER) - nommage qui est un module Python qui fournit la fonctionnalité de nommage et les attributs d'instance suivants : - nom : son nom - op : le numéro d'opérateur - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne une classe - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur réentrant peut modifier un concept d'entrée et le produire comme concept de sortie - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort de l'objet gérant le contexte d'exécution de vérifier cette contrainte. - fr : commentaire associé en francais - ang : commentaire associé en anglais - docu : clé de documentation associée - regles : liste des règles associées - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette fonction est exécutée lors des phases d'initialisation de l'étape associée. - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement. Si niveau vaut None, l'opérateur est rangé au niveau global. - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut est initialisé avec args, c'est à dire les arguments d'appel restants. """ class_instance = N_ETAPE.ETAPE label = 'OPER' nommage = nommage def __init__(self,nom,op,sd_prod,reentrant='n',repetable='o',fr="",ang="", docu="",regles=(),op_init=None,niveau = None,UIinfo=None,**args): """ Méthode d'initialisation de l'objet OPER. Les arguments sont utilisés pour initialiser les attributs de meme nom """ self.nom=nom self.op=op self.sd_prod=sd_prod self.reentrant=reentrant self.fr=fr self.ang=ang self.repetable = repetable self.docu=docu if type(regles)== types.TupleType: self.regles=regles else: self.regles=(regles,) # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None self.op_init=op_init self.entites=args current_cata=CONTEXT.get_current_cata() if niveau == None: self.niveau=None current_cata.enregistre(self) else: self.niveau=current_cata.get_niveau(niveau) self.niveau.enregistre(self) self.UIinfo=UIinfo self.affecter_parente() self.check_definition(self.nom) def __call__(self,reuse=None,**args): """ Construit l'objet ETAPE a partir de sa definition (self), puis demande la construction de ses sous-objets et du concept produit. """ nomsd=self.nommage.GetNomConceptResultat(self.nom) etape= self.class_instance(oper=self,reuse=reuse,args=args) etape.McBuild() return etape.Build_sd(nomsd) def make_objet(self,mc_list='oui'): """ Cette méthode crée l'objet ETAPE dont la définition est self sans l'enregistrer ni créer sa sdprod. Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction des objets MCxxx. """ etape= self.class_instance(oper=self,reuse=None,args={}) if mc_list == 'oui':etape.McBuild() return etape def verif_cata(self): """ Méthode de vérification des attributs de définition """ if type(self.regles) != types.TupleType : self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`) if type(self.fr) != types.StringType : self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" %`self.fr`) if self.reentrant not in ('o','n','f'): self.cr.fatal("L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %s" %`self.reentrant`) if type(self.docu) != types.StringType : self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu` ) if type(self.nom) != types.StringType : self.cr.fatal("L'attribut 'nom' doit etre une chaine de caractères : %s" %`self.nom`) if type(self.op) != types.IntType : self.cr.fatal("L'attribut 'op' doit etre un entier signé : %s" %`self.op`) self.verif_cata_regles() def supprime(self): """ Méthode pour supprimer les références arrières susceptibles de provoquer des cycles de références """ self.niveau=None eficas-6.4.0/Noyau/N_MCFACT.py0000644004705000470430000000701511444664426016126 0ustar courtoisasterdev#@ MODIF N_MCFACT Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe MCFACT qui sert à controler la valeur d'un mot-clé facteur par rapport à sa définition portée par un objet de type ENTITE """ import N_MCCOMPO class MCFACT(N_MCCOMPO.MCCOMPO): """ """ nature = "MCFACT" def __init__(self,val,definition,nom,parent): """ Attributs : - val : valeur du mot clé simple - definition - nom - parent """ self.definition=definition self.nom=nom self.val = val self.parent = parent self.valeur = self.GETVAL(self.val) if parent : self.jdc = self.parent.jdc self.niveau = self.parent.niveau self.etape = self.parent.etape else: # Le mot cle a été créé sans parent self.jdc = None self.niveau = None self.etape = None self.mc_liste=self.build_mc() def GETVAL(self,val): """ 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')) : return self.definition.defaut else: return val def get_valeur(self): """ Retourne la "valeur" d'un mot-clé facteur qui est l'objet lui-meme. Cette valeur est utilisée lors de la création d'un contexte d'évaluation d'expressions à l'aide d'un interpréteur Python """ return self def get_val(self): """ Une autre méthode qui retourne une "autre" valeur du mot clé facteur. Elle est utilisée par la méthode get_mocle """ return [self] def __getitem__(self,key): """ Dans le cas d un mot cle facteur unique on simule une liste de longueur 1 """ if key == 0:return self return self.get_mocle(key) def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets en utilisant le pattern VISITEUR """ visitor.visitMCFACT(self) def makeobjet(self): return self.definition.class_instance(val=None,nom=self.nom, definition=self.definition,parent=self.parent) eficas-6.4.0/Noyau/N_FACT.py0000644004705000470430000001464511553763244015714 0ustar courtoisasterdev#@ MODIF N_FACT Noyau DATE 22/03/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. # # 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. # # # ====================================================================== """ Ce module contient la classe de definition FACT qui permet de spécifier les caractéristiques des mots clés facteurs """ import types import N_ENTITE import N_MCFACT import N_MCLIST from N__F import _F from N_types import is_enum import N_OBJECT class FACT(N_ENTITE.ENTITE): """ Classe pour definir un mot cle facteur Cette classe a trois attributs de classe - class_instance qui indique la classe qui devra etre utilisée pour créer l'objet qui servira à controler la conformité d'un mot-clé facteur avec sa définition - list_instance - label qui indique la nature de l'objet de définition (ici, FACT) """ class_instance = N_MCFACT.MCFACT list_instance = N_MCLIST.MCList label = 'FACT' def __init__(self,fr="",ang="",docu="",regles=(),statut='f',defaut=None, min=0,max=1,validators=None,**args): """ Un mot-clé facteur est caractérisé par les attributs suivants : - fr : - ang : - statut : - defaut : - regles - min - max - position - docu """ N_ENTITE.ENTITE.__init__(self,validators) # Initialisation des attributs self.fr=fr self.ang=ang self.docu = docu if type(regles)== types.TupleType: self.regles=regles else: self.regles=(regles,) self.statut=statut self.defaut=defaut self.min=min self.max=max self.entites=args self.position=None self.affecter_parente() def __call__(self,val,nom,parent): """ Construit la structure de donnee pour un mot cle facteur a partir de sa definition (self) de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent) Suivant le type de la valeur on retournera soit un objet de type MCFACT soit une liste de type MCLIST. La creation d un mot cle facteur depend de son statut - Si statut ='o' il est obligatoire - Si statut == 'd' il est facultatif mais ses sous mots cles avec defaut sont visibles - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne sont pas visibles - Si statut == 'c' il est cache ??? - Si defaut != None, on utilise cette valeur pour calculer la valeur par defaut du mot cle facteur """ if val is None: if self.defaut == None: val={} elif type(self.defaut) == types.TupleType: val=self.defaut # Est ce utile ? Le défaut pourrait etre uniquement un dict elif type(self.defaut) == types.DictType or isinstance(self.defaut,_F): val=self.defaut else: # On ne devrait jamais passer par la print "On ne devrait jamais passer par la" return None elif is_enum(val) and len(val) == 0 and self.statut == 'o': # On est dans le cas où le mcfact est présent mais est une liste/tuple # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés # obligatoires diront si un mcfact vide est accepté. val = {} # On cree toujours une liste de mcfact l=self.list_instance() l.init(nom = nom,parent=parent) if type(val) in (types.TupleType,types.ListType) : for v in val: if type(v) == types.DictType or isinstance(v, _F): objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent) l.append(objet) else: l.append(N_OBJECT.ErrorObj(self,v,parent,nom)) elif type(val) == types.DictType or isinstance(val, _F): objet=self.class_instance(nom=nom,definition=self,val=val,parent=parent) l.append(objet) else: l.append(N_OBJECT.ErrorObj(self,val,parent,nom)) return l def verif_cata(self): if type(self.min) != types.IntType : if self.min != '**': self.cr.fatal("L'attribut 'min' doit etre un entier : %s" %`self.min`) if type(self.max) != types.IntType : if self.max != '**': self.cr.fatal("L'attribut 'max' doit etre un entier : %s" %`self.max`) if self.min > self.max : self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`)) if type(self.fr) != types.StringType : self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" %`self.fr`) if type(self.regles) != types.TupleType : self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`) if self.statut not in ['f','o','c','d'] : self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`) if type(self.docu) != types.StringType : self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu`) if self.validators and not self.validators.verif_cata(): self.cr.fatal("Un des validateurs est incorrect. Raison : "+self.validators.cata_info) self.verif_cata_regles() eficas-6.4.0/Noyau/nommage.py0000644004705000470430000001316011667117123016327 0ustar courtoisasterdev#@ MODIF nommage Noyau DATE 25/10/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. # # 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. # # # ====================================================================== """ Ce module sert à nommer les concepts produits par les commandes. Le nom du concept est obtenu en appelant la fonction GetNomConceptResultat du module avec le nom de la commande en argument. Cette fonction parcourt le source dans lequel la commande se trouve, parse le fichier et retrouve le nom du concept qui se trouve à gauche du signe = précédant le nom de la commande. Cette fonction utilise la fonction cur_frame du module N_utils qui retourne la frame d'exécution Python située 2 niveaux au-dessus. C'est à partir de cette frame que l'on retrouve le fichier source et le numéro de ligne où se trouve l'appel à la commande. """ # Modules Python import re,string import linecache from functools import partial # Modules EFICAS import N_utils regex1='=?\s*%s\s*\(' #commentaire standard precede d'un nombre quelconque de blancs (pas multiligne) pattern_comment = re.compile(r"^\s*#.*") def _GetNomConceptResultat(ope, level=2): """ Cette fonction recherche dans la pile des appels, l'appel à la commande qui doit etre situé à 2 niveaux au-dessus (cur_frame(2)). On retrouve d'abord la frame d'exécution f. Puis le numéro de la ligne dans le source f.f_lineno et le nom du fichier source (f.f_code.co_filename). A partir de là, on récupère la ligne de source avec linecache.getline et on vérifie que cette ligne correspond véritablement à l'appel. En effet, lorsque les commandes tiennent sur plusieurs lignes, on retrouve la dernière ligne. Il faut donc remonter dans le source jusqu'à la première ligne. Enfin la fonction evalnom forme un nom acceptable lorsque le concept est un élément d'une liste, par exemple. """ f=N_utils.cur_frame(level) lineno = f.f_lineno # XXX Too bad if -O is used #lineno = f_lineno(f) # Ne marche pas toujours co = f.f_code filename = co.co_filename name = co.co_name #print "NOMOP,FICHIER, LIGNE ",ope,filename,lineno #pattern pour identifier le debut de la commande pattern_oper=re.compile(regex1 % ope) list=[] while lineno > 0: line = linecache.getline(filename, lineno) lineno=lineno-1 if pattern_comment.match(line):continue #print "LIGNE ",line list.append(line) if pattern_oper.search(line): l=pattern_oper.split(line) list.reverse() #print "COMMANDE ",string.join(list) #print "SPLIT ",l # On suppose que le concept resultat a bien ete # isole en tete de la ligne de source m=evalnom(string.strip(l[0]),f.f_locals) #print "NOMS ",m if m!=[] : return m[-1] else : return '' #print "appel inconnu" return "" def evalnom(text,d): """ Retourne un nom pour le concept resultat identifie par text Pour obtenir ce nom il y a plusieurs possibilites : 1. text est un identificateur python c'est le nom du concept 2. text est un element d'une liste on construit le nom en evaluant la partie indice dans le contexte de l'appelant d """ l=re.split('([\[\]]+)',text) #print l if l[-1] == '' :l=l[:-1] lll=[] i=0 while i stopat: break line = line + ord(tab[i+1]) return line class NamingSystem: """Cette classe définit un système de nommage dynamique des concepts.""" def __init__(self): """Initialisation""" self.native = _GetNomConceptResultat self.use_global_naming() def use_naming_function(self, function): """Utilise une fonction particulière de nommage.""" self.naming_func = function def use_global_naming(self): """Utilise la fonction native de nommage.""" self.naming_func = partial(self.native, level=3) def __call__(self, *args): """Appel à la fonction de nommage.""" return self.naming_func(*args) GetNomConceptResultat = NamingSystem() eficas-6.4.0/Noyau/N_MACRO.py0000644004705000470430000001744111655732717016041 0ustar courtoisasterdev#@ MODIF N_MACRO 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. # # 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. # # # ====================================================================== """ Ce module contient la classe de definition MACRO qui permet de spécifier les caractéristiques d'une macro-commande """ import types,string,traceback import N_ENTITE import N_MACRO_ETAPE import N_OPS import nommage class MACRO(N_ENTITE.ENTITE): """ Classe pour definir une macro-commande Cette classe a trois attributs de classe - class_instance qui indique la classe qui devra etre utilisée pour créer l'objet qui servira à controler la conformité d'un macro-commande avec sa définition - label qui indique la nature de l'objet de définition (ici, MACRO) - nommage qui est un module Python qui fournit la fonctionnalité de nommage et les attributs d'instance suivants : - nom : son nom - op : le numéro d'opérateur - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne une classe - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur réentrant peut modifier un concept d'entrée et le produire comme concept de sortie - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort de l'objet gérant le contexte d'exécution de vérifier cette contrainte. - fr : commentaire associé en francais - ang : commentaire associé en anglais - docu : clé de documentation associée - regles : liste des règles associées - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette fonction est exécutée lors des phases d'initialisation de l'étape associée. - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement. Si niveau vaut None, l'opérateur est rangé au niveau global. - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut est initialisé avec args, c'est à dire les arguments d'appel restants. """ class_instance = N_MACRO_ETAPE.MACRO_ETAPE label = 'MACRO' nommage = nommage def __init__(self,nom,op,sd_prod=None,reentrant='n',repetable='o',fr="",ang="", docu="",regles=(),op_init=None,niveau = None,fichier_ini=0,UIinfo=None,**args): """ Méthode d'initialisation de l'objet MACRO. Les arguments sont utilisés pour initialiser les attributs de meme nom """ # XXX fichier_ini n'est pas utilisé pour l'instant self.nom=nom # op est obligatoire et permet de spécifier la procédure de construction de la macro # - Si op est un entier la construction de la macro est réalisée par une subroutine fortran opsxxx ou # xxx est donné par la valeur absolue de op. L'execution est egalement effectuée via cette subroutine. # - Si op est une fonction Python, la construction de la macro est effectuée par l'appel à cette fonction # Suivant le cas on garde l info dans self.op ou dans self.proc if type(op) == types.IntType: self.proc=None self.op=op else: self.op=None self.proc=op self.sd_prod=sd_prod self.reentrant=reentrant self.fr=fr self.ang=ang self.repetable = repetable self.docu=docu if type(regles)== types.TupleType: self.regles=regles else: self.regles=(regles,) self.fichier_ini = fichier_ini # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None self.op_init=op_init self.entites = args current_cata=CONTEXT.get_current_cata() if niveau == None: self.niveau=None current_cata.enregistre(self) else: self.niveau=current_cata.get_niveau(niveau) self.niveau.enregistre(self) self.UIinfo=UIinfo self.affecter_parente() self.check_definition(self.nom) def __call__(self,reuse=None,**args): """ Construit l'objet MACRO_ETAPE a partir de sa definition (self), puis demande la construction de ses sous-objets et du concept produit. """ # Glut MC (2007-05) / Sensibilité # Précaution nécessaire pour la sensibilité (on fait 'exec' du texte d'une commande) # car on n'a pas de "ligne" à décoder pour trouver le nom du résultat (à gauche # du signe égal). Cà tombe bien, dans ce cas, sd_prod=None : pas de résultat ! if self.sd_prod != None: nomsd=self.nommage.GetNomConceptResultat(self.nom) else: nomsd = None etape= self.class_instance(oper=self,reuse=reuse,args=args) etape.McBuild() return etape.Build_sd(nomsd) def make_objet(self,mc_list='oui'): """ Cette méthode crée l'objet MACRO_ETAPE dont la définition est self sans créer sa sdprod. Normalement l'étape est enregistrée auprès de son parent. Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction des objets MCxxx. """ etape= self.class_instance(oper=self,reuse=None,args={}) if mc_list == 'oui':etape.McBuild() return etape def verif_cata(self): """ Méthode de vérification des attributs de définition """ if self.op is not None and (type(self.op) != types.IntType or self.op > 0) : self.cr.fatal("L'attribut 'op' doit etre un entier signé : %s" %`self.op`) if self.proc is not None and not isinstance(self.proc, N_OPS.OPS): self.cr.fatal("L'attribut op doit etre une instance d'OPS : %s" % `self.proc`) if type(self.regles) != types.TupleType : self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`) if type(self.fr) != types.StringType : self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" %`self.fr`) if type(self.docu) != types.StringType : self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu` ) if type(self.nom) != types.StringType : self.cr.fatal("L'attribut 'nom' doit etre une chaine de caractères : %s" %`self.nom`) if self.reentrant not in ('o','n','f'): self.cr.fatal("L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %s" %`self.reentrant`) self.verif_cata_regles() def supprime(self): """ Méthode pour supprimer les références arrières susceptibles de provoquer des cycles de références """ self.niveau=None eficas-6.4.0/Noyau/N_MCLIST.py0000644004705000470430000001703611444664426016170 0ustar courtoisasterdev#@ MODIF N_MCLIST Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe MCList qui sert à controler la valeur d'une liste de mots-clés facteur par rapport à sa définition portée par un objet de type ENTITE """ from copy import copy import UserList import types class MCList(UserList.UserList): """ Liste semblable a la liste Python mais avec quelques methodes en plus = liste de MCFACT """ nature = 'MCList' def init(self,nom,parent): self.definition = None self.nom = nom self.parent=parent if parent : self.jdc = self.parent.jdc self.niveau = self.parent.niveau self.etape = self.parent.etape else: # Le mot cle a été créé sans parent self.jdc = None self.niveau = None self.etape = None def get_valeur(self): """ Retourne la "valeur" d'un objet MCList. Sert à construire un contexte d'évaluation pour une expression Python. On retourne l'objet lui-meme. """ return self def get_val(self): """ Une autre méthode qui retourne une "autre" valeur d'une MCList Elle est utilisée par la méthode get_mocle """ return self def supprime(self): """ Méthode qui supprime toutes les références arrières afin que l'objet puisse etre correctement détruit par le garbage collector """ self.parent = None self.etape = None self.jdc = None self.niveau = None for child in self.data : child.supprime() def get_child(self,name): """ Retourne le fils de nom name s'il est contenu dans self Par défaut retourne le fils du premier de la liste """ obj = self.data[0] # Phase 1 : on cherche dans les fils directs de obj for child in obj.mc_liste : if child.nom == name: return child # Phase 2 : on cherche dans les blocs de self for child in obj.mc_liste: if child.isBLOC() : resu = child.get_child(name) if resu != None : return resu # Phase 3 : on cherche dans les entites possibles pour les défauts for k,v in obj.definition.entites.items(): #if k == name: return v.defaut if k == name: if v.defaut != None : return v(None,k,None) # si on passe ici, c'est que l'on demande un fils qui n'est pas possible --> erreur #print "Erreur : %s ne peut etre un descendant de %s" %(name,self.nom) return None def isBLOC(self): """ Indique si l'objet est de type BLOC """ return 0 def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets en utilisant le pattern VISITEUR """ visitor.visitMCList(self) def get_sd_utilisees(self): """ Retourne la liste des concepts qui sont utilisés à l'intérieur de self ( comme valorisation d'un MCS) """ l=[] for child in self.data: l.extend(child.get_sd_utilisees()) return l def get_sd_mcs_utilisees(self): """ 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, les clés du dictionnaire sont les mots-clés derrière lesquels on trouve des sd ; la valeur est la liste des sd attenante. Exemple :: { 'VALE_F': [ , ], 'MODELE': [] } """ dico = {} for child in self.data: daux = child.get_sd_mcs_utilisees() for cle in daux.keys(): dico[cle] = dico.get(cle, []) dico[cle].extend(daux[cle]) return dico def get_mcs_with_co(self,co): """ Cette methode retourne l'objet MCSIMP fils de self qui a le concept co comme valeur. En principe, elle ne doit etre utilisee que pour les concepts instances de la classe CO """ l=[] for child in self.data: l.extend(child.get_mcs_with_co(co)) return l def get_all_co(self): """ Cette methode retourne tous les concepts instances de CO """ l=[] for child in self.data: l.extend(child.get_all_co()) return l def copy(self): """ Réalise la copie d'une MCList """ liste = self.data[0].definition.list_instance() # FR -->Il faut spécifier un parent pour la méthode init qui attend 2 arguments ... liste.init(self.nom,self.parent) for objet in self: new_obj = objet.copy() # Pour etre coherent avec le constructeur de mots cles facteurs N_FACT.__call__ # dans lequel le parent de l'element d'une MCList est le parent de la MCList new_obj.reparent(self.parent) liste.append(new_obj) return liste def reparent(self,parent): """ Cette methode sert a reinitialiser la parente de l'objet """ self.parent=parent self.jdc=parent.jdc self.etape=parent.etape for mcfact in self.data: mcfact.reparent(parent) def get_etape(self): """ Retourne l'étape à laquelle appartient self Un objet de la catégorie etape doit retourner self pour indiquer que l'étape a été trouvée XXX double emploi avec self.etape ??? """ if self.parent == None: return None return self.parent.get_etape() def __getitem__(self,key): """ Dans le cas d un mot cle facteur de longueur 1 on simule un scalaire """ if type(key) != types.IntType and len(self) ==1: return self.data[0].get_mocle(key) else: return self.data[key] def List_F(self): """ Retourne une liste de dictionnaires (eventuellement singleton) qui peut etre passe directement derriere un mot-cle facteur (pour les macros). """ dresu = [] for mcf in self: dico = mcf.cree_dict_valeurs(mcf.mc_liste) for i in dico.keys(): if dico[i] == None: del dico[i] dresu.append(dico) return dresu eficas-6.4.0/Noyau/N_ENTITE.py0000644004705000470430000001233311655732717016163 0ustar courtoisasterdev#@ MODIF N_ENTITE 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. # # 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. # # # ====================================================================== """ Ce module contient la classe ENTITE qui est la classe de base de toutes les classes de definition d'EFICAS. """ import re import N_CR import N_VALIDATOR class ENTITE: """ Classe de base pour tous les objets de definition : mots cles et commandes Cette classe ne contient que des methodes utilitaires Elle ne peut etre instanciee et doit d abord etre specialisee """ CR=N_CR.CR factories={'validator':N_VALIDATOR.validatorFactory} def __init__(self,validators=None): """ Initialise les deux attributs regles et entites d'une classe derivee : pas de regles et pas de sous-entites. L'attribut regles doit contenir la liste des regles qui s'appliquent sur ses sous-entites L'attribut entites doit contenir le dictionnaires des sous-entites (cle = nom, valeur=objet) """ self.regles=() self.entites={} if validators: self.validators=self.factories['validator'](validators) else: self.validators=validators def affecter_parente(self): """ Cette methode a pour fonction de donner un nom et un pere aux sous entites qui n'ont aucun moyen pour atteindre leur parent directement Il s'agit principalement des mots cles """ for k,v in self.entites.items(): v.pere = self v.nom = k def verif_cata(self): """ Cette methode sert a valider les attributs de l'objet de definition """ raise "La methode verif_cata de la classe %s doit etre implementee" % self.__class__.__name__ def __call__(self): """ Cette methode doit retourner un objet derive de la classe OBJECT """ raise "La methode __call__ de la classe %s doit etre implementee" % self.__class__.__name__ def report(self): """ Cette methode construit pour tous les objets derives de ENTITE un rapport de validation de la definition portee par cet objet """ self.cr = self.CR() self.verif_cata() for k,v in self.entites.items() : try : cr = v.report() cr.debut = "Debut "+v.__class__.__name__+ ' : ' + k cr.fin = "Fin "+v.__class__.__name__+ ' : ' + k self.cr.add(cr) except: self.cr.fatal("Impossible d'obtenir le rapport de %s %s" %(k,`v`)) print "Impossible d'obtenir le rapport de %s %s" %(k,`v`) print "pere =",self return self.cr def verif_cata_regles(self): """ Cette methode verifie pour tous les objets derives de ENTITE que les objets REGLES associes ne portent que sur des sous-entites existantes """ for regle in self.regles : l=[] for mc in regle.mcs : if not self.entites.has_key(mc) : l.append(mc) if l != [] : txt = str(regle) self.cr.fatal("Argument(s) non permis : %s pour la regle : %s" %(`l`,txt)) def check_definition(self, parent): """Verifie la definition d'un objet composite (commande, fact, bloc).""" args = self.entites.copy() mcs = set() for nom, val in args.items(): if val.label == 'SIMP': mcs.add(nom) #XXX #if val.max != 1 and val.type == 'TXM': #print "#CMD", parent, nom elif val.label == 'FACT': val.check_definition(parent) #PNPNPN surcharge # CALC_SPEC ! #assert self.label != 'FACT', \ # 'Commande %s : Mot-clef facteur present sous un mot-clef facteur : interdit !' \ # % parent else: continue del args[nom] # seuls les blocs peuvent entrer en conflit avec les mcs du plus haut niveau for nom, val in args.items(): if val.label == 'BLOC': mcbloc = val.check_definition(parent) #XXX #print "#BLOC", parent, re.sub('\s+', ' ', val.condition) #assert mcs.isdisjoint(mcbloc), "Commande %s : Mot(s)-clef(s) vu(s) plusieurs fois : %s" \ # % (parent, tuple(mcs.intersection(mcbloc))) return mcs eficas-6.4.0/Noyau/__init__.py0000644004705000470430000000355611667117123016453 0ustar courtoisasterdev#@ MODIF __init__ Noyau DATE 12/10/2011 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # 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. # # 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. # # # ====================================================================== """ Ce package fournit les classes de base d'EFICAS. Ces classes permettent d'effectuer quelques opérations basiques : - la création - la vérification des définitions - la création d'objets de type OBJECT à partir d'une définition de type ENTITE """ # Avant toutes choses, on met le module context dans le global de l'interpreteur (__builtin__) # sous le nom CONTEXT afin d'avoir accès aux fonctions # get_current_step, set_current_step et unset_current_step de n'importe où import context import __builtin__ __builtin__.CONTEXT=context def _(msg): """Differs translation.""" # 'codex' should install its translation functions later return msg __builtin__._ = _ # Classes de base from N_SIMP import SIMP from N_FACT import FACT # structures de données import asojb from asojb import AsBase eficas-6.4.0/Noyau/N_types.py0000644004705000470430000000455711655732717016350 0ustar courtoisasterdev#@ MODIF N_types Noyau DATE 28/06/2011 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # 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. # # 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. # ====================================================================== # RESPONSABLE COURTOIS M.COURTOIS """ Ce module contient des fonctions utilitaires pour tester les types """ # use isinstance() instead of type() because objects returned from numpy arrays # inherit from python scalars but are numpy.float64 or numpy.int32... def is_int(obj): return isinstance(obj, int) or type(obj) is long def is_float(obj): return isinstance(obj, float) def is_complex(obj): return isinstance(obj, complex) def is_float_or_int(obj): return is_float(obj) or is_int(obj) def is_number(obj): return is_float_or_int(obj) or is_complex(obj) def is_str(obj): return type(obj) in (str, unicode) def is_list(obj): return type(obj) is list def is_tuple(obj): return type(obj) is tuple def is_enum(obj): return is_list(obj) or is_tuple(obj) def is_assd(obj): from N_ASSD import ASSD return isinstance(obj, ASSD) def force_list(obj): """Retourne `obj` si c'est une liste ou un tuple, sinon retourne [obj,] (en tant que list). """ if not is_enum(obj): obj = [obj,] return list(obj) eficas-6.4.0/Noyau/N_MACRO_ETAPE.py0000644004705000470430000007411611667117123016750 0ustar courtoisasterdev#@ MODIF N_MACRO_ETAPE Noyau DATE 07/11/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. # # 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. # # # ====================================================================== """ Ce module contient la classe MACRO_ETAPE qui sert à vérifier et à exécuter une commande """ # Modules Python import types,sys,string import traceback # Modules EFICAS import N_MCCOMPO import N_ETAPE from N_Exception import AsException import N_utils from N_utils import AsType from N_CO import CO from N_ASSD import ASSD from N_info import message, SUPERV class MACRO_ETAPE(N_ETAPE.ETAPE): """ """ nature = "COMMANDE" typeCO=CO def __init__(self,oper=None,reuse=None,args={}): """ Attributs : - definition : objet portant les attributs de définition d'une étape de type macro-commande. Il est initialisé par l'argument oper. - reuse : indique le concept d'entrée réutilisé. Il se trouvera donc en sortie si les conditions d'exécution de l'opérateur l'autorise - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé avec l'argument args. """ self.definition = oper self.reuse = reuse self.valeur = args self.nettoiargs() self.parent = CONTEXT.get_current_step() self.etape = self self.nom = oper.nom self.idracine = oper.label self.appel = N_utils.callee_where() self.mc_globaux = {} self.g_context = {} # Contexte courant self.current_context = {} self.macro_const_context = {} self.index_etape_courante = 0 self.etapes = [] self.index_etapes = {} self.sds = [] # Dans le cas d'une macro écrite en Python, l'attribut Outputs est un # dictionnaire qui contient les concepts produits de sortie # (nom : ASSD) déclarés dans la fonction sd_prod self.Outputs = {} self.sd = None self.actif = 1 self.sdprods = [] self.make_register() self.UserError = "UserError" def make_register(self): """ Initialise les attributs jdc, id, niveau et réalise les enregistrements nécessaires """ if self.parent : self.jdc = self.parent.get_jdc_root() self.id=self.parent.register(self) self.niveau=None self.UserError=self.jdc.UserError else: self.jdc = self.parent =None self.id=None self.niveau=None self.UserError="UserError" def Build_sd(self,nom): """ Construit le concept produit de l'opérateur. Deux cas peuvent se présenter : - le parent n'est pas défini. Dans ce cas, l'étape prend en charge la création et le nommage du concept. - le parent est défini. Dans ce cas, l'étape demande au parent la création et le nommage du concept. """ message.debug(SUPERV, "Build_sd %s", self.nom) self.sdnom=nom try: # On positionne la macro self en tant que current_step pour que les # étapes créées lors de l'appel à sd_prod et à op_init aient la macro # comme parent self.set_current_step() if self.parent: sd= self.parent.create_sdprod(self,nom) if type(self.definition.op_init) == types.FunctionType: apply(self.definition.op_init,(self,self.parent.g_context)) else: sd=self.get_sd_prod() if sd != None and self.reuse == None: # On ne nomme le concept que dans le cas de non reutilisation # d un concept sd.set_name(nom) self.reset_current_step() except AsException,e: self.reset_current_step() raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], 'fichier : ',self.appel[1],e) except (EOFError, self.UserError): # Le retablissement du step courant n'est pas strictement necessaire. On le fait pour des raisons de coherence self.reset_current_step() raise except : self.reset_current_step() l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], 'fichier : ',self.appel[1]+'\n', string.join(l)) self.Execute() return sd def mark_CO(self): """ Marquage des concepts CO d'une macro-commande """ # On marque les concepts CO pour verification ulterieure de leur bonne utilisation l=self.get_all_co() for c in l: #if not hasattr(c,"_etape") or c._etape is not c.etape: c._etape=self return l def get_sd_prod(self): """ Retourne le concept résultat d'une macro étape La difference avec une etape ou une proc-etape tient a ce que le concept produit peut exister ou pas Si sd_prod == None le concept produit n existe pas on retourne None Deux cas : - cas 1 : sd_prod n'est pas une fonction il s'agit d'une sous classe de ASSD on construit le sd à partir de cette classe et on le retourne - cas 2 : sd_prod est une fonction on l'évalue avec les mots-clés de l'étape (mc_liste) on construit le sd à partir de la classe obtenue et on le retourne """ sd_prod=self.definition.sd_prod self.typret=None # On marque les concepts CO pour verification ulterieure de leur bonne utilisation self.mark_CO() if type(self.definition.sd_prod) == types.FunctionType: d=self.cree_dict_valeurs(self.mc_liste) try: # la sd_prod d'une macro a l'objet macro_etape lui meme en premier argument # Comme sd_prod peut invoquer la méthode type_sdprod qui ajoute # les concepts produits dans self.sdprods, il faut le mettre à zéro avant de l'appeler self.sdprods=[] sd_prod= apply(sd_prod,(self,),d) except (EOFError, self.UserError), exc: raise except: if CONTEXT.debug: traceback.print_exc() l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) raise AsException("impossible d affecter un type au resultat\n",string.join(l[2:])) # on teste maintenant si la SD est réutilisée ou s'il faut la créer if self.definition.reentrant != 'n' and self.reuse: # Le concept produit est specifie reutilise (reuse=xxx). C'est une erreur mais non fatale. # Elle sera traitee ulterieurement. self.sd=self.reuse else: if sd_prod == None: self.sd=None else: self.sd= sd_prod(etape=self) self.typret=sd_prod # Si la commande est obligatoirement reentrante et reuse n'a pas ete specifie, c'est une erreur. # On ne fait rien ici. L'erreur sera traitee par la suite. # précaution if self.sd is not None and not isinstance(self.sd, ASSD): raise AsException(""" Impossible de typer le résultat ! Causes possibles : Utilisateur : Soit la valeur fournie derrière "reuse" est incorrecte, soit il y a une "," à la fin d'une commande précédente. Développeur : La fonction "sd_prod" retourne un type invalide.""") return self.sd def get_type_produit(self,force=0): try: return self.get_type_produit_brut(force) except: #traceback.print_exc() return None def get_type_produit_brut(self,force=0): """ Retourne le type du concept résultat de l'étape et eventuellement type les concepts produits "à droite" du signe égal (en entrée) Deux cas : - cas 1 : sd_prod de oper n'est pas une fonction il s'agit d'une sous classe de ASSD on retourne le nom de la classe - cas 2 : il s'agit d'une fonction on l'évalue avec les mots-clés de l'étape (mc_liste) et on retourne son résultat """ if not force and hasattr(self,'typret'): return self.typret # On marque les concepts CO pour verification ulterieure de leur bonne utilisation self.mark_CO() if type(self.definition.sd_prod) == types.FunctionType: d=self.cree_dict_valeurs(self.mc_liste) # Comme sd_prod peut invoquer la méthode type_sdprod qui ajoute # les concepts produits dans self.sdprods, il faut le mettre à zéro self.sdprods=[] sd_prod= apply(self.definition.sd_prod,(self,),d) else: sd_prod=self.definition.sd_prod return sd_prod def get_contexte_avant(self,etape): """ Retourne le dictionnaire des concepts connus avant etape pour les commandes internes a la macro On tient compte des commandes qui modifient le contexte comme DETRUIRE ou les macros """ # L'étape courante pour laquelle le contexte a été calculé est # mémorisée dans self.index_etape_courante # Si on insère des commandes (par ex, dans EFICAS), il faut # préalablement remettre ce pointeur à 0 if etape: index_etape = self.index_etapes[etape] else: index_etape=len(self.etapes) if index_etape >= self.index_etape_courante: # On calcule le contexte en partant du contexte existant d=self.current_context liste_etapes=self.etapes[self.index_etape_courante:index_etape] else: d=self.current_context={} liste_etapes=self.etapes for e in liste_etapes: if e is etape: break if e.isactif(): e.update_context(d) self.index_etape_courante=index_etape message.debug(SUPERV, "returns %s", d.keys()) return d def supprime(self): """ Méthode qui supprime toutes les références arrières afin que l'objet puisse etre correctement détruit par le garbage collector """ N_MCCOMPO.MCCOMPO.supprime(self) self.jdc=None self.appel=None if self.sd : self.sd.supprime() for concept in self.sdprods: concept.supprime() for etape in self.etapes: etape.supprime() def type_sdprod(self,co,t): """ Cette methode a pour fonction de typer le concept co avec le type t dans les conditions suivantes : 1. co est un concept produit de self 2. co est un concept libre : on le type et on l attribue à self Elle enregistre egalement les concepts produits (on fait l hypothese que la liste sdprods a été correctement initialisee, vide probablement) """ if not hasattr(co,'etape'): # Le concept vaut None probablement. On ignore l'appel return # # On cherche a discriminer les differents cas de typage d'un concept # produit par une macro qui est specifie dans un mot cle simple. # On peut passer plusieurs fois par type_sdprod ce qui explique # le nombre important de cas. # # Cas 1 : Le concept est libre. Il vient d'etre cree par CO(nom) # Cas 2 : Le concept est produit par la macro. On est deja passe par type_sdprod. # Cas semblable a Cas 1. # Cas 3 : Le concept est produit par la macro englobante (parent). On transfere # la propriete du concept de la macro parent a la macro courante (self) # en verifiant que le type est valide # Cas 4 : La concept est la propriete d'une etape fille. Ceci veut dire qu'on est # deja passe par type_sdprod et que la propriete a ete transfere a une # etape fille. Cas semblable a Cas 3. # Cas 5 : Le concept est produit par une etape externe a la macro. # if co.etape == None: # Cas 1 : le concept est libre # On l'attache a la macro et on change son type dans le type demande # Recherche du mot cle simple associe au concept mcs=self.get_mcs_with_co(co) if len(mcs) != 1: raise AsException("""Erreur interne. Il ne devrait y avoir qu'un seul mot cle porteur du concept CO (%s)""" % co) mcs=mcs[0] if not self.typeCO in mcs.definition.type: raise AsException("""Erreur interne. Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pas CO mais seulement (%s)""" %(co,mcs.definition.type)) co.etape = self # affectation du bon type du concept et co.change_type(t) self.sdprods.append(co) elif co.etape == self: # Cas 2 : le concept est produit par la macro (self) # On est deja passe par type_sdprod (Cas 1 ou 3). if co.etape == co._etape: #Le concept a été créé par la macro (self) #On peut changer son type co.change_type(t) else: #Le concept a été créé par une macro parente # Le type du concept doit etre coherent avec le type demande (seulement derive) if not isinstance(co,t): raise AsException("""Erreur interne. Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co.__class__)) self.sdprods.append(co) elif co.etape== self.parent: # Cas 3 : le concept est produit par la macro parente (self.parent) # on transfere la propriete du concept a la macro fille # et on change le type du concept comme demande # Au prealable, on verifie que le concept existant (co) est une instance # possible du type demande (t) # Cette règle est normalement cohérente avec les règles de vérification des mots-clés if not isinstance(co,t): raise AsException(""" Impossible de changer le type du concept produit (%s) en (%s). Le type actuel (%s) devrait etre une classe derivee du nouveau type (%s)""" % (co,t,co.__class__,t)) mcs=self.get_mcs_with_co(co) if len(mcs) != 1: raise AsException("""Erreur interne. Il ne devrait y avoir qu'un seul mot cle porteur du concept CO (%s)""" % co) mcs=mcs[0] if not self.typeCO in mcs.definition.type: raise AsException("""Erreur interne. Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pas CO mais seulement (%s)""" %(co,mcs.definition.type)) co.etape=self # On ne change pas le type car il respecte la condition isinstance(co,t) #co.__class__ = t self.sdprods.append(co) elif self.issubstep(co.etape): # Cas 4 : Le concept est propriété d'une sous etape de la macro (self). # On est deja passe par type_sdprod (Cas 3 ou 1). # Il suffit de le mettre dans la liste des concepts produits (self.sdprods) # Le type du concept et t doivent etre derives. # Il n'y a aucune raison pour que la condition ne soit pas verifiee. if not isinstance(co,t): raise AsException("""Erreur interne. Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co.__class__)) self.sdprods.append(co) else: # Cas 5 : le concept est produit par une autre étape # On ne fait rien return def issubstep(self,etape): """ Cette methode retourne un entier indiquant si etape est une sous etape de la macro self ou non 1 = oui 0 = non """ if etape in self.etapes:return 1 for etap in self.etapes: if etap.issubstep(etape):return 1 return 0 def register(self,etape): """ Enregistrement de etape dans le contexte de la macro : liste etapes et demande d enregistrement global aupres du JDC """ self.etapes.append(etape) self.index_etapes[etape] = len(self.etapes) - 1 idetape=self.jdc.g_register(etape) return idetape def reg_sd(self,sd): """ Methode appelee dans l __init__ d un ASSD a sa creation pour s enregistrer (reserve aux ASSD créés au sein d'une MACRO) """ self.sds.append(sd) return self.jdc.o_register(sd) def create_sdprod(self,etape,nomsd): """ Cette methode doit fabriquer le concept produit retourne par l'etape etape et le nommer. Elle est appelée à l'initiative de l'etape pendant le processus de construction de cette etape : methode __call__ de la classe CMD (OPER ou MACRO) Ce travail est réalisé par le contexte supérieur (etape.parent) car dans certains cas, le concept ne doit pas etre fabriqué mais l'etape doit simplement utiliser un concept préexistant. - Cas 1 : etape.reuse != None : le concept est réutilisé - Cas 2 : l'étape appartient à une macro qui a déclaré un concept de sortie qui doit etre produit par cette etape. """ if self.Outputs.has_key(nomsd): # Il s'agit d'un concept de sortie de la macro. Il ne faut pas le créer # Il faut quand meme appeler la fonction sd_prod si elle existe. # get_type_produit le fait et donne le type attendu par la commande pour verification ultérieure. sdprod=etape.get_type_produit_brut() sd=self.Outputs[nomsd] # On verifie que le type du concept existant sd.__class__ est un sur type de celui attendu # Cette règle est normalement cohérente avec les règles de vérification des mots-clés if not issubclass(sdprod,sd.__class__): raise AsException("Le type du concept produit %s devrait etre une sur classe de %s" %(sd.__class__,sdprod)) # La propriete du concept est transferee a l'etape avec le type attendu par l'étape etape.sd=sd sd.etape=etape if self.reuse == sd and etape.reuse != sd \ and getattr(sd, "executed", 0) == 1: # n'a pas été pas détruit raise AsException("Le concept '%s' est réentrant dans la macro-commande %s. " \ "Il devrait donc l'être dans %s (produit sous le nom '%s')." \ % (sd.nom, self.nom, etape.nom, nomsd)) # On donne au concept le type produit par la sous commande. # Le principe est le suivant : apres avoir verifie que le type deduit par la sous commande # est bien coherent avec celui initialement affecte par la macro (voir ci dessus) # on affecte au concept ce type car il peut etre plus precis (derive, en general) sd.__class__=sdprod # On force également le nom stocké dans l'attribut sdnom : on lui donne le nom # du concept associé à nomsd etape.sdnom=sd.nom elif etape.definition.reentrant != 'n' and etape.reuse != None: # On est dans le cas d'une commande avec reutilisation d'un concept existant # get_sd_prod fait le necessaire : verifications, associations, etc. mais ne cree # pas un nouveau concept. Il retourne le concept reutilise sd= etape.get_sd_prod() # Dans le cas d'un concept nomme automatiquement : _xxx, __xxx, # On force le nom stocke dans l'attribut sdnom de l'objet etape : on lui donne le nom # du concept reutilise (sd ou etape.reuse c'est pareil) # Ceci est indispensable pour eviter des erreurs lors des verifications des macros # En effet une commande avec reutilisation d'un concept verifie que le nom de # la variable a gauche du signe = est le meme que celui du concept reutilise. # Lorsqu'une telle commande apparait dans une macro, on supprime cette verification. if (etape.sdnom == '' or etape.sdnom[0] == '_'): etape.sdnom=sd.nom else: # On est dans le cas de la creation d'un nouveau concept sd= etape.get_sd_prod() if sd != None : self.NommerSdprod(sd,nomsd) return sd def NommerSdprod(self,sd,sdnom,restrict='non'): """ Cette methode est appelee par les etapes internes de la macro La macro appelle le JDC pour valider le nommage On considere que l espace de nom est unique et géré par le JDC Si le nom est deja utilise, l appel leve une exception Si restrict=='non', on insere le concept dans le contexte de la macro Si restrict=='oui', on n'insere pas le concept dans le contexte de la macro """ # Normalement, lorsqu'on appelle cette methode, on ne veut nommer que des concepts nouvellement crees. # Le filtrage sur les concepts a creer ou a ne pas creer est fait dans la methode # create_sdprod. La seule chose a verifier apres conversion eventuelle du nom # est de verifier que le nom n'est pas deja attribue. Ceci est fait en delegant # au JDC par l'intermediaire du parent. #XXX attention inconsistence : gcncon n'est pas # défini dans le package Noyau. La methode NommerSdprod pour # les macros devrait peut etre etre déplacée dans Build ??? if self.Outputs.has_key(sdnom): # Il s'agit d'un concept de sortie de la macro produit par une sous commande sdnom=self.Outputs[sdnom].nom elif sdnom != '' and sdnom[0] == '_': # Si le nom du concept commence par le caractere _ on lui attribue # un identificateur JEVEUX construit par gcncon et respectant # la regle gcncon legerement adaptee ici # nom commencant par __ : il s'agit de concepts qui seront detruits # nom commencant par _ : il s'agit de concepts intermediaires qui seront gardes # ATTENTION : il faut traiter différemment les concepts dont le nom # commence par _ mais qui sont des concepts nommés automatiquement par # une éventuelle sous macro. # Le test suivant n'est pas tres rigoureux mais permet de fonctionner pour le moment (a améliorer) if sdnom[1] in string.digits: # Ce concept provient probablement d'une macro appelee par self pass elif sdnom[1] == '_': sdnom=self.gcncon('.') else: sdnom=self.gcncon('_') else: # On est dans le cas d'un nom de concept global. pass if restrict == 'non': # On demande le nommage au parent mais sans ajout du concept dans le contexte du parent # car on va l'ajouter dans le contexte de la macro self.parent.NommerSdprod(sd,sdnom,restrict='oui') # On ajoute dans le contexte de la macro les concepts nommes # Ceci est indispensable pour les CO (macro) dans un INCLUDE self.g_context[sdnom]=sd message.debug(SUPERV, "g_context[%s] = %s", sdnom, sd) else: # La demande de nommage vient probablement d'une macro qui a mis # le concept dans son contexte. On ne traite plus que le nommage (restrict="oui") self.parent.NommerSdprod(sd,sdnom,restrict='oui') def delete_concept_after_etape(self,etape,sd): """ Met à jour les étapes de la MACRO qui sont après etape suite à la disparition du concept sd """ # Cette methode est définie dans le noyau mais ne sert que pendant la phase de creation # des etapes et des concepts. Il n'y a aucun traitement particulier à réaliser # Dans d'autres conditions, il faudrait surcharger cette méthode. return def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets en utilisant le pattern VISITEUR """ visitor.visitMACRO_ETAPE(self) def update_context(self,d): """ Met à jour le contexte contenu dans le dictionnaire d Une MACRO_ETAPE peut ajouter plusieurs concepts dans le contexte Une fonction enregistree dans op_init peut egalement modifier le contexte """ if type(self.definition.op_init) == types.FunctionType: apply(self.definition.op_init,(self,d)) if self.sd != None:d[self.sd.nom]=self.sd for co in self.sdprods: d[co.nom]=co def make_include(self,unite=None): """ Inclut un fichier dont l'unite logique est unite """ if not unite : return f,text=self.get_file(unite=unite,fic_origine=self.parent.nom) self.fichier_init = f if f == None:return self.make_contexte(f,text) def make_poursuite(self): """ Inclut un fichier poursuite """ try: f,text=self.get_file(fic_origine=self.parent.nom) except: raise AsException("Impossible d'ouvrir la base pour une poursuite") self.fichier_init=f if f == None:return self.make_contexte(f,text) def make_contexte(self,f,text): """ Interprete le texte fourni (text) issu du fichier f dans le contexte du parent. Cette methode est utile pour le fonctionnement des INCLUDE """ # on execute le texte fourni dans le contexte forme par # le contexte de l etape pere (global au sens Python) # et le contexte de l etape (local au sens Python) code = compile(text,f,'exec') d = self.macro_const_context self.g_context = d self.contexte_fichier_init = d globs = self.get_global_contexte() exec code in globs, d # pour ne pas conserver des références sur tout self.macro_const_context = {} def get_global_contexte(self): """ Cette methode retourne le contexte global fourni par le parent(self) a une etape fille (l'appelant) pour realiser des evaluations de texte Python (INCLUDE,...) """ # Le contexte global est forme par concatenation du contexte # du parent de self et de celui de l'etape elle meme (self) d=self.parent.get_global_contexte() d.update(self.g_context) # en PAR_LOT='OUI', les concepts n'étant pas dans jdc.g_context, # on demande au parent le contexte courant. d.update(self.parent.get_contexte_avant(self)) return d def get_contexte_courant(self, etape_fille_du_jdc=None): """ Retourne le contexte tel qu'il est au moment de l'exécution de l'étape courante. """ ctx = {} # update car par ricochet on modifierait jdc.current_context ctx.update( self.parent.get_contexte_courant(self) ) # on peut mettre None car toujours en PAR_LOT='NON', donc la dernière ctx.update( self.get_contexte_avant(None) ) return ctx def get_concept(self, nomsd): """ Méthode pour recuperer un concept à partir de son nom dans le contexte du jdc connu avant l'exécution de la macro courante. """ # chercher dans self.get_contexte_avant, puis si non trouve # self.parent.get_concept est peut-etre plus performant return self.get_contexte_courant().get(nomsd.strip(), None) def copy(self): """ Méthode qui retourne une copie de self non enregistrée auprès du JDC et sans sd On surcharge la methode de ETAPE pour exprimer que les concepts crees par la MACRO d'origine ne sont pas crees par la copie mais eventuellement seulement utilises """ etape=N_ETAPE.ETAPE.copy(self) etape.sdprods=[] return etape def copy_intern(self,etape): """ Cette méthode effectue la recopie des etapes internes d'une macro passée en argument (etape) """ self.etapes=[] self.index_etapes={} for etp in etape.etapes: new_etp=etp.copy() new_etp.copy_reuse(etp) new_etp.copy_sdnom(etp) new_etp.reparent(self) if etp.sd: new_sd = etp.sd.__class__(etape=new_etp) new_etp.sd = new_sd if etp.reuse: new_sd.set_name(etp.sd.nom) else: self.NommerSdprod(new_sd,etp.sd.nom) new_etp.copy_intern(etp) self.etapes.append(new_etp) self.index_etapes[new_etp] = len(self.etapes) - 1 def reset_jdc(self,new_jdc): """ Reinitialise l'etape avec un nouveau jdc parent new_jdc """ if self.sd and self.reuse == None : self.parent.NommerSdprod(self.sd,self.sd.nom) for concept in self.sdprods: self.parent.NommerSdprod(concept,concept.nom) def reparent(self,parent): """ Cette methode sert a reinitialiser la parente de l'objet """ N_ETAPE.ETAPE.reparent(self,parent) #on ne change pas la parenté des concepts. On s'assure uniquement que le jdc en référence est le bon for concept in self.sdprods: concept.jdc=self.jdc for e in self.etapes: e.reparent(self) def update_const_context(self, d): """ Met à jour le contexte des constantes pour l'évaluation de formules dans la macro. """ # Dans le jdc, const_context est mis à jour par exec_compile # Dans la macro, on n'a pas le code à compiler pour récupèrer les # constantes locales à la macro. On demande donc explicitement de # définir les constantes "locales". self.macro_const_context.update(d) def sd_accessible(self): """On peut acceder aux "valeurs" (jeveux) des ASSD dans les macro-commandes qui sont localement en PAR_LOT="NON" sauf pour INCLUDE. """ if CONTEXT.debug: print ' `- MACRO sd_accessible :', self.nom return self.parent.sd_accessible() or not self.is_include() eficas-6.4.0/Noyau/N_LASSD.py0000644004705000470430000000250610321425237016023 0ustar courtoisasterdev#@ MODIF N_ASSD Noyau DATE 22/02/2005 AUTEUR DURAND C.DURAND # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== from N_ASSD import ASSD class LASSD(ASSD,list):pass eficas-6.4.0/Noyau/N_ASSD_NonAster.py0000644004705000470430000001064611444664426017540 0ustar courtoisasterdev#@ MODIF N_ASSD Noyau DATE 02/06/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ """ class ASSD(object): """ Classe de base pour definir des types de structures de donnees ASTER equivalent d un concept ASTER """ idracine="SD" def __init__(self,etape=None,sd=None,reg='oui'): """ reg est un paramètre qui vaut oui ou non : - si oui (défaut) : on enregistre la SD auprès du JDC - si non : on ne l'enregistre pas """ self.etape=etape self.sd=sd self.nom=None if etape: self.parent=etape.parent else: self.parent=CONTEXT.get_current_step() if self.parent : self.jdc = self.parent.get_jdc_root() else: self.jdc = None if not self.parent: self.id=None elif reg == 'oui' : self.id = self.parent.reg_sd(self) else : self.id = self.parent.o_register(self) # permet de savoir si le concept a été calculé (1) ou non (0) self.executed = 0 # initialise la partie "sd" super(ASSD, self).__init__(nomj='?&?&?&?&') def __getitem__(self,key): return self.etape[key] def set_name(self, nom): """Positionne le nom de self (et appelle sd_init) """ self.nom = nom # test car FORMULE n'a pas de SD associée meth = getattr(super(ASSD, self), 'set_name', None) if meth: meth(nom) def reparent_sd(self): """Repositionne le parent des attributs de la SD associée. """ # test car FORMULE n'a pas de SD associée meth = getattr(super(ASSD, self), 'reparent', None) if meth: meth(None, None) def get_name(self): """ Retourne le nom de self, éventuellement en le demandant au JDC """ if not self.nom : try: self.nom=self.parent.get_name(self) or self.id except: self.nom="" if self.nom.find('sansnom') != -1 or self.nom == '': self.nom = self.id return self.nom def supprime(self): """ Cassage des boucles de références pour destruction du JDC """ self.etape = None self.sd = None self.jdc = None self.parent = None def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets en utilisant le pattern VISITEUR """ visitor.visitASSD(self) def __getstate__(self): """ Cette methode permet de pickler les objets ASSD Ceci est possible car on coupe les liens avec les objets parent, etape et jdc qui conduiraient à pickler de nombreux objets inutiles ou non picklables. """ d=self.__dict__.copy() for key in ('parent','etape','jdc'): if d.has_key(key):del d[key] for key in d.keys(): if key[0]=='_':del d[key] return d def par_lot(self): """ Retourne True si l'ASSD est créée en mode PAR_LOT='OUI'. """ if not hasattr(self, 'jdc') or self.jdc == None: val = None else: val = self.jdc.par_lot return val == 'OUI' class assd(ASSD): def __convert__(cls,valeur): return valeur __convert__=classmethod(__convert__) eficas-6.4.0/Noyau/N_JDC_CATA.py0000644004705000470430000001132711444664426016362 0ustar courtoisasterdev#@ MODIF N_JDC_CATA Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe de definition JDC_CATA qui permet de spécifier les caractéristiques d'un JDC """ import types,string,traceback import N_ENTITE import N_JDC class JDC_CATA(N_ENTITE.ENTITE): """ Classe pour definir un jeu de commandes Attributs de classe : - class_instance qui indique la classe qui devra etre utilisée pour créer l'objet qui servira à controler la conformité du jeu de commandes avec sa définition - label qui indique la nature de l'objet de définition (ici, JDC) """ class_instance = N_JDC.JDC label = 'JDC' def __init__(self,code='',execmodul=None,regles=(),niveaux=(),**args): """ """ self.code = code self.execmodul=execmodul if type(regles)== types.TupleType: self.regles = regles else: self.regles=(regles,) # Tous les arguments supplémentaires sont stockés dans l'attribut args # et seront passés au JDC pour initialiser ses paramètres propres self.args=args self.d_niveaux={} self.l_niveaux=niveaux self.commandes=[] for niveau in niveaux: self.d_niveaux[niveau.nom]=niveau # On change d'objet catalogue. Il faut d'abord mettre le catalogue # courant à None CONTEXT.unset_current_cata() CONTEXT.set_current_cata(self) def __call__(self,procedure=None,cata=None,cata_ord_dico=None, nom='SansNom',parent=None,**args): """ Construit l'objet JDC a partir de sa definition (self), """ return self.class_instance(definition=self,procedure=procedure, cata=cata,cata_ord_dico=cata_ord_dico, nom=nom, parent=parent, **args ) def enregistre(self,commande): """ Methode qui permet aux definitions de commandes de s'enregistrer aupres d'un JDC_CATA """ self.commandes.append(commande) def verif_cata(self): """ Méthode de vérification des attributs de définition """ if type(self.regles) != types.TupleType : self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`) self.verif_cata_regles() def verif_cata_regles(self): """ Cette méthode vérifie pour tous les objets stockés dans la liste entités respectent les REGLES associés à self """ # A FAIRE def report(self): """ Methode pour produire un compte-rendu de validation d'un catalogue de commandes """ self.cr = self.CR(debut = "Compte-rendu de validation du catalogue "+self.code, fin = "Fin Compte-rendu de validation du catalogue "+self.code) self.verif_cata() for commande in self.commandes: cr = commande.report() cr.debut = "Début Commande :"+commande.nom cr.fin = "Fin commande :"+commande.nom self.cr.add(cr) return self.cr def supprime(self): """ Méthode pour supprimer les références arrières susceptibles de provoquer des cycles de références """ for commande in self.commandes: commande.supprime() def get_niveau(self,nom_niveau): """ Retourne l'objet de type NIVEAU de nom nom_niveau ou None s'il n'existe pas """ return self.d_niveaux.get(nom_niveau,None) eficas-6.4.0/Noyau/basetype.py0000644004705000470430000001376611655732717016545 0ustar courtoisasterdev#@ MODIF basetype Noyau DATE 28/06/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. # # 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. # ====================================================================== """ Description des types de base aster ----------------------------------- version 2 - réécrite pour essayer de simplifier le problème des instances/types et instances/instances. Le type de base `Type` permet de représenter une structure de donnée. Une instance de `Type` comme attribut d'une classe dérivée de `Type` représente une sous-structure nommée. Une instance de `Type` 'libre' représente une instance de la structure de donnée complète. C'est ce comportement qui est capturé dans la classe BaseType La classe `Type` hérite de BaseType et y associe la métaclasse MetaType. """ import cPickle __docformat__ = "restructuredtext" class MetaType(type): """Métaclasse d'un type représentant une structure de données. Les méthodes spéciales __new__ et __call__ sont réimplémentées """ def __new__( mcs, name, bases, classdict ): """Création d'une nouvelle 'classe' dérivant de Type. Cette méthode permet de calculer certains attributs automatiquement: - L'attribut _subtypes qui contient la liste des sous-structures de type 'Type' attributs (directs ou hérités) de cette classe. Pour chaque attribut de classe héritant de Type, on recrée une nouvelle instance des attributs hérités pour pouvoir maintenir une structure de parentée entre l'attribut de classe et sa nouvelle classe. L'effet obtenu est que tous les attributs de classe ou des classes parentes de cette classe sont des attributs associés à la classe feuille. Ces attributs ont eux-meme un attribut parent qui pointe sur la classe qui les contient. """ new_cls = type.__new__( mcs, name, bases, classdict ) new_cls._subtypes = [] for b in bases: if hasattr(b,'_subtypes'): new_cls._subtypes += b._subtypes # affecte la classe comme parent des attributs de classe # et donne l'occasion aux attributs de se renommer à partir # du nom utilisé. for k, v in classdict.items(): if not isinstance( v, BaseType ): continue v.reparent( new_cls, k ) new_cls._subtypes.append( k ) return new_cls def dup_attr(cls, inst): """Duplique les attributs de la classe `cls` pour qu'ils deviennent des attributs de l'instance `inst`. """ # reinstantiate and reparent subtypes for nam in cls._subtypes: obj = getattr( cls, nam ) # permet de dupliquer completement l'instance cpy = cPickle.dumps(obj) newobj = cPickle.loads( cpy ) newobj.reparent( inst, None ) setattr( inst, nam, newobj ) def __call__(cls, *args, **kwargs): """Instanciation d'un Type structuré. Lors de l'instanciation on effectue un travail similaire à la création de classe: Les attributs sont re-parentés à l'instance et réinstanciés pour obtenir une instanciation de toute la structure et de ses sous-structures. Les attributs de classe deviennent des attributs d'instance. """ inst = cls.__new__(cls, *args, **kwargs) # reinstantiate and reparent subtypes cls.dup_attr( inst ) type(inst).__init__(inst, *args, **kwargs) return inst def mymethod(cls): pass class BaseType(object): # Le parent de la structure pour les sous-structures _parent = None _name = None def __init__(self, *args, **kwargs): self._initargs = args self._initkwargs = kwargs self._name = None self._parent = None def reparent( self, parent, new_name ): self._parent = parent self._name = new_name for nam in self._subtypes: obj = getattr( self, nam ) obj.reparent( self, nam ) def supprime(self, delete=False): """Permet de casser les boucles de références pour que les ASSD puissent être détruites. Si `delete` vaut True, on supprime l'objet lui-même et pas seulement les références remontantes.""" self._parent = None self._name = None for nam in self._subtypes: obj = getattr(self, nam) obj.supprime(delete) #XXX MC : avec ce code, j'ai l'impression qu'on supprime aussi # des attributs de classe, ce qui pose problème pour une # instanciation future... # Dans une version précédente, on utilisait l'attribut # sd_deleted pour ne faire qu'une fois, à voir. # Supprimer les références remontantes devrait suffir. #if delete: #while len(self._subtypes): #nam = self._subtypes.pop(0) #try: #delattr(self, nam) #except AttributeError: #pass def base( self ): if self._parent is None: return self return self._parent.base() class Type(BaseType): __metaclass__ = MetaType eficas-6.4.0/Noyau/N_ETAPE.py0000644004705000470430000003552111655732717016035 0ustar courtoisasterdev#@ MODIF N_ETAPE Noyau DATE 12/10/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. # # 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. # # # ====================================================================== """ Ce module contient la classe ETAPE qui sert a verifier et a executer une commande """ # Modules Python import types,sys,string,os import linecache import traceback from copy import copy # Modules EFICAS import N_MCCOMPO from N_Exception import AsException import N_utils from N_utils import AsType from N_ASSD import ASSD from N_info import message, SUPERV class ETAPE(N_MCCOMPO.MCCOMPO): """ Cette classe herite de MCCOMPO car ETAPE est un OBJECT composite """ nature = "OPERATEUR" # L'attribut de classe codex est utilise pour rattacher le module de calcul eventuel (voir Build) # On le met a None pour indiquer qu'il n'y a pas de module de calcul rattache codex=None def __init__(self,oper=None,reuse=None,args={}): """ Attributs : - definition : objet portant les attributs de definition d'une etape de type operateur. Il est initialise par l'argument oper. - reuse : indique le concept d'entree reutilise. Il se trouvera donc en sortie si les conditions d'execution de l'operateur l'autorise - valeur : arguments d'entree de type mot-cle=valeur. Initialise avec l'argument args. """ self.definition=oper self.reuse=reuse self.valeur=args self.nettoiargs() self.parent=CONTEXT.get_current_step() self.etape = self self.nom=oper.nom self.idracine=oper.label self.appel=N_utils.callee_where() self.mc_globaux={} self.sd=None self.actif=1 self.make_register() def make_register(self): """ Initialise les attributs jdc, id, niveau et realise les enregistrements necessaires """ if self.parent : self.jdc = self.parent.get_jdc_root() self.id=self.parent.register(self) self.niveau=None else: self.jdc = self.parent =None self.id=None self.niveau=None def nettoiargs(self): """ Cette methode a pour fonction de retirer tous les arguments egaux a None de la liste des arguments. Ils sont supposes non presents et donc retires. """ for k in self.valeur.keys(): if self.valeur[k] == None:del self.valeur[k] def McBuild(self): """ Demande la construction des sous-objets et les stocke dans l'attribut mc_liste. """ self.mc_liste=self.build_mc() def Build_sd(self,nom): """ Construit le concept produit de l'operateur. Deux cas peuvent se presenter : - le parent n'est pas defini. Dans ce cas, l'etape prend en charge la creation et le nommage du concept. - le parent est defini. Dans ce cas, l'etape demande au parent la creation et le nommage du concept. """ message.debug(SUPERV, "Build_sd %s", self.nom) self.sdnom=nom try: if self.parent: sd= self.parent.create_sdprod(self,nom) if type(self.definition.op_init) == types.FunctionType: apply(self.definition.op_init,(self,self.parent.g_context)) else: sd=self.get_sd_prod() # On n'utilise pas self.definition.op_init car self.parent # n'existe pas if sd != None and self.reuse == None: # On ne nomme le concept que dans le cas de non reutilisation # d un concept sd.set_name(nom) except AsException,e: raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], 'fichier : ',self.appel[1],e) except EOFError: raise except : l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], 'fichier : ',self.appel[1]+'\n', string.join(l)) self.Execute() return sd def Execute(self): """ Cette methode est un point d'entree prevu pour realiser une execution immediatement apres avoir construit les mots cles et le concept produit. Par defaut, elle ne fait rien. Elle doit etre surchargee dans une autre partie du programme. """ return def get_sd_prod(self): """ Retourne le concept resultat de l'etape Deux cas : - cas 1 : sd_prod de oper n'est pas une fonction il s'agit d'une sous classe de ASSD on construit le sd a partir de cette classe et on le retourne - cas 2 : il s'agit d'une fonction on l'evalue avec les mots-cles de l'etape (mc_liste) on construit le sd a partir de la classe obtenue et on le retourne """ if type(self.definition.sd_prod) == types.FunctionType: d=self.cree_dict_valeurs(self.mc_liste) try: sd_prod= apply(self.definition.sd_prod,(),d) except EOFError: raise except: if CONTEXT.debug: traceback.print_exc() l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1], sys.exc_info()[2]) raise AsException("impossible d affecter un type au resultat", string.join(l[2:])) # sys.exc_info()[0],sys.exc_info()[1],) else: sd_prod=self.definition.sd_prod # on teste maintenant si la SD est reutilisee ou s'il faut la creer if self.definition.reentrant != 'n' and self.reuse: # Le concept produit est specifie reutilise (reuse=xxx). C'est une erreur mais non fatale. # Elle sera traitee ulterieurement. self.sd=self.reuse else: self.sd= sd_prod(etape=self) # Si l'operateur est obligatoirement reentrant et reuse n'a pas ete specifie, c'est une erreur. # On ne fait rien ici. L'erreur sera traiter par la suite. # precaution if self.sd is not None and not isinstance(self.sd, ASSD): raise AsException(""" Impossible de typer le resultat ! Causes possibles : Utilisateur : Soit la valeur fournie derriere "reuse" est incorrecte, soit il y a une "," a la fin d'une commande precedente. Developpeur : La fonction "sd_prod" retourne un type invalide.""") return self.sd def get_type_produit(self): try: return self.get_type_produit_brut() except: return None def get_type_produit_brut(self): """ Retourne le type du concept resultat de l'etape Deux cas : - cas 1 : sd_prod de oper n'est pas une fonction il s'agit d'une sous classe de ASSD on retourne le nom de la classe - cas 2 : il s'agit d'une fonction on l'evalue avec les mots-cles de l'etape (mc_liste) et on retourne son resultat """ if type(self.definition.sd_prod) == types.FunctionType: d=self.cree_dict_valeurs(self.mc_liste) sd_prod= apply(self.definition.sd_prod,(),d) else: sd_prod=self.definition.sd_prod return sd_prod def get_etape(self): """ Retourne l'etape a laquelle appartient self Un objet de la categorie etape doit retourner self pour indiquer que l'etape a ete trouvee XXX fait double emploi avec self.etape ???? """ return self def supprime(self): """ Methode qui supprime toutes les references arrieres afin que l'objet puisse etre correctement detruit par le garbage collector """ N_MCCOMPO.MCCOMPO.supprime(self) self.jdc = None self.appel = None for name in dir(self): if name.startswith( '_cache_' ): setattr(self, name, None) if self.sd: self.sd.supprime() def isactif(self): """ Indique si l'etape est active (1) ou inactive (0) """ return self.actif def set_current_step(self): """ Methode utilisee pour que l etape self se declare etape courante. Utilise par les macros """ message.debug(SUPERV, "call etape.set_current_step", stack_id=-1) cs= CONTEXT.get_current_step() if self.parent != cs : raise AsException("L'etape courante", cs.nom, cs, "devrait etre le parent de", self.nom, self) else : CONTEXT.unset_current_step() CONTEXT.set_current_step(self) def reset_current_step(self): """ Methode utilisee par l'etape self qui remet son etape parent comme etape courante """ cs= CONTEXT.get_current_step() if self != cs : raise AsException("L'etape courante", cs.nom, cs, "devrait etre", self.nom, self) else : CONTEXT.unset_current_step() CONTEXT.set_current_step(self.parent) def issubstep(self,etape): """ Cette methode retourne un entier indiquant si etape est une sous etape de self ou non 1 = oui 0 = non Une étape simple n'a pas de sous etape """ return 0 def get_file(self,unite=None,fic_origine=''): """ Retourne le nom du fichier associe a l unite logique unite (entier) ainsi que le source contenu dans le fichier """ if self.jdc : return self.jdc.get_file(unite=unite,fic_origine=fic_origine) else : file = None if unite != None: if os.path.exists("fort."+str(unite)): file= "fort."+str(unite) if file == None : raise AsException("Impossible de trouver le fichier correspondant a l unite %s" % unite) if not os.path.exists(file): raise AsException("%s n'est pas un fichier existant" % unite) fproc=open(file,'r') text=string.replace(fproc.read(),'\r\n','\n') fproc.close() linecache.cache[file]=0,0,string.split(text,'\n'),file return file,text def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets en utilisant le pattern VISITEUR """ visitor.visitETAPE(self) def update_context(self,d): """ Cette methode doit updater le contexte fournit par l'appelant en argument (d) en fonction de sa definition """ if type(self.definition.op_init) == types.FunctionType: apply(self.definition.op_init,(self,d)) if self.sd: d[self.sd.nom]=self.sd def copy(self): """ Méthode qui retourne une copie de self non enregistrée auprès du JDC et sans sd """ etape = copy(self) etape.sd = None etape.state = 'modified' etape.reuse = None etape.sdnom = None etape.etape=etape etape.mc_liste=[] for objet in self.mc_liste: new_obj = objet.copy() new_obj.reparent(etape) etape.mc_liste.append(new_obj) return etape def copy_reuse(self,old_etape): """ Méthode qui copie le reuse d'une autre étape. """ if hasattr(old_etape,"reuse") : self.reuse = old_etape.reuse def copy_sdnom(self,old_etape): """ Méthode qui copie le sdnom d'une autre étape. """ if hasattr(old_etape,"sdnom") : self.sdnom = old_etape.sdnom def reparent(self,parent): """ Cette methode sert a reinitialiser la parente de l'objet """ self.parent=parent self.jdc=parent.get_jdc_root() self.etape=self for mocle in self.mc_liste: mocle.reparent(self) if self.sd and self.reuse == None : self.sd.jdc=self.jdc def get_cmd(self,nomcmd): """ Méthode pour recuperer la definition d'une commande donnee par son nom dans les catalogues declares au niveau du jdc Appele par un ops d'une macro en Python """ return self.jdc.get_cmd(nomcmd) def copy_intern(self,etape): """ Méthode permettant lors du processus de recopie de copier les elements internes d'une etape dans une autre """ return def full_copy(self,parent=None): """ Méthode permettant d'effectuer une copie complète d'une étape (y compris concept produit, éléments internes) Si l'argument parent est fourni, la nouvelle étape aura cet objet comme parent. """ new_etape = self.copy() new_etape.copy_reuse(self) new_etape.copy_sdnom(self) if parent: new_etape.reparent(parent) if self.sd : new_sd = self.sd.__class__(etape=new_etape) new_etape.sd = new_sd if self.reuse == None : new_etape.parent.NommerSdprod(new_sd,self.sd.nom) else : new_sd.set_name(self.sd.nom) new_etape.copy_intern(self) return new_etape def reset_jdc(self,new_jdc): """ Reinitialise le nommage du concept de l'etape lors d'un changement de jdc """ if self.sd and self.reuse == None : self.parent.NommerSdprod(self.sd,self.sd.nom) def is_include(self): """Permet savoir si on a affaire à la commande INCLUDE car le comportement de ces macros est particulier. """ return self.nom.startswith('INCLUDE') def sd_accessible(self): """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD produite par l'étape. """ if CONTEXT.debug: print '`- ETAPE sd_accessible :', self.nom return self.parent.sd_accessible() def get_concept(self, nomsd): """ Méthode pour recuperer un concept à partir de son nom """ # pourrait être appelée par une commande fortran faisant appel à des fonctions python # on passe la main au parent return self.parent.get_concept(nomsd) eficas-6.4.0/Noyau/N_PROC.py0000644004705000470430000001410711655732717015737 0ustar courtoisasterdev#@ MODIF N_PROC 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. # # 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. # # # ====================================================================== """ Ce module contient la classe de definition PROC qui permet de spécifier les caractéristiques d'une procédure """ import types,string,traceback import N_ENTITE import N_PROC_ETAPE class PROC(N_ENTITE.ENTITE): """ Classe pour definir un opérateur Cette classe a deux attributs de classe - class_instance qui indique la classe qui devra etre utilisée pour créer l'objet qui servira à controler la conformité d'un opérateur avec sa définition - label qui indique la nature de l'objet de définition (ici, PROC) et les attributs d'instance suivants : - nom : son nom - op : le numéro d'opérateur - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur réentrant peut modifier un concept d'entrée et le produire comme concept de sortie - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort de l'objet gérant le contexte d'exécution de vérifier cette contrainte. - fr : commentaire associé en francais - ang : commentaire associé en anglais - docu : clé de documentation associée - regles : liste des règles associées - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette fonction est exécutée lors des phases d'initialisation de l'étape associée. - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement. Si niveau vaut None, l'opérateur est rangé au niveau global. - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut est initialisé avec args, c'est à dire les arguments d'appel restants. """ class_instance = N_PROC_ETAPE.PROC_ETAPE label = 'PROC' def __init__(self,nom,op,reentrant='n',repetable='o',fr="",ang="", docu="",regles=(),op_init=None,niveau = None,UIinfo=None,**args): """ Méthode d'initialisation de l'objet PROC. Les arguments sont utilisés pour initialiser les attributs de meme nom """ self.nom=nom self.op=op self.reentrant=reentrant self.repetable = repetable self.fr=fr self.ang=ang self.docu=docu if type(regles)== types.TupleType: self.regles=regles else: self.regles=(regles,) # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None self.op_init=op_init self.entites=args current_cata=CONTEXT.get_current_cata() if niveau == None: self.niveau=None current_cata.enregistre(self) else: self.niveau=current_cata.get_niveau(niveau) self.niveau.enregistre(self) self.UIinfo=UIinfo self.affecter_parente() self.check_definition(self.nom) def __call__(self,**args): """ Construit l'objet PROC_ETAPE a partir de sa definition (self), puis demande la construction de ses sous-objets et du concept produit. """ etape= self.class_instance(oper=self,args=args) etape.McBuild() return etape.Build_sd() def make_objet(self,mc_list='oui'): """ Cette méthode crée l'objet PROC_ETAPE dont la définition est self sans l'enregistrer ni créer sa sdprod. Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction des objets MCxxx. """ etape= self.class_instance(oper=self,args={}) if mc_list == 'oui':etape.McBuild() return etape def verif_cata(self): """ Méthode de vérification des attributs de définition """ if type(self.regles) != types.TupleType : self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`) if type(self.fr) != types.StringType : self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" %`self.fr`) if self.reentrant not in ('o','n','f'): self.cr.fatal("L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %s" %`self.reentrant`) if type(self.docu) != types.StringType : self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu` ) if type(self.nom) != types.StringType : self.cr.fatal("L'attribut 'nom' doit etre une chaine de caractères : %s" %`self.nom`) if type(self.op) != types.IntType : self.cr.fatal("L'attribut 'op' doit etre un entier signé : %s" %`self.op`) self.verif_cata_regles() def supprime(self): """ Méthode pour supprimer les références arrières susceptibles de provoquer des cycles de références """ self.niveau=None eficas-6.4.0/Noyau/N_FONCTION.py0000644004705000470430000001035111655732717016410 0ustar courtoisasterdev#@ MODIF N_FONCTION Noyau DATE 28/06/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. # # 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. # # # ====================================================================== # Attention : cet import permet d'avoir, en Python, le comportement # de la division réelle pour les entiers, et non la division entière # 1/2=0.5 (et non 0). Comportement par défaut dans Python 3.0. from __future__ import division from N_ASSD import ASSD from N_info import message, SUPERV class FONCTION(ASSD): pass class formule(ASSD): def __init__(self, *args, **kwargs): ASSD.__init__(self, *args, **kwargs) self.nompar = None self.expression = None def __call__(self, *val): context = {} # cas de INCLUDE (ou POURSUITE dans Eficas) context.update(getattr(self.parent, 'contexte_fichier_init', {})) # récupération des constantes locales en cas de MACRO context.update(getattr(self.parent, 'macro_const_context', {})) for param, value in zip(self.nompar, val): context[param] = value try: res = eval(self.expression, self.jdc.const_context, context) except Exception, exc: message.error(SUPERV, "ERREUR LORS DE L'ÉVALUATION DE LA FORMULE '%s' " \ ":\n>> %s",self.nom, str(exc)) raise return res def setFormule(self, nom_para, texte): """Cette methode sert a initialiser les attributs nompar, expression et code qui sont utilisés dans l'évaluation de la formule.""" self.nompar = nom_para self.expression = texte try : self.code = compile(texte, texte, 'eval') except SyntaxError, exc: message.error(SUPERV, "ERREUR LORS DE LA CREATION DE LA FORMULE '%s' " \ ":\n>> %s", self.nom, str(exc)) raise def __setstate__(self,state): """Cette methode sert a restaurer l'attribut code lors d'un unpickle.""" self.__dict__.update(state) # update attributes self.setFormule(self.nompar, self.expression) # restore code attribute def __getstate__(self): """Pour les formules, il faut enlever l'attribut code qui n'est pas picklable.""" d = ASSD.__getstate__(self) del d['code'] return d def Parametres(self): """Equivalent de fonction.Parametres pour pouvoir utiliser des formules à la place de fonctions dans certaines macro-commandes. """ from SD.sd_fonction import sd_formule from Utilitai.Utmess import UTMESS if self.accessible(): TypeProl={ 'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT', 'I':'INTERPRE' } sd = sd_formule(self.get_name()) prol = sd.PROL.get() nova = sd.NOVA.get() if prol is None or nova is None: UTMESS('F', 'SDVERI_2', valk=[objev]) dico={ 'INTERPOL' : ['LIN','LIN'], 'NOM_PARA' : [s.strip() for s in nova], 'NOM_RESU' : prol[3][0:16].strip(), 'PROL_DROITE' : TypeProl['E'], 'PROL_GAUCHE' : TypeProl['E'], } else: raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'") return dico class formule_c(formule): pass eficas-6.4.0/Noyau/N_SIMP.py0000644004705000470430000001140411655732717015741 0ustar courtoisasterdev#@ MODIF N_SIMP Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe de definition SIMP qui permet de spécifier les caractéristiques des mots clés simples """ import types import N_ENTITE import N_MCSIMP class SIMP(N_ENTITE.ENTITE): """ Classe pour definir un mot cle simple Cette classe a deux attributs de classe - class_instance qui indique la classe qui devra etre utilisee pour creer l'objet qui servira a controler la conformite d'un mot-cle simple avec sa définition - label qui indique la nature de l'objet de définition (ici, SIMP) """ class_instance = N_MCSIMP.MCSIMP label = 'SIMP' def __init__(self,typ,fr="",ang="",statut='f',into=None,defaut=None, min=1,max=1,homo=1,position ='local', val_min = '**',val_max='**',docu="",validators=None): """ Un mot-cle simple est caracterise par les attributs suivants : - type : cet attribut est obligatoire et indique le type de valeur attendue - fr : - ang : - statut : - into : - defaut : - min - max - homo - position - val_min - val_max - docu """ N_ENTITE.ENTITE.__init__(self,validators) # Initialisation des attributs if type(typ) == types.TupleType : self.type=typ else : self.type=(typ,) self.fr=fr self.ang=ang self.statut=statut self.into=into self.defaut=defaut self.min=min self.max=max self.homo=homo self.position = position self.val_min=val_min self.val_max=val_max self.docu = docu def verif_cata(self): """ Cette methode sert a valider les attributs de l'objet de definition de la classe SIMP """ if type(self.min) != types.IntType : if self.min != '**': self.cr.fatal("L'attribut 'min' doit etre un entier : "+`self.min`) if type(self.max) != types.IntType : if self.max != '**' : self.cr.fatal("L'attribut 'max' doit etre un entier : "+`self.max`) if self.min > self.max : self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`)) if type(self.fr) != types.StringType : self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" +`self.fr`) if self.statut not in ['o','f','c','d']: self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`) if self.homo != 0 and self.homo != 1 : self.cr.fatal("L'attribut 'homo' doit valoir 0 ou 1 : %s" %`self.homo`) if self.into != None : if type(self.into) != types.TupleType : self.cr.fatal("L'attribut 'into' doit etre un tuple : %s" %`self.into`) if self.position not in ['local','global','global_jdc']: self.cr.fatal("L'attribut 'position' doit valoir 'local','global' ou 'global_jdc' : %s" %`self.position`) if self.validators and not self.validators.verif_cata(): self.cr.fatal("Un des validateurs est incorrect. Raison : "+self.validators.cata_info) def __call__(self,val,nom,parent=None): """ Construit un objet mot cle simple (MCSIMP) a partir de sa definition (self) de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent) """ return self.class_instance(nom=nom,definition=self,val=val,parent=parent) eficas-6.4.0/Noyau/N_OBJECT.py0000644004705000470430000001045611444664426016142 0ustar courtoisasterdev#@ MODIF N_OBJECT Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe OBJECT classe mère de tous les objets servant à controler les valeurs par rapport aux définitions """ from N_CR import CR class OBJECT: """ Classe OBJECT : cette classe est virtuelle et sert de classe mère aux classes de type ETAPE et MOCLES. Elle ne peut etre instanciée. Une sous classe doit obligatoirement implémenter les méthodes : - __init__ """ def get_etape(self): """ Retourne l'étape à laquelle appartient self Un objet de la catégorie etape doit retourner self pour indiquer que l'étape a été trouvée XXX double emploi avec self.etape ??? """ if self.parent == None: return None return self.parent.get_etape() def supprime(self): """ Méthode qui supprime les références arrières suffisantes pour que l'objet puisse etre correctement détruit par le garbage collector """ self.parent = None self.etape = None self.jdc = None self.niveau = None def get_val(self): """ Retourne la valeur de l'objet. Cette méthode fournit une valeur par defaut. Elle doit etre dérivée pour chaque type d'objet """ return self def isBLOC(self): """ Indique si l'objet est un BLOC """ return 0 def get_jdc_root(self): """ Cette méthode doit retourner l'objet racine c'est à dire celui qui n'a pas de parent """ if self.parent: return self.parent.get_jdc_root() else: return self def GETVAL(self,val): """ 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')) : return self.definition.defaut else: return val def reparent(self,parent): """ Cette methode sert a reinitialiser la parente de l'objet """ self.parent=parent self.jdc=parent.jdc class ErrorObj(OBJECT): """Classe pour objets errones : emule le comportement d'un objet tel mcsimp ou mcfact """ def __init__(self,definition,valeur,parent,nom="err"): self.nom=nom self.definition=definition self.valeur=valeur self.parent=parent self.mc_liste=[] if parent : self.jdc = self.parent.jdc #self.niveau = self.parent.niveau #self.etape = self.parent.etape else: # Pas de parent self.jdc = None #self.niveau = None #self.etape = None def isvalid(self,cr='non'): return 0 def report(self): """ génère le rapport de validation de self """ self.cr=CR() self.cr.debut = "Mot-clé invalide : "+self.nom self.cr.fin = "Fin Mot-clé invalide : "+self.nom self.cr.fatal("Type non autorisé pour le mot-clé %s : '%s'" % (self.nom,self.valeur)) return self.cr eficas-6.4.0/Noyau/N_MCSIMP.py0000644004705000470430000001443011655732717016163 0ustar courtoisasterdev#@ 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. # # 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. # # # ====================================================================== """ 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 de type ENTITE """ from copy import copy from Noyau.N_ASSD import ASSD from Noyau.N_CO import CO import N_OBJECT from N_CONVERT import ConversionFactory class MCSIMP(N_OBJECT.OBJECT): """ """ nature = 'MCSIMP' def __init__(self,val,definition,nom,parent): """ Attributs : - val : valeur du mot cle simple - definition - nom - parent Autres attributs : - valeur : valeur du mot-cle simple en tenant compte de la valeur par defaut """ self.definition=definition self.nom=nom self.val = val self.parent = parent self.convProto = ConversionFactory('type', typ=self.definition.type) self.valeur = self.GETVAL(self.val) if parent : self.jdc = self.parent.jdc self.niveau = self.parent.niveau self.etape = self.parent.etape else: # Le mot cle simple a ete cree 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 """ if (val is None and hasattr(self.definition,'defaut')) : val = self.definition.defaut if self.convProto: val = self.convProto.convert(val) return val 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 """ 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) # 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: v = v[0] elif not hasattr(v, '__iter__') 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 \ and v[0] in ('RI', 'MP'): v = (v, ) return v def get_val(self): """ Une autre methode qui retourne une "autre" valeur du mot cle simple. Elle est utilisee par la methode get_mocle """ return self.valeur def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets en utilisant le pattern VISITEUR """ visitor.visitMCSIMP(self) def copy(self): """ Retourne une copie de self """ objet = self.makeobjet() # il faut copier les listes et les tuples mais pas les autres valeurs # possibles (reel,SD,...) if type(self.valeur) in (list, tuple): objet.valeur = copy(self.valeur) else: objet.valeur = self.valeur objet.val = objet.valeur return objet def makeobjet(self): return self.definition(val = None, nom = self.nom,parent = self.parent) def reparent(self,parent): """ Cette methode sert a reinitialiser la parente de l'objet """ self.parent=parent self.jdc=parent.jdc self.etape=parent.etape def get_sd_utilisees(self): """ Retourne une liste qui contient la ou les SD utilisee par self si c'est le cas ou alors une liste vide """ l=[] if isinstance(self.valeur, ASSD): l.append(self.valeur) elif type(self.valeur) in (list, tuple): for val in self.valeur : if isinstance(val, ASSD): l.append(val) return l 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 la liste des sd attenante. Exemple :: { 'VALE_F': [ , ] } """ l=self.get_sd_utilisees() dico = {} if len(l) > 0 : dico[self.nom] = l return dico def get_mcs_with_co(self,co): """ 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,] return [] def get_all_co(self): """ Cette methode retourne la liste de tous les concepts co associes 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 eficas-6.4.0/Noyau/asnom.py0000644004705000470430000001206711444664426016034 0ustar courtoisasterdev#@ MODIF asnom Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 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. # ====================================================================== """ Description des types de base aster version 2 - réécrite pour essayer de simplifier le problème des instances/types et instances/instances le type de base ASBase permet de représenter une structure de donnée. Une instance de ASBase comme attribut d'une classe dérivée de ASBase représente une sous-structure nommée. une instance de ASBase 'libre' représente une instance de la structure de donnée complète. c'est ce comportement qui est capturé dans la classe StructType """ from basetype import Type class SDNom(Type): """Objet représentant une sous-partie de nom d'objet jeveux""" nomj = None debut = None fin = None just = None justtype = None def __init__(self, nomj=None, debut=None, fin=None, just='l', **kwargs ): """ Configure un objet nom nomj : la partie du nom fixée (par ex .TITR) ou '' si non précisée debut, fin : la partie du K24 concernée just : la justification a droite ou a gauche ('l' ou 'r') kwargs : inutilisé, juste par simplicité Note: On utilise cet objet comme attribut d'instance ou de classe. En attribut de classe pour les noms de structure, cela permet de définir la position du nom d'objet dans le nom jeveux, l'attribut nom est alors la valeur du suffixe pour une sous-structure ou None pour une structure principale. """ super( SDNom, self ).__init__( nomj=nomj, debut=debut, fin=fin, just=just, **kwargs ) self.update( (nomj, debut, fin, just) ) def __call__(self): if self._parent is None or self._parent._parent is None: debut = self.debut or 0 prefix = ' '*debut else: # normalement # assert self._parent.nomj is self nomparent = self._parent._parent.nomj prefix = nomparent() debut = self.debut or nomparent.fin or len(prefix) fin = self.fin or 24 nomj = self.nomj or '' nomj = self.just( nomj, fin-debut ) prefix = prefix.ljust(24) res = prefix[:debut]+nomj+prefix[fin:] return res[:24] def fcata(self): return self.just(self.nomj,self.fin-self.debut).replace(' ','?') def __repr__(self): return "" % (self.nomj,self.debut,self.fin) # On utilise pickle pour les copies, et pickle ne sait pas gérer la # sauvegarde de str.ljust ou str.rjust (c'est une méthode non liée) def __getstate__(self): return (self.nomj, self.debut, self.fin, self.justtype ) def __setstate__( self, (nomj,debut,fin,just) ): self.nomj = nomj self.debut = debut self.fin = fin if just=='l' or just is None: self.just = str.ljust elif just=='r': self.just = str.rjust else: raise ValueError("Justification '%s' invalide" % just ) self.justtype = just def update( self, (nomj,debut,fin,just) ): if nomj is not None: self.nomj = nomj if self.debut is None: self.debut = debut if self.fin is None: self.fin = fin if self.justtype is None and just is not None: if just=='l': self.just = str.ljust elif just=='r': self.just = str.rjust else: raise ValueError("Justification '%s' invalide" % just ) self.justtype = just def reparent( self, parent, new_name ): self._parent = parent self._name = new_name for nam in self._subtypes: obj = getattr( self, nam ) obj.reparent( self, nam ) if self.nomj is None and self._parent._name is not None: self.nomj = "." + self._parent._name eficas-6.4.0/Noyau/N_CONVERT.py0000644004705000470430000000602711444664426016313 0ustar courtoisasterdev#@ MODIF N_CONVERT Noyau DATE 11/05/2010 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 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 de conversion des valeurs saisies par l'utilisateur après vérification. """ from N_types import is_int, is_float, is_enum def has_int_value(real): """Est-ce que 'real' a une valeur entière ? """ return abs(int(real) - real) < 1.e-12 class Conversion: """Conversion de type. """ def __init__(self, name, typ): self.name = name self.typ = typ def convert(self, obj): """Filtre liste """ in_as_enum = is_enum(obj) if not in_as_enum: obj = (obj,) result = [] for o in obj: result.append(self.function(o)) if not in_as_enum: return result[0] else: # ne marche pas avec MACR_RECAL qui attend une liste et non un tuple return tuple(result) def function(self, o): raise NotImplementedError, 'cette classe doit être dérivée' class TypeConversion(Conversion): """Conversion de type """ def __init__(self, typ): Conversion.__init__(self, 'type', typ) class IntConversion(TypeConversion): """Conversion en entier """ def __init__(self): TypeConversion.__init__(self, 'I') def function(self, o): if is_float(o) and has_int_value(o): o = int(o) return o class FloatConversion(TypeConversion): """Conversion de type """ def __init__(self): TypeConversion.__init__(self, 'R') def function(self, o): if is_float(o): o = float(o) return o _convertI = IntConversion() _convertR = FloatConversion() def ConversionFactory(name, typ): if name == 'type': if 'I' in typ: return _convertI elif 'R' in typ: return _convertR return None eficas-6.4.0/Noyau/N_VALIDATOR.py0000644004705000470430000013607111544575246016525 0ustar courtoisasterdev#@ MODIF N_VALIDATOR Noyau DATE 11/10/2010 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 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. # ====================================================================== """ Ce module contient toutes les classes necessaires pour implanter le concept de validateur dans Accas """ import types import traceback from N_ASSD import ASSD from N_types import is_int, is_float_or_int, is_complex, is_number, is_str, is_enum class ValError(Exception):pass def cls_mro(cls): if hasattr(cls,"__mro__"):return cls.__mro__ mro=[cls] for base in cls.__bases__: mro.extend(cls_mro(base)) return mro class Protocol: def __init__(self,name): self.registry = {} self.name = name self.args={} def register(self, T, A): self.registry[T] = A def adapt(self, obj): # (a) verifier si l'objet peut s'adapter au protocole adapt = getattr(obj, '__adapt__', None) if adapt is not None: # on demande à l'objet obj de réaliser lui-meme l'adaptation return adapt(self) # (b) verifier si un adapteur est enregistré (si oui l'utiliser) if self.registry: for T in cls_mro(obj.__class__): if T in self.registry: return self.registry[T](obj,self,**self.args) # (c) utiliser l'adapteur par defaut return self.default(obj,**self.args) def default(self,obj,**args): raise TypeError("Can't adapt %s to %s" % (obj.__class__.__name__, self.name)) class PProtocol(Protocol): """Verificateur de protocole paramétré (classe de base)""" #Protocole paramétré. Le registre est unique pour toutes les instances. La methode register est une methode de classe registry={} def __init__(self,name,**args): self.name = name self.args=args def register(cls, T, A): cls.registry[T] = A register=classmethod(register) class ListProtocol(Protocol): """Verificateur de protocole liste : convertit un objet quelconque en liste pour validation ultérieure""" def default(self,obj): if type(obj) is tuple: if len(obj) > 0 and obj[0] in ('RI','MP'): #il s'agit d'un complexe ancienne mode. La cardinalite vaut 1 return (obj,) else: return obj elif type(obj) is list: return obj elif obj == None: # pas de valeur affecte. La cardinalite vaut 0 return obj elif is_str(obj): #il s'agit d'une chaine. La cardinalite vaut 1 return (obj,) else: try: # si l'objet supporte len, on a la cardinalite length=len(obj) return obj except: # sinon elle vaut 1 return (obj,) listProto=ListProtocol("list") class TypeProtocol(PProtocol): """Verificateur de type parmi une liste de types possibles""" #pas de registre par instance. Registre unique pour toutes les instances de TypeProtocol registry={} def __init__(self,name,typ=None): PProtocol.__init__(self,name,typ=typ) self.typ=typ def default(self,obj,typ): help = "" for type_permis in typ: if type_permis == 'R': if is_float_or_int(obj): return obj elif type_permis == 'I': if is_int(obj): return obj elif type_permis == 'C': if self.is_complexe(obj): return obj elif type_permis == 'TXM': if is_str(obj): return obj elif type_permis == 'shell': if is_str(obj): return obj elif type_permis == 'Fichier' : import os if (len(typ) > 2 and typ[2] == "Sauvegarde") or os.path.isfile(obj): return obj else : raise ValError("%s n'est pas un fichier valide" % repr(obj)) elif type_permis == 'FichierNoAbs' : import os if (len(typ) > 2 and typ[2] == "Sauvegarde") or isinstance(obj, type("")): return obj else : raise ValError("%s n'est pas un fichier valide" % repr(obj)) elif type(type_permis) == types.ClassType or isinstance(type_permis,type): try: if self.is_object_from(obj,type_permis): return obj except Exception, err: help = str(err) elif type(type_permis) == types.InstanceType or isinstance(type_permis,object): try: if type_permis.__convert__(obj): return obj except Exception, err: help = str(err) else: print "Type non encore géré %s" %`type_permis` raise ValError("%s (de type %s) n'est pas d'un type autorisé: %s %s" % (repr(obj),type(obj),typ, help)) def is_complexe(self,valeur): """ Retourne 1 si valeur est un complexe, 0 sinon """ if is_number(valeur): # Pour permettre l'utilisation de complexes Python (accepte les entiers et réels) return 1 elif type(valeur) != tuple : # On n'autorise pas les listes pour les complexes return 0 elif len(valeur) != 3: return 0 else: # Un complexe doit etre un tuple de longueur 3 avec 'RI' ou 'MP' comme premiere # valeur suivie de 2 reels. if valeur[0].strip() in ('RI','MP'): try: v1=reelProto.adapt(valeur[1]),reelProto.adapt(valeur[2]) return 1 except: return 0 else: return 0 def is_object_from(self,objet,classe): """ Retourne 1 si objet est une instance de la classe classe, 0 sinon """ convert = getattr(classe, '__convert__', None) if convert is not None: # classe verifie les valeurs try: v= convert(objet) return v is not None except ValueError, err: raise except: return 0 # On accepte les instances de la classe et des classes derivees return isinstance(objet,classe) reelProto=TypeProtocol("reel",typ=('R',)) class CardProtocol(PProtocol): """Verificateur de cardinalité """ #pas de registre par instance. Registre unique pour toutes les instances registry={} def __init__(self,name,min=1,max=1): PProtocol.__init__(self,name,min=min,max=max) def default(self,obj,min,max): length=len(obj) if length < min or length >max: raise ValError("Nombre d'arguments de %s incorrect (min = %s, max = %s)" % (repr(obj),min,max) ) return obj class IntoProtocol(PProtocol): """Verificateur de choix possibles : liste discrète ou intervalle""" #pas de registre par instance. Registre unique pour toutes les instances registry={} def __init__(self,name,into=None,val_min='**',val_max='**'): PProtocol.__init__(self,name,into=into,val_min=val_min,val_max=val_max) self.val_min=val_min self.val_max=val_max def default(self,obj,into,val_min,val_max): if into: if obj not in into: raise ValError("La valeur : %s ne fait pas partie des choix possibles %s" % (repr(obj),into) ) else: #on est dans le cas d'un ensemble continu de valeurs possibles (intervalle) if is_float_or_int(obj): if val_min == '**': val_min = obj -1 if val_max == '**': val_max = obj +1 if obj < val_min or obj > val_max : raise ValError("La valeur : %s est en dehors du domaine de validité [ %s , %s ]" % (repr(obj),self.val_min,self.val_max) ) return obj class MinStr: #exemple de classe pour verificateur de type #on utilise des instances de classe comme type (typ=MinStr(3,6), par exemple) def __init__(self,min,max): self.min=min self.max=max def __convert__(self,valeur): if is_str(valeur) and self.min <= len(valeur) <= self.max:return valeur raise ValError("%s n'est pas une chaine de longueur comprise entre %s et %s" % (valeur,self.min,self.max)) def __repr__(self): return "TXM de longueur entre %s et %s" %(self.min,self.max) class Valid(PProtocol): """ Cette classe est la classe mere des validateurs Accas Elle doit etre derivee Elle presente la signature des methodes indispensables pour son bon fonctionnement et dans certains cas leur comportement par défaut. @ivar cata_info: raison de la validite ou de l'invalidite du validateur meme @type cata_info: C{string} """ registry={} def __init__(self,**args): PProtocol.__init__(self,"valid",**args) def info(self): """ Cette methode retourne une chaine de caractères informative sur la validation demandée par le validateur. Elle est utilisée pour produire le compte-rendu de validité du mot clé associé. """ return "valeur valide" def aide(self): """ Cette methode retourne une chaine de caractère qui permet de construire un message d'aide en ligne. En général, le message retourné est le meme que celui retourné par la méthode info. """ return self.info() def info_erreur_item(self): """ Cette méthode permet d'avoir un message d'erreur pour un item dans une liste dans le cas ou le validateur fait des vérifications sur les items d'une liste. Si le validateur fait seulement des vérifications sur la liste elle meme et non sur ses items, la méthode doit retourner une chaine vide. """ return " " def info_erreur_liste(self): """ Cette méthode a un comportement complémentaire de celui de info_erreur_item. Elle retourne un message d'erreur lié uniquement aux vérifications sur la liste elle meme et pas sur ses items. Dans le cas où le validateur ne fait pas de vérification sur des listes, elle retourne une chaine vide """ return " " def verif(self,valeur): """ Cette methode sert a verifier si la valeur passee en argument est consideree comme valide ou non par le validateur. Dans le premier cas le validateur retourne 1 (valide) sinon 0 (invalide). @type valeur: tout type python @param valeur: valeur du mot cle a valider @rtype: C{boolean} @return: indicateur de validite 1 (valide) ou 0 (invalide) """ raise "Must be implemented" def verif_item(self,valeur): """ La methode verif du validateur effectue une validation complete de la valeur. valeur peut etre un scalaire ou une liste. Le validateur doit traiter les 2 aspects s'il accepte des listes (dans ce cas la methode is_list doit retourner 1). La methode valid_item sert pour effectuer des validations partielles de liste. Elle doit uniquement verifier la validite d'un item de liste mais pas les caracteristiques de la liste. """ return 0 def valide_liste_partielle(self,liste_courante): """ Cette methode retourne un entier qui indique si liste_courante est partiellement valide (valeur 1) ou invalide (valeur 0). La validation partielle concerne les listes en cours de construction : on veut savoir si la liste en construction peut etre complétée ou si elle peut déjà etre considérée comme invalide. En général un validateur effectue la meme validation pour les listes partielles et les listes complètes. """ return self.verif(liste_courante) def verif_cata(self): """ Cette methode sert a realiser des verifications du validateur lui meme. Elle est facultative et retourne 1 (valide) par defaut. Elle retourne 0 si le validateur est lui meme invalide si par exemple ses parametres de definition ne sont pas corrects. La raison de l'invalidite est stockee dans l'attribut cata_info. @rtype: C{boolean} @return: indicateur de validite 1 (valide) ou 0 (invalide) """ return 1 def is_list(self): """ Cette méthode retourne un entier qui indique si le validateur permet les listes (valeur 1) ou ne les permet pas (valeur 0). Par défaut, un validateur n'autorise que des scalaires. """ return 0 def has_into(self): """ Cette méthode retourne un entier qui indique si le validateur propose une liste de choix (valeur 1) ou n'en propose pas. Par défaut, un validateur n'en propose pas. """ return 0 def get_into(self,liste_courante=None,into_courant=None): """ Cette méthode retourne la liste de choix proposée par le validateur. Si le validateur ne propose pas de liste de choix, la méthode retourne None. L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déjà effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix en en tenant compte. Par exemple, si le validateur n'autorise pas les répétitions, la liste des choix retournée ne doit pas contenir les choix déjà contenus dans liste_courante. L'argument d'entrée into_courant, s'il est différent de None, donne la liste des choix proposés par d'autres validateurs. Dans ce cas, la méthode get_into doit calculer la liste des choix à retourner en se limitant à cette liste initiale. Par exemple, si into_courant vaut (1,2,3) et que le validateur propose la liste de choix (3,4,5), la méthode ne doit retourner que (3,). La méthode get_into peut retourner une liste vide [], ce qui veut dire qu'il n'y a pas (ou plus) de choix possible. Cette situation peut etre normale : l''utilisateur a utilisé tous les choix, ou résulter d'une incohérence des validateurs : choix parmi (1,2,3) ET choix parmi (4,5,6). Il est impossible de faire la différence entre ces deux situations. """ return into_courant class ListVal(Valid): """ Cette classe sert de classe mère pour tous les validateurs qui acceptent des listes. """ def is_list(self): return 1 def get_into(self,liste_courante=None,into_courant=None): """ Cette méthode get_into effectue un traitement général qui consiste a filtrer la liste de choix into_courant, si elle existe, en ne conservant que les valeurs valides (appel de la méthode valid). """ if into_courant is None: return None else: liste_choix=[] for e in into_courant: if self.verif(e): liste_choix.append(e) return liste_choix def convert(self,valeur): """ Méthode convert pour les validateurs de listes. Cette méthode fait appel à la méthode convert_item sur chaque élément de la liste. """ if is_enum(valeur): for val in valeur: self.convert_item(val) return valeur else: return self.convert_item(valeur) def verif(self,valeur): """ Méthode verif pour les validateurs de listes. Cette méthode fait appel à la méthode verif_item sur chaque élément de la liste. Si valeur est un paramètre, on utilise sa valeur effective valeur.valeur. """ if is_enum(valeur): for val in valeur: if not self.verif_item(val): return 0 return 1 else: return self.verif_item(valeur) class Compulsory(ListVal): """ Validateur operationnel Verification de la présence obligatoire d'un élément dans une liste """ registry={} def __init__(self,elem=()): if not is_enum(elem): elem=(elem,) Valid.__init__(self,elem=elem) self.elem=elem self.cata_info="" def info(self): return "valeur %s obligatoire" % `self.elem` def default(self,valeur,elem): return valeur def verif_item(self,valeur): return 1 def convert(self,valeur): elem=list(self.elem) for val in valeur: v=self.adapt(val) if v in elem:elem.remove(v) if elem: raise ValError("%s ne contient pas les elements obligatoires : %s " %(valeur,elem)) return valeur def has_into(self): return 1 def verif(self,valeur): if not is_enum(valeur): liste=list(valeur) else: liste=valeur for val in self.elem : if val not in liste : return 0 return 1 def info_erreur_item(self): return "La valeur n'est pas dans la liste des choix possibles" class NoRepeat(ListVal): """ Validateur operationnel Verification d'absence de doublons dans la liste. """ def __init__(self): Valid.__init__(self) self.cata_info="" def info(self): return ": pas de présence de doublon dans la liste" def info_erreur_liste(self): return "Les doublons ne sont pas permis" def default(self,valeur): if valeur in self.liste : raise ValError("%s est un doublon" % valeur) return valeur def convert(self,valeur): self.liste=[] for val in valeur: v=self.adapt(val) self.liste.append(v) return valeur def verif_item(self,valeur): return 1 def verif(self,valeur): if is_enum(valeur): liste=list(valeur) for val in liste: if liste.count(val)!=1 : return 0 return 1 else: return 1 def get_into(self,liste_courante=None,into_courant=None): """ Methode get_into spécifique pour validateur NoRepeat, on retourne une liste de choix qui ne contient aucune valeur de into_courant déjà contenue dans liste_courante """ if into_courant is None: liste_choix=None else: liste_choix=[] for e in into_courant: if e in liste_choix: continue if liste_courante is not None and e in liste_courante: continue liste_choix.append(e) return liste_choix class LongStr(ListVal): """ Validateur operationnel Verification de la longueur d une chaine """ def __init__(self,low,high): ListVal.__init__(self,low=low,high=high) self.low=low self.high=high self.cata_info="" def info(self): return "longueur de la chaine entre %s et %s" %(self.low,self.high) def info_erreur_item(self): return "Longueur de la chaine incorrecte" def convert(self,valeur): for val in valeur: v=self.adapt(val) return valeur def verif_item(self,valeur): try: self.adapt(valeur) return 1 except: return 0 def default(self,valeur,low,high): if not is_str(valeur): raise ValError("%s n'est pas une string" % repr(valeur)) if valeur[0]=="'" and valeur[-1]=="'" : low=low+2 high=high+2 if len(valeur) < low or len(valeur) > high : raise ValError("%s n'est pas de la bonne longueur" % repr(valeur)) return valeur class OnlyStr(ListVal): """ Validateur operationnel Valide que c'est une chaine """ def __init__(self): ListVal.__init__(self) self.cata_info="" def info(self): return "regarde si c'est une chaine" def info_erreur_item(self): return "Ce n'est pas une chain" def convert(self,valeur): for val in valeur: v=self.adapt(val) return valeur def verif_item(self,valeur): try: self.adapt(valeur) return 1 except: return 0 def default(self,valeur): if not is_str(valeur): raise ValError("%s n'est pas une string" % repr(valeur)) return valeur class OrdList(ListVal): """ Validateur operationnel Verification qu'une liste est croissante ou decroissante """ def __init__(self,ord): ListVal.__init__(self,ord=ord) self.ord=ord self.cata_info="" def info(self): return "liste %s" % self.ord def info_erreur_liste(self) : return "La liste doit etre en ordre "+self.ord def convert(self,valeur): self.val=None self.liste=valeur for v in valeur: self.adapt(v) return valeur def default(self,valeur,ord): if self.ord=='croissant': if self.val is not None and valeur self.val: raise ValError("%s n'est pas par valeurs decroissantes" % repr(self.liste)) self.val=valeur return valeur def verif_item(self,valeur): return 1 def get_into(self,liste_courante=None,into_courant=None): """ Methode get_into spécifique pour validateur OrdList, on retourne une liste de choix qui ne contient aucune valeur de into_courant dont la valeur est inférieure à la dernière valeur de liste_courante, si elle est différente de None. """ if into_courant is None: return None elif not liste_courante : return into_courant else: liste_choix=[] last_val=liste_choix[-1] for e in into_courant: if self.ord=='croissant' and e <= last_val:continue if self.ord=='decroissant' and e >= last_val:continue liste_choix.append(e) return liste_choix class OrVal(Valid): """ Validateur operationnel Cette classe est un validateur qui controle une liste de validateurs Elle verifie qu'au moins un des validateurs de la liste valide la valeur """ def __init__(self,validators=()): if not is_enum(validators): validators=(validators,) self.validators=[] for validator in validators: if type(validator) == types.FunctionType: self.validators.append(FunctionVal(validator)) else: self.validators.append(validator) self.cata_info="" def info(self): return "\n ou ".join([v.info() for v in self.validators]) def convert(self,valeur): for validator in self.validators: try: return validator.convert(valeur) except: pass raise ValError("%s n'est pas du bon type" % repr(valeur)) def info_erreur_item(self): l=[] for v in self.validators: err=v.info_erreur_item() if err != " " : l.append(err) chaine=" \n ou ".join(l) return chaine def info_erreur_liste(self): l=[] for v in self.validators: err=v.info_erreur_liste() if err != " " : l.append(err) chaine=" \n ou ".join(l) return chaine def is_list(self): """ Si plusieurs validateurs sont reliés par un OU il suffit qu'un seul des validateurs attende une liste pour qu'on considère que leur union attend une liste. """ for validator in self.validators: v=validator.is_list() if v : return 1 return 0 def verif(self,valeur): for validator in self.validators: v=validator.verif(valeur) if v : return 1 return 0 def verif_item(self,valeur): for validator in self.validators: v=validator.verif_item(valeur) if v : return 1 return 0 def verif_cata(self): infos=[] for validator in self.validators: v=validator.verif_cata() if not v :infos.append(validator.cata_info) if infos: self.cata_info="\n".join(infos) return 0 self.cata_info="" return 1 def has_into(self): """ Dans le cas ou plusieurs validateurs sont reliés par un OU il faut que tous les validateurs proposent un choix pour qu'on considère que leur union propose un choix. Exemple : Enum(1,2,3) OU entier pair, ne propose pas de choix En revanche, Enum(1,2,3) OU Enum(4,5,6) propose un choix (1,2,3,4,5,6) """ for validator in self.validators: v=validator.has_into() if not v : return 0 return 1 def get_into(self,liste_courante=None,into_courant=None): """ Dans le cas ou plusieurs validateurs sont reliés par un OU tous les validateurs doivent proposer un choix pour qu'on considère que leur union propose un choix. Tous les choix proposés par les validateurs sont réunis (opérateur d'union). Exemple : Enum(1,2,3) OU entier pair, ne propose pas de choix En revanche, Enum(1,2,3) OU Enum(4,5,6) propose un choix (1,2,3,4,5,6) """ validator_into=[] for validator in self.validators: v_into=validator.get_into(liste_courante,into_courant) if v_into is None: return v_into validator_into.extend(v_into) return validator_into def valide_liste_partielle(self,liste_courante=None): """ Méthode de validation de liste partielle pour le validateur Or. Si un des validateurs gérés par le validateur Or considère la liste comme valide, le validateur Or la considère comme valide. """ for validator in self.validators: v=validator.valide_liste_partielle(liste_courante) if v : return 1 return 0 class AndVal(Valid): """ Validateur operationnel Cette classe est un validateur qui controle une liste de validateurs Elle verifie que tous les validateurs de la liste valident la valeur """ def __init__(self,validators=()): if not is_enum(validators): validators=(validators,) self.validators=[] for validator in validators: if type(validator) == types.FunctionType: self.validators.append(FunctionVal(validator)) else: self.validators.append(validator) if hasattr(validator,'fonctions'): for fonction in validator.fonctions : f=getattr(validator,fonction) setattr(self,fonction,f) self.cata_info="" def info(self): return "\n et ".join([v.info() for v in self.validators]) def convert(self,valeur): for validator in self.validators: valeur=validator.convert(valeur) return valeur def info_erreur_item(self): chaine="" a=1 for v in self.validators: if v.info_erreur_item() != " " : if a==1: chaine=v.info_erreur_item() a=0 else: chaine=chaine+" \n et "+v.info_erreur_item() return chaine def info_erreur_liste(self): a=1 for v in self.validators: if v.info_erreur_liste() != " " : if a==1: chaine=v.info_erreur_liste() a=0 else: chaine=chaine+" \n et "+v.info_erreur_liste() return chaine def verif(self,valeur): for validator in self.validators: v=validator.verif(valeur) if not v : self.local_info=validator.info() return 0 return 1 def verif_item(self,valeur): for validator in self.validators: v=validator.verif_item(valeur) if not v : # L'info n'est probablement pas la meme que pour verif ??? self.local_info=validator.info() return 0 return 1 def verif_cata(self): infos=[] for validator in self.validators: v=validator.verif_cata() if not v :infos.append(validator.cata_info) if infos: self.cata_info="\n".join(infos) return 0 self.cata_info="" return 1 def valide_liste_partielle(self,liste_courante=None): """ Méthode de validation de liste partielle pour le validateur And. Tous les validateurs gérés par le validateur And doivent considérer la liste comme valide, pour que le validateur And la considère comme valide. """ for validator in self.validators: v=validator.valide_liste_partielle(liste_courante) if not v : return 0 return 1 def is_list(self): """ Si plusieurs validateurs sont reliés par un ET il faut que tous les validateurs attendent une liste pour qu'on considère que leur intersection attende une liste. Exemple Range(2,5) ET Card(1) n'attend pas une liste Range(2,5) ET Pair attend une liste """ for validator in self.validators: v=validator.is_list() if v == 0 : return 0 return 1 def has_into(self): """ Dans le cas ou plusieurs validateurs sont reliés par un ET il suffit qu'un seul validateur propose un choix pour qu'on considère que leur intersection propose un choix. Exemple : Enum(1,2,3) ET entier pair, propose un choix En revanche, entier pair ET superieur à 10 ne propose pas de choix """ for validator in self.validators: v=validator.has_into() if v : return 1 return 0 def get_into(self,liste_courante=None,into_courant=None): """ Dans le cas ou plusieurs validateurs sont reliés par un ET il suffit qu'un seul validateur propose un choix pour qu'on considère que leur intersection propose un choix. Tous les choix proposés par les validateurs sont croisés (opérateur d'intersection) Exemple : Enum(1,2,3) ET entier pair, propose un choix (2,) En revanche, Enum(1,2,3) ET Enum(4,5,6) ne propose pas de choix. """ for validator in self.validators: into_courant=validator.get_into(liste_courante,into_courant) if into_courant in ([],None):break return into_courant def do_liste(validators): """ Convertit une arborescence de validateurs en OrVal ou AndVal validators est une liste de validateurs ou de listes ou de tuples """ valids=[] for validator in validators: if type(validator) == types.FunctionType: valids.append(FunctionVal(validator)) elif type(validator) is tuple: valids.append(OrVal(do_liste(validator))) elif type(validator) is list: valids.append(AndVal(do_liste(validator))) else: valids.append(validator) return valids def validatorFactory(validator): if type(validator) == types.FunctionType: return FunctionVal(validator) elif type(validator) is tuple: return OrVal(do_liste(validator)) elif type(validator) is list: return AndVal(do_liste(validator)) else: return validator # Ci-dessous : exemples de validateur (peu testés) class RangeVal(ListVal): """ Exemple de classe validateur : verification qu'une valeur est dans un intervalle. Pour une liste on verifie que tous les elements sont dans l'intervalle Susceptible de remplacer les attributs "vale_min" "vale_max" dans les catalogues """ def __init__(self,low,high): self.low=low self.high=high self.cata_info="%s doit etre inferieur a %s" %(low,high) def info(self): return "valeur dans l'intervalle %s , %s" %(self.low,self.high) def convert_item(self,valeur): if valeur > self.low and valeur < self.high:return valeur raise ValError("%s devrait etre comprise entre %s et %s" %(valeur,self.low,self.high)) def verif_item(self,valeur): return valeur > self.low and valeur < self.high def info_erreur_item(self) : return "La valeur doit etre comprise entre %s et %s" % (self.low, self.high) def verif_cata(self): if self.low > self.high : return 0 return 1 class CardVal(Valid): """ Exemple de classe validateur : verification qu'une liste est d'une longueur superieur a un minimum (min) et inferieure a un maximum (max). Susceptible de remplacer les attributs "min" "max" dans les catalogues """ def __init__(self,min='**',max='**'): self.min=min self.max=max self.cata_info="%s doit etre inferieur a %s" % (min,max) def info(self): return "longueur de liste comprise entre %s et %s" % (self.min,self.max) def info_erreur_liste(self): return "Le cardinal de la liste doit etre compris entre %s et %s" % (self.min,self.max) def is_list(self): return self.max == '**' or self.max > 1 def get_into(self,liste_courante=None,into_courant=None): if into_courant is None: return None elif liste_courante is None: return into_courant elif self.max == '**': return into_courant elif len(liste_courante) < self.max: return into_courant else: return [] def convert(self,valeur): if is_enum(valeur): l=len(valeur) elif valeur is None: l=0 else: l=1 if self.max != '**' and l > self.max:raise ValError("%s devrait etre de longueur inferieure a %s" %(valeur,self.max)) if self.min != '**' and l < self.min:raise ValError("%s devrait etre de longueur superieure a %s" %(valeur,self.min)) return valeur def verif_item(self,valeur): return 1 def verif(self,valeur): if is_enum(valeur): if self.max != '**' and len(valeur) > self.max:return 0 if self.min != '**' and len(valeur) < self.min:return 0 return 1 else: if self.max != '**' and 1 > self.max:return 0 if self.min != '**' and 1 < self.min:return 0 return 1 def verif_cata(self): if self.min != '**' and self.max != '**' and self.min > self.max : return 0 return 1 def valide_liste_partielle(self,liste_courante=None): validite=1 if liste_courante != None : if len(liste_courante) > self.max : validite=0 return validite class PairVal(ListVal): """ Exemple de classe validateur : verification qu'une valeur est paire. Pour une liste on verifie que tous les elements sont pairs """ def __init__(self): ListVal.__init__(self) self.cata_info="" def info(self): return "valeur paire" def info_erreur_item(self): return "La valeur saisie doit etre paire" def convert(self,valeur): for val in valeur: v=self.adapt(val) if v % 2 != 0:raise ValError("%s contient des valeurs non paires" % repr(valeur)) return valeur def default(self,valeur): return valeur def verif_item(self,valeur): if type(valeur) not in (int,long): return 0 return valeur % 2 == 0 def verif(self,valeur): if is_enum(valeur): for val in valeur: if val % 2 != 0:return 0 return 1 else: if valeur % 2 != 0:return 0 return 1 class EnumVal(ListVal): """ Exemple de classe validateur : verification qu'une valeur est prise dans une liste de valeurs. Susceptible de remplacer l attribut "into" dans les catalogues """ def __init__(self,into=()): if not is_enum(into): into=(into,) self.into=into self.cata_info="" def info(self): return "valeur dans %s" % `self.into` def convert_item(self,valeur): if valeur in self.into:return valeur raise ValError("%s contient des valeurs hors des choix possibles: %s " %(valeur,self.into)) def verif_item(self,valeur): if valeur not in self.into:return 0 return 1 def has_into(self): return 1 def get_into(self,liste_courante=None,into_courant=None): if into_courant is None: liste_choix= list(self.into) else: liste_choix=[] for e in into_courant: if e in self.into: liste_choix.append(e) return liste_choix def info_erreur_item(self): return "La valeur n'est pas dans la liste des choix possibles" def ImpairVal(valeur): """ Exemple de validateur Cette fonction est un validateur. Elle verifie que la valeur passee est bien un nombre impair. """ if is_enum(valeur): for val in valeur: if val % 2 != 1:return 0 return 1 else: if valeur % 2 != 1:return 0 return 1 ImpairVal.info="valeur impaire" class F1Val(Valid): """ Exemple de validateur Cette classe est un validateur de dictionnaire (mot cle facteur ?). Elle verifie que la somme des cles A et B vaut une valeur donnee en parametre du validateur """ def __init__(self,somme=10): self.somme=somme self.cata_info="" def info(self): return "valeur %s pour la somme des cles A et B " % self.somme def verif(self,valeur): if is_enum(valeur): for val in valeur: if not val.has_key("A"):return 0 if not val.has_key("B"):return 0 if val["A"]+val["B"] != self.somme:return 0 return 1 else: if not valeur.has_key("A"):return 0 if not valeur.has_key("B"):return 0 if valeur["A"]+valeur["B"] != self.somme:return 0 return 1 class FunctionVal(Valid): """ Exemple de validateur Cette classe est un validateur qui est initialise avec une fonction """ def __init__(self,function): self.function=function def info(self): return self.function.info def verif(self,valeur): return self.function(valeur) #MC ca ne devrait plus servir ! CoercableFuncs = { types.IntType: int, types.LongType: long, types.FloatType: float, types.ComplexType: complex, types.UnicodeType: unicode } class TypeVal(ListVal): """ Exemple de validateur Cette classe est un validateur qui controle qu'une valeur est bien du type Python attendu. Pour une liste on verifie que tous les elements sont du bon type. Semblable a InstanceVal mais ici on fait le test par tentative de conversion alors qu'avec InstanceVal on ne teste que si isinstance est vrai. """ def __init__(self, aType): #Si aType n'est pas un type, on le retrouve a l'aide de la fonction type #type(1) == int;type(0.2)==float;etc. if type(aType) != types.TypeType: aType=type(aType) self.aType=aType try: self.coerce=CoercableFuncs[ aType ] except: self.coerce = self.identity def info(self): return "valeur de %s" % self.aType def identity ( self, value ): if type( value ) == self.aType: return value raise ValError def convert_item(self,valeur): return self.coerce(valeur) def verif_item(self,valeur): try: self.coerce(valeur) except: return 0 return 1 class InstanceVal(ListVal): """ Exemple de validateur Cette classe est un validateur qui controle qu'une valeur est bien une instance (au sens Python) d'une classe Pour une liste on verifie chaque element de la liste """ def __init__(self,aClass): #Si aClass est une classe on la memorise dans self.aClass #sinon c'est une instance dont on memorise la classe if type(aClass) == types.InstanceType: #instance ancienne mode aClass=aClass.__class__ elif type(aClass) == types.ClassType: #classe ancienne mode aClass=aClass elif type(aClass) == type: #classe nouvelle mode aClass=aClass elif isinstance(aClass,object): #instance nouvelle mode aClass=type(aClass) else: raise ValError("type non supporte") self.aClass=aClass def info(self): return "valeur d'instance de %s" % self.aClass.__name__ def verif_item(self,valeur): if not isinstance(valeur,self.aClass): return 0 return 1 class VerifTypeTuple(Valid,ListVal) : def __init__(self,typeDesTuples): self.typeDesTuples=typeDesTuples Valid.__init__(self) self.cata_info="" def info(self): return ": verifie les types dans un tuple" def info_erreur_liste(self): return "Les types entres ne sont pas permis" def default(self,valeur): #if valeur in self.liste : raise ValError("%s est un doublon" % valeur) return valeur def is_list(self) : return 1 def convert_item(self,valeur): if len(valeur) != len(self.typeDesTuples): raise ValError("%s devrait etre de type %s " %(valeur,self.typeDesTuples)) for i in range(len(valeur)) : ok=self.verifType(valeur[i],self.typeDesTuples[i]) if ok!=1 : raise ValError("%s devrait etre de type %s " %(valeur,self.typeDesTuples)) return valeur def verif_item(self,valeur): try : if len(valeur) != len(self.typeDesTuples): return 0 for i in range(len(valeur)) : ok=self.verifType(valeur[i],self.typeDesTuples[i]) if ok!=1: return 0 except : return 0 return 1 def verifType(self,valeur,type_permis): if type_permis == 'R': if type(valeur) in (types.IntType,types.FloatType,types.LongType):return 1 elif type_permis == 'I': if type(valeur) in (types.IntType,types.LongType):return 1 elif type_permis == 'C': if self.is_complexe(valeur):return 1 elif type_permis == 'TXM': if type(valeur)==types.StringType:return 1 return 0 def verif(self,valeur): if type(valeur) in (types.ListType,types.TupleType): liste=list(valeur) for val in liste: if self.verif_item(val)!=1 : return 0 return 1 class VerifExiste(ListVal) : """ fonctionne avec into Met une liste à jour selon les mot clefs existant exemple si into = ("A","B","C") si au niveau N du JDC les objets "A" et "C" existe alors la liste des into deviendra ( "A","C") niveauVerif est le niveau du JDC dans lequel va s effectuer la verification niveauVerif est defini par rapport au Noeud : exemple niveauVerif = 1 : on verifie les freres niveauVerif = 2 : on verifie les oncles.. """ def __init__(self,niveauVerif): ListVal.__init__(self) self.niveauVerif=niveauVerif self.MCSimp=None self.listeDesFreres=() self.fonctions=('verifie_liste','set_MCSimp') def is_list(self): return 1 def verifie_liste(self,liste): self.set_MCSimp(self.MCSimp) for item in liste : if not( item in self.listeDesFreres) : return 0 return 1 def verif_item(self,valeur): self.set_MCSimp(self.MCSimp) if valeur in self.listeDesFreres : return 1 return 0 def set_MCSimp(self, MCSimp) : self.MCSimp=MCSimp k=self.niveauVerif mc=MCSimp while (k != 0) : parent=mc.parent mc=parent k=k-1 #on met la liste à jour parent.forceRecalcul=self.niveauVerif self.listeDesFreres=parent.liste_mc_presents() def convert_item(self,valeur): if valeur in self.listeDesFreres : return valeur raise ValError(str(valeur)+" n est pas dans " + str(self.listeDesFreres)) eficas-6.4.0/Noyau/N_FORM_ETAPE.py0000644004705000470430000000305411444664426016651 0ustar courtoisasterdev#@ MODIF N_FORM_ETAPE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== import N_MACRO_ETAPE class FORM_ETAPE(N_MACRO_ETAPE.MACRO_ETAPE): """ Cette classe sert à construire l'objet ACCAS correspondant à une FORMULE Aster. Il s'agit d'un objet MACRO_ETAPE légèrement modifié """ eficas-6.4.0/Noyau/N_ASSD.py0000644004705000470430000001465111667117123015721 0ustar courtoisasterdev#@ MODIF N_ASSD Noyau DATE 25/10/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. # # 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. # ====================================================================== """ """ from N_utils import import_object from N_info import message, SUPERV class ASSD(object): """ Classe de base pour definir des types de structures de donnees ASTER equivalent d un concept ASTER """ idracine="SD" def __init__(self, etape=None, sd=None, reg='oui'): """ reg est un paramètre qui vaut oui ou non : - si oui (défaut) : on enregistre la SD auprès du JDC - si non : on ne l'enregistre pas """ self.etape = etape self.sd = sd self.nom = None if etape: self.parent = etape.parent else: self.parent = CONTEXT.get_current_step() if self.parent : self.jdc = self.parent.get_jdc_root() else: self.jdc = None if not self.parent: self.id = None elif reg == 'oui' : self.id = self.parent.reg_sd(self) else : self.id = self.parent.o_register(self) # permet de savoir si le concept a été calculé (1) ou non (0) self.executed = 0 # permet de savoir si le catalogue de SD a déjà été supprimé (1) ou non (0) self.sd_deleted = 0 # attributs pour le Catalogue de Structure de Données Jeveux # "self.cata_sdj" est un attribut de classe #XXX si on nomme ces attributs _sdj/_class_sdj, pb en poursuite : #XXX dans rebuild_sd, self n'a pas ces attributs qui ne sont donc #XXX pas recopiés... !? self.ptr_class_sdj = None self.ptr_sdj = None def _get_sdj(self): """Retourne le catalogue de SD associé au concept.""" if self.ptr_sdj is None: cata_sdj = getattr(self, 'cata_sdj', None) assert cata_sdj, "L'attribut 'cata_sdj' doit être défini pour la classe %s" \ % self.__class__.__name__ assert self.nom, "L'attribut 'nom' n'a pas été renseigné !" if self.ptr_class_sdj is None: self.ptr_class_sdj = import_object(cata_sdj) self.ptr_sdj = self.ptr_class_sdj(nomj=self.nom) return self.ptr_sdj def _del_sdj(self): """Suppression du catalogue de SD.""" if self.ptr_sdj is not None: self.ptr_sdj.supprime(True) self.ptr_sdj = None self.ptr_class_sdj = None sdj = property(_get_sdj, None, _del_sdj) def __getitem__(self,key): return self.etape[key] def set_name(self, nom): """Positionne le nom de self (et appelle sd_init) """ self.nom = nom def change_type(self, new_type): """Type connu a posteriori (type CO).""" self.__class__ = new_type def get_name(self): """ Retourne le nom de self, éventuellement en le demandant au JDC """ if not self.nom : try: self.nom = self.parent.get_name(self) or self.id except: self.nom = "" if self.nom.find('sansnom') != -1 or self.nom == '': self.nom = self.id return self.nom def supprime(self): """ Cassage des boucles de références pour destruction du JDC """ self.supprime_sd() self.etape = None self.sd = None self.jdc = None self.parent = None def supprime_sd(self): """Supprime la partie du catalogue de SD.""" # 'del self.sdj' appellerait la méthode '_get_sdj()'... self._del_sdj() def __del__(self): message.debug(SUPERV, "__del__ ASSD %s <%s>", getattr(self, 'nom', 'unknown'), self) def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets en utilisant le pattern VISITEUR """ visitor.visitASSD(self) def __getstate__(self): """ Cette methode permet de pickler les objets ASSD Ceci est possible car on coupe les liens avec les objets parent, etape et jdc qui conduiraient à pickler de nombreux objets inutiles ou non picklables. En sortie, l'objet n'est plus tout à fait le même ! """ d = self.__dict__.copy() for key in ('parent', 'etape', 'jdc'): if d.has_key(key): del d[key] for key in d.keys(): if key[0] == '_': del d[key] return d def accessible(self): """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD. """ if CONTEXT.debug: print '| accessible ?', self.nom is_accessible = CONTEXT.get_current_step().sd_accessible() if CONTEXT.debug: print ' `- is_accessible =', repr(is_accessible) return is_accessible def par_lot(self): """Conserver uniquement pour la compatibilite avec le catalogue v9 dans eficas.""" #XXX eficas if not hasattr(self, 'jdc') or self.jdc == None: val = None else: val = self.jdc.par_lot return val == 'OUI' def rebuild_sd(self): """Conserver uniquement pour la compatibilite avec le catalogue v10 dans eficas.""" class assd(ASSD): def __convert__(cls, valeur): # On accepte les vraies ASSD et les objets 'entier' et 'reel' # qui font tout pour se faire passer pour de vrais entiers/réels. if isinstance(valeur, ASSD) or type(valeur) in (int, float): return valeur raise ValueError("On attend un objet concept.") __convert__ = classmethod(__convert__) class not_checked(ASSD): def __convert__(cls, valeur): return valeur __convert__ = classmethod(__convert__) eficas-6.4.0/Noyau/N_PROC_ETAPE.py0000644004705000470430000001161011444664426016646 0ustar courtoisasterdev#@ MODIF N_PROC_ETAPE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe PROC_ETAPE qui sert à vérifier et à exécuter une procédure """ # Modules Python import types,sys,string import traceback # Modules EFICAS import N_MCCOMPO, N_ETAPE from N_Exception import AsException import N_utils class PROC_ETAPE(N_ETAPE.ETAPE): """ Cette classe hérite de ETAPE. La seule différence porte sur le fait qu'une procédure n'a pas de concept produit """ nature = "PROCEDURE" def __init__(self,oper=None,args={}): """ Attributs : - definition : objet portant les attributs de définition d'une étape de type opérateur. Il est initialisé par l'argument oper. - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé avec l'argument args. """ self.definition=oper self.valeur=args self.nettoiargs() self.parent=CONTEXT.get_current_step() self.etape = self self.nom=oper.nom self.idracine=oper.label self.appel=N_utils.callee_where() self.mc_globaux={} self.sd=None self.actif=1 self.make_register() def make_register(self): """ Initialise les attributs jdc, id, niveau et réalise les enregistrements nécessaires """ if self.parent : self.jdc = self.parent.get_jdc_root() self.id=self.parent.register(self) self.niveau=None else: self.jdc = self.parent =None self.id=None self.niveau=None def McBuild(self): """ Demande la construction des sous-objets et les stocke dans l'attribut mc_liste. """ self.mc_liste=self.build_mc() def Build_sd(self): """ Cette methode applique la fonction op_init au contexte du parent et lance l'exécution en cas de traitement commande par commande Elle doit retourner le concept produit qui pour une PROC est toujours None En cas d'erreur, elle leve une exception : AsException ou EOFError """ if not self.isactif():return try: if self.parent: if type(self.definition.op_init) == types.FunctionType: apply(self.definition.op_init,(self,self.parent.g_context)) else: pass except AsException,e: raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], 'fichier : ',self.appel[1],e) except EOFError: raise except : l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], 'fichier : ',self.appel[1]+'\n', string.join(l)) self.Execute() return None def supprime(self): """ Méthode qui supprime toutes les références arrières afin que l'objet puisse etre correctement détruit par le garbage collector """ N_MCCOMPO.MCCOMPO.supprime(self) self.jdc=None self.appel=None def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets en utilisant le pattern VISITEUR """ visitor.visitPROC_ETAPE(self) def update_context(self,d): """ Met à jour le contexte de l'appelant passé en argument (d) Une PROC_ETAPE n ajoute pas directement de concept dans le contexte Seule une fonction enregistree dans op_init pourrait le faire """ if type(self.definition.op_init) == types.FunctionType: apply(self.definition.op_init,(self,d)) eficas-6.4.0/Noyau/N_MCBLOC.py0000644004705000470430000001171311444664426016130 0ustar courtoisasterdev#@ MODIF N_MCBLOC Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe MCBLOC qui sert à controler la valeur d'un bloc de mots-clés par rapport à sa définition portée par un objet de type ENTITE """ import types import N_MCCOMPO class MCBLOC(N_MCCOMPO.MCCOMPO): """ Classe support d'un bloc de mots-clés. """ nature = "MCBLOC" def __init__(self,val,definition,nom,parent): """ Attributs : - val : valeur du bloc (dictionnaire dont les clés sont des noms de mots-clés et les valeurs les valeurs des mots-clés) - definition : objet de définition de type BLOC associé au bloc (porte les attributs de définition) - nom : nom du bloc. Ce nom lui est donné par celui qui crée le bloc de mot-clé - parent : le créateur du bloc. Ce peut etre un mot-clé facteur ou un autre objet composite de type OBJECT. Si parent vaut None, le bloc ne possède pas de contexte englobant. - mc_liste : liste des sous-objets du bloc construite par appel à la méthode build_mc """ self.definition=definition self.nom=nom self.val = val self.parent = parent self.valeur = val if parent : self.jdc = self.parent.jdc self.niveau = self.parent.niveau self.etape = self.parent.etape else: # Le mot cle a été créé sans parent self.jdc = None self.niveau = None self.etape = None self.mc_liste=self.build_mc() def get_valeur(self): """ Retourne la "valeur" de l'objet bloc. Il s'agit d'un dictionnaire dont les clés seront les noms des objets de self.mc_liste et les valeurs les valeurs des objets de self.mc_liste obtenues par application de la méthode get_valeur. Dans le cas particulier d'un objet bloc les éléments du dictionnaire obtenu par appel de la méthode get_valeur sont intégrés au niveau supérieur. """ dico={} for mocle in self.mc_liste: if mocle.isBLOC(): # Si mocle est un BLOC, on inclut ses items dans le dictionnaire # représentatif de la valeur de self. Les mots-clés fils de blocs sont # donc remontés au niveau supérieur. dico.update(mocle.get_valeur()) else: dico[mocle.nom]=mocle.get_valeur() # On rajoute tous les autres mots-clés locaux possibles avec la valeur # par défaut ou None # Pour les mots-clés facteurs, on ne traite que ceux avec statut défaut ('d') # et caché ('c') # On n'ajoute aucune information sur les blocs. Ils n'ont pas de défaut seulement # une condition. for k,v in self.definition.entites.items(): if not dico.has_key(k): if v.label == 'SIMP': # Mot clé simple dico[k]=v.defaut elif v.label == 'FACT': if v.statut in ('c','d') : # Mot clé facteur avec défaut ou caché provisoire dico[k]=v(val=None,nom=k,parent=self) # On demande la suppression des pointeurs arrieres # pour briser les eventuels cycles dico[k].supprime() else: dico[k]=None return dico def isBLOC(self): """ Indique si l'objet est un BLOC """ return 1 def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets en utilisant le pattern VISITEUR """ visitor.visitMCBLOC(self) def makeobjet(self): return self.definition(val = None, nom = self.nom,parent = self.parent) eficas-6.4.0/Noyau/N_CR.py0000644004705000470430000002163411655732717015503 0ustar courtoisasterdev#@ MODIF N_CR Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe compte-rendu de validation """ import string class CR : """ Classe servant à la construction et à l'affichage des objets Comptes-rendus """ def __init__(self,verbeux = 'non',debut='',fin='',dec=' '): """ Attributs - verbeux - debut - fin - dec """ self.verbeux = verbeux self.debut=debut self.fin=fin self.dec=dec self.crok=[] self.crwarn=[] self.crfatal=[] self.crexception=[] self.subcr=[] def ok(self,comment): """ Ajoute un commentaire OK à la liste crok""" self.crok.append(comment) def warn(self,comment): """ Ajoute un commentaire Warning à la liste crwarn""" self.crwarn.append(comment) def fatal(self,comment): """ Ajoute un commentaire Erreur Fatale à la liste crfatal""" self.crfatal.append(comment) def exception(self,comment): """ Ajoute un commentaire Exception à la liste crexception""" self.crexception.append(comment) def add(self,cr): """ Ajoute un objet CR à la liste subcr :il s'agit de l'objet CR d'un fils de self """ self.subcr.append(cr) def estvide(self): """ Retourne 1 si self ne contient aucun message grave (fatal ou exception) et aucun CR qui en contienne, 0 sinon """ if self.crexception : return 0 if self.crfatal : return 0 for s in self.subcr : if not s.estvide(): return 0 return 1 def purge(self): """ Purge complètement le CR sauf les exceptions """ self.debut='' self.fin='' self.dec=' ' self.crok=[] self.crwarn=[] self.crfatal=[] self.subcr=[] def beautifie_messages(self): """ Beautifie les messages stockés dans crok,crfatal,crexception et crwarn """ l=[] for mess in self.crok: l.append(mess+'\n') self.crok_belle=l l=[] for mess in self.crwarn: l.append(encadre_message(mess,'*')) self.crwarn_belle = l l=[] for mess in self.crfatal: l.append(encadre_message(mess,'!')) self.crfatal_belle = l l=[] for mess in self.crexception: l.append(encadre_message(mess,'!')) self.crexception_belle = l def indent(self,s): """ Insère en tete de chaque ligne du texte s la chaine self.dec """ l = string.split(s,'\n') return self.dec+string.join(l,'\n'+self.dec)[:-3] def __str__(self): """ Retourne une chaine de caractères décorée et représentative de self """ s='' self.beautifie_messages() s=s+string.join(self.crok_belle,'') s=s+string.join(self.crwarn_belle,'') s=s+string.join(self.crfatal_belle,'') s=s+string.join(self.crexception_belle,'') for subcr in self.subcr: if self.verbeux == 'oui': s=s+str(subcr)+'\n' else: if not subcr.estvide(): s=s+str(subcr) if s != '': s=self.debut+'\n'+self.indent(s)+self.fin+'\n' else : s=self.debut+'\n'+self.fin+'\n' return s def report(self,decalage = 2): """ Retourne une chaine de caractères non encadrée mais représentative de self """ s='' # on stocke dans s les messages de premier niveau for mess in self.crok : s=s + decalage*self.dec + mess + self.dec + '\n' for mess in self.crwarn: s=s + decalage*self.dec + mess + self.dec + '\n' for mess in self.crfatal: s=s + decalage*self.dec + mess + self.dec + '\n' for mess in self.crexception: s=s + decalage*self.dec + mess + self.dec + '\n' # on récupère les messages des sous comptes-rendus ... for subcr in self.subcr: if not subcr.estvide(): s=s+subcr.report(decalage = decalage + 1) # on rajoute les flags de début et de fin ... (si self n'est pas vide) if not self.estvide() : s = (decalage-1)*self.dec+self.debut+'\n'+s+ \ (decalage-1)*self.dec+self.fin+'\n' return s def get_mess_fatal(self): """ Retourne une chaine de caractères contenant les messages de la liste crfatal (du dernier au premier) """ self.crfatal.reverse() s='' for elem in self.crfatal : s=s+elem self.crfatal.reverse() return s def get_mess_exception(self): """ Retourne une chaine de caractères contenant les messages de la liste crexception (du dernier au premier) """ self.crexception.reverse() s='' for elem in self.crexception : s=s+elem self.crexception.reverse() return s def justify_text_old(texte='',cesure=50): """ Prend la chaine de caractères 'texte' et la retourne avec un retour chariot tous les 'cesure' caractères s'il y a lieu (le retour chariot est placé dans un blanc et non au milieu d'un mot """ texte = string.strip(texte) if len(texte) < cesure : return texte liste_lignes = string.split(texte,'\n') texte_justifie = '' for ligne in liste_lignes : ligne = string.strip(ligne) if len(ligne) <= cesure : texte_justifie = texte_justifie + ligne + '\n' continue longueur = 0 new_text = '' liste_mots = string.split(ligne,' ') for mot in liste_mots : new_longueur = longueur + len(mot)+1 if new_longueur < cesure : new_text = new_text+' '+mot longueur = longueur + len(mot) + 1 else : longueur = 0 new_text = new_text + '\n'+mot texte_justifie = texte_justifie + string.strip(new_text) + '\n' return texte_justifie[0:-1] def encadre_message_old(texte,motif): """ Retourne la chaine de caractères texte entourée d'un cadre formés d'éléments 'motif' """ texte = justify_text(texte,cesure=80) lignes = string.split(texte,'\n') longueur = 0 for ligne in lignes : if len(ligne)> longueur : longueur = len(ligne) longueur = longueur + 4 txt = motif*longueur+'\n' for ligne in lignes : txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n' txt = txt + motif*longueur+'\n' return txt separateurs=(' ',',','/') def split(ligne,cesure): ligne= string.rstrip(ligne) if len(ligne) <= cesure : return ligne else: coupure=cesure while ligne[coupure] not in separateurs and coupure > 0: coupure = coupure - 1 if coupure == 0: # Il faut augmenter la cesure coupure =cesure while ligne[coupure] not in separateurs and coupure < len(ligne)-1 : coupure = coupure + 1 if coupure == len(ligne)-1: return ligne else: return ligne[:coupure+1]+ '\n' + split(ligne[coupure+1:],cesure) def justify_text(texte='',cesure=50): texte = string.strip(texte) liste_lignes = string.split(texte,'\n') l=[split(l,cesure) for l in liste_lignes] texte_justifie=string.join(l,'\n') return texte_justifie def encadre_message(texte,motif): """ Retourne la chaine de caractères texte entourée d'un cadre formés d'éléments 'motif' """ texte = justify_text(texte,cesure=80) lignes = string.split(texte,'\n') longueur = 0 for ligne in lignes : ligne=string.rstrip(ligne) if len(ligne)> longueur : longueur = len(ligne) longueur = longueur + 4 txt = motif*longueur+'\n' for ligne in lignes : txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n' txt = txt + motif*longueur+'\n' return txt eficas-6.4.0/Noyau/N_SENSIBILITE.py0000644004705000470430000001620711444664426016746 0ustar courtoisasterdev#@ MODIF N_SENSIBILITE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # 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. # ====================================================================== """ Ce module contient les règles nécessaires aux commandes sensibles pour renseigner l'attribut etape.sd.sensi, gérer le caractère réentrant sur présence de la sensibilité. """ from types import TupleType, ListType EnumTypes = (TupleType, ListType) from N_REGLE import REGLE # ----------------------------------------------------------------------------- class CONCEPT_SENSIBLE(REGLE): """Règle permettant de renseigner au niveau du catalogue comment sera rempli le concept (valeur nominale ou dérivée(s) ou les deux...). """ def __init__(self, mode, mocle='SENSIBILITE'): """Constructeur. mode : manière dont la commande rempli le concept - 'ENSEMBLE' : concept nominal ET dérivées en une seule passe - 'SEPARE' : concept nominal OU dérivée (une ou plusieurs) mocle : mot-clé contenant les paramètres sensibles. """ REGLE.__init__(self) self.mocle = mocle self._modes = { 'ENSEMBLE' : 0, 'SEPARE' : 1 } self.mode = self._modes.get(mode, self._modes['ENSEMBLE']) def gettext(self): """Pour EFICAS """ return '' def verif(self, args): """Retourne texte + 1 si ok, 0 si nook. On stocke dans sd.sensi l'étape courante, c'est-à-dire celle qui renseigne le concept si cela n'a pas déjà été fait (car verif est appelé à chaque validation). """ obj = args["self"] etape = obj.etape id_etape = '%s_%s' % (etape.id, id(etape)) if etape.sd == None: return '',1 if not hasattr(etape.sd,"sensi"): etape.sd.sensi = {} # si ENSEMBLE, la sd nominale est forcément produite if self.mode == self._modes['ENSEMBLE'] and not etape.sd.sensi.has_key('nominal'): etape.sd.sensi['nominal'] = id_etape # liste des paramètres sensibles valeur = obj[self.mocle] if valeur == None: # pas de sensibilité, la sd nominale est produite if not etape.sd.sensi.has_key('nominal'): etape.sd.sensi['nominal'] = id_etape return '', 1 if not type(valeur) in EnumTypes: valeur = [valeur,] for v in valeur: if not etape.sd.sensi.has_key(v.get_name()): etape.sd.sensi[v.get_name()] = id_etape return '', 1 # ----------------------------------------------------------------------------- class REUSE_SENSIBLE(REGLE): """Limite le caractère réentrant de la commande. On autorisera reuse seulement si le concept (au sens fortran) n'a pas déjà été calculé (d'après sd.sensi). Ce sera interdit dans les cas suivants : - sd nominale calculée et SENSIBILITE absent - PS1 dans SENSIBILITE et sd dérivée par rapport à PS1 calculée """ def __init__(self, mocle='SENSIBILITE'): """Constructeur. mocle : mot-clé SENSIBILITE. """ REGLE.__init__(self) self.mocle = mocle def gettext(self): """Pour EFICAS """ return '' def verif(self,args): """Retourne texte + 1 si ok, 0 si nook = reuse interdit. Comme CONCEPT_SENSIBLE est appelé avant (et à chaque validation), on regarde si sd.sensi[ps] a été renseigné par une étape précédente. """ obj = args["self"] etape = obj.etape id_etape = '%s_%s' % (etape.id, id(etape)) sd = etape.sd # si la commande n'est pas réentrante, rien à faire if etape.reuse is not None: valeur = obj[self.mocle] if valeur is None: if not hasattr(sd, 'sensi') or sd.sensi.get('nominal', id_etape) != id_etape: # pas de sensibilite et concept nominal déjà calculé : reuse interdit text = "Commande non réentrante en l'absence de sensibilité." return text, 0 else: if not type(valeur) in EnumTypes: valeur = [valeur,] for ps in valeur: if hasattr(sd, 'sensi') and sd.sensi.get(ps.nom, id_etape) != id_etape: # concept dérivé par rapport à ps déjà calculé : reuse interdit text = "Commande non réentrante : dérivée par rapport à %s déjà calculée" % ps.nom return text, 0 return '', 1 # ----------------------------------------------------------------------------- class DERIVABLE(REGLE): """Déclare que le concept fourni derrière un mot-clé est dérivable. Sa présence ne suffit pas à le valider, il faut encore que son attribut '.sensi' soit cohérent avec le contenu du mot-clé SENSIBILITE (ou l'absence de celui-ci). """ def __init__(self, mocle): """Constructeur. mocle : mot-clé dérivable. """ REGLE.__init__(self) self.mocle = mocle def gettext(self): """Pour EFICAS """ return '' def verif(self,args): """ """ obj = args["self"] try: concept = obj[self.mocle] except IndexError: return '', 1 if not type(concept) in EnumTypes: concept = [concept,] l_ps = obj["SENSIBILITE"] for co in concept: if co is None: text = "Concept non défini (None) sous le mot-clé %s" % self.mocle return text, 0 if not l_ps: # pas de sensibilité if hasattr(co,"sensi") and not co.sensi.get('nominal'): text = "%s ne contient que des valeurs dérivées, utilisez le mot cle SENSIBILITE" %\ co.nom return text, 0 else: # sensibilité spécifiée if not type(l_ps) in EnumTypes: l_ps = [l_ps,] for ps in l_ps: if not hasattr(co,"sensi") or not co.sensi.get(ps.nom): text = "La dérivée de %s par rapport à %s n'est pas disponible." %\ (co.nom, ps.nom) return text, 0 return '', 1 eficas-6.4.0/Noyau/N_Exception.py0000644004705000470430000000327411444664426017132 0ustar courtoisasterdev#@ MODIF N_Exception Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe AsException """ # Modules Python import types class AsException(Exception): def __str__(self): if not self.args: return '' elif len(self.args) == 1: return str(self.args[0]) else: s='' for e in self.args: if type(e) == types.StringType: s=s+ ' ' + e else:s=s+ ' ' + str(e) return s eficas-6.4.0/Noyau/N_CO.py0000644004705000470430000000436211444664426015474 0ustar courtoisasterdev#@ MODIF N_CO Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== from N_ASSD import ASSD from N_Exception import AsException from N_VALIDATOR import ValError import N_utils from asojb import AsBase class CO(ASSD, AsBase): def __init__(self,nom): ASSD.__init__(self,etape=None,sd=None,reg='oui') # # On demande le nommage du concept # if self.parent : try: self.parent.NommerSdprod(self,nom) except AsException,e: appel=N_utils.callee_where(niveau=2) raise AsException("Concept CO, fichier: ",appel[1]," ligne : ",appel[0],'\n',e) else: self.nom=nom def __convert__(cls,valeur): if hasattr(valeur,'_etape') : # valeur est un concept CO qui a ete transforme par type_sdprod if valeur.etape == valeur._etape: # le concept est bien produit par l'etape return valeur raise ValError("Pas un concept CO") __convert__=classmethod(__convert__) eficas-6.4.0/Noyau/N_REGLE.py0000644004705000470430000000650011444664426016025 0ustar courtoisasterdev#@ MODIF N_REGLE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe mere pour les classes de definition des regles d exclusion. La classe REGLE est la classe de base : elle est virtuelle, elle ne doit pas etre instanciee. Les classes regles dérivées qui seront instanciées doivent implementer la methode verif dont l argument est le dictionnaire des mots cles effectivement presents sur lesquels sera operee la verification de la regle A la creation de l'objet regle on lui passe la liste des noms de mots cles concernes Exemple :: # Création de l'objet règle UNPARMI r=UNPARMI("INFO","AFFE") # Vérification de la règle r sur le dictionnaire passé en argument r.verif({"INFO":v1,"AFFE":v2) """ import types class REGLE: def __init__(self,*args): """ Les classes dérivées peuvent utiliser cet initialiseur par défaut ou le surcharger """ self.mcs=args def verif(self,args): """ Les classes dérivées doivent implémenter cette méthode qui doit retourner une paire dont le premier élément est une chaine de caractère et le deuxième un entier. L'entier peut valoir 0 ou 1. -- s'il vaut 1, la règle est vérifiée s'il vaut 0, la règle n'est pas vérifiée et le texte joint contient un commentaire de la non validité. """ raise "NotImplemented : class REGLE should be derived" def liste_to_dico(self,args): """ Cette méthode est utilitaire pour les seuls besoins des classes dérivées. Elle transforme une liste de noms de mots clés en un dictionnaire équivalent dont les clés sont les noms des mts-clés Ceci permet d'avoir un traitement identique pour les listes et les dictionnaires """ if type(args) == types.DictionaryType: return args elif type(args) == types.ListType: dico={} for arg in args : dico[arg]=0 return dico else : raise "Erreur ce n'est ni un dictionnaire ni une liste",args eficas-6.4.0/Noyau/N_utils.py0000644004705000470430000001330511655732717016333 0ustar courtoisasterdev#@ MODIF N_utils Noyau DATE 28/06/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. # # 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. # ====================================================================== """ Ce module contient des fonctions utilitaires """ # Modules Python import sys # Modules EFICAS from N_Exception import AsException from N_types import is_int, is_float, is_complex, is_str, is_enum, is_assd SEP='_' try: # Si la version de Python possede la fonction _getframe # on l'utilise. cur_frame=sys._getframe except: # Sinon on l'emule def cur_frame(offset=0): """ Retourne la frame d execution effective eventuellement en remontant de offset niveaux dans la pile d execution Si il y a moins de offset niveaux retourne None """ try:1/0 except: frame=sys.exc_info()[2].tb_frame.f_back while offset > 0: if frame == None:return None frame=frame.f_back offset=offset-1 return frame def callee_where(niveau=4): """ recupere la position de l appel """ frame=cur_frame(niveau) if frame == None: return 0,"inconnu",0,{} try: return frame.f_lineno,frame.f_code.co_filename,frame.f_code.co_firstlineno,frame.f_locals except: return 0,"inconnu",0,{} def AsType(a): """ Retourne le type d'un concept (a) à partir des caracteristiques de l'objet Python """ if is_enum(a): return AsType(a[0]) if is_assd(a): return type(a) if is_float(a): return "R" if is_int(a): return "I" if is_str(a): return "TXM" if a == None: return None print 'a=', a, type(a) raise AsException("type inconnu") def prbanner(s): print "*"*(len(s)+10) print "*"*5 + s + "*"*5 print "*"*(len(s)+10) def repr_float(valeur): """ Cette fonction represente le reel valeur comme une chaine de caracteres sous forme mantisse exposant si necessaire cad si le nombre contient plus de 5 caractères NB : valeur est un réel au format Python ou une chaine de caractères représentant un réel """ if type(valeur) == str : valeur = eval(valeur) if valeur == 0. : return '0.0' if abs(valeur) > 1. : if abs(valeur) < 10000. : return repr(valeur) else : if abs(valeur) > 0.01 : return repr(valeur) t=repr(valeur) if t.find('e') != -1 or t.find('E') != -1 : # le réel est déjà sous forme mantisse exposant ! # --> on remplace e par E t=t.replace('e','E') # --> on doit encore vérifier que la mantisse contient bien un '.' if t.find('.')!= -1: return t else: # -->il faut rajouter le point avant le E t=t.replace('E','.E') return t s='' neg = 0 if t[0]=='-': s=s+t[0] t=t[1:] cpt = 0 if t[0].atof() == 0.: # réel plus petit que 1 neg = 1 t=t[2:] cpt=1 while t[0].atof() == 0. : cpt = cpt+1 t=t[1:] s=s+t[0]+'.' for c in t[1:]: s=s+c else: # réel plus grand que 1 s=s+t[0]+'.' if t[1:].atof() == 0.: l=t[1:].split('.') cpt = len(l[0]) else: r=0 pt=0 for c in t[1:]: r=r+1 if c != '.' : if pt != 1 : cpt = cpt + 1 s=s+c else: pt = 1 if r+1 == len(t) or t[r+1:].atof() == 0.:break s=s+'E'+neg*'-'+repr(cpt) return s def import_object(uri): """Load and return a python object (class, function...). Its `uri` looks like "mainpkg.subpkg.module.object", this means that "mainpkg.subpkg.module" is imported and "object" is the object to return. """ path = uri.split('.') modname = '.'.join(path[:-1]) if len(modname) == 0: raise ImportError(u"invalid uri: %s" % uri) mod = object = '?' objname = path[-1] try: __import__(modname) mod = sys.modules[modname] except ImportError, err: raise ImportError(u"can not import module : %s (%s)" % (modname, str(err))) try: object = getattr(mod, objname) except AttributeError, err: raise AttributeError(u"object (%s) not found in module '%s'. " "Module content is: %s" % (objname, modname, tuple(dir(mod)))) return object class Enum(object): """ This class emulates a C-like enum for python. It is initialized with a list of strings to be used as the enum symbolic keys. The enum values are automatically generated as sequencing integer starting at 0. """ def __init__(self, *keys): """Constructor""" self._dict_keys = {} for inum, key in enumerate(keys): setattr(self, key, 2**inum) self._dict_keys[2**inum] = key def exists(self, value): """Tell if value is in the enumeration""" return self.get_id(value) is not None def get_id(self, value): """Return the key associated to the given value""" return self._dict_keys.get(value, None) eficas-6.4.0/Noyau/N_FORM.py0000644004705000470430000000307511444664426015736 0ustar courtoisasterdev#@ MODIF N_FORM Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== import N_MACRO import N_FORM_ETAPE class FORM(N_MACRO.MACRO): """ Cette classe sert à définir dans le catalogue des objets de type FORMULE pour ASTER. Elle surcharge la classe MACRO """ class_instance=N_FORM_ETAPE.FORM_ETAPE eficas-6.4.0/Noyau/N__F.py0000644004705000470430000000371211655732717015520 0ustar courtoisasterdev#@ MODIF N__F Noyau DATE 28/06/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. # # 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. # # # ====================================================================== import UserDict class _F(UserDict.UserDict): """ Cette classe a un comportement semblable à un dictionnaire Python et permet de donner la valeur d'un mot-clé facteur avec pour les sous mots-clés la syntaxe motcle=valeur """ def __init__(self, *pos, **args): if len(pos) != 0: raise SyntaxError("Valeur invalide pour '_F('. "\ "On attend cette syntaxe : _F(MOTCLE=valeur, ...)") self.data=args def supprime(self): self.data={} def __cmp__(self, dict): if type(dict) == type(self.data): return cmp(self.data, dict) elif hasattr(dict,"data"): return cmp(self.data, dict.data) else: return cmp(self.data, dict) def __iter__(self): return iter(self.data) def copy(self): import copy c= copy.copy(self) c.data=self.data.copy() return c eficas-6.4.0/Noyau/context.py0000644004705000470430000000463411667117123016376 0ustar courtoisasterdev#@ MODIF context Noyau DATE 15/11/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. # # 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. # # # ====================================================================== _root=None _cata=None debug=0 from Noyau.N_info import message, SUPERV # Le "current step" est l'étape courante. # Une macro se déclare étape courante dans sa méthode Build avant de construire # ses étapes filles ou dans BuildExec avant de les exécuter. # Les étapes simples le font aussi : dans Execute et BuildExec. # (Build ne fait rien pour une étape) def set_current_step(step): """ Fonction qui permet de changer la valeur de l'étape courante """ global _root if _root : raise "Impossible d'affecter _root. Il devrait valoir None" _root=step message.debug(SUPERV, "current_step = %s", step and step.nom, stack_id=-1) def get_current_step(): """ Fonction qui permet d'obtenir la valeur de l'étape courante """ return _root def unset_current_step(): """ Fonction qui permet de remettre à None l'étape courante """ global _root _root=None def set_current_cata(cata): """ Fonction qui permet de changer l'objet catalogue courant """ global _cata if _cata : raise "Impossible d'affecter _cata. Il devrait valoir None" _cata=cata def get_current_cata(): """ Fonction qui retourne l'objet catalogue courant """ return _cata def unset_current_cata(): """ Fonction qui permet de remettre à None le catalogue courant """ global _cata _cata=None eficas-6.4.0/UiQT4/0000755004705000470430000000000011670106364014143 5ustar courtoisasterdeveficas-6.4.0/UiQT4/desSelectVal.py0000644004705000470430000001025011667202771017076 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desSelectVal.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DSelVal(object): def setupUi(self, DSelVal): DSelVal.setObjectName(_fromUtf8("DSelVal")) DSelVal.resize(468, 610) self.verticalLayout_3 = QtGui.QVBoxLayout(DSelVal) self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) self.TBtext = QtGui.QTextEdit(DSelVal) self.TBtext.setMinimumSize(QtCore.QSize(0, 400)) self.TBtext.setObjectName(_fromUtf8("TBtext")) self.verticalLayout_3.addWidget(self.TBtext) spacerItem = QtGui.QSpacerItem(20, 73, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_3.addItem(spacerItem) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.BGSeparateur = QtGui.QGroupBox(DSelVal) self.BGSeparateur.setObjectName(_fromUtf8("BGSeparateur")) self.verticalLayout = QtGui.QVBoxLayout(self.BGSeparateur) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.Bespace = QtGui.QRadioButton(self.BGSeparateur) self.Bespace.setChecked(True) self.Bespace.setObjectName(_fromUtf8("Bespace")) self.verticalLayout.addWidget(self.Bespace) self.Bvirgule = QtGui.QRadioButton(self.BGSeparateur) self.Bvirgule.setObjectName(_fromUtf8("Bvirgule")) self.verticalLayout.addWidget(self.Bvirgule) self.BpointVirgule = QtGui.QRadioButton(self.BGSeparateur) self.BpointVirgule.setObjectName(_fromUtf8("BpointVirgule")) self.verticalLayout.addWidget(self.BpointVirgule) self.horizontalLayout.addWidget(self.BGSeparateur) spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.verticalLayout_2 = QtGui.QVBoxLayout() self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) spacerItem2 = QtGui.QSpacerItem(17, 13, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem2) self.BImportSel = QtGui.QPushButton(DSelVal) self.BImportSel.setObjectName(_fromUtf8("BImportSel")) self.verticalLayout_2.addWidget(self.BImportSel) self.BImportTout = QtGui.QPushButton(DSelVal) self.BImportTout.setObjectName(_fromUtf8("BImportTout")) self.verticalLayout_2.addWidget(self.BImportTout) self.horizontalLayout.addLayout(self.verticalLayout_2) self.verticalLayout_3.addLayout(self.horizontalLayout) self.retranslateUi(DSelVal) QtCore.QMetaObject.connectSlotsByName(DSelVal) def retranslateUi(self, DSelVal): DSelVal.setWindowTitle(QtGui.QApplication.translate("DSelVal", "Sélection de valeurs", None, QtGui.QApplication.UnicodeUTF8)) self.BGSeparateur.setTitle(QtGui.QApplication.translate("DSelVal", "Separateur", None, QtGui.QApplication.UnicodeUTF8)) self.Bespace.setText(QtGui.QApplication.translate("DSelVal", "espace", None, QtGui.QApplication.UnicodeUTF8)) self.Bvirgule.setText(QtGui.QApplication.translate("DSelVal", "virgule", None, QtGui.QApplication.UnicodeUTF8)) self.BpointVirgule.setText(QtGui.QApplication.translate("DSelVal", "point-virgule", None, QtGui.QApplication.UnicodeUTF8)) self.BImportSel.setText(QtGui.QApplication.translate("DSelVal", "Ajouter Selection", None, QtGui.QApplication.UnicodeUTF8)) self.BImportTout.setText(QtGui.QApplication.translate("DSelVal", "Importer Tout", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DSelVal = QtGui.QWidget() ui = Ui_DSelVal() ui.setupUi(DSelVal) DSelVal.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desChoixCode.py0000644004705000470430000001444211667202771017070 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desChoixCode.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_ChoixCode(object): def setupUi(self, ChoixCode): ChoixCode.setObjectName(_fromUtf8("ChoixCode")) ChoixCode.resize(508, 442) self.gridLayout_2 = QtGui.QGridLayout(ChoixCode) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.label_choix = QtGui.QLabel(ChoixCode) self.label_choix.setMinimumSize(QtCore.QSize(0, 30)) self.label_choix.setObjectName(_fromUtf8("label_choix")) self.horizontalLayout.addWidget(self.label_choix) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.gridLayout_2.addLayout(self.horizontalLayout, 0, 0, 1, 2) spacerItem1 = QtGui.QSpacerItem(20, 70, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Preferred) self.gridLayout_2.addItem(spacerItem1, 1, 0, 1, 1) self.gridLayout = QtGui.QGridLayout() self.gridLayout.setObjectName(_fromUtf8("gridLayout")) spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem2, 0, 0, 1, 1) self.widget = QtGui.QWidget(ChoixCode) self.widget.setObjectName(_fromUtf8("widget")) self.verticalLayout = QtGui.QVBoxLayout(self.widget) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.rB_Aster = QtGui.QRadioButton(self.widget) self.rB_Aster.setMinimumSize(QtCore.QSize(0, 30)) self.rB_Aster.setChecked(True) self.rB_Aster.setObjectName(_fromUtf8("rB_Aster")) self.verticalLayout.addWidget(self.rB_Aster) self.rB_Carmel3D = QtGui.QRadioButton(self.widget) self.rB_Carmel3D.setMinimumSize(QtCore.QSize(0, 30)) self.rB_Carmel3D.setObjectName(_fromUtf8("rB_Carmel3D")) self.verticalLayout.addWidget(self.rB_Carmel3D) self.rB_Cuve2dg = QtGui.QRadioButton(self.widget) self.rB_Cuve2dg.setMinimumSize(QtCore.QSize(0, 30)) self.rB_Cuve2dg.setObjectName(_fromUtf8("rB_Cuve2dg")) self.verticalLayout.addWidget(self.rB_Cuve2dg) self.rB_Carmel3D1 = QtGui.QRadioButton(self.widget) self.rB_Carmel3D1.setMinimumSize(QtCore.QSize(0, 30)) self.rB_Carmel3D1.setObjectName(_fromUtf8("rB_Carmel3D1")) self.verticalLayout.addWidget(self.rB_Carmel3D1) self.rB_Openturns_Study = QtGui.QRadioButton(self.widget) self.rB_Openturns_Study.setMinimumSize(QtCore.QSize(0, 30)) self.rB_Openturns_Study.setObjectName(_fromUtf8("rB_Openturns_Study")) self.verticalLayout.addWidget(self.rB_Openturns_Study) self.rB_Openturns_Wrapper = QtGui.QRadioButton(self.widget) self.rB_Openturns_Wrapper.setMinimumSize(QtCore.QSize(0, 30)) self.rB_Openturns_Wrapper.setObjectName(_fromUtf8("rB_Openturns_Wrapper")) self.verticalLayout.addWidget(self.rB_Openturns_Wrapper) self.gridLayout.addWidget(self.widget, 0, 1, 1, 1) spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem3, 0, 2, 1, 1) self.gridLayout_2.addLayout(self.gridLayout, 2, 0, 1, 2) spacerItem4 = QtGui.QSpacerItem(20, 58, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Preferred) self.gridLayout_2.addItem(spacerItem4, 3, 1, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.pB_OK = QtGui.QPushButton(ChoixCode) self.pB_OK.setMinimumSize(QtCore.QSize(80, 30)) self.pB_OK.setObjectName(_fromUtf8("pB_OK")) self.horizontalLayout_2.addWidget(self.pB_OK) spacerItem5 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem5) self.pB_cancel = QtGui.QPushButton(ChoixCode) self.pB_cancel.setMinimumSize(QtCore.QSize(80, 30)) self.pB_cancel.setObjectName(_fromUtf8("pB_cancel")) self.horizontalLayout_2.addWidget(self.pB_cancel) self.gridLayout_2.addLayout(self.horizontalLayout_2, 4, 0, 1, 2) self.retranslateUi(ChoixCode) QtCore.QMetaObject.connectSlotsByName(ChoixCode) def retranslateUi(self, ChoixCode): ChoixCode.setWindowTitle(QtGui.QApplication.translate("ChoixCode", "Choix du code", None, QtGui.QApplication.UnicodeUTF8)) self.label_choix.setText(QtGui.QApplication.translate("ChoixCode", "Veuillez choisir un code :", None, QtGui.QApplication.UnicodeUTF8)) self.rB_Aster.setText(QtGui.QApplication.translate("ChoixCode", "Aster", None, QtGui.QApplication.UnicodeUTF8)) self.rB_Carmel3D.setText(QtGui.QApplication.translate("ChoixCode", "Carmel3D", None, QtGui.QApplication.UnicodeUTF8)) self.rB_Cuve2dg.setText(QtGui.QApplication.translate("ChoixCode", "Cuve2dg", None, QtGui.QApplication.UnicodeUTF8)) self.rB_Carmel3D1.setText(QtGui.QApplication.translate("ChoixCode", "MAP", None, QtGui.QApplication.UnicodeUTF8)) self.rB_Openturns_Study.setText(QtGui.QApplication.translate("ChoixCode", "Openturns_Study", None, QtGui.QApplication.UnicodeUTF8)) self.rB_Openturns_Wrapper.setText(QtGui.QApplication.translate("ChoixCode", "Openturns_Wrapper", None, QtGui.QApplication.UnicodeUTF8)) self.pB_OK.setText(QtGui.QApplication.translate("ChoixCode", "OK", None, QtGui.QApplication.UnicodeUTF8)) self.pB_cancel.setText(QtGui.QApplication.translate("ChoixCode", "Cancel", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) ChoixCode = QtGui.QWidget() ui = Ui_ChoixCode() ui.setupUi(ChoixCode) ChoixCode.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/OptionsPdf.py0000644004705000470430000000620411667202771016611 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/OptionsPdf.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_desPdf(object): def setupUi(self, desPdf): desPdf.setObjectName(_fromUtf8("desPdf")) desPdf.resize(538, 142) self.gridLayout = QtGui.QGridLayout(desPdf) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.textLabel1_2 = QtGui.QLabel(desPdf) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.horizontalLayout_2.addWidget(self.textLabel1_2) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem) self.gridLayout.addLayout(self.horizontalLayout_2, 0, 0, 1, 1) self.LERepPdf = QtGui.QLineEdit(desPdf) self.LERepPdf.setMinimumSize(QtCore.QSize(0, 30)) self.LERepPdf.setObjectName(_fromUtf8("LERepPdf")) self.gridLayout.addWidget(self.LERepPdf, 1, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.Bok = QtGui.QPushButton(desPdf) self.Bok.setObjectName(_fromUtf8("Bok")) self.horizontalLayout.addWidget(self.Bok) self.BCancel = QtGui.QPushButton(desPdf) self.BCancel.setObjectName(_fromUtf8("BCancel")) self.horizontalLayout.addWidget(self.BCancel) self.gridLayout.addLayout(self.horizontalLayout, 2, 0, 1, 1) self.retranslateUi(desPdf) QtCore.QMetaObject.connectSlotsByName(desPdf) desPdf.setTabOrder(self.LERepPdf, self.Bok) desPdf.setTabOrder(self.Bok, self.BCancel) def retranslateUi(self, desPdf): desPdf.setWindowTitle(QtGui.QApplication.translate("desPdf", "Lire les Pdf", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("desPdf", "Lecteur Pdf :", None, QtGui.QApplication.UnicodeUTF8)) self.LERepPdf.setText(QtGui.QApplication.translate("desPdf", "acroread", None, QtGui.QApplication.UnicodeUTF8)) self.Bok.setText(QtGui.QApplication.translate("desPdf", "Ok", None, QtGui.QApplication.UnicodeUTF8)) self.BCancel.setText(QtGui.QApplication.translate("desPdf", "Cancel", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) desPdf = QtGui.QDialog() ui = Ui_desPdf() ui.setupUi(desPdf) desPdf.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desError.py0000644004705000470430000001041011667202771016303 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desError.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DError(object): def setupUi(self, DError): DError.setObjectName(_fromUtf8("DError")) DError.resize(482, 480) DError.setMinimumSize(QtCore.QSize(350, 0)) self.gridLayout = QtGui.QGridLayout(DError) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.textBrowser = QtGui.QTextBrowser(DError) self.textBrowser.setMinimumSize(QtCore.QSize(130, 120)) self.textBrowser.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.textBrowser.setSizeIncrement(QtCore.QSize(0, 0)) self.textBrowser.setAutoFormatting(QtGui.QTextEdit.AutoNone) self.textBrowser.setTabChangesFocus(False) self.textBrowser.setObjectName(_fromUtf8("textBrowser")) self.gridLayout.addWidget(self.textBrowser, 0, 0, 1, 1) self.hboxlayout = QtGui.QHBoxLayout() self.hboxlayout.setObjectName(_fromUtf8("hboxlayout")) spacerItem = QtGui.QSpacerItem(171, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.hboxlayout.addItem(spacerItem) self.bSup = QtGui.QPushButton(DError) self.bSup.setAutoDefault(True) self.bSup.setObjectName(_fromUtf8("bSup")) self.hboxlayout.addWidget(self.bSup) spacerItem1 = QtGui.QSpacerItem(171, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.hboxlayout.addItem(spacerItem1) self.gridLayout.addLayout(self.hboxlayout, 1, 0, 1, 1) self.retranslateUi(DError) QtCore.QMetaObject.connectSlotsByName(DError) def retranslateUi(self, DError): DError.setWindowTitle(QtGui.QApplication.translate("DError", "DInactif", None, QtGui.QApplication.UnicodeUTF8)) self.textBrowser.setHtml(QtGui.QApplication.translate("DError", "\n" "\n" "\n" "\n" "
\n" "

\n" "

\n" "

Le noeud selectionné

\n" "

ne correspond pas

\n" "

à un noeud actif

", None, QtGui.QApplication.UnicodeUTF8)) self.bSup.setToolTip(QtGui.QApplication.translate("DError", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) self.bSup.setText(QtGui.QApplication.translate("DError", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) self.bSup.setShortcut(QtGui.QApplication.translate("DError", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DError = QtGui.QWidget() ui = Ui_DError() ui.setupUi(DError) DError.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desListeParam.py0000644004705000470430000000430211667202771017256 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desListeParam.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DLisParam(object): def setupUi(self, DLisParam): DLisParam.setObjectName(_fromUtf8("DLisParam")) DLisParam.resize(420, 425) self.gridLayout = QtGui.QGridLayout(DLisParam) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.LBParam = QtGui.QListWidget(DLisParam) self.LBParam.setSelectionMode(QtGui.QAbstractItemView.MultiSelection) self.LBParam.setObjectName(_fromUtf8("LBParam")) self.gridLayout.addWidget(self.LBParam, 0, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) spacerItem = QtGui.QSpacerItem(128, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.BOk = QtGui.QPushButton(DLisParam) self.BOk.setObjectName(_fromUtf8("BOk")) self.horizontalLayout.addWidget(self.BOk) spacerItem1 = QtGui.QSpacerItem(168, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.gridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 1) self.retranslateUi(DLisParam) QtCore.QMetaObject.connectSlotsByName(DLisParam) def retranslateUi(self, DLisParam): DLisParam.setWindowTitle(QtGui.QApplication.translate("DLisParam", "Sélection de paramétres", None, QtGui.QApplication.UnicodeUTF8)) self.BOk.setText(QtGui.QApplication.translate("DLisParam", "Valider", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DLisParam = QtGui.QWidget() ui = Ui_DLisParam() ui.setupUi(DLisParam) DLisParam.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desChoixMap.py0000644004705000470430000002016511667202771016732 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desChoixMap.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_ChoixMap(object): def setupUi(self, ChoixMap): ChoixMap.setObjectName(_fromUtf8("ChoixMap")) ChoixMap.resize(788, 610) self.gridLayout = QtGui.QGridLayout(ChoixMap) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.horizontalLayout_3 = QtGui.QHBoxLayout() self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) self.verticalLayout_3 = QtGui.QVBoxLayout() self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) self.PBIconeMap = QtGui.QPushButton(ChoixMap) self.PBIconeMap.setMinimumSize(QtCore.QSize(81, 91)) self.PBIconeMap.setText(_fromUtf8("")) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(_fromUtf8("../../../map.ppm")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.PBIconeMap.setIcon(icon) self.PBIconeMap.setIconSize(QtCore.QSize(160, 160)) self.PBIconeMap.setObjectName(_fromUtf8("PBIconeMap")) self.verticalLayout_3.addWidget(self.PBIconeMap) spacerItem = QtGui.QSpacerItem(20, 264, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_3.addItem(spacerItem) self.horizontalLayout_3.addLayout(self.verticalLayout_3) self.groupBoxModule = QtGui.QGroupBox(ChoixMap) self.groupBoxModule.setObjectName(_fromUtf8("groupBoxModule")) self.verticalLayout = QtGui.QVBoxLayout(self.groupBoxModule) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.RBM1 = QtGui.QRadioButton(self.groupBoxModule) self.RBM1.setObjectName(_fromUtf8("RBM1")) self.verticalLayout.addWidget(self.RBM1) self.RBM2 = QtGui.QRadioButton(self.groupBoxModule) self.RBM2.setObjectName(_fromUtf8("RBM2")) self.verticalLayout.addWidget(self.RBM2) self.RBM3 = QtGui.QRadioButton(self.groupBoxModule) self.RBM3.setObjectName(_fromUtf8("RBM3")) self.verticalLayout.addWidget(self.RBM3) self.RBM4 = QtGui.QRadioButton(self.groupBoxModule) self.RBM4.setObjectName(_fromUtf8("RBM4")) self.verticalLayout.addWidget(self.RBM4) self.RBM5 = QtGui.QRadioButton(self.groupBoxModule) self.RBM5.setObjectName(_fromUtf8("RBM5")) self.verticalLayout.addWidget(self.RBM5) self.RBM6 = QtGui.QRadioButton(self.groupBoxModule) self.RBM6.setObjectName(_fromUtf8("RBM6")) self.verticalLayout.addWidget(self.RBM6) self.RBM7 = QtGui.QRadioButton(self.groupBoxModule) self.RBM7.setObjectName(_fromUtf8("RBM7")) self.verticalLayout.addWidget(self.RBM7) self.RBM8 = QtGui.QRadioButton(self.groupBoxModule) self.RBM8.setObjectName(_fromUtf8("RBM8")) self.verticalLayout.addWidget(self.RBM8) self.RBM9 = QtGui.QRadioButton(self.groupBoxModule) self.RBM9.setObjectName(_fromUtf8("RBM9")) self.verticalLayout.addWidget(self.RBM9) self.RBM10 = QtGui.QRadioButton(self.groupBoxModule) self.RBM10.setObjectName(_fromUtf8("RBM10")) self.verticalLayout.addWidget(self.RBM10) self.RBM11 = QtGui.QRadioButton(self.groupBoxModule) self.RBM11.setObjectName(_fromUtf8("RBM11")) self.verticalLayout.addWidget(self.RBM11) self.horizontalLayout_3.addWidget(self.groupBoxModule) self.groupBoxScheme = QtGui.QGroupBox(ChoixMap) self.groupBoxScheme.setObjectName(_fromUtf8("groupBoxScheme")) self.horizontalLayout_3.addWidget(self.groupBoxScheme) self.verticalLayout_2 = QtGui.QVBoxLayout() self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) self.pushButton_3 = QtGui.QPushButton(ChoixMap) self.pushButton_3.setMinimumSize(QtCore.QSize(81, 101)) self.pushButton_3.setText(_fromUtf8("")) icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap(_fromUtf8("image120.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_3.setIcon(icon1) self.pushButton_3.setIconSize(QtCore.QSize(160, 160)) self.pushButton_3.setObjectName(_fromUtf8("pushButton_3")) self.verticalLayout_2.addWidget(self.pushButton_3) spacerItem1 = QtGui.QSpacerItem(17, 278, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem1) self.horizontalLayout_3.addLayout(self.verticalLayout_2) self.gridLayout.addLayout(self.horizontalLayout_3, 0, 0, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.label = QtGui.QLabel(ChoixMap) self.label.setObjectName(_fromUtf8("label")) self.horizontalLayout_2.addWidget(self.label) self.labelScheme = QtGui.QLabel(ChoixMap) self.labelScheme.setText(_fromUtf8("")) self.labelScheme.setObjectName(_fromUtf8("labelScheme")) self.horizontalLayout_2.addWidget(self.labelScheme) self.gridLayout.addLayout(self.horizontalLayout_2, 1, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.pushButton = QtGui.QPushButton(ChoixMap) self.pushButton.setObjectName(_fromUtf8("pushButton")) self.horizontalLayout.addWidget(self.pushButton) spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem2) self.gridLayout.addLayout(self.horizontalLayout, 2, 0, 1, 1) self.retranslateUi(ChoixMap) QtCore.QMetaObject.connectSlotsByName(ChoixMap) def retranslateUi(self, ChoixMap): ChoixMap.setWindowTitle(QtGui.QApplication.translate("ChoixMap", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) self.groupBoxModule.setTitle(QtGui.QApplication.translate("ChoixMap", "Modules", None, QtGui.QApplication.UnicodeUTF8)) self.RBM1.setText(QtGui.QApplication.translate("ChoixMap", "oxides", None, QtGui.QApplication.UnicodeUTF8)) self.RBM2.setText(QtGui.QApplication.translate("ChoixMap", "scc", None, QtGui.QApplication.UnicodeUTF8)) self.RBM3.setText(QtGui.QApplication.translate("ChoixMap", "concrete", None, QtGui.QApplication.UnicodeUTF8)) self.RBM4.setText(QtGui.QApplication.translate("ChoixMap", "polycristals", None, QtGui.QApplication.UnicodeUTF8)) self.RBM5.setText(QtGui.QApplication.translate("ChoixMap", "polymers", None, QtGui.QApplication.UnicodeUTF8)) self.RBM6.setText(QtGui.QApplication.translate("ChoixMap", "micro", None, QtGui.QApplication.UnicodeUTF8)) self.RBM7.setText(QtGui.QApplication.translate("ChoixMap", "seal", None, QtGui.QApplication.UnicodeUTF8)) self.RBM8.setText(QtGui.QApplication.translate("ChoixMap", "mox", None, QtGui.QApplication.UnicodeUTF8)) self.RBM9.setText(QtGui.QApplication.translate("ChoixMap", "nano", None, QtGui.QApplication.UnicodeUTF8)) self.RBM10.setText(QtGui.QApplication.translate("ChoixMap", "insulator", None, QtGui.QApplication.UnicodeUTF8)) self.RBM11.setText(QtGui.QApplication.translate("ChoixMap", "images", None, QtGui.QApplication.UnicodeUTF8)) self.groupBoxScheme.setTitle(QtGui.QApplication.translate("ChoixMap", "Scheme", None, QtGui.QApplication.UnicodeUTF8)) self.label.setText(QtGui.QApplication.translate("ChoixMap", "scheme description :", None, QtGui.QApplication.UnicodeUTF8)) self.pushButton.setText(QtGui.QApplication.translate("ChoixMap", "Doc", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) ChoixMap = QtGui.QDialog() ui = Ui_ChoixMap() ui.setupUi(ChoixMap) ChoixMap.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/myMain.py0000644004705000470430000003050411667202771015756 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/myMain.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_Eficas(object): def setupUi(self, Eficas): Eficas.setObjectName(_fromUtf8("Eficas")) Eficas.resize(1383, 811) self.centralwidget = QtGui.QWidget(Eficas) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) Eficas.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(Eficas) self.menubar.setGeometry(QtCore.QRect(0, 0, 1383, 32)) self.menubar.setObjectName(_fromUtf8("menubar")) self.menuFichier = QtGui.QMenu(self.menubar) self.menuFichier.setObjectName(_fromUtf8("menuFichier")) self.menuEdition = QtGui.QMenu(self.menubar) self.menuEdition.setObjectName(_fromUtf8("menuEdition")) self.menuJdC = QtGui.QMenu(self.menubar) self.menuJdC.setObjectName(_fromUtf8("menuJdC")) self.menu_Aide = QtGui.QMenu(self.menubar) self.menu_Aide.setObjectName(_fromUtf8("menu_Aide")) self.menuOptions = QtGui.QMenu(self.menubar) self.menuOptions.setObjectName(_fromUtf8("menuOptions")) Eficas.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(Eficas) self.statusbar.setObjectName(_fromUtf8("statusbar")) Eficas.setStatusBar(self.statusbar) self.toolBar = QtGui.QToolBar(Eficas) self.toolBar.setObjectName(_fromUtf8("toolBar")) Eficas.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) self.action_Nouveau = QtGui.QAction(Eficas) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/New24.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.action_Nouveau.setIcon(icon) self.action_Nouveau.setObjectName(_fromUtf8("action_Nouveau")) self.actionNouvel_Include = QtGui.QAction(Eficas) self.actionNouvel_Include.setObjectName(_fromUtf8("actionNouvel_Include")) self.action_Ouvrir = QtGui.QAction(Eficas) icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/Open24.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.action_Ouvrir.setIcon(icon1) self.action_Ouvrir.setObjectName(_fromUtf8("action_Ouvrir")) self.actionEnregistrer = QtGui.QAction(Eficas) icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/Save24.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionEnregistrer.setIcon(icon2) self.actionEnregistrer.setObjectName(_fromUtf8("actionEnregistrer")) self.actionEnregistrer_sous = QtGui.QAction(Eficas) self.actionEnregistrer_sous.setObjectName(_fromUtf8("actionEnregistrer_sous")) self.actionFermer = QtGui.QAction(Eficas) self.actionFermer.setObjectName(_fromUtf8("actionFermer")) self.actionFermer_tout = QtGui.QAction(Eficas) self.actionFermer_tout.setObjectName(_fromUtf8("actionFermer_tout")) self.actionCouper = QtGui.QAction(Eficas) icon3 = QtGui.QIcon() icon3.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/Cut24.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionCouper.setIcon(icon3) self.actionCouper.setShortcutContext(QtCore.Qt.ApplicationShortcut) self.actionCouper.setObjectName(_fromUtf8("actionCouper")) self.actionCopier = QtGui.QAction(Eficas) icon4 = QtGui.QIcon() icon4.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/Copy24.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionCopier.setIcon(icon4) self.actionCopier.setShortcutContext(QtCore.Qt.ApplicationShortcut) self.actionCopier.setObjectName(_fromUtf8("actionCopier")) self.actionColler = QtGui.QAction(Eficas) icon5 = QtGui.QIcon() icon5.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/Paste24.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionColler.setIcon(icon5) self.actionColler.setShortcutContext(QtCore.Qt.ApplicationShortcut) self.actionColler.setObjectName(_fromUtf8("actionColler")) self.actionQuitter = QtGui.QAction(Eficas) self.actionQuitter.setObjectName(_fromUtf8("actionQuitter")) self.actionRapport_de_Validation = QtGui.QAction(Eficas) self.actionRapport_de_Validation.setObjectName(_fromUtf8("actionRapport_de_Validation")) self.actionFichier_Source = QtGui.QAction(Eficas) self.actionFichier_Source.setObjectName(_fromUtf8("actionFichier_Source")) self.actionFichier_Resultat = QtGui.QAction(Eficas) self.actionFichier_Resultat.setObjectName(_fromUtf8("actionFichier_Resultat")) self.actionParametres_Eficas = QtGui.QAction(Eficas) self.actionParametres_Eficas.setObjectName(_fromUtf8("actionParametres_Eficas")) self.actionLecteur_Pdf = QtGui.QAction(Eficas) self.actionLecteur_Pdf.setObjectName(_fromUtf8("actionLecteur_Pdf")) self.actionEficas = QtGui.QAction(Eficas) self.actionEficas.setObjectName(_fromUtf8("actionEficas")) self.actionVersion = QtGui.QAction(Eficas) self.actionVersion.setObjectName(_fromUtf8("actionVersion")) self.actionSupprimer = QtGui.QAction(Eficas) icon6 = QtGui.QIcon() icon6.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/delete.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionSupprimer.setIcon(icon6) self.actionSupprimer.setObjectName(_fromUtf8("actionSupprimer")) self.menuFichier.addAction(self.action_Nouveau) self.menuFichier.addAction(self.actionNouvel_Include) self.menuFichier.addAction(self.action_Ouvrir) self.menuFichier.addSeparator() self.menuFichier.addAction(self.actionEnregistrer) self.menuFichier.addAction(self.actionEnregistrer_sous) self.menuFichier.addAction(self.actionFermer) self.menuFichier.addAction(self.actionFermer_tout) self.menuFichier.addSeparator() self.menuFichier.addAction(self.actionQuitter) self.menuEdition.addAction(self.actionCouper) self.menuEdition.addAction(self.actionCopier) self.menuEdition.addAction(self.actionColler) self.menuEdition.addAction(self.actionSupprimer) self.menuJdC.addAction(self.actionRapport_de_Validation) self.menuJdC.addAction(self.actionFichier_Source) self.menuJdC.addAction(self.actionFichier_Resultat) self.menu_Aide.addAction(self.actionEficas) self.menu_Aide.addAction(self.actionVersion) self.menuOptions.addAction(self.actionParametres_Eficas) self.menuOptions.addAction(self.actionLecteur_Pdf) self.menubar.addAction(self.menuFichier.menuAction()) self.menubar.addAction(self.menuEdition.menuAction()) self.menubar.addAction(self.menuJdC.menuAction()) self.menubar.addAction(self.menu_Aide.menuAction()) self.menubar.addAction(self.menuOptions.menuAction()) self.toolBar.addAction(self.action_Nouveau) self.toolBar.addAction(self.action_Ouvrir) self.toolBar.addAction(self.actionEnregistrer) self.toolBar.addSeparator() self.toolBar.addAction(self.actionCopier) self.toolBar.addAction(self.actionColler) self.toolBar.addAction(self.actionSupprimer) self.toolBar.addAction(self.actionCouper) self.retranslateUi(Eficas) QtCore.QMetaObject.connectSlotsByName(Eficas) def retranslateUi(self, Eficas): Eficas.setWindowTitle(QtGui.QApplication.translate("Eficas", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) self.menuFichier.setTitle(QtGui.QApplication.translate("Eficas", "&Fichier", None, QtGui.QApplication.UnicodeUTF8)) self.menuEdition.setTitle(QtGui.QApplication.translate("Eficas", "Edition", None, QtGui.QApplication.UnicodeUTF8)) self.menuJdC.setTitle(QtGui.QApplication.translate("Eficas", "JdC", None, QtGui.QApplication.UnicodeUTF8)) self.menu_Aide.setTitle(QtGui.QApplication.translate("Eficas", "&Aide", None, QtGui.QApplication.UnicodeUTF8)) self.menuOptions.setTitle(QtGui.QApplication.translate("Eficas", "Options", None, QtGui.QApplication.UnicodeUTF8)) self.toolBar.setWindowTitle(QtGui.QApplication.translate("Eficas", "toolBar", None, QtGui.QApplication.UnicodeUTF8)) self.action_Nouveau.setText(QtGui.QApplication.translate("Eficas", "&Nouveau", None, QtGui.QApplication.UnicodeUTF8)) self.action_Nouveau.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+N", None, QtGui.QApplication.UnicodeUTF8)) self.actionNouvel_Include.setText(QtGui.QApplication.translate("Eficas", "Nouvel Include", None, QtGui.QApplication.UnicodeUTF8)) self.action_Ouvrir.setText(QtGui.QApplication.translate("Eficas", "&Ouvrir", None, QtGui.QApplication.UnicodeUTF8)) self.action_Ouvrir.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+O", None, QtGui.QApplication.UnicodeUTF8)) self.actionEnregistrer.setText(QtGui.QApplication.translate("Eficas", "Enregistrer", None, QtGui.QApplication.UnicodeUTF8)) self.actionEnregistrer.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+E", None, QtGui.QApplication.UnicodeUTF8)) self.actionEnregistrer_sous.setText(QtGui.QApplication.translate("Eficas", "Enregistrer sous", None, QtGui.QApplication.UnicodeUTF8)) self.actionEnregistrer_sous.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+Shift+E", None, QtGui.QApplication.UnicodeUTF8)) self.actionFermer.setText(QtGui.QApplication.translate("Eficas", "Fermer ", None, QtGui.QApplication.UnicodeUTF8)) self.actionFermer.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+W", None, QtGui.QApplication.UnicodeUTF8)) self.actionFermer_tout.setText(QtGui.QApplication.translate("Eficas", "Fermer tout", None, QtGui.QApplication.UnicodeUTF8)) self.actionCouper.setText(QtGui.QApplication.translate("Eficas", "Couper", None, QtGui.QApplication.UnicodeUTF8)) self.actionCouper.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+X", None, QtGui.QApplication.UnicodeUTF8)) self.actionCopier.setText(QtGui.QApplication.translate("Eficas", "Copier", None, QtGui.QApplication.UnicodeUTF8)) self.actionCopier.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+C", None, QtGui.QApplication.UnicodeUTF8)) self.actionColler.setText(QtGui.QApplication.translate("Eficas", "Coller", None, QtGui.QApplication.UnicodeUTF8)) self.actionColler.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+V", None, QtGui.QApplication.UnicodeUTF8)) self.actionQuitter.setText(QtGui.QApplication.translate("Eficas", "Quitter", None, QtGui.QApplication.UnicodeUTF8)) self.actionQuitter.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+Q", None, QtGui.QApplication.UnicodeUTF8)) self.actionRapport_de_Validation.setText(QtGui.QApplication.translate("Eficas", "Rapport de Validation", None, QtGui.QApplication.UnicodeUTF8)) self.actionFichier_Source.setText(QtGui.QApplication.translate("Eficas", "Fichier Source", None, QtGui.QApplication.UnicodeUTF8)) self.actionFichier_Resultat.setText(QtGui.QApplication.translate("Eficas", "Fichier Résultat", None, QtGui.QApplication.UnicodeUTF8)) self.actionParametres_Eficas.setText(QtGui.QApplication.translate("Eficas", "Parametres Eficas", None, QtGui.QApplication.UnicodeUTF8)) self.actionLecteur_Pdf.setText(QtGui.QApplication.translate("Eficas", "Lecteur Pdf", None, QtGui.QApplication.UnicodeUTF8)) self.actionEficas.setText(QtGui.QApplication.translate("Eficas", "Eficas", None, QtGui.QApplication.UnicodeUTF8)) self.actionVersion.setText(QtGui.QApplication.translate("Eficas", "Version", None, QtGui.QApplication.UnicodeUTF8)) self.actionSupprimer.setText(QtGui.QApplication.translate("Eficas", "Supprimer", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) Eficas = QtGui.QMainWindow() ui = Ui_Eficas() ui.setupUi(Eficas) Eficas.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desPoursuite.py0000644004705000470430000002461711667202771017227 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desPoursuite.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DPour(object): def setupUi(self, DPour): DPour.setObjectName(_fromUtf8("DPour")) DPour.resize(521, 544) DPour.setMinimumSize(QtCore.QSize(505, 0)) self.gridlayout = QtGui.QGridLayout(DPour) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.TWChoix = QtGui.QTabWidget(DPour) self.TWChoix.setObjectName(_fromUtf8("TWChoix")) self.MotClef = QtGui.QWidget() self.MotClef.setObjectName(_fromUtf8("MotClef")) self.gridLayout_4 = QtGui.QGridLayout(self.MotClef) self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) self.textLabel1 = QtGui.QLabel(self.MotClef) self.textLabel1.setMinimumSize(QtCore.QSize(0, 0)) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.gridLayout_4.addWidget(self.textLabel1, 0, 0, 1, 1) self.textLabel1_2 = QtGui.QLabel(self.MotClef) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.gridLayout_4.addWidget(self.textLabel1_2, 0, 1, 1, 1) self.LBMCPermis = QtGui.QListWidget(self.MotClef) self.LBMCPermis.setMinimumSize(QtCore.QSize(0, 0)) self.LBMCPermis.setObjectName(_fromUtf8("LBMCPermis")) self.gridLayout_4.addWidget(self.LBMCPermis, 1, 0, 1, 1) self.LBRegles = QtGui.QListWidget(self.MotClef) self.LBRegles.setObjectName(_fromUtf8("LBRegles")) self.gridLayout_4.addWidget(self.LBRegles, 1, 1, 1, 1) self.TWChoix.addTab(self.MotClef, _fromUtf8("")) self.Commande = QtGui.QWidget() self.Commande.setObjectName(_fromUtf8("Commande")) self.gridLayout_3 = QtGui.QGridLayout(self.Commande) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.textLabel1_4 = QtGui.QLabel(self.Commande) self.textLabel1_4.setWordWrap(False) self.textLabel1_4.setObjectName(_fromUtf8("textLabel1_4")) self.gridLayout_3.addWidget(self.textLabel1_4, 0, 0, 1, 3) self.groupBox = QtGui.QGroupBox(self.Commande) self.groupBox.setObjectName(_fromUtf8("groupBox")) self.gridLayout = QtGui.QGridLayout(self.groupBox) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.RBalpha = QtGui.QRadioButton(self.groupBox) self.RBalpha.setChecked(True) self.RBalpha.setObjectName(_fromUtf8("RBalpha")) self.gridLayout.addWidget(self.RBalpha, 0, 0, 1, 1) self.RBGroupe = QtGui.QRadioButton(self.groupBox) self.RBGroupe.setObjectName(_fromUtf8("RBGroupe")) self.gridLayout.addWidget(self.RBGroupe, 1, 0, 1, 1) self.gridLayout_3.addWidget(self.groupBox, 0, 3, 2, 1) self.textLabel6 = QtGui.QLabel(self.Commande) self.textLabel6.setMinimumSize(QtCore.QSize(50, 30)) self.textLabel6.setWordWrap(False) self.textLabel6.setObjectName(_fromUtf8("textLabel6")) self.gridLayout_3.addWidget(self.textLabel6, 1, 0, 1, 1) self.LEFiltre = QtGui.QLineEdit(self.Commande) self.LEFiltre.setMinimumSize(QtCore.QSize(160, 30)) self.LEFiltre.setObjectName(_fromUtf8("LEFiltre")) self.gridLayout_3.addWidget(self.LEFiltre, 1, 1, 1, 1) self.pushButton = QtGui.QPushButton(self.Commande) self.pushButton.setObjectName(_fromUtf8("pushButton")) self.gridLayout_3.addWidget(self.pushButton, 1, 2, 1, 1) self.LBNouvCommande = QtGui.QListWidget(self.Commande) self.LBNouvCommande.setObjectName(_fromUtf8("LBNouvCommande")) self.gridLayout_3.addWidget(self.LBNouvCommande, 2, 0, 1, 4) self.textLabel4 = QtGui.QLabel(self.Commande) self.textLabel4.setWordWrap(False) self.textLabel4.setObjectName(_fromUtf8("textLabel4")) self.gridLayout_3.addWidget(self.textLabel4, 3, 0, 1, 4) self.TWChoix.addTab(self.Commande, _fromUtf8("")) self.TabPage = QtGui.QWidget() self.TabPage.setObjectName(_fromUtf8("TabPage")) self.textLabel1_3 = QtGui.QLabel(self.TabPage) self.textLabel1_3.setGeometry(QtCore.QRect(9, 9, 481, 19)) self.textLabel1_3.setWordWrap(False) self.textLabel1_3.setObjectName(_fromUtf8("textLabel1_3")) self.LENomFichier = QtGui.QLineEdit(self.TabPage) self.LENomFichier.setGeometry(QtCore.QRect(9, 33, 481, 40)) self.LENomFichier.setMinimumSize(QtCore.QSize(470, 40)) self.LENomFichier.setObjectName(_fromUtf8("LENomFichier")) self.BFichier = QtGui.QPushButton(self.TabPage) self.BFichier.setGeometry(QtCore.QRect(330, 170, 140, 50)) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.BFichier.sizePolicy().hasHeightForWidth()) self.BFichier.setSizePolicy(sizePolicy) self.BFichier.setMinimumSize(QtCore.QSize(140, 50)) self.BFichier.setObjectName(_fromUtf8("BFichier")) self.BBrowse = QtGui.QPushButton(self.TabPage) self.BBrowse.setGeometry(QtCore.QRect(330, 110, 140, 50)) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.BBrowse.sizePolicy().hasHeightForWidth()) self.BBrowse.setSizePolicy(sizePolicy) self.BBrowse.setMinimumSize(QtCore.QSize(140, 50)) self.BBrowse.setObjectName(_fromUtf8("BBrowse")) self.TWChoix.addTab(self.TabPage, _fromUtf8("")) self.gridlayout.addWidget(self.TWChoix, 0, 0, 1, 3) self.Commentaire = QtGui.QLabel(DPour) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridlayout.addWidget(self.Commentaire, 1, 0, 1, 3) self.bOk = QtGui.QPushButton(DPour) self.bOk.setMinimumSize(QtCore.QSize(161, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.gridlayout.addWidget(self.bOk, 2, 2, 1, 1) self.alphabetique = QtGui.QPushButton(DPour) self.alphabetique.setObjectName(_fromUtf8("alphabetique")) self.gridlayout.addWidget(self.alphabetique, 2, 0, 1, 1) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridlayout.addItem(spacerItem, 2, 1, 1, 1) self.retranslateUi(DPour) self.TWChoix.setCurrentIndex(2) QtCore.QMetaObject.connectSlotsByName(DPour) DPour.setTabOrder(self.LEFiltre, self.LENomFichier) DPour.setTabOrder(self.LENomFichier, self.TWChoix) DPour.setTabOrder(self.TWChoix, self.LBMCPermis) DPour.setTabOrder(self.LBMCPermis, self.LBRegles) DPour.setTabOrder(self.LBRegles, self.LBNouvCommande) DPour.setTabOrder(self.LBNouvCommande, self.RBalpha) def retranslateUi(self, DPour): DPour.setWindowTitle(QtGui.QApplication.translate("DPour", "DMacro", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("DPour", "

Mots Clefs Permis

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("DPour", "

Régles

", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DPour", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_4.setText(QtGui.QApplication.translate("DPour", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox.setTitle(QtGui.QApplication.translate("DPour", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) self.RBalpha.setText(QtGui.QApplication.translate("DPour", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) self.RBGroupe.setText(QtGui.QApplication.translate("DPour", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel6.setText(QtGui.QApplication.translate("DPour", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) self.pushButton.setText(QtGui.QApplication.translate("DPour", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel4.setText(QtGui.QApplication.translate("DPour", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DPour", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_3.setText(QtGui.QApplication.translate("DPour", "La commande POURSUITE requiert un nom de Fichier :", None, QtGui.QApplication.UnicodeUTF8)) self.BFichier.setText(QtGui.QApplication.translate("DPour", "Autre Fichier", None, QtGui.QApplication.UnicodeUTF8)) self.BBrowse.setText(QtGui.QApplication.translate("DPour", "Edit", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.TabPage), QtGui.QApplication.translate("DPour", "Fichier Poursuite", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DPour", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DPour", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DPour", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.alphabetique.setText(QtGui.QApplication.translate("DPour", "BAlpha", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DPour = QtGui.QWidget() ui = Ui_DPour() ui.setupUi(DPour) DPour.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desPlusieursBase.py0000644004705000470430000002667611667202771020025 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desPlusieursBase.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DPlusBase(object): def setupUi(self, DPlusBase): DPlusBase.setObjectName(_fromUtf8("DPlusBase")) DPlusBase.resize(643, 728) DPlusBase.setMinimumSize(QtCore.QSize(350, 0)) self.gridLayout_4 = QtGui.QGridLayout(DPlusBase) self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) self.tabuniqueinto = QtGui.QTabWidget(DPlusBase) self.tabuniqueinto.setObjectName(_fromUtf8("tabuniqueinto")) self.Widget8 = QtGui.QWidget() self.Widget8.setObjectName(_fromUtf8("Widget8")) self.gridLayout_2 = QtGui.QGridLayout(self.Widget8) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.verticalLayout_2 = QtGui.QVBoxLayout() self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) self.textLabel1 = QtGui.QLabel(self.Widget8) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.verticalLayout_2.addWidget(self.textLabel1) self.LBValeurs = QtGui.QListWidget(self.Widget8) self.LBValeurs.setMinimumSize(QtCore.QSize(0, 0)) self.LBValeurs.setObjectName(_fromUtf8("LBValeurs")) self.verticalLayout_2.addWidget(self.LBValeurs) self.gridLayout_2.addLayout(self.verticalLayout_2, 0, 0, 7, 1) self.gridLayout = QtGui.QGridLayout() self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.textLabel1_2 = QtGui.QLabel(self.Widget8) self.textLabel1_2.setMinimumSize(QtCore.QSize(61, 21)) self.textLabel1_2.setMaximumSize(QtCore.QSize(61, 21)) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.horizontalLayout.addWidget(self.textLabel1_2) spacerItem = QtGui.QSpacerItem(168, 18, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 3) self.BAjout1Val = QtGui.QToolButton(self.Widget8) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.BAjout1Val.sizePolicy().hasHeightForWidth()) self.BAjout1Val.setSizePolicy(sizePolicy) self.BAjout1Val.setMinimumSize(QtCore.QSize(40, 30)) self.BAjout1Val.setText(_fromUtf8("")) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/arrow_left.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.BAjout1Val.setIcon(icon) self.BAjout1Val.setObjectName(_fromUtf8("BAjout1Val")) self.gridLayout.addWidget(self.BAjout1Val, 1, 0, 1, 1) self.LEValeur = QtGui.QLineEdit(self.Widget8) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.LEValeur.sizePolicy().hasHeightForWidth()) self.LEValeur.setSizePolicy(sizePolicy) self.LEValeur.setMinimumSize(QtCore.QSize(220, 30)) self.LEValeur.setObjectName(_fromUtf8("LEValeur")) self.gridLayout.addWidget(self.LEValeur, 1, 1, 1, 2) self.BSup1Val = QtGui.QToolButton(self.Widget8) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.BSup1Val.sizePolicy().hasHeightForWidth()) self.BSup1Val.setSizePolicy(sizePolicy) self.BSup1Val.setMinimumSize(QtCore.QSize(40, 30)) self.BSup1Val.setText(_fromUtf8("")) icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/arrow_right.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.BSup1Val.setIcon(icon1) self.BSup1Val.setObjectName(_fromUtf8("BSup1Val")) self.gridLayout.addWidget(self.BSup1Val, 2, 0, 1, 1) self.BSalome = QtGui.QToolButton(self.Widget8) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.BSalome.sizePolicy().hasHeightForWidth()) self.BSalome.setSizePolicy(sizePolicy) self.BSalome.setMinimumSize(QtCore.QSize(40, 30)) self.BSalome.setText(_fromUtf8("")) icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap(_fromUtf8("image240.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.BSalome.setIcon(icon2) self.BSalome.setObjectName(_fromUtf8("BSalome")) self.gridLayout.addWidget(self.BSalome, 2, 1, 1, 1) self.BView2D = QtGui.QPushButton(self.Widget8) self.BView2D.setMinimumSize(QtCore.QSize(0, 30)) self.BView2D.setObjectName(_fromUtf8("BView2D")) self.gridLayout.addWidget(self.BView2D, 2, 2, 1, 1) self.gridLayout_2.addLayout(self.gridLayout, 0, 1, 1, 1) spacerItem1 = QtGui.QSpacerItem(20, 158, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout_2.addItem(spacerItem1, 1, 1, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) spacerItem2 = QtGui.QSpacerItem(150, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem2) self.verticalLayout = QtGui.QVBoxLayout() self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.bParam = QtGui.QPushButton(self.Widget8) self.bParam.setMinimumSize(QtCore.QSize(100, 30)) self.bParam.setMaximumSize(QtCore.QSize(100, 30)) self.bParam.setAutoDefault(True) self.bParam.setObjectName(_fromUtf8("bParam")) self.verticalLayout.addWidget(self.bParam) self.bImport = QtGui.QPushButton(self.Widget8) self.bImport.setMinimumSize(QtCore.QSize(100, 30)) self.bImport.setMaximumSize(QtCore.QSize(100, 30)) self.bImport.setAutoDefault(True) self.bImport.setObjectName(_fromUtf8("bImport")) self.verticalLayout.addWidget(self.bImport) self.horizontalLayout_2.addLayout(self.verticalLayout) self.gridLayout_2.addLayout(self.horizontalLayout_2, 2, 1, 1, 1) spacerItem3 = QtGui.QSpacerItem(289, 100, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout_2.addItem(spacerItem3, 3, 1, 1, 1) self.Commentaire = QtGui.QLabel(self.Widget8) self.Commentaire.setMinimumSize(QtCore.QSize(298, 61)) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridLayout_2.addWidget(self.Commentaire, 4, 1, 1, 1) spacerItem4 = QtGui.QSpacerItem(265, 48, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout_2.addItem(spacerItem4, 5, 1, 1, 1) self.horizontalLayout_3 = QtGui.QHBoxLayout() self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) spacerItem5 = QtGui.QSpacerItem(118, 27, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem5) self.bOk = QtGui.QPushButton(self.Widget8) self.bOk.setMinimumSize(QtCore.QSize(160, 30)) self.bOk.setMaximumSize(QtCore.QSize(160, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(False) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout_3.addWidget(self.bOk) self.gridLayout_2.addLayout(self.horizontalLayout_3, 6, 1, 1, 1) self.tabuniqueinto.addTab(self.Widget8, _fromUtf8("")) self.gridLayout_4.addWidget(self.tabuniqueinto, 0, 0, 1, 1) self.retranslateUi(DPlusBase) QtCore.QMetaObject.connectSlotsByName(DPlusBase) DPlusBase.setTabOrder(self.LEValeur, self.tabuniqueinto) DPlusBase.setTabOrder(self.tabuniqueinto, self.bOk) DPlusBase.setTabOrder(self.bOk, self.bImport) DPlusBase.setTabOrder(self.bImport, self.LBValeurs) DPlusBase.setTabOrder(self.LBValeurs, self.BView2D) def retranslateUi(self, DPlusBase): DPlusBase.setWindowTitle(QtGui.QApplication.translate("DPlusBase", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("DPlusBase", "Valeur(s) actuelle(s)", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("DPlusBase", "Valeur", None, QtGui.QApplication.UnicodeUTF8)) self.BAjout1Val.setToolTip(QtGui.QApplication.translate("DPlusBase", "ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)", None, QtGui.QApplication.UnicodeUTF8)) self.BSup1Val.setToolTip(QtGui.QApplication.translate("DPlusBase", "enleve l occurence selectionnee", None, QtGui.QApplication.UnicodeUTF8)) self.BSalome.setToolTip(QtGui.QApplication.translate("DPlusBase", "ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)", None, QtGui.QApplication.UnicodeUTF8)) self.BView2D.setText(QtGui.QApplication.translate("DPlusBase", "Visualiser", None, QtGui.QApplication.UnicodeUTF8)) self.bParam.setToolTip(QtGui.QApplication.translate("DPlusBase", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) self.bParam.setText(QtGui.QApplication.translate("DPlusBase", "&Parametres", None, QtGui.QApplication.UnicodeUTF8)) self.bParam.setShortcut(QtGui.QApplication.translate("DPlusBase", "Alt+P", None, QtGui.QApplication.UnicodeUTF8)) self.bImport.setToolTip(QtGui.QApplication.translate("DPlusBase", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) self.bImport.setText(QtGui.QApplication.translate("DPlusBase", "&Importer", None, QtGui.QApplication.UnicodeUTF8)) self.bImport.setShortcut(QtGui.QApplication.translate("DPlusBase", "Alt+I", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DPlusBase", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DPlusBase", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DPlusBase", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DPlusBase", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DPlusBase = QtGui.QWidget() ui = Ui_DPlusBase() ui.setupUi(DPlusBase) DPlusBase.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desFormule.py0000644004705000470430000003057711667202771016643 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desFormule.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DFormule(object): def setupUi(self, DFormule): DFormule.setObjectName(_fromUtf8("DFormule")) DFormule.resize(529, 493) DFormule.setMinimumSize(QtCore.QSize(505, 0)) self.gridLayout_3 = QtGui.QGridLayout(DFormule) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.TWChoix = QtGui.QTabWidget(DFormule) self.TWChoix.setObjectName(_fromUtf8("TWChoix")) self.Formule = QtGui.QWidget() self.Formule.setObjectName(_fromUtf8("Formule")) self.gridlayout = QtGui.QGridLayout(self.Formule) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.textLabel1 = QtGui.QLabel(self.Formule) self.textLabel1.setMinimumSize(QtCore.QSize(0, 0)) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.gridlayout.addWidget(self.textLabel1, 0, 0, 1, 1) self.textLabel1_3 = QtGui.QLabel(self.Formule) self.textLabel1_3.setWordWrap(False) self.textLabel1_3.setObjectName(_fromUtf8("textLabel1_3")) self.gridlayout.addWidget(self.textLabel1_3, 6, 0, 1, 2) self.hboxlayout = QtGui.QHBoxLayout() self.hboxlayout.setObjectName(_fromUtf8("hboxlayout")) self.LENomFormule = QtGui.QLineEdit(self.Formule) self.LENomFormule.setMinimumSize(QtCore.QSize(0, 40)) self.LENomFormule.setObjectName(_fromUtf8("LENomFormule")) self.hboxlayout.addWidget(self.LENomFormule) self.hboxlayout1 = QtGui.QHBoxLayout() self.hboxlayout1.setObjectName(_fromUtf8("hboxlayout1")) self.textLabel1_6 = QtGui.QLabel(self.Formule) self.textLabel1_6.setWordWrap(False) self.textLabel1_6.setObjectName(_fromUtf8("textLabel1_6")) self.hboxlayout1.addWidget(self.textLabel1_6) self.LENomsArgs = QtGui.QLineEdit(self.Formule) self.LENomsArgs.setMinimumSize(QtCore.QSize(230, 40)) self.LENomsArgs.setObjectName(_fromUtf8("LENomsArgs")) self.hboxlayout1.addWidget(self.LENomsArgs) self.textLabel1_6_2 = QtGui.QLabel(self.Formule) self.textLabel1_6_2.setWordWrap(False) self.textLabel1_6_2.setObjectName(_fromUtf8("textLabel1_6_2")) self.hboxlayout1.addWidget(self.textLabel1_6_2) self.hboxlayout.addLayout(self.hboxlayout1) self.gridlayout.addLayout(self.hboxlayout, 2, 0, 1, 2) self.textLabel2 = QtGui.QLabel(self.Formule) self.textLabel2.setWordWrap(False) self.textLabel2.setObjectName(_fromUtf8("textLabel2")) self.gridlayout.addWidget(self.textLabel2, 1, 1, 1, 1) self.textLabel1_3_2 = QtGui.QLabel(self.Formule) self.textLabel1_3_2.setWordWrap(False) self.textLabel1_3_2.setObjectName(_fromUtf8("textLabel1_3_2")) self.gridlayout.addWidget(self.textLabel1_3_2, 7, 0, 1, 2) self.textLabel2_2 = QtGui.QLabel(self.Formule) self.textLabel2_2.setWordWrap(False) self.textLabel2_2.setObjectName(_fromUtf8("textLabel2_2")) self.gridlayout.addWidget(self.textLabel2_2, 3, 0, 1, 2) self.textLabel1_5 = QtGui.QLabel(self.Formule) self.textLabel1_5.setMinimumSize(QtCore.QSize(0, 0)) self.textLabel1_5.setWordWrap(False) self.textLabel1_5.setObjectName(_fromUtf8("textLabel1_5")) self.gridlayout.addWidget(self.textLabel1_5, 4, 0, 1, 2) self.LECorpsFormule = QtGui.QLineEdit(self.Formule) self.LECorpsFormule.setMinimumSize(QtCore.QSize(0, 30)) self.LECorpsFormule.setObjectName(_fromUtf8("LECorpsFormule")) self.gridlayout.addWidget(self.LECorpsFormule, 5, 0, 1, 2) self.textLabel1_2 = QtGui.QLabel(self.Formule) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.gridlayout.addWidget(self.textLabel1_2, 0, 1, 1, 1) self.TWChoix.addTab(self.Formule, _fromUtf8("")) self.Commande = QtGui.QWidget() self.Commande.setObjectName(_fromUtf8("Commande")) self.gridLayout_4 = QtGui.QGridLayout(self.Commande) self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) self.gridLayout_2 = QtGui.QGridLayout() self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.textLabel1_4 = QtGui.QLabel(self.Commande) self.textLabel1_4.setWordWrap(False) self.textLabel1_4.setObjectName(_fromUtf8("textLabel1_4")) self.gridLayout_2.addWidget(self.textLabel1_4, 0, 0, 1, 2) self.groupBox = QtGui.QGroupBox(self.Commande) self.groupBox.setMinimumSize(QtCore.QSize(171, 71)) self.groupBox.setObjectName(_fromUtf8("groupBox")) self.gridLayout = QtGui.QGridLayout(self.groupBox) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.RBalpha = QtGui.QRadioButton(self.groupBox) self.RBalpha.setMinimumSize(QtCore.QSize(149, 16)) self.RBalpha.setMaximumSize(QtCore.QSize(149, 16)) self.RBalpha.setChecked(True) self.RBalpha.setObjectName(_fromUtf8("RBalpha")) self.gridLayout.addWidget(self.RBalpha, 0, 0, 1, 1) self.RBGroupe = QtGui.QRadioButton(self.groupBox) self.RBGroupe.setObjectName(_fromUtf8("RBGroupe")) self.gridLayout.addWidget(self.RBGroupe, 1, 0, 1, 1) self.gridLayout_2.addWidget(self.groupBox, 0, 4, 2, 1) self.textLabel6 = QtGui.QLabel(self.Commande) self.textLabel6.setMinimumSize(QtCore.QSize(91, 30)) self.textLabel6.setWordWrap(False) self.textLabel6.setObjectName(_fromUtf8("textLabel6")) self.gridLayout_2.addWidget(self.textLabel6, 1, 0, 1, 1) self.LEFiltre = QtGui.QLineEdit(self.Commande) self.LEFiltre.setMinimumSize(QtCore.QSize(231, 30)) self.LEFiltre.setObjectName(_fromUtf8("LEFiltre")) self.gridLayout_2.addWidget(self.LEFiltre, 1, 1, 1, 1) self.BNext = QtGui.QPushButton(self.Commande) self.BNext.setMinimumSize(QtCore.QSize(90, 30)) self.BNext.setObjectName(_fromUtf8("BNext")) self.gridLayout_2.addWidget(self.BNext, 1, 2, 1, 1) spacerItem = QtGui.QSpacerItem(108, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout_2.addItem(spacerItem, 1, 3, 1, 1) self.gridLayout_4.addLayout(self.gridLayout_2, 0, 0, 1, 1) self.LBNouvCommande = QtGui.QListWidget(self.Commande) self.LBNouvCommande.setObjectName(_fromUtf8("LBNouvCommande")) self.gridLayout_4.addWidget(self.LBNouvCommande, 1, 0, 1, 1) self.textLabel4 = QtGui.QLabel(self.Commande) self.textLabel4.setMaximumSize(QtCore.QSize(721, 20)) self.textLabel4.setWordWrap(False) self.textLabel4.setObjectName(_fromUtf8("textLabel4")) self.gridLayout_4.addWidget(self.textLabel4, 2, 0, 1, 1) self.TWChoix.addTab(self.Commande, _fromUtf8("")) self.gridLayout_3.addWidget(self.TWChoix, 0, 0, 1, 1) self.Commentaire = QtGui.QLabel(DFormule) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridLayout_3.addWidget(self.Commentaire, 1, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) spacerItem1 = QtGui.QSpacerItem(158, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.bOk = QtGui.QPushButton(DFormule) self.bOk.setMinimumSize(QtCore.QSize(163, 30)) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout.addWidget(self.bOk) spacerItem2 = QtGui.QSpacerItem(158, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem2) self.gridLayout_3.addLayout(self.horizontalLayout, 2, 0, 1, 1) self.retranslateUi(DFormule) self.TWChoix.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(DFormule) DFormule.setTabOrder(self.LEFiltre, self.LENomFormule) DFormule.setTabOrder(self.LENomFormule, self.LENomsArgs) DFormule.setTabOrder(self.LENomsArgs, self.LECorpsFormule) DFormule.setTabOrder(self.LECorpsFormule, self.bOk) DFormule.setTabOrder(self.bOk, self.TWChoix) DFormule.setTabOrder(self.TWChoix, self.RBalpha) DFormule.setTabOrder(self.RBalpha, self.RBGroupe) DFormule.setTabOrder(self.RBGroupe, self.LBNouvCommande) def retranslateUi(self, DFormule): DFormule.setWindowTitle(QtGui.QApplication.translate("DFormule", "DMacro", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("DFormule", "

Nom de la formule

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_3.setText(QtGui.QApplication.translate("DFormule", "Retour-Chariot permet de vérifier que l\'expression est valide.", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_6.setText(QtGui.QApplication.translate("DFormule", "

(

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_6_2.setText(QtGui.QApplication.translate("DFormule", "

)

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2.setText(QtGui.QApplication.translate("DFormule", "variables séparées par des \",\"\n" " par ex. : x,y,z", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_3_2.setText(QtGui.QApplication.translate("DFormule", "Ce n\'est qu\'après avoir appuyé sur le bouton Valider que les nouvelles\n" "valeurs seront effectivement prises en compte", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2_2.setText(QtGui.QApplication.translate("DFormule", "=", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_5.setText(QtGui.QApplication.translate("DFormule", "

Expression

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("DFormule", "

Arguments

", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.Formule), QtGui.QApplication.translate("DFormule", "Définition Formule", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_4.setText(QtGui.QApplication.translate("DFormule", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox.setTitle(QtGui.QApplication.translate("DFormule", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) self.RBalpha.setText(QtGui.QApplication.translate("DFormule", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) self.RBGroupe.setText(QtGui.QApplication.translate("DFormule", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel6.setText(QtGui.QApplication.translate("DFormule", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) self.BNext.setText(QtGui.QApplication.translate("DFormule", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel4.setText(QtGui.QApplication.translate("DFormule", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DFormule", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DFormule", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DFormule", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DFormule", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DFormule = QtGui.QWidget() ui = Ui_DFormule() ui.setupUi(DFormule) DFormule.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desUniqueASSD.py0000644004705000470430000000776311667202771017154 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desUniqueASSD.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DUnASSD(object): def setupUi(self, DUnASSD): DUnASSD.setObjectName(_fromUtf8("DUnASSD")) DUnASSD.resize(482, 480) DUnASSD.setMinimumSize(QtCore.QSize(0, 0)) self.gridlayout = QtGui.QGridLayout(DUnASSD) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.tabuniqueinto = QtGui.QTabWidget(DUnASSD) self.tabuniqueinto.setObjectName(_fromUtf8("tabuniqueinto")) self.Widget8 = QtGui.QWidget() self.Widget8.setObjectName(_fromUtf8("Widget8")) self.gridLayout = QtGui.QGridLayout(self.Widget8) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.textLabel2 = QtGui.QLabel(self.Widget8) self.textLabel2.setMinimumSize(QtCore.QSize(436, 50)) self.textLabel2.setWordWrap(False) self.textLabel2.setObjectName(_fromUtf8("textLabel2")) self.gridLayout.addWidget(self.textLabel2, 0, 0, 1, 1) self.listBoxASSD = QtGui.QListWidget(self.Widget8) self.listBoxASSD.setObjectName(_fromUtf8("listBoxASSD")) self.gridLayout.addWidget(self.listBoxASSD, 1, 0, 1, 1) self.Commentaire = QtGui.QLabel(self.Widget8) self.Commentaire.setMinimumSize(QtCore.QSize(380, 30)) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridLayout.addWidget(self.Commentaire, 2, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) spacerItem = QtGui.QSpacerItem(138, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.bOk = QtGui.QPushButton(self.Widget8) self.bOk.setMinimumSize(QtCore.QSize(160, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout.addWidget(self.bOk) spacerItem1 = QtGui.QSpacerItem(138, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.gridLayout.addLayout(self.horizontalLayout, 3, 0, 1, 1) self.tabuniqueinto.addTab(self.Widget8, _fromUtf8("")) self.gridlayout.addWidget(self.tabuniqueinto, 0, 0, 1, 1) self.retranslateUi(DUnASSD) QtCore.QMetaObject.connectSlotsByName(DUnASSD) def retranslateUi(self, DUnASSD): DUnASSD.setWindowTitle(QtGui.QApplication.translate("DUnASSD", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2.setText(QtGui.QApplication.translate("DUnASSD", "

Structures de données du type\n" "requis par l\'objet courant :

", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DUnASSD", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DUnASSD", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DUnASSD", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnASSD", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DUnASSD = QtGui.QWidget() ui = Ui_DUnASSD() ui.setupUi(DUnASSD) DUnASSD.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desCommentaire.py0000644004705000470430000001654111667202771017470 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desCommentaire.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DComment(object): def setupUi(self, DComment): DComment.setObjectName(_fromUtf8("DComment")) DComment.resize(796, 618) DComment.setMinimumSize(QtCore.QSize(505, 0)) self.gridLayout_3 = QtGui.QGridLayout(DComment) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.TWChoix = QtGui.QTabWidget(DComment) self.TWChoix.setObjectName(_fromUtf8("TWChoix")) self.Valeur_Parametre = QtGui.QWidget() self.Valeur_Parametre.setObjectName(_fromUtf8("Valeur_Parametre")) self.gridLayout = QtGui.QGridLayout(self.Valeur_Parametre) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.textCommentaire = QtGui.QTextEdit(self.Valeur_Parametre) self.textCommentaire.setObjectName(_fromUtf8("textCommentaire")) self.gridLayout.addWidget(self.textCommentaire, 0, 0, 1, 1) self.TWChoix.addTab(self.Valeur_Parametre, _fromUtf8("")) self.Commande = QtGui.QWidget() self.Commande.setObjectName(_fromUtf8("Commande")) self.gridLayout_4 = QtGui.QGridLayout(self.Commande) self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) self.gridLayout_2 = QtGui.QGridLayout() self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.textLabel1_4 = QtGui.QLabel(self.Commande) self.textLabel1_4.setWordWrap(False) self.textLabel1_4.setObjectName(_fromUtf8("textLabel1_4")) self.gridLayout_2.addWidget(self.textLabel1_4, 0, 0, 1, 2) self.groupBox = QtGui.QGroupBox(self.Commande) self.groupBox.setMinimumSize(QtCore.QSize(171, 71)) self.groupBox.setObjectName(_fromUtf8("groupBox")) self.gridLayout1 = QtGui.QGridLayout(self.groupBox) self.gridLayout1.setObjectName(_fromUtf8("gridLayout1")) self.RBalpha = QtGui.QRadioButton(self.groupBox) self.RBalpha.setMinimumSize(QtCore.QSize(149, 16)) self.RBalpha.setMaximumSize(QtCore.QSize(149, 16)) self.RBalpha.setChecked(True) self.RBalpha.setObjectName(_fromUtf8("RBalpha")) self.gridLayout1.addWidget(self.RBalpha, 0, 0, 1, 1) self.RBGroupe = QtGui.QRadioButton(self.groupBox) self.RBGroupe.setObjectName(_fromUtf8("RBGroupe")) self.gridLayout1.addWidget(self.RBGroupe, 1, 0, 1, 1) self.gridLayout_2.addWidget(self.groupBox, 0, 4, 2, 1) self.textLabel6 = QtGui.QLabel(self.Commande) self.textLabel6.setMinimumSize(QtCore.QSize(91, 30)) self.textLabel6.setWordWrap(False) self.textLabel6.setObjectName(_fromUtf8("textLabel6")) self.gridLayout_2.addWidget(self.textLabel6, 1, 0, 1, 1) self.LEFiltre = QtGui.QLineEdit(self.Commande) self.LEFiltre.setMinimumSize(QtCore.QSize(231, 30)) self.LEFiltre.setObjectName(_fromUtf8("LEFiltre")) self.gridLayout_2.addWidget(self.LEFiltre, 1, 1, 1, 1) self.BNext = QtGui.QPushButton(self.Commande) self.BNext.setMinimumSize(QtCore.QSize(90, 30)) self.BNext.setObjectName(_fromUtf8("BNext")) self.gridLayout_2.addWidget(self.BNext, 1, 2, 1, 1) spacerItem = QtGui.QSpacerItem(108, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout_2.addItem(spacerItem, 1, 3, 1, 1) self.gridLayout_4.addLayout(self.gridLayout_2, 0, 0, 1, 1) self.LBNouvCommande = QtGui.QListWidget(self.Commande) self.LBNouvCommande.setObjectName(_fromUtf8("LBNouvCommande")) self.gridLayout_4.addWidget(self.LBNouvCommande, 1, 0, 1, 1) self.textLabel4 = QtGui.QLabel(self.Commande) self.textLabel4.setMaximumSize(QtCore.QSize(721, 20)) self.textLabel4.setWordWrap(False) self.textLabel4.setObjectName(_fromUtf8("textLabel4")) self.gridLayout_4.addWidget(self.textLabel4, 2, 0, 1, 1) self.TWChoix.addTab(self.Commande, _fromUtf8("")) self.gridLayout_3.addWidget(self.TWChoix, 0, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) spacerItem1 = QtGui.QSpacerItem(268, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.bOk = QtGui.QPushButton(DComment) self.bOk.setMinimumSize(QtCore.QSize(160, 30)) self.bOk.setMaximumSize(QtCore.QSize(160, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout.addWidget(self.bOk) spacerItem2 = QtGui.QSpacerItem(328, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem2) self.gridLayout_3.addLayout(self.horizontalLayout, 1, 0, 1, 1) self.retranslateUi(DComment) self.TWChoix.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(DComment) DComment.setTabOrder(self.TWChoix, self.bOk) def retranslateUi(self, DComment): DComment.setWindowTitle(QtGui.QApplication.translate("DComment", "DComm", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.Valeur_Parametre), QtGui.QApplication.translate("DComment", "Commentaire", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_4.setText(QtGui.QApplication.translate("DComment", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox.setTitle(QtGui.QApplication.translate("DComment", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) self.RBalpha.setText(QtGui.QApplication.translate("DComment", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) self.RBGroupe.setText(QtGui.QApplication.translate("DComment", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel6.setText(QtGui.QApplication.translate("DComment", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) self.BNext.setText(QtGui.QApplication.translate("DComment", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel4.setText(QtGui.QApplication.translate("DComment", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DComment", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DComment", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DComment", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DComment", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DComment = QtGui.QWidget() ui = Ui_DComment() ui.setupUi(DComment) DComment.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desUniqueSDCO.py0000644004705000470430000000770311667202771017144 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desUniqueSDCO.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DUnSDCO(object): def setupUi(self, DUnSDCO): DUnSDCO.setObjectName(_fromUtf8("DUnSDCO")) DUnSDCO.resize(461, 480) DUnSDCO.setMinimumSize(QtCore.QSize(350, 0)) self.gridlayout = QtGui.QGridLayout(DUnSDCO) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.tabuniqueinto = QtGui.QTabWidget(DUnSDCO) self.tabuniqueinto.setObjectName(_fromUtf8("tabuniqueinto")) self.Widget8 = QtGui.QWidget() self.Widget8.setObjectName(_fromUtf8("Widget8")) self.gridlayout1 = QtGui.QGridLayout(self.Widget8) self.gridlayout1.setObjectName(_fromUtf8("gridlayout1")) self.bOk = QtGui.QPushButton(self.Widget8) self.bOk.setMinimumSize(QtCore.QSize(0, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.gridlayout1.addWidget(self.bOk, 4, 1, 1, 1) self.Commentaire = QtGui.QLabel(self.Widget8) self.Commentaire.setMinimumSize(QtCore.QSize(311, 30)) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridlayout1.addWidget(self.Commentaire, 3, 0, 1, 3) self.textLabel2_2 = QtGui.QLabel(self.Widget8) self.textLabel2_2.setWordWrap(False) self.textLabel2_2.setObjectName(_fromUtf8("textLabel2_2")) self.gridlayout1.addWidget(self.textLabel2_2, 0, 0, 1, 3) self.LESDCO = QtGui.QLineEdit(self.Widget8) self.LESDCO.setMinimumSize(QtCore.QSize(300, 40)) self.LESDCO.setObjectName(_fromUtf8("LESDCO")) self.gridlayout1.addWidget(self.LESDCO, 1, 0, 1, 3) self.textLabel2 = QtGui.QLabel(self.Widget8) self.textLabel2.setWordWrap(False) self.textLabel2.setObjectName(_fromUtf8("textLabel2")) self.gridlayout1.addWidget(self.textLabel2, 2, 0, 1, 3) self.tabuniqueinto.addTab(self.Widget8, _fromUtf8("")) self.gridlayout.addWidget(self.tabuniqueinto, 0, 0, 1, 1) self.retranslateUi(DUnSDCO) QtCore.QMetaObject.connectSlotsByName(DUnSDCO) DUnSDCO.setTabOrder(self.LESDCO, self.tabuniqueinto) DUnSDCO.setTabOrder(self.tabuniqueinto, self.bOk) def retranslateUi(self, DUnSDCO): DUnSDCO.setWindowTitle(QtGui.QApplication.translate("DUnSDCO", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DUnSDCO", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DUnSDCO", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DUnSDCO", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2_2.setText(QtGui.QApplication.translate("DUnSDCO", "

Nom du nouveau concept :

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2.setText(QtGui.QApplication.translate("DUnSDCO", "Un objet de type CO est attendu", None, QtGui.QApplication.UnicodeUTF8)) self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnSDCO", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DUnSDCO = QtGui.QWidget() ui = Ui_DUnSDCO() ui.setupUi(DUnSDCO) DUnSDCO.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/OptionsOT.py0000644004705000470430000002370311667202771016425 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/OptionsOT.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_desOptions(object): def setupUi(self, desOptions): desOptions.setObjectName(_fromUtf8("desOptions")) desOptions.resize(657, 794) desOptions.setMinimumSize(QtCore.QSize(0, 0)) self.gridLayout = QtGui.QGridLayout(desOptions) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.groupBox1 = QtGui.QGroupBox(desOptions) self.groupBox1.setMinimumSize(QtCore.QSize(635, 200)) self.groupBox1.setMaximumSize(QtCore.QSize(16777215, 252)) self.groupBox1.setObjectName(_fromUtf8("groupBox1")) self.verticalLayout_5 = QtGui.QVBoxLayout(self.groupBox1) self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5")) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.CBVersions = QtGui.QComboBox(self.groupBox1) self.CBVersions.setMinimumSize(QtCore.QSize(120, 40)) self.CBVersions.setMaximumSize(QtCore.QSize(121, 40)) self.CBVersions.setObjectName(_fromUtf8("CBVersions")) self.horizontalLayout.addWidget(self.CBVersions) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.Bok = QtGui.QPushButton(self.groupBox1) self.Bok.setMinimumSize(QtCore.QSize(120, 40)) self.Bok.setMaximumSize(QtCore.QSize(121, 40)) self.Bok.setAutoDefault(False) self.Bok.setObjectName(_fromUtf8("Bok")) self.horizontalLayout.addWidget(self.Bok) self.verticalLayout_5.addLayout(self.horizontalLayout) self.verticalLayout = QtGui.QVBoxLayout() self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.textLabel1_3 = QtGui.QLabel(self.groupBox1) self.textLabel1_3.setWordWrap(False) self.textLabel1_3.setObjectName(_fromUtf8("textLabel1_3")) self.verticalLayout.addWidget(self.textLabel1_3) self.LERepCata = QtGui.QLineEdit(self.groupBox1) self.LERepCata.setMinimumSize(QtCore.QSize(501, 41)) self.LERepCata.setText(_fromUtf8("")) self.LERepCata.setObjectName(_fromUtf8("LERepCata")) self.verticalLayout.addWidget(self.LERepCata) self.verticalLayout_5.addLayout(self.verticalLayout) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.PBajout = QtGui.QPushButton(self.groupBox1) self.PBajout.setMinimumSize(QtCore.QSize(101, 41)) self.PBajout.setObjectName(_fromUtf8("PBajout")) self.horizontalLayout_2.addWidget(self.PBajout) self.LEVersionAjout = QtGui.QLineEdit(self.groupBox1) self.LEVersionAjout.setMinimumSize(QtCore.QSize(101, 41)) self.LEVersionAjout.setObjectName(_fromUtf8("LEVersionAjout")) self.horizontalLayout_2.addWidget(self.LEVersionAjout) spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem1) self.PBSup = QtGui.QPushButton(self.groupBox1) self.PBSup.setMinimumSize(QtCore.QSize(101, 41)) self.PBSup.setObjectName(_fromUtf8("PBSup")) self.horizontalLayout_2.addWidget(self.PBSup) self.LEVersionSup = QtGui.QLineEdit(self.groupBox1) self.LEVersionSup.setMinimumSize(QtCore.QSize(0, 41)) self.LEVersionSup.setObjectName(_fromUtf8("LEVersionSup")) self.horizontalLayout_2.addWidget(self.LEVersionSup) self.verticalLayout_5.addLayout(self.horizontalLayout_2) self.gridLayout.addWidget(self.groupBox1, 0, 0, 1, 1) self.groupBox2 = QtGui.QGroupBox(desOptions) self.groupBox2.setMinimumSize(QtCore.QSize(548, 0)) self.groupBox2.setObjectName(_fromUtf8("groupBox2")) self.verticalLayout_2 = QtGui.QVBoxLayout(self.groupBox2) self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) self.textLabel1_2 = QtGui.QLabel(self.groupBox2) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.verticalLayout_2.addWidget(self.textLabel1_2) self.LERepOT = QtGui.QLineEdit(self.groupBox2) self.LERepOT.setMinimumSize(QtCore.QSize(520, 41)) self.LERepOT.setText(_fromUtf8("")) self.LERepOT.setObjectName(_fromUtf8("LERepOT")) self.verticalLayout_2.addWidget(self.LERepOT) self.gridLayout.addWidget(self.groupBox2, 1, 0, 1, 1) self.groupBox3 = QtGui.QGroupBox(desOptions) self.groupBox3.setMinimumSize(QtCore.QSize(548, 0)) self.groupBox3.setObjectName(_fromUtf8("groupBox3")) self.verticalLayout_3 = QtGui.QVBoxLayout(self.groupBox3) self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) self.textLabel1 = QtGui.QLabel(self.groupBox3) self.textLabel1.setMinimumSize(QtCore.QSize(613, 0)) self.textLabel1.setMaximumSize(QtCore.QSize(16777215, 41)) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.verticalLayout_3.addWidget(self.textLabel1) self.LERepDoc = QtGui.QLineEdit(self.groupBox3) self.LERepDoc.setMinimumSize(QtCore.QSize(520, 41)) self.LERepDoc.setText(_fromUtf8("")) self.LERepDoc.setObjectName(_fromUtf8("LERepDoc")) self.verticalLayout_3.addWidget(self.LERepDoc) self.gridLayout.addWidget(self.groupBox3, 2, 0, 1, 1) self.groupBox3_2 = QtGui.QGroupBox(desOptions) self.groupBox3_2.setMinimumSize(QtCore.QSize(548, 0)) self.groupBox3_2.setObjectName(_fromUtf8("groupBox3_2")) self.verticalLayout_4 = QtGui.QVBoxLayout(self.groupBox3_2) self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) self.textLabel1_4 = QtGui.QLabel(self.groupBox3_2) self.textLabel1_4.setMinimumSize(QtCore.QSize(613, 0)) self.textLabel1_4.setMaximumSize(QtCore.QSize(16777215, 41)) self.textLabel1_4.setWordWrap(False) self.textLabel1_4.setObjectName(_fromUtf8("textLabel1_4")) self.verticalLayout_4.addWidget(self.textLabel1_4) self.LESaveDir = QtGui.QLineEdit(self.groupBox3_2) self.LESaveDir.setMinimumSize(QtCore.QSize(520, 41)) self.LESaveDir.setText(_fromUtf8("")) self.LESaveDir.setObjectName(_fromUtf8("LESaveDir")) self.verticalLayout_4.addWidget(self.LESaveDir) self.gridLayout.addWidget(self.groupBox3_2, 3, 0, 1, 1) self.splitter_3 = QtGui.QSplitter(desOptions) self.splitter_3.setOrientation(QtCore.Qt.Horizontal) self.splitter_3.setObjectName(_fromUtf8("splitter_3")) self.Bdefaut = QtGui.QCheckBox(self.splitter_3) self.Bdefaut.setMinimumSize(QtCore.QSize(340, 41)) self.Bdefaut.setMaximumSize(QtCore.QSize(16777215, 41)) font = QtGui.QFont() font.setPointSize(12) self.Bdefaut.setFont(font) self.Bdefaut.setObjectName(_fromUtf8("Bdefaut")) self.PBQuit = QtGui.QPushButton(self.splitter_3) self.PBQuit.setMinimumSize(QtCore.QSize(151, 31)) self.PBQuit.setObjectName(_fromUtf8("PBQuit")) self.gridLayout.addWidget(self.splitter_3, 4, 0, 1, 1) self.retranslateUi(desOptions) QtCore.QMetaObject.connectSlotsByName(desOptions) def retranslateUi(self, desOptions): desOptions.setWindowTitle(QtGui.QApplication.translate("desOptions", "Option TURNS", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox1.setTitle(QtGui.QApplication.translate("desOptions", "Configurer une Version", None, QtGui.QApplication.UnicodeUTF8)) self.Bok.setText(QtGui.QApplication.translate("desOptions", "Valider", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_3.setText(QtGui.QApplication.translate("desOptions", "Fichier catalogue (chemin complet) :", None, QtGui.QApplication.UnicodeUTF8)) self.PBajout.setText(QtGui.QApplication.translate("desOptions", "Ajouter\n" "Version :", None, QtGui.QApplication.UnicodeUTF8)) self.PBSup.setText(QtGui.QApplication.translate("desOptions", "Supprimer\n" "Version :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox2.setTitle(QtGui.QApplication.translate("desOptions", "Configurer la bibliothèque Open TURNS", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("desOptions", "Répertoire d\'installation d\'Open TURNS :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox3.setTitle(QtGui.QApplication.translate("desOptions", "Doc", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("desOptions", "Répertoire d\'accès à la documentation :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox3_2.setTitle(QtGui.QApplication.translate("desOptions", "Espace de travail", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_4.setText(QtGui.QApplication.translate("desOptions", "Répertoire de sauvegarde par défaut :", None, QtGui.QApplication.UnicodeUTF8)) self.Bdefaut.setText(QtGui.QApplication.translate("desOptions", "Réinitialiser avec les valeurs par defaut", None, QtGui.QApplication.UnicodeUTF8)) self.PBQuit.setText(QtGui.QApplication.translate("desOptions", "Quitter", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) desOptions = QtGui.QDialog() ui = Ui_desOptions() ui.setupUi(desOptions) desOptions.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desVisu.py0000644004705000470430000000235111667202771016145 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desVisu.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DVisu(object): def setupUi(self, DVisu): DVisu.setObjectName(_fromUtf8("DVisu")) DVisu.resize(501, 394) self.gridlayout = QtGui.QGridLayout(DVisu) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.TB = QtGui.QTextBrowser(DVisu) self.TB.setObjectName(_fromUtf8("TB")) self.gridlayout.addWidget(self.TB, 0, 0, 1, 1) self.retranslateUi(DVisu) def retranslateUi(self, DVisu): DVisu.setWindowTitle(QtGui.QApplication.translate("DVisu", "Visualisation Include Materiau", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DVisu = QtGui.QWidget() ui = Ui_DVisu() ui.setupUi(DVisu) DVisu.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/aideQT.py0000644004705000470430000000473011667202771015675 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/aideQT.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_Aide(object): def setupUi(self, Aide): Aide.setObjectName(_fromUtf8("Aide")) Aide.resize(602, 480) self.gridLayout = QtGui.QGridLayout(Aide) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.TB1 = QtGui.QTextBrowser(Aide) self.TB1.setObjectName(_fromUtf8("TB1")) self.gridLayout.addWidget(self.TB1, 0, 0, 1, 4) self.PBIndex = QtGui.QPushButton(Aide) self.PBIndex.setMinimumSize(QtCore.QSize(0, 30)) self.PBIndex.setObjectName(_fromUtf8("PBIndex")) self.gridLayout.addWidget(self.PBIndex, 1, 0, 1, 1) self.PBBack = QtGui.QPushButton(Aide) self.PBBack.setEnabled(True) self.PBBack.setMinimumSize(QtCore.QSize(0, 30)) self.PBBack.setObjectName(_fromUtf8("PBBack")) self.gridLayout.addWidget(self.PBBack, 1, 1, 1, 1) self.PBForward = QtGui.QPushButton(Aide) self.PBForward.setEnabled(True) self.PBForward.setMinimumSize(QtCore.QSize(0, 30)) self.PBForward.setObjectName(_fromUtf8("PBForward")) self.gridLayout.addWidget(self.PBForward, 1, 2, 1, 1) spacerItem = QtGui.QSpacerItem(311, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem, 1, 3, 1, 1) self.retranslateUi(Aide) QtCore.QMetaObject.connectSlotsByName(Aide) def retranslateUi(self, Aide): Aide.setWindowTitle(QtGui.QApplication.translate("Aide", "Aide", None, QtGui.QApplication.UnicodeUTF8)) self.PBIndex.setText(QtGui.QApplication.translate("Aide", "Index", None, QtGui.QApplication.UnicodeUTF8)) self.PBBack.setText(QtGui.QApplication.translate("Aide", "Back", None, QtGui.QApplication.UnicodeUTF8)) self.PBForward.setText(QtGui.QApplication.translate("Aide", "Forward", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) Aide = QtGui.QWidget() ui = Ui_Aide() ui.setupUi(Aide) Aide.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desUniqueInto.py0000644004705000470430000001024311667202771017316 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desUniqueInto.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DUnIn(object): def setupUi(self, DUnIn): DUnIn.setObjectName(_fromUtf8("DUnIn")) DUnIn.resize(482, 480) DUnIn.setMinimumSize(QtCore.QSize(350, 0)) self.gridLayout_2 = QtGui.QGridLayout(DUnIn) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.tabuniqueinto = QtGui.QTabWidget(DUnIn) self.tabuniqueinto.setObjectName(_fromUtf8("tabuniqueinto")) self.Widget8 = QtGui.QWidget() self.Widget8.setObjectName(_fromUtf8("Widget8")) self.gridLayout = QtGui.QGridLayout(self.Widget8) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.textLabel2 = QtGui.QLabel(self.Widget8) self.textLabel2.setWordWrap(False) self.textLabel2.setObjectName(_fromUtf8("textLabel2")) self.gridLayout.addWidget(self.textLabel2, 0, 0, 1, 1) self.listBoxVal = QtGui.QListWidget(self.Widget8) self.listBoxVal.setObjectName(_fromUtf8("listBoxVal")) self.gridLayout.addWidget(self.listBoxVal, 1, 0, 1, 1) self.Commentaire = QtGui.QLabel(self.Widget8) self.Commentaire.setMinimumSize(QtCore.QSize(420, 30)) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridLayout.addWidget(self.Commentaire, 2, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) spacerItem = QtGui.QSpacerItem(118, 27, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.bOk = QtGui.QPushButton(self.Widget8) self.bOk.setMinimumSize(QtCore.QSize(160, 30)) self.bOk.setMaximumSize(QtCore.QSize(160, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout.addWidget(self.bOk) spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.BAlpha = QtGui.QPushButton(self.Widget8) self.BAlpha.setObjectName(_fromUtf8("BAlpha")) self.horizontalLayout.addWidget(self.BAlpha) self.gridLayout.addLayout(self.horizontalLayout, 3, 0, 1, 1) self.tabuniqueinto.addTab(self.Widget8, _fromUtf8("")) self.gridLayout_2.addWidget(self.tabuniqueinto, 0, 0, 1, 1) self.retranslateUi(DUnIn) QtCore.QMetaObject.connectSlotsByName(DUnIn) def retranslateUi(self, DUnIn): DUnIn.setWindowTitle(QtGui.QApplication.translate("DUnIn", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2.setText(QtGui.QApplication.translate("DUnIn", "

Valeurs possibles

", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DUnIn", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DUnIn", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DUnIn", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.BAlpha.setText(QtGui.QApplication.translate("DUnIn", "Tri alpha", None, QtGui.QApplication.UnicodeUTF8)) self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnIn", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DUnIn = QtGui.QWidget() ui = Ui_DUnIn() ui.setupUi(DUnIn) DUnIn.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desCommande.py0000644004705000470430000003240211667202771016742 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desCommande.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DComm(object): def setupUi(self, DComm): DComm.setObjectName(_fromUtf8("DComm")) DComm.resize(792, 770) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(DComm.sizePolicy().hasHeightForWidth()) DComm.setSizePolicy(sizePolicy) DComm.setMinimumSize(QtCore.QSize(505, 0)) self.gridLayout_11 = QtGui.QGridLayout(DComm) self.gridLayout_11.setObjectName(_fromUtf8("gridLayout_11")) self.TWChoix = QtGui.QTabWidget(DComm) self.TWChoix.setObjectName(_fromUtf8("TWChoix")) self.MotClef = QtGui.QWidget() self.MotClef.setObjectName(_fromUtf8("MotClef")) self.gridLayout_6 = QtGui.QGridLayout(self.MotClef) self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6")) self.gridLayout_5 = QtGui.QGridLayout() self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5")) self.textLabel1 = QtGui.QLabel(self.MotClef) self.textLabel1.setMinimumSize(QtCore.QSize(0, 0)) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.gridLayout_5.addWidget(self.textLabel1, 0, 0, 1, 1) self.textLabel1_2 = QtGui.QLabel(self.MotClef) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.gridLayout_5.addWidget(self.textLabel1_2, 0, 1, 1, 1) self.LBMCPermis = QtGui.QListWidget(self.MotClef) self.LBMCPermis.setObjectName(_fromUtf8("LBMCPermis")) self.gridLayout_5.addWidget(self.LBMCPermis, 1, 0, 1, 1) self.LBRegles = QtGui.QListWidget(self.MotClef) self.LBRegles.setObjectName(_fromUtf8("LBRegles")) self.gridLayout_5.addWidget(self.LBRegles, 1, 1, 1, 1) self.gridLayout_6.addLayout(self.gridLayout_5, 0, 0, 1, 1) self.TWChoix.addTab(self.MotClef, _fromUtf8("")) self.Concept = QtGui.QWidget() self.Concept.setObjectName(_fromUtf8("Concept")) self.gridLayout_9 = QtGui.QGridLayout(self.Concept) self.gridLayout_9.setObjectName(_fromUtf8("gridLayout_9")) self.groupBox1 = QtGui.QGroupBox(self.Concept) self.groupBox1.setObjectName(_fromUtf8("groupBox1")) self.gridLayout_10 = QtGui.QGridLayout(self.groupBox1) self.gridLayout_10.setObjectName(_fromUtf8("gridLayout_10")) self.gridLayout_3 = QtGui.QGridLayout() self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.Label1 = QtGui.QLabel(self.groupBox1) self.Label1.setWordWrap(False) self.Label1.setObjectName(_fromUtf8("Label1")) self.gridLayout_3.addWidget(self.Label1, 0, 0, 1, 2) self.LENomConcept = QtGui.QLineEdit(self.groupBox1) self.LENomConcept.setMinimumSize(QtCore.QSize(360, 40)) self.LENomConcept.setObjectName(_fromUtf8("LENomConcept")) self.gridLayout_3.addWidget(self.LENomConcept, 1, 0, 1, 1) spacerItem = QtGui.QSpacerItem(356, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout_3.addItem(spacerItem, 1, 1, 1, 1) self.gridLayout_10.addLayout(self.gridLayout_3, 0, 0, 1, 1) self.gridLayout_8 = QtGui.QGridLayout() self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8")) self.listBoxASSD = QtGui.QListWidget(self.groupBox1) self.listBoxASSD.setObjectName(_fromUtf8("listBoxASSD")) self.gridLayout_8.addWidget(self.listBoxASSD, 0, 0, 1, 1) spacerItem1 = QtGui.QSpacerItem(20, 168, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout_8.addItem(spacerItem1, 1, 0, 1, 1) self.gridLayout_10.addLayout(self.gridLayout_8, 1, 0, 1, 1) self.gridLayout_7 = QtGui.QGridLayout() self.gridLayout_7.setObjectName(_fromUtf8("gridLayout_7")) self.Label2 = QtGui.QLabel(self.groupBox1) self.Label2.setWordWrap(False) self.Label2.setObjectName(_fromUtf8("Label2")) self.gridLayout_7.addWidget(self.Label2, 0, 0, 1, 1) self.Label3 = QtGui.QLabel(self.groupBox1) self.Label3.setWordWrap(False) self.Label3.setObjectName(_fromUtf8("Label3")) self.gridLayout_7.addWidget(self.Label3, 1, 0, 1, 1) self.typeConcept = QtGui.QLabel(self.groupBox1) self.typeConcept.setWordWrap(False) self.typeConcept.setObjectName(_fromUtf8("typeConcept")) self.gridLayout_7.addWidget(self.typeConcept, 1, 1, 1, 1) self.gridLayout_10.addLayout(self.gridLayout_7, 2, 0, 1, 1) self.gridLayout_9.addWidget(self.groupBox1, 0, 0, 1, 1) self.TWChoix.addTab(self.Concept, _fromUtf8("")) self.Commande = QtGui.QWidget() self.Commande.setObjectName(_fromUtf8("Commande")) self.gridLayout_4 = QtGui.QGridLayout(self.Commande) self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) self.gridLayout_2 = QtGui.QGridLayout() self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.textLabel1_4 = QtGui.QLabel(self.Commande) self.textLabel1_4.setWordWrap(False) self.textLabel1_4.setObjectName(_fromUtf8("textLabel1_4")) self.gridLayout_2.addWidget(self.textLabel1_4, 0, 0, 1, 2) self.groupBox = QtGui.QGroupBox(self.Commande) self.groupBox.setMinimumSize(QtCore.QSize(171, 71)) self.groupBox.setObjectName(_fromUtf8("groupBox")) self.gridLayout = QtGui.QGridLayout(self.groupBox) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.RBalpha = QtGui.QRadioButton(self.groupBox) self.RBalpha.setMinimumSize(QtCore.QSize(149, 16)) self.RBalpha.setMaximumSize(QtCore.QSize(149, 16)) self.RBalpha.setChecked(True) self.RBalpha.setObjectName(_fromUtf8("RBalpha")) self.gridLayout.addWidget(self.RBalpha, 0, 0, 1, 1) self.RBGroupe = QtGui.QRadioButton(self.groupBox) self.RBGroupe.setObjectName(_fromUtf8("RBGroupe")) self.gridLayout.addWidget(self.RBGroupe, 1, 0, 1, 1) self.gridLayout_2.addWidget(self.groupBox, 0, 4, 2, 1) self.textLabel6 = QtGui.QLabel(self.Commande) self.textLabel6.setMinimumSize(QtCore.QSize(91, 30)) self.textLabel6.setWordWrap(False) self.textLabel6.setObjectName(_fromUtf8("textLabel6")) self.gridLayout_2.addWidget(self.textLabel6, 1, 0, 1, 1) self.LEFiltre = QtGui.QLineEdit(self.Commande) self.LEFiltre.setMinimumSize(QtCore.QSize(231, 30)) self.LEFiltre.setObjectName(_fromUtf8("LEFiltre")) self.gridLayout_2.addWidget(self.LEFiltre, 1, 1, 1, 1) self.BNext = QtGui.QPushButton(self.Commande) self.BNext.setMinimumSize(QtCore.QSize(90, 30)) self.BNext.setObjectName(_fromUtf8("BNext")) self.gridLayout_2.addWidget(self.BNext, 1, 2, 1, 1) spacerItem2 = QtGui.QSpacerItem(108, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout_2.addItem(spacerItem2, 1, 3, 1, 1) self.gridLayout_4.addLayout(self.gridLayout_2, 0, 0, 1, 1) self.LBNouvCommande = QtGui.QListWidget(self.Commande) self.LBNouvCommande.setObjectName(_fromUtf8("LBNouvCommande")) self.gridLayout_4.addWidget(self.LBNouvCommande, 1, 0, 1, 1) self.textLabel4 = QtGui.QLabel(self.Commande) self.textLabel4.setMaximumSize(QtCore.QSize(721, 20)) self.textLabel4.setWordWrap(False) self.textLabel4.setObjectName(_fromUtf8("textLabel4")) self.gridLayout_4.addWidget(self.textLabel4, 2, 0, 1, 1) self.TWChoix.addTab(self.Commande, _fromUtf8("")) self.gridLayout_11.addWidget(self.TWChoix, 0, 0, 1, 1) self.Commentaire = QtGui.QLabel(DComm) self.Commentaire.setMaximumSize(QtCore.QSize(793, 20)) self.Commentaire.setFrameShape(QtGui.QFrame.NoFrame) self.Commentaire.setFrameShadow(QtGui.QFrame.Plain) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridLayout_11.addWidget(self.Commentaire, 1, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.BAlpha = QtGui.QPushButton(DComm) self.BAlpha.setObjectName(_fromUtf8("BAlpha")) self.horizontalLayout.addWidget(self.BAlpha) spacerItem3 = QtGui.QSpacerItem(198, 27, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem3) self.bOk = QtGui.QPushButton(DComm) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.bOk.sizePolicy().hasHeightForWidth()) self.bOk.setSizePolicy(sizePolicy) self.bOk.setMinimumSize(QtCore.QSize(160, 30)) self.bOk.setMaximumSize(QtCore.QSize(16777215, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout.addWidget(self.bOk) spacerItem4 = QtGui.QSpacerItem(254, 27, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem4) self.gridLayout_11.addLayout(self.horizontalLayout, 2, 0, 1, 1) self.retranslateUi(DComm) self.TWChoix.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(DComm) DComm.setTabOrder(self.TWChoix, self.LBNouvCommande) DComm.setTabOrder(self.LBNouvCommande, self.bOk) def retranslateUi(self, DComm): DComm.setWindowTitle(QtGui.QApplication.translate("DComm", "DComm", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("DComm", "

Mots Clefs Permis

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("DComm", "

Règles

", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DComm", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox1.setTitle(QtGui.QApplication.translate("DComm", "Concept", None, QtGui.QApplication.UnicodeUTF8)) self.Label1.setText(QtGui.QApplication.translate("DComm", "Nom du concept :", None, QtGui.QApplication.UnicodeUTF8)) self.Label2.setText(QtGui.QApplication.translate("DComm", "Type du concept :", None, QtGui.QApplication.UnicodeUTF8)) self.Label3.setText(QtGui.QApplication.translate("DComm", "L\'opérateur retourne un concept de type :", None, QtGui.QApplication.UnicodeUTF8)) self.typeConcept.setText(QtGui.QApplication.translate("DComm", "TypeDuConcept", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.Concept), QtGui.QApplication.translate("DComm", "Nommer Concept", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_4.setText(QtGui.QApplication.translate("DComm", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox.setTitle(QtGui.QApplication.translate("DComm", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) self.RBalpha.setText(QtGui.QApplication.translate("DComm", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) self.RBGroupe.setText(QtGui.QApplication.translate("DComm", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel6.setText(QtGui.QApplication.translate("DComm", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) self.BNext.setText(QtGui.QApplication.translate("DComm", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel4.setText(QtGui.QApplication.translate("DComm", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DComm", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) self.BAlpha.setText(QtGui.QApplication.translate("DComm", "Tri Alpha", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DComm", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DComm", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DComm", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DComm = QtGui.QWidget() ui = Ui_DComm() ui.setupUi(DComm) DComm.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desChoixCata.py0000644004705000470430000001523511667202771017067 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desChoixCata.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DChoixCata(object): def setupUi(self, DChoixCata): DChoixCata.setObjectName(_fromUtf8("DChoixCata")) DChoixCata.resize(465, 271) DChoixCata.setSizeGripEnabled(True) self.gridLayout = QtGui.QGridLayout(DChoixCata) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.horizontalLayout_3 = QtGui.QHBoxLayout() self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) self.TLNb = QtGui.QLabel(DChoixCata) self.TLNb.setMinimumSize(QtCore.QSize(0, 0)) self.TLNb.setWordWrap(False) self.TLNb.setObjectName(_fromUtf8("TLNb")) self.horizontalLayout_3.addWidget(self.TLNb) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem) self.gridLayout.addLayout(self.horizontalLayout_3, 0, 0, 1, 2) spacerItem1 = QtGui.QSpacerItem(20, 45, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout.addItem(spacerItem1, 1, 1, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.textLabel1_2 = QtGui.QLabel(DChoixCata) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.textLabel1_2.sizePolicy().hasHeightForWidth()) self.textLabel1_2.setSizePolicy(sizePolicy) self.textLabel1_2.setMinimumSize(QtCore.QSize(0, 0)) self.textLabel1_2.setScaledContents(False) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.horizontalLayout_2.addWidget(self.textLabel1_2) spacerItem2 = QtGui.QSpacerItem(38, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem2) self.CBChoixCata = QtGui.QComboBox(DChoixCata) self.CBChoixCata.setEnabled(True) self.CBChoixCata.setMinimumSize(QtCore.QSize(125, 41)) self.CBChoixCata.setMaximumSize(QtCore.QSize(150, 16777215)) self.CBChoixCata.setObjectName(_fromUtf8("CBChoixCata")) self.horizontalLayout_2.addWidget(self.CBChoixCata) self.gridLayout.addLayout(self.horizontalLayout_2, 2, 0, 1, 2) spacerItem3 = QtGui.QSpacerItem(20, 45, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout.addItem(spacerItem3, 3, 0, 1, 1) self.frame3 = QtGui.QFrame(DChoixCata) self.frame3.setFrameShape(QtGui.QFrame.StyledPanel) self.frame3.setFrameShadow(QtGui.QFrame.Raised) self.frame3.setObjectName(_fromUtf8("frame3")) self.horizontalLayout = QtGui.QHBoxLayout(self.frame3) self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.buttonOk = QtGui.QPushButton(self.frame3) self.buttonOk.setMinimumSize(QtCore.QSize(81, 41)) self.buttonOk.setShortcut(_fromUtf8("")) self.buttonOk.setAutoDefault(True) self.buttonOk.setDefault(True) self.buttonOk.setObjectName(_fromUtf8("buttonOk")) self.horizontalLayout.addWidget(self.buttonOk) spacerItem4 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem4) self.buttonCancel = QtGui.QPushButton(self.frame3) self.buttonCancel.setMinimumSize(QtCore.QSize(81, 41)) self.buttonCancel.setShortcut(_fromUtf8("")) self.buttonCancel.setAutoDefault(True) self.buttonCancel.setObjectName(_fromUtf8("buttonCancel")) self.horizontalLayout.addWidget(self.buttonCancel) self.gridLayout.addWidget(self.frame3, 4, 0, 1, 2) self.retranslateUi(DChoixCata) QtCore.QMetaObject.connectSlotsByName(DChoixCata) def retranslateUi(self, DChoixCata): DChoixCata.setWindowTitle(QtGui.QApplication.translate("DChoixCata", "Choix d\'une version du code Aster", None, QtGui.QApplication.UnicodeUTF8)) self.TLNb.setText(QtGui.QApplication.translate("DChoixCata", "\n" "\n" "

2 versions sont disponibles

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("DChoixCata", "\n" "\n" "\n" "\n" "
\n" "

Veuillez choisir celle avec laquelle

\n" "

vous souhaitez travailler

", None, QtGui.QApplication.UnicodeUTF8)) self.buttonOk.setText(QtGui.QApplication.translate("DChoixCata", "&OK", None, QtGui.QApplication.UnicodeUTF8)) self.buttonCancel.setText(QtGui.QApplication.translate("DChoixCata", "&Cancel", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DChoixCata = QtGui.QDialog() ui = Ui_DChoixCata() ui.setupUi(DChoixCata) DChoixCata.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desMCListAjout.py0000644004705000470430000001136411667202771017361 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desMCListAjout.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DMCListAjout(object): def setupUi(self, DMCListAjout): DMCListAjout.setObjectName(_fromUtf8("DMCListAjout")) DMCListAjout.resize(459, 472) DMCListAjout.setMinimumSize(QtCore.QSize(350, 0)) self.gridlayout = QtGui.QGridLayout(DMCListAjout) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.textLabel1 = QtGui.QLabel(DMCListAjout) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.gridlayout.addWidget(self.textLabel1, 1, 0, 1, 3) self.textLabel1_2 = QtGui.QLabel(DMCListAjout) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.gridlayout.addWidget(self.textLabel1_2, 2, 0, 1, 3) self.hboxlayout = QtGui.QHBoxLayout() self.hboxlayout.setObjectName(_fromUtf8("hboxlayout")) spacerItem = QtGui.QSpacerItem(60, 21, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.hboxlayout.addItem(spacerItem) self.bAjout = QtGui.QPushButton(DMCListAjout) self.bAjout.setAutoDefault(True) self.bAjout.setDefault(True) self.bAjout.setObjectName(_fromUtf8("bAjout")) self.hboxlayout.addWidget(self.bAjout) spacerItem1 = QtGui.QSpacerItem(80, 21, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.hboxlayout.addItem(spacerItem1) self.gridlayout.addLayout(self.hboxlayout, 8, 0, 1, 3) spacerItem2 = QtGui.QSpacerItem(21, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridlayout.addItem(spacerItem2, 9, 1, 1, 1) self.textLabel1_2_2 = QtGui.QLabel(DMCListAjout) self.textLabel1_2_2.setWordWrap(False) self.textLabel1_2_2.setObjectName(_fromUtf8("textLabel1_2_2")) self.gridlayout.addWidget(self.textLabel1_2_2, 6, 0, 1, 3) spacerItem3 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridlayout.addItem(spacerItem3, 7, 1, 1, 1) self.MCFacteur = QtGui.QLabel(DMCListAjout) self.MCFacteur.setWordWrap(False) self.MCFacteur.setObjectName(_fromUtf8("MCFacteur")) self.gridlayout.addWidget(self.MCFacteur, 4, 0, 1, 3) spacerItem4 = QtGui.QSpacerItem(21, 31, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridlayout.addItem(spacerItem4, 5, 1, 1, 1) spacerItem5 = QtGui.QSpacerItem(21, 51, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridlayout.addItem(spacerItem5, 3, 1, 1, 1) spacerItem6 = QtGui.QSpacerItem(41, 51, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridlayout.addItem(spacerItem6, 0, 1, 1, 1) self.retranslateUi(DMCListAjout) QtCore.QMetaObject.connectSlotsByName(DMCListAjout) def retranslateUi(self, DMCListAjout): DMCListAjout.setWindowTitle(QtGui.QApplication.translate("DMCListAjout", "Form1", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("DMCListAjout", "

Pour ajouter une autre occurrence

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("DMCListAjout", "

du mot clef-facteur

", None, QtGui.QApplication.UnicodeUTF8)) self.bAjout.setToolTip(QtGui.QApplication.translate("DMCListAjout", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bAjout.setText(QtGui.QApplication.translate("DMCListAjout", "&Ajouter", None, QtGui.QApplication.UnicodeUTF8)) self.bAjout.setShortcut(QtGui.QApplication.translate("DMCListAjout", "Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2_2.setText(QtGui.QApplication.translate("DMCListAjout", "

cliquez ci-dessous

", None, QtGui.QApplication.UnicodeUTF8)) self.MCFacteur.setText(QtGui.QApplication.translate("DMCListAjout", "

AFFE

", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DMCListAjout = QtGui.QWidget() ui = Ui_DMCListAjout() ui.setupUi(DMCListAjout) DMCListAjout.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desViewTexte.py0000644004705000470430000000372611667202771017152 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desViewTexte.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_dView(object): def setupUi(self, dView): dView.setObjectName(_fromUtf8("dView")) dView.resize(400, 322) self.gridLayout = QtGui.QGridLayout(dView) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.view = QtGui.QTextBrowser(dView) self.view.setObjectName(_fromUtf8("view")) self.gridLayout.addWidget(self.view, 0, 0, 1, 4) spacerItem = QtGui.QSpacerItem(209, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem, 1, 0, 1, 1) self.bclose = QtGui.QPushButton(dView) self.bclose.setObjectName(_fromUtf8("bclose")) self.gridLayout.addWidget(self.bclose, 1, 2, 1, 1) self.bsave = QtGui.QPushButton(dView) self.bsave.setObjectName(_fromUtf8("bsave")) self.gridLayout.addWidget(self.bsave, 1, 1, 1, 1) self.retranslateUi(dView) QtCore.QMetaObject.connectSlotsByName(dView) def retranslateUi(self, dView): dView.setWindowTitle(QtGui.QApplication.translate("dView", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) self.bclose.setText(QtGui.QApplication.translate("dView", "Fermer", None, QtGui.QApplication.UnicodeUTF8)) self.bsave.setText(QtGui.QApplication.translate("dView", "Sauver", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) dView = QtGui.QDialog() ui = Ui_dView() ui.setupUi(dView) dView.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desPixmap.py0000644004705000470430000000265611667202771016465 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desPixmap.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_LabelPixmap(object): def setupUi(self, LabelPixmap): LabelPixmap.setObjectName(_fromUtf8("LabelPixmap")) LabelPixmap.resize(400, 300) self.gridLayout = QtGui.QGridLayout(LabelPixmap) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.labelPix = QtGui.QLabel(LabelPixmap) self.labelPix.setText(_fromUtf8("")) self.labelPix.setObjectName(_fromUtf8("labelPix")) self.gridLayout.addWidget(self.labelPix, 0, 0, 1, 1) self.retranslateUi(LabelPixmap) QtCore.QMetaObject.connectSlotsByName(LabelPixmap) def retranslateUi(self, LabelPixmap): LabelPixmap.setWindowTitle(QtGui.QApplication.translate("LabelPixmap", "PDF de la loi", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) LabelPixmap = QtGui.QDialog() ui = Ui_LabelPixmap() ui.setupUi(LabelPixmap) LabelPixmap.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desInclude.py0000644004705000470430000003047011667202771016605 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desInclude.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DInc1(object): def setupUi(self, DInc1): DInc1.setObjectName(_fromUtf8("DInc1")) DInc1.resize(521, 511) DInc1.setMinimumSize(QtCore.QSize(505, 0)) self.gridlayout = QtGui.QGridLayout(DInc1) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.Commentaire = QtGui.QLabel(DInc1) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridlayout.addWidget(self.Commentaire, 1, 0, 1, 3) self.TWChoix = QtGui.QTabWidget(DInc1) self.TWChoix.setObjectName(_fromUtf8("TWChoix")) self.MotClef = QtGui.QWidget() self.MotClef.setObjectName(_fromUtf8("MotClef")) self.gridlayout1 = QtGui.QGridLayout(self.MotClef) self.gridlayout1.setObjectName(_fromUtf8("gridlayout1")) self.LBMCPermis = QtGui.QListWidget(self.MotClef) self.LBMCPermis.setMinimumSize(QtCore.QSize(0, 0)) self.LBMCPermis.setObjectName(_fromUtf8("LBMCPermis")) self.gridlayout1.addWidget(self.LBMCPermis, 1, 0, 1, 1) self.textLabel1 = QtGui.QLabel(self.MotClef) self.textLabel1.setMinimumSize(QtCore.QSize(0, 0)) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.gridlayout1.addWidget(self.textLabel1, 0, 0, 1, 1) self.LBRegles = QtGui.QListWidget(self.MotClef) self.LBRegles.setObjectName(_fromUtf8("LBRegles")) self.gridlayout1.addWidget(self.LBRegles, 1, 1, 1, 1) self.textLabel1_2 = QtGui.QLabel(self.MotClef) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.gridlayout1.addWidget(self.textLabel1_2, 0, 1, 1, 1) self.TWChoix.addTab(self.MotClef, _fromUtf8("")) self.Commande = QtGui.QWidget() self.Commande.setObjectName(_fromUtf8("Commande")) self.gridLayout_2 = QtGui.QGridLayout(self.Commande) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.textLabel1_4 = QtGui.QLabel(self.Commande) self.textLabel1_4.setWordWrap(False) self.textLabel1_4.setObjectName(_fromUtf8("textLabel1_4")) self.gridLayout_2.addWidget(self.textLabel1_4, 0, 0, 1, 3) self.groupBox = QtGui.QGroupBox(self.Commande) self.groupBox.setObjectName(_fromUtf8("groupBox")) self.gridLayout = QtGui.QGridLayout(self.groupBox) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.RBalpha = QtGui.QRadioButton(self.groupBox) self.RBalpha.setChecked(True) self.RBalpha.setObjectName(_fromUtf8("RBalpha")) self.gridLayout.addWidget(self.RBalpha, 0, 0, 1, 1) self.RBGroupe = QtGui.QRadioButton(self.groupBox) self.RBGroupe.setObjectName(_fromUtf8("RBGroupe")) self.gridLayout.addWidget(self.RBGroupe, 1, 0, 1, 1) self.gridLayout_2.addWidget(self.groupBox, 0, 3, 2, 1) self.textLabel6 = QtGui.QLabel(self.Commande) self.textLabel6.setMinimumSize(QtCore.QSize(50, 30)) self.textLabel6.setWordWrap(False) self.textLabel6.setObjectName(_fromUtf8("textLabel6")) self.gridLayout_2.addWidget(self.textLabel6, 1, 0, 1, 1) self.LEFiltre = QtGui.QLineEdit(self.Commande) self.LEFiltre.setMinimumSize(QtCore.QSize(160, 30)) self.LEFiltre.setObjectName(_fromUtf8("LEFiltre")) self.gridLayout_2.addWidget(self.LEFiltre, 1, 1, 1, 1) self.BNext = QtGui.QPushButton(self.Commande) self.BNext.setObjectName(_fromUtf8("BNext")) self.gridLayout_2.addWidget(self.BNext, 1, 2, 1, 1) self.LBNouvCommande = QtGui.QListWidget(self.Commande) self.LBNouvCommande.setObjectName(_fromUtf8("LBNouvCommande")) self.gridLayout_2.addWidget(self.LBNouvCommande, 2, 0, 1, 4) self.textLabel4 = QtGui.QLabel(self.Commande) self.textLabel4.setWordWrap(False) self.textLabel4.setObjectName(_fromUtf8("textLabel4")) self.gridLayout_2.addWidget(self.textLabel4, 3, 0, 1, 4) self.TWChoix.addTab(self.Commande, _fromUtf8("")) self.maPageOk = QtGui.QWidget() self.maPageOk.setObjectName(_fromUtf8("maPageOk")) self.textLabel1_3 = QtGui.QLabel(self.maPageOk) self.textLabel1_3.setGeometry(QtCore.QRect(30, 10, 440, 41)) self.textLabel1_3.setWordWrap(False) self.textLabel1_3.setObjectName(_fromUtf8("textLabel1_3")) self.LENomFichier = QtGui.QLineEdit(self.maPageOk) self.LENomFichier.setGeometry(QtCore.QRect(20, 50, 450, 40)) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.LENomFichier.sizePolicy().hasHeightForWidth()) self.LENomFichier.setSizePolicy(sizePolicy) self.LENomFichier.setMinimumSize(QtCore.QSize(450, 40)) self.LENomFichier.setObjectName(_fromUtf8("LENomFichier")) self.BBrowse = QtGui.QPushButton(self.maPageOk) self.BBrowse.setGeometry(QtCore.QRect(20, 110, 161, 41)) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.BBrowse.sizePolicy().hasHeightForWidth()) self.BBrowse.setSizePolicy(sizePolicy) self.BBrowse.setObjectName(_fromUtf8("BBrowse")) self.BChangeFile = QtGui.QPushButton(self.maPageOk) self.BChangeFile.setGeometry(QtCore.QRect(20, 160, 161, 41)) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.BChangeFile.sizePolicy().hasHeightForWidth()) self.BChangeFile.setSizePolicy(sizePolicy) self.BChangeFile.setObjectName(_fromUtf8("BChangeFile")) self.TWChoix.addTab(self.maPageOk, _fromUtf8("")) self.maPageBad = QtGui.QWidget() self.maPageBad.setObjectName(_fromUtf8("maPageBad")) self.gridlayout2 = QtGui.QGridLayout(self.maPageBad) self.gridlayout2.setObjectName(_fromUtf8("gridlayout2")) self.textLabel1_5 = QtGui.QLabel(self.maPageBad) self.textLabel1_5.setWordWrap(False) self.textLabel1_5.setObjectName(_fromUtf8("textLabel1_5")) self.gridlayout2.addWidget(self.textLabel1_5, 0, 0, 1, 1) self.TWChoix.addTab(self.maPageBad, _fromUtf8("")) self.gridlayout.addWidget(self.TWChoix, 0, 0, 1, 3) self.BAlpha = QtGui.QPushButton(DInc1) self.BAlpha.setObjectName(_fromUtf8("BAlpha")) self.gridlayout.addWidget(self.BAlpha, 2, 0, 1, 1) self.bOk = QtGui.QPushButton(DInc1) self.bOk.setMinimumSize(QtCore.QSize(161, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.gridlayout.addWidget(self.bOk, 2, 2, 1, 1) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridlayout.addItem(spacerItem, 2, 1, 1, 1) self.retranslateUi(DInc1) self.TWChoix.setCurrentIndex(2) QtCore.QMetaObject.connectSlotsByName(DInc1) DInc1.setTabOrder(self.LEFiltre, self.LENomFichier) DInc1.setTabOrder(self.LENomFichier, self.TWChoix) DInc1.setTabOrder(self.TWChoix, self.LBMCPermis) DInc1.setTabOrder(self.LBMCPermis, self.LBRegles) DInc1.setTabOrder(self.LBRegles, self.LBNouvCommande) DInc1.setTabOrder(self.LBNouvCommande, self.RBalpha) DInc1.setTabOrder(self.RBalpha, self.BBrowse) DInc1.setTabOrder(self.BBrowse, self.BChangeFile) def retranslateUi(self, DInc1): DInc1.setWindowTitle(QtGui.QApplication.translate("DInc1", "DMacro", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("DInc1", "

Mots Clefs Permis

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("DInc1", "

Régles

", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DInc1", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_4.setText(QtGui.QApplication.translate("DInc1", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox.setTitle(QtGui.QApplication.translate("DInc1", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) self.RBalpha.setText(QtGui.QApplication.translate("DInc1", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) self.RBGroupe.setText(QtGui.QApplication.translate("DInc1", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel6.setText(QtGui.QApplication.translate("DInc1", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) self.BNext.setText(QtGui.QApplication.translate("DInc1", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel4.setText(QtGui.QApplication.translate("DInc1", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DInc1", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_3.setText(QtGui.QApplication.translate("DInc1", "La commande INCLUDE requiert un nom de Fichier :", None, QtGui.QApplication.UnicodeUTF8)) self.BBrowse.setText(QtGui.QApplication.translate("DInc1", "Edit", None, QtGui.QApplication.UnicodeUTF8)) self.BChangeFile.setText(QtGui.QApplication.translate("DInc1", "Autre Fichier", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.maPageOk), QtGui.QApplication.translate("DInc1", "Fichier Include", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_5.setText(QtGui.QApplication.translate("DInc1", "\n" "\n" "

La commande INCLUDE n\'a pas de fichier associé.

\n" "

Il faut d\'abord choisir un numéro d\'unité

", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.maPageBad), QtGui.QApplication.translate("DInc1", "Fichier Inc", None, QtGui.QApplication.UnicodeUTF8)) self.BAlpha.setText(QtGui.QApplication.translate("DInc1", "Tri Alpha", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DInc1", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DInc1", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DInc1", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DInc1 = QtGui.QWidget() ui = Ui_DInc1() ui.setupUi(DInc1) DInc1.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/OptionsCuve.py0000644004705000470430000002134211667202771017002 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/OptionsCuve.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_desOptions(object): def setupUi(self, desOptions): desOptions.setObjectName(_fromUtf8("desOptions")) desOptions.resize(657, 645) self.gridLayout = QtGui.QGridLayout(desOptions) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.groupBox1 = QtGui.QGroupBox(desOptions) self.groupBox1.setMinimumSize(QtCore.QSize(635, 200)) self.groupBox1.setMaximumSize(QtCore.QSize(16777215, 252)) self.groupBox1.setObjectName(_fromUtf8("groupBox1")) self.verticalLayout_4 = QtGui.QVBoxLayout(self.groupBox1) self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.CBVersions = QtGui.QComboBox(self.groupBox1) self.CBVersions.setMinimumSize(QtCore.QSize(120, 40)) self.CBVersions.setMaximumSize(QtCore.QSize(121, 40)) self.CBVersions.setObjectName(_fromUtf8("CBVersions")) self.horizontalLayout.addWidget(self.CBVersions) spacerItem = QtGui.QSpacerItem(120, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.Bok = QtGui.QPushButton(self.groupBox1) self.Bok.setMinimumSize(QtCore.QSize(120, 40)) self.Bok.setMaximumSize(QtCore.QSize(121, 40)) self.Bok.setAutoDefault(False) self.Bok.setObjectName(_fromUtf8("Bok")) self.horizontalLayout.addWidget(self.Bok) self.verticalLayout_4.addLayout(self.horizontalLayout) self.verticalLayout = QtGui.QVBoxLayout() self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.textLabel1_3 = QtGui.QLabel(self.groupBox1) self.textLabel1_3.setWordWrap(False) self.textLabel1_3.setObjectName(_fromUtf8("textLabel1_3")) self.verticalLayout.addWidget(self.textLabel1_3) self.LERepCata = QtGui.QLineEdit(self.groupBox1) self.LERepCata.setMinimumSize(QtCore.QSize(501, 41)) self.LERepCata.setText(_fromUtf8("")) self.LERepCata.setObjectName(_fromUtf8("LERepCata")) self.verticalLayout.addWidget(self.LERepCata) self.verticalLayout_4.addLayout(self.verticalLayout) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.PBajout = QtGui.QPushButton(self.groupBox1) self.PBajout.setMinimumSize(QtCore.QSize(101, 41)) self.PBajout.setObjectName(_fromUtf8("PBajout")) self.horizontalLayout_2.addWidget(self.PBajout) self.LEVersionAjout = QtGui.QLineEdit(self.groupBox1) self.LEVersionAjout.setMinimumSize(QtCore.QSize(101, 41)) self.LEVersionAjout.setObjectName(_fromUtf8("LEVersionAjout")) self.horizontalLayout_2.addWidget(self.LEVersionAjout) spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem1) self.PBSup = QtGui.QPushButton(self.groupBox1) self.PBSup.setMinimumSize(QtCore.QSize(101, 41)) self.PBSup.setObjectName(_fromUtf8("PBSup")) self.horizontalLayout_2.addWidget(self.PBSup) self.LEVersionSup = QtGui.QLineEdit(self.groupBox1) self.LEVersionSup.setMinimumSize(QtCore.QSize(0, 41)) self.LEVersionSup.setObjectName(_fromUtf8("LEVersionSup")) self.horizontalLayout_2.addWidget(self.LEVersionSup) self.verticalLayout_4.addLayout(self.horizontalLayout_2) self.gridLayout.addWidget(self.groupBox1, 0, 0, 1, 1) self.groupBox3 = QtGui.QGroupBox(desOptions) self.groupBox3.setMinimumSize(QtCore.QSize(548, 0)) self.groupBox3.setObjectName(_fromUtf8("groupBox3")) self.verticalLayout_2 = QtGui.QVBoxLayout(self.groupBox3) self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) self.textLabel1 = QtGui.QLabel(self.groupBox3) self.textLabel1.setMinimumSize(QtCore.QSize(0, 0)) self.textLabel1.setMaximumSize(QtCore.QSize(16777215, 41)) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.verticalLayout_2.addWidget(self.textLabel1) self.LERepDoc = QtGui.QLineEdit(self.groupBox3) self.LERepDoc.setMinimumSize(QtCore.QSize(520, 40)) self.LERepDoc.setText(_fromUtf8("")) self.LERepDoc.setObjectName(_fromUtf8("LERepDoc")) self.verticalLayout_2.addWidget(self.LERepDoc) self.gridLayout.addWidget(self.groupBox3, 1, 0, 1, 1) self.groupBox3_2 = QtGui.QGroupBox(desOptions) self.groupBox3_2.setMinimumSize(QtCore.QSize(548, 0)) self.groupBox3_2.setObjectName(_fromUtf8("groupBox3_2")) self.verticalLayout_3 = QtGui.QVBoxLayout(self.groupBox3_2) self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) self.textLabel1_4 = QtGui.QLabel(self.groupBox3_2) self.textLabel1_4.setMinimumSize(QtCore.QSize(0, 0)) self.textLabel1_4.setMaximumSize(QtCore.QSize(16777215, 41)) self.textLabel1_4.setWordWrap(False) self.textLabel1_4.setObjectName(_fromUtf8("textLabel1_4")) self.verticalLayout_3.addWidget(self.textLabel1_4) self.LESaveDir = QtGui.QLineEdit(self.groupBox3_2) self.LESaveDir.setMinimumSize(QtCore.QSize(520, 41)) self.LESaveDir.setText(_fromUtf8("")) self.LESaveDir.setObjectName(_fromUtf8("LESaveDir")) self.verticalLayout_3.addWidget(self.LESaveDir) self.gridLayout.addWidget(self.groupBox3_2, 2, 0, 1, 1) self.splitter_3 = QtGui.QSplitter(desOptions) self.splitter_3.setOrientation(QtCore.Qt.Horizontal) self.splitter_3.setObjectName(_fromUtf8("splitter_3")) self.Bdefaut = QtGui.QCheckBox(self.splitter_3) self.Bdefaut.setMinimumSize(QtCore.QSize(340, 41)) self.Bdefaut.setMaximumSize(QtCore.QSize(16777215, 41)) font = QtGui.QFont() font.setPointSize(12) self.Bdefaut.setFont(font) self.Bdefaut.setObjectName(_fromUtf8("Bdefaut")) self.PBQuit = QtGui.QPushButton(self.splitter_3) self.PBQuit.setMinimumSize(QtCore.QSize(151, 31)) self.PBQuit.setObjectName(_fromUtf8("PBQuit")) self.gridLayout.addWidget(self.splitter_3, 3, 0, 1, 1) self.retranslateUi(desOptions) QtCore.QMetaObject.connectSlotsByName(desOptions) def retranslateUi(self, desOptions): desOptions.setWindowTitle(QtGui.QApplication.translate("desOptions", "Option TURNS", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox1.setTitle(QtGui.QApplication.translate("desOptions", "Configurer une Version", None, QtGui.QApplication.UnicodeUTF8)) self.Bok.setText(QtGui.QApplication.translate("desOptions", "Valider", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_3.setText(QtGui.QApplication.translate("desOptions", "Fichier catalogue (chemin complet) :", None, QtGui.QApplication.UnicodeUTF8)) self.PBajout.setText(QtGui.QApplication.translate("desOptions", "Ajouter\n" "Version :", None, QtGui.QApplication.UnicodeUTF8)) self.PBSup.setText(QtGui.QApplication.translate("desOptions", "Supprimer\n" "Version :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox3.setTitle(QtGui.QApplication.translate("desOptions", "Doc", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("desOptions", "Répertoire d\'accès à la documentation :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox3_2.setTitle(QtGui.QApplication.translate("desOptions", "Espace de travail", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_4.setText(QtGui.QApplication.translate("desOptions", "Répertoire de sauvegarde par défaut :", None, QtGui.QApplication.UnicodeUTF8)) self.Bdefaut.setText(QtGui.QApplication.translate("desOptions", "Réinitialiser avec les valeurs par defaut", None, QtGui.QApplication.UnicodeUTF8)) self.PBQuit.setText(QtGui.QApplication.translate("desOptions", "Quitter", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) desOptions = QtGui.QDialog() ui = Ui_desOptions() ui.setupUi(desOptions) desOptions.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desMCFact.py0000644004705000470430000001062411667202771016316 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desMCFact.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DMCFact(object): def setupUi(self, DMCFact): DMCFact.setObjectName(_fromUtf8("DMCFact")) DMCFact.resize(511, 499) DMCFact.setMinimumSize(QtCore.QSize(505, 0)) self.gridlayout = QtGui.QGridLayout(DMCFact) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.TWChoix = QtGui.QTabWidget(DMCFact) self.TWChoix.setObjectName(_fromUtf8("TWChoix")) self.MotClef = QtGui.QWidget() self.MotClef.setObjectName(_fromUtf8("MotClef")) self.gridlayout1 = QtGui.QGridLayout(self.MotClef) self.gridlayout1.setObjectName(_fromUtf8("gridlayout1")) self.textLabel1 = QtGui.QLabel(self.MotClef) self.textLabel1.setMinimumSize(QtCore.QSize(0, 0)) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.gridlayout1.addWidget(self.textLabel1, 0, 0, 1, 1) self.LBMCPermis = QtGui.QListWidget(self.MotClef) self.LBMCPermis.setMinimumSize(QtCore.QSize(0, 0)) self.LBMCPermis.setObjectName(_fromUtf8("LBMCPermis")) self.gridlayout1.addWidget(self.LBMCPermis, 1, 0, 1, 1) self.LBRegles = QtGui.QListWidget(self.MotClef) self.LBRegles.setObjectName(_fromUtf8("LBRegles")) self.gridlayout1.addWidget(self.LBRegles, 1, 1, 1, 1) self.textLabel1_2 = QtGui.QLabel(self.MotClef) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.gridlayout1.addWidget(self.textLabel1_2, 0, 1, 1, 1) self.TWChoix.addTab(self.MotClef, _fromUtf8("")) self.gridlayout.addWidget(self.TWChoix, 0, 0, 1, 3) self.Commentaire = QtGui.QLabel(DMCFact) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridlayout.addWidget(self.Commentaire, 1, 0, 1, 3) self.bOk = QtGui.QPushButton(DMCFact) self.bOk.setMinimumSize(QtCore.QSize(159, 0)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.gridlayout.addWidget(self.bOk, 2, 2, 1, 1) self.BAlpha = QtGui.QPushButton(DMCFact) self.BAlpha.setObjectName(_fromUtf8("BAlpha")) self.gridlayout.addWidget(self.BAlpha, 2, 0, 1, 1) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridlayout.addItem(spacerItem, 2, 1, 1, 1) self.retranslateUi(DMCFact) QtCore.QMetaObject.connectSlotsByName(DMCFact) def retranslateUi(self, DMCFact): DMCFact.setWindowTitle(QtGui.QApplication.translate("DMCFact", "DMacro", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("DMCFact", "

Mots Clefs Permis

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("DMCFact", "

Régles

", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DMCFact", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DMCFact", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DMCFact", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DMCFact", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.BAlpha.setText(QtGui.QApplication.translate("DMCFact", "Tri Alpha", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DMCFact = QtGui.QWidget() ui = Ui_DMCFact() ui.setupUi(DMCFact) DMCFact.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desMatrice.py0000644004705000470430000000501011667202771016576 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desMatrice.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_desMatrice(object): def setupUi(self, desMatrice): desMatrice.setObjectName(_fromUtf8("desMatrice")) desMatrice.resize(400, 300) self.gridLayout_2 = QtGui.QGridLayout(desMatrice) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.TBMatrice = QtGui.QTableWidget(desMatrice) self.TBMatrice.setObjectName(_fromUtf8("TBMatrice")) self.TBMatrice.setColumnCount(0) self.TBMatrice.setRowCount(0) self.gridLayout_2.addWidget(self.TBMatrice, 0, 0, 1, 1) self.splitter = QtGui.QSplitter(desMatrice) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setObjectName(_fromUtf8("splitter")) self.layoutWidget = QtGui.QWidget(self.splitter) self.layoutWidget.setObjectName(_fromUtf8("layoutWidget")) self.gridLayout = QtGui.QGridLayout(self.layoutWidget) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) spacerItem = QtGui.QSpacerItem(140, 24, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem, 0, 0, 1, 1) self.BOk = QtGui.QPushButton(self.layoutWidget) self.BOk.setObjectName(_fromUtf8("BOk")) self.gridLayout.addWidget(self.BOk, 0, 1, 1, 1) spacerItem1 = QtGui.QSpacerItem(138, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem1, 0, 2, 1, 1) self.gridLayout_2.addWidget(self.splitter, 1, 0, 1, 1) self.retranslateUi(desMatrice) QtCore.QMetaObject.connectSlotsByName(desMatrice) def retranslateUi(self, desMatrice): desMatrice.setWindowTitle(QtGui.QApplication.translate("desMatrice", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) self.BOk.setText(QtGui.QApplication.translate("desMatrice", "Valider", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) desMatrice = QtGui.QDialog() ui = Ui_desMatrice() ui.setupUi(desMatrice) desMatrice.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desUniqueSDCOInto.py0000644004705000470430000001251611667202771017774 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desUniqueSDCOInto.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DUnSDCOInto(object): def setupUi(self, DUnSDCOInto): DUnSDCOInto.setObjectName(_fromUtf8("DUnSDCOInto")) DUnSDCOInto.resize(482, 480) DUnSDCOInto.setMinimumSize(QtCore.QSize(0, 0)) self.gridlayout = QtGui.QGridLayout(DUnSDCOInto) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.tabuniqueinto = QtGui.QTabWidget(DUnSDCOInto) self.tabuniqueinto.setObjectName(_fromUtf8("tabuniqueinto")) self.Widget8 = QtGui.QWidget() self.Widget8.setObjectName(_fromUtf8("Widget8")) self.gridlayout1 = QtGui.QGridLayout(self.Widget8) self.gridlayout1.setObjectName(_fromUtf8("gridlayout1")) self.textLabel2 = QtGui.QLabel(self.Widget8) self.textLabel2.setWordWrap(False) self.textLabel2.setObjectName(_fromUtf8("textLabel2")) self.gridlayout1.addWidget(self.textLabel2, 0, 0, 1, 3) self.LBSDCO = QtGui.QListWidget(self.Widget8) self.LBSDCO.setObjectName(_fromUtf8("LBSDCO")) self.gridlayout1.addWidget(self.LBSDCO, 1, 0, 1, 3) self.textLabel2_3 = QtGui.QLabel(self.Widget8) self.textLabel2_3.setWordWrap(False) self.textLabel2_3.setObjectName(_fromUtf8("textLabel2_3")) self.gridlayout1.addWidget(self.textLabel2_3, 5, 0, 1, 3) self.Commentaire = QtGui.QLabel(self.Widget8) self.Commentaire.setMinimumSize(QtCore.QSize(420, 30)) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridlayout1.addWidget(self.Commentaire, 4, 0, 1, 3) self.gridlayout2 = QtGui.QGridLayout() self.gridlayout2.setObjectName(_fromUtf8("gridlayout2")) self.gridlayout1.addLayout(self.gridlayout2, 2, 0, 1, 3) self.hboxlayout = QtGui.QHBoxLayout() self.hboxlayout.setObjectName(_fromUtf8("hboxlayout")) self.frame3 = QtGui.QFrame(self.Widget8) self.frame3.setMinimumSize(QtCore.QSize(190, 50)) self.frame3.setFrameShape(QtGui.QFrame.StyledPanel) self.frame3.setFrameShadow(QtGui.QFrame.Raised) self.frame3.setObjectName(_fromUtf8("frame3")) self.textLabel2_2 = QtGui.QLabel(self.frame3) self.textLabel2_2.setGeometry(QtCore.QRect(20, 10, 150, 30)) self.textLabel2_2.setWordWrap(False) self.textLabel2_2.setObjectName(_fromUtf8("textLabel2_2")) self.hboxlayout.addWidget(self.frame3) self.LESDCO = QtGui.QLineEdit(self.Widget8) self.LESDCO.setMinimumSize(QtCore.QSize(220, 40)) self.LESDCO.setObjectName(_fromUtf8("LESDCO")) self.hboxlayout.addWidget(self.LESDCO) self.gridlayout1.addLayout(self.hboxlayout, 3, 0, 1, 3) self.bOk = QtGui.QPushButton(self.Widget8) self.bOk.setMinimumSize(QtCore.QSize(0, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.gridlayout1.addWidget(self.bOk, 6, 1, 1, 1) self.tabuniqueinto.addTab(self.Widget8, _fromUtf8("")) self.gridlayout.addWidget(self.tabuniqueinto, 0, 0, 1, 1) self.retranslateUi(DUnSDCOInto) QtCore.QMetaObject.connectSlotsByName(DUnSDCOInto) DUnSDCOInto.setTabOrder(self.LESDCO, self.LBSDCO) DUnSDCOInto.setTabOrder(self.LBSDCO, self.tabuniqueinto) DUnSDCOInto.setTabOrder(self.tabuniqueinto, self.bOk) def retranslateUi(self, DUnSDCOInto): DUnSDCOInto.setWindowTitle(QtGui.QApplication.translate("DUnSDCOInto", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2.setText(QtGui.QApplication.translate("DUnSDCOInto", "Structures de données du type requis par l\'objet courant ", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2_3.setText(QtGui.QApplication.translate("DUnSDCOInto", "Un objet de type CO est attendu", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2_2.setText(QtGui.QApplication.translate("DUnSDCOInto", " Nom concept : ", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DUnSDCOInto", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DUnSDCOInto", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DUnSDCOInto", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnSDCOInto", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DUnSDCOInto = QtGui.QWidget() ui = Ui_DUnSDCOInto() ui.setupUi(DUnSDCOInto) DUnSDCOInto.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desPlusieursInto.py0000644004705000470430000001611511667202771020047 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desPlusieursInto.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DPlusInto(object): def setupUi(self, DPlusInto): DPlusInto.setObjectName(_fromUtf8("DPlusInto")) DPlusInto.resize(482, 480) DPlusInto.setMinimumSize(QtCore.QSize(350, 0)) self.gridlayout = QtGui.QGridLayout(DPlusInto) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.tabuniqueinto = QtGui.QTabWidget(DPlusInto) self.tabuniqueinto.setObjectName(_fromUtf8("tabuniqueinto")) self.Widget8 = QtGui.QWidget() self.Widget8.setObjectName(_fromUtf8("Widget8")) self.gridLayout = QtGui.QGridLayout(self.Widget8) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.textLabel1 = QtGui.QLabel(self.Widget8) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.gridLayout.addWidget(self.textLabel1, 0, 0, 1, 1) self.textLabel1_2 = QtGui.QLabel(self.Widget8) self.textLabel1_2.setWordWrap(False) self.textLabel1_2.setObjectName(_fromUtf8("textLabel1_2")) self.gridLayout.addWidget(self.textLabel1_2, 0, 1, 1, 1) self.hboxlayout = QtGui.QHBoxLayout() self.hboxlayout.setObjectName(_fromUtf8("hboxlayout")) self.LBValeurs = QtGui.QListWidget(self.Widget8) self.LBValeurs.setObjectName(_fromUtf8("LBValeurs")) self.hboxlayout.addWidget(self.LBValeurs) self.vboxlayout = QtGui.QVBoxLayout() self.vboxlayout.setObjectName(_fromUtf8("vboxlayout")) spacerItem = QtGui.QSpacerItem(21, 44, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.vboxlayout.addItem(spacerItem) self.vboxlayout1 = QtGui.QVBoxLayout() self.vboxlayout1.setObjectName(_fromUtf8("vboxlayout1")) self.BAjout1Val = QtGui.QToolButton(self.Widget8) self.BAjout1Val.setMinimumSize(QtCore.QSize(40, 31)) self.BAjout1Val.setMaximumSize(QtCore.QSize(40, 31)) self.BAjout1Val.setText(_fromUtf8("")) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/arrow_left.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.BAjout1Val.setIcon(icon) self.BAjout1Val.setObjectName(_fromUtf8("BAjout1Val")) self.vboxlayout1.addWidget(self.BAjout1Val) self.BSup1Val = QtGui.QToolButton(self.Widget8) self.BSup1Val.setMinimumSize(QtCore.QSize(40, 31)) self.BSup1Val.setMaximumSize(QtCore.QSize(40, 31)) self.BSup1Val.setText(_fromUtf8("")) icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap(_fromUtf8("../Editeur/icons/arrow_right.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.BSup1Val.setIcon(icon1) self.BSup1Val.setObjectName(_fromUtf8("BSup1Val")) self.vboxlayout1.addWidget(self.BSup1Val) spacerItem1 = QtGui.QSpacerItem(21, 176, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.vboxlayout1.addItem(spacerItem1) self.vboxlayout.addLayout(self.vboxlayout1) self.hboxlayout.addLayout(self.vboxlayout) self.listBoxVal = QtGui.QListWidget(self.Widget8) self.listBoxVal.setObjectName(_fromUtf8("listBoxVal")) self.hboxlayout.addWidget(self.listBoxVal) self.gridLayout.addLayout(self.hboxlayout, 1, 0, 1, 2) self.Commentaire = QtGui.QLabel(self.Widget8) self.Commentaire.setMinimumSize(QtCore.QSize(0, 20)) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridLayout.addWidget(self.Commentaire, 2, 0, 1, 2) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) spacerItem2 = QtGui.QSpacerItem(148, 27, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem2) self.bOk = QtGui.QPushButton(self.Widget8) self.bOk.setMinimumSize(QtCore.QSize(130, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout.addWidget(self.bOk) spacerItem3 = QtGui.QSpacerItem(58, 27, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem3) self.BAlpha = QtGui.QPushButton(self.Widget8) self.BAlpha.setObjectName(_fromUtf8("BAlpha")) self.horizontalLayout.addWidget(self.BAlpha) self.gridLayout.addLayout(self.horizontalLayout, 3, 0, 1, 2) self.tabuniqueinto.addTab(self.Widget8, _fromUtf8("")) self.gridlayout.addWidget(self.tabuniqueinto, 0, 0, 1, 1) self.retranslateUi(DPlusInto) QtCore.QMetaObject.connectSlotsByName(DPlusInto) DPlusInto.setTabOrder(self.listBoxVal, self.tabuniqueinto) DPlusInto.setTabOrder(self.tabuniqueinto, self.bOk) DPlusInto.setTabOrder(self.bOk, self.LBValeurs) def retranslateUi(self, DPlusInto): DPlusInto.setWindowTitle(QtGui.QApplication.translate("DPlusInto", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("DPlusInto", "Valeur(s) actuelle(s)", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2.setText(QtGui.QApplication.translate("DPlusInto", "Valeur(s) possibles(s)", None, QtGui.QApplication.UnicodeUTF8)) self.BAjout1Val.setToolTip(QtGui.QApplication.translate("DPlusInto", "enleve l occurence selectionnee", None, QtGui.QApplication.UnicodeUTF8)) self.BSup1Val.setToolTip(QtGui.QApplication.translate("DPlusInto", "ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DPlusInto", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DPlusInto", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DPlusInto", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.BAlpha.setText(QtGui.QApplication.translate("DPlusInto", "Tri Alpha", None, QtGui.QApplication.UnicodeUTF8)) self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DPlusInto", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DPlusInto = QtGui.QWidget() ui = Ui_DPlusInto() ui.setupUi(DPlusInto) DPlusInto.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desParam.py0000644004705000470430000002460711667202771016267 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desParam.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DParam(object): def setupUi(self, DParam): DParam.setObjectName(_fromUtf8("DParam")) DParam.resize(682, 552) DParam.setMinimumSize(QtCore.QSize(505, 0)) self.gridLayout_3 = QtGui.QGridLayout(DParam) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.TWChoix = QtGui.QTabWidget(DParam) self.TWChoix.setObjectName(_fromUtf8("TWChoix")) self.Valeur_Parametre = QtGui.QWidget() self.Valeur_Parametre.setObjectName(_fromUtf8("Valeur_Parametre")) self.gridLayout_5 = QtGui.QGridLayout(self.Valeur_Parametre) self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5")) self.textLabel2_2_2 = QtGui.QLabel(self.Valeur_Parametre) self.textLabel2_2_2.setWordWrap(False) self.textLabel2_2_2.setObjectName(_fromUtf8("textLabel2_2_2")) self.gridLayout_5.addWidget(self.textLabel2_2_2, 0, 0, 1, 2) self.textLabel2_2 = QtGui.QLabel(self.Valeur_Parametre) self.textLabel2_2.setWordWrap(False) self.textLabel2_2.setObjectName(_fromUtf8("textLabel2_2")) self.gridLayout_5.addWidget(self.textLabel2_2, 1, 0, 1, 1) self.lineEditNom = QtGui.QLineEdit(self.Valeur_Parametre) self.lineEditNom.setMinimumSize(QtCore.QSize(231, 31)) self.lineEditNom.setObjectName(_fromUtf8("lineEditNom")) self.gridLayout_5.addWidget(self.lineEditNom, 1, 1, 1, 1) self.textLabel2 = QtGui.QLabel(self.Valeur_Parametre) self.textLabel2.setWordWrap(False) self.textLabel2.setObjectName(_fromUtf8("textLabel2")) self.gridLayout_5.addWidget(self.textLabel2, 2, 0, 1, 1) self.lineEditVal = QtGui.QLineEdit(self.Valeur_Parametre) self.lineEditVal.setMinimumSize(QtCore.QSize(231, 31)) self.lineEditVal.setObjectName(_fromUtf8("lineEditVal")) self.gridLayout_5.addWidget(self.lineEditVal, 2, 1, 1, 1) self.Commentaire2 = QtGui.QLabel(self.Valeur_Parametre) self.Commentaire2.setWordWrap(False) self.Commentaire2.setObjectName(_fromUtf8("Commentaire2")) self.gridLayout_5.addWidget(self.Commentaire2, 3, 0, 1, 2) spacerItem = QtGui.QSpacerItem(460, 139, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout_5.addItem(spacerItem, 4, 0, 1, 2) self.Commentaire = QtGui.QLabel(self.Valeur_Parametre) self.Commentaire.setMinimumSize(QtCore.QSize(0, 20)) self.Commentaire.setMaximumSize(QtCore.QSize(465, 16777215)) self.Commentaire.setText(_fromUtf8("")) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridLayout_5.addWidget(self.Commentaire, 5, 0, 1, 2) self.Commentaire_2 = QtGui.QLabel(self.Valeur_Parametre) self.Commentaire_2.setText(_fromUtf8("")) self.Commentaire_2.setWordWrap(False) self.Commentaire_2.setObjectName(_fromUtf8("Commentaire_2")) self.gridLayout_5.addWidget(self.Commentaire_2, 6, 0, 1, 2) self.TWChoix.addTab(self.Valeur_Parametre, _fromUtf8("")) self.Commande = QtGui.QWidget() self.Commande.setObjectName(_fromUtf8("Commande")) self.gridLayout_4 = QtGui.QGridLayout(self.Commande) self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) self.gridLayout_2 = QtGui.QGridLayout() self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.textLabel1_4 = QtGui.QLabel(self.Commande) self.textLabel1_4.setWordWrap(False) self.textLabel1_4.setObjectName(_fromUtf8("textLabel1_4")) self.gridLayout_2.addWidget(self.textLabel1_4, 0, 0, 1, 2) self.groupBox = QtGui.QGroupBox(self.Commande) self.groupBox.setMinimumSize(QtCore.QSize(171, 71)) self.groupBox.setObjectName(_fromUtf8("groupBox")) self.gridLayout = QtGui.QGridLayout(self.groupBox) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.RBalpha = QtGui.QRadioButton(self.groupBox) self.RBalpha.setMinimumSize(QtCore.QSize(149, 16)) self.RBalpha.setMaximumSize(QtCore.QSize(149, 16)) self.RBalpha.setChecked(True) self.RBalpha.setObjectName(_fromUtf8("RBalpha")) self.gridLayout.addWidget(self.RBalpha, 0, 0, 1, 1) self.RBGroupe = QtGui.QRadioButton(self.groupBox) self.RBGroupe.setObjectName(_fromUtf8("RBGroupe")) self.gridLayout.addWidget(self.RBGroupe, 1, 0, 1, 1) self.gridLayout_2.addWidget(self.groupBox, 0, 4, 2, 1) self.textLabel6 = QtGui.QLabel(self.Commande) self.textLabel6.setMinimumSize(QtCore.QSize(91, 30)) self.textLabel6.setWordWrap(False) self.textLabel6.setObjectName(_fromUtf8("textLabel6")) self.gridLayout_2.addWidget(self.textLabel6, 1, 0, 1, 1) self.LEFiltre = QtGui.QLineEdit(self.Commande) self.LEFiltre.setMinimumSize(QtCore.QSize(231, 30)) self.LEFiltre.setObjectName(_fromUtf8("LEFiltre")) self.gridLayout_2.addWidget(self.LEFiltre, 1, 1, 1, 1) self.BNext = QtGui.QPushButton(self.Commande) self.BNext.setMinimumSize(QtCore.QSize(90, 30)) self.BNext.setObjectName(_fromUtf8("BNext")) self.gridLayout_2.addWidget(self.BNext, 1, 2, 1, 1) spacerItem1 = QtGui.QSpacerItem(108, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout_2.addItem(spacerItem1, 1, 3, 1, 1) self.gridLayout_4.addLayout(self.gridLayout_2, 0, 0, 1, 1) self.LBNouvCommande = QtGui.QListWidget(self.Commande) self.LBNouvCommande.setObjectName(_fromUtf8("LBNouvCommande")) self.gridLayout_4.addWidget(self.LBNouvCommande, 1, 0, 1, 1) self.textLabel4 = QtGui.QLabel(self.Commande) self.textLabel4.setMaximumSize(QtCore.QSize(721, 20)) self.textLabel4.setWordWrap(False) self.textLabel4.setObjectName(_fromUtf8("textLabel4")) self.gridLayout_4.addWidget(self.textLabel4, 2, 0, 1, 1) self.TWChoix.addTab(self.Commande, _fromUtf8("")) self.gridLayout_3.addWidget(self.TWChoix, 0, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) spacerItem2 = QtGui.QSpacerItem(158, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem2) self.bOk = QtGui.QPushButton(DParam) self.bOk.setMinimumSize(QtCore.QSize(160, 30)) self.bOk.setMaximumSize(QtCore.QSize(160, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout.addWidget(self.bOk) spacerItem3 = QtGui.QSpacerItem(148, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem3) self.gridLayout_3.addLayout(self.horizontalLayout, 1, 0, 1, 1) self.retranslateUi(DParam) self.TWChoix.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(DParam) DParam.setTabOrder(self.LEFiltre, self.TWChoix) DParam.setTabOrder(self.TWChoix, self.lineEditNom) DParam.setTabOrder(self.lineEditNom, self.lineEditVal) DParam.setTabOrder(self.lineEditVal, self.LBNouvCommande) DParam.setTabOrder(self.LBNouvCommande, self.RBalpha) DParam.setTabOrder(self.RBalpha, self.bOk) def retranslateUi(self, DParam): DParam.setWindowTitle(QtGui.QApplication.translate("DParam", "DComm", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2_2_2.setText(QtGui.QApplication.translate("DParam", "

Parametre

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2_2.setText(QtGui.QApplication.translate("DParam", " Nom: ", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2.setText(QtGui.QApplication.translate("DParam", " Valeur: ", None, QtGui.QApplication.UnicodeUTF8)) self.Commentaire2.setText(QtGui.QApplication.translate("DParam", "Retour Chariot dans une sone de saisie permet de vérifier la \n" "validité de la valeur saisie.\n" "\n" "Les nouvelles valeurs ne seront prises en compte qu\'après avoir \n" "appuyé sur le bouton Valider.", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.Valeur_Parametre), QtGui.QApplication.translate("DParam", "Valeur Parametre", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_4.setText(QtGui.QApplication.translate("DParam", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox.setTitle(QtGui.QApplication.translate("DParam", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) self.RBalpha.setText(QtGui.QApplication.translate("DParam", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) self.RBGroupe.setText(QtGui.QApplication.translate("DParam", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel6.setText(QtGui.QApplication.translate("DParam", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) self.BNext.setText(QtGui.QApplication.translate("DParam", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel4.setText(QtGui.QApplication.translate("DParam", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DParam", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DParam", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DParam", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DParam", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DParam = QtGui.QWidget() ui = Ui_DParam() ui.setupUi(DParam) DParam.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desUniqueBase.py0000644004705000470430000001640511667202771017265 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desUniqueBase.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DUnBase(object): def setupUi(self, DUnBase): DUnBase.setObjectName(_fromUtf8("DUnBase")) DUnBase.resize(482, 480) self.gridlayout = QtGui.QGridLayout(DUnBase) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.tabuniqueinto = QtGui.QTabWidget(DUnBase) self.tabuniqueinto.setObjectName(_fromUtf8("tabuniqueinto")) self.Widget8 = QtGui.QWidget() self.Widget8.setObjectName(_fromUtf8("Widget8")) self.gridLayout_2 = QtGui.QGridLayout(self.Widget8) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.textLabel2 = QtGui.QLabel(self.Widget8) self.textLabel2.setWordWrap(False) self.textLabel2.setObjectName(_fromUtf8("textLabel2")) self.horizontalLayout.addWidget(self.textLabel2) self.lineEditVal = QtGui.QLineEdit(self.Widget8) self.lineEditVal.setMinimumSize(QtCore.QSize(290, 50)) self.lineEditVal.setObjectName(_fromUtf8("lineEditVal")) self.horizontalLayout.addWidget(self.lineEditVal) self.gridLayout_2.addLayout(self.horizontalLayout, 0, 0, 1, 1) self.gridLayout = QtGui.QGridLayout() self.gridLayout.setObjectName(_fromUtf8("gridLayout")) spacerItem = QtGui.QSpacerItem(293, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem, 0, 0, 1, 1) self.BSalome = QtGui.QPushButton(self.Widget8) self.BSalome.setMinimumSize(QtCore.QSize(142, 40)) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(_fromUtf8("image240.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.BSalome.setIcon(icon) self.BSalome.setObjectName(_fromUtf8("BSalome")) self.gridLayout.addWidget(self.BSalome, 0, 1, 1, 1) self.bParametres = QtGui.QPushButton(self.Widget8) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.bParametres.sizePolicy().hasHeightForWidth()) self.bParametres.setSizePolicy(sizePolicy) self.bParametres.setMinimumSize(QtCore.QSize(140, 45)) self.bParametres.setObjectName(_fromUtf8("bParametres")) self.gridLayout.addWidget(self.bParametres, 0, 2, 1, 1) spacerItem1 = QtGui.QSpacerItem(138, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem1, 1, 0, 1, 1) self.BView2D = QtGui.QPushButton(self.Widget8) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.BView2D.sizePolicy().hasHeightForWidth()) self.BView2D.setSizePolicy(sizePolicy) self.BView2D.setMinimumSize(QtCore.QSize(140, 40)) self.BView2D.setObjectName(_fromUtf8("BView2D")) self.gridLayout.addWidget(self.BView2D, 1, 1, 1, 1) self.BFichier = QtGui.QPushButton(self.Widget8) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.BFichier.sizePolicy().hasHeightForWidth()) self.BFichier.setSizePolicy(sizePolicy) self.BFichier.setMinimumSize(QtCore.QSize(140, 40)) self.BFichier.setIcon(icon) self.BFichier.setObjectName(_fromUtf8("BFichier")) self.gridLayout.addWidget(self.BFichier, 1, 2, 1, 1) self.gridLayout_2.addLayout(self.gridLayout, 1, 0, 1, 1) self.Commentaire = QtGui.QLabel(self.Widget8) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.gridLayout_2.addWidget(self.Commentaire, 2, 0, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem2) self.bOk = QtGui.QPushButton(self.Widget8) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.bOk.sizePolicy().hasHeightForWidth()) self.bOk.setSizePolicy(sizePolicy) self.bOk.setMinimumSize(QtCore.QSize(140, 40)) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout_2.addWidget(self.bOk) spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem3) self.gridLayout_2.addLayout(self.horizontalLayout_2, 3, 0, 1, 1) self.tabuniqueinto.addTab(self.Widget8, _fromUtf8("")) self.gridlayout.addWidget(self.tabuniqueinto, 0, 0, 1, 1) self.retranslateUi(DUnBase) QtCore.QMetaObject.connectSlotsByName(DUnBase) def retranslateUi(self, DUnBase): DUnBase.setWindowTitle(QtGui.QApplication.translate("DUnBase", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel2.setText(QtGui.QApplication.translate("DUnBase", "

Valeur:

", None, QtGui.QApplication.UnicodeUTF8)) self.BSalome.setText(QtGui.QApplication.translate("DUnBase", "Selectionner", None, QtGui.QApplication.UnicodeUTF8)) self.bParametres.setText(QtGui.QApplication.translate("DUnBase", "Parametres", None, QtGui.QApplication.UnicodeUTF8)) self.BView2D.setText(QtGui.QApplication.translate("DUnBase", "Visualiser", None, QtGui.QApplication.UnicodeUTF8)) self.BFichier.setText(QtGui.QApplication.translate("DUnBase", "Fichier", None, QtGui.QApplication.UnicodeUTF8)) self.Commentaire.setText(QtGui.QApplication.translate("DUnBase", "TextLabel", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DUnBase", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DUnBase", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DUnBase", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnBase", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DUnBase = QtGui.QWidget() ui = Ui_DUnBase() ui.setupUi(DUnBase) DUnBase.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desUniqueComp.py0000644004705000470430000001477611667202771017322 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desUniqueComp.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DUnComp(object): def setupUi(self, DUnComp): DUnComp.setObjectName(_fromUtf8("DUnComp")) DUnComp.resize(484, 529) self.gridlayout = QtGui.QGridLayout(DUnComp) self.gridlayout.setObjectName(_fromUtf8("gridlayout")) self.tabuniqueinto = QtGui.QTabWidget(DUnComp) self.tabuniqueinto.setObjectName(_fromUtf8("tabuniqueinto")) self.Widget8 = QtGui.QWidget() self.Widget8.setObjectName(_fromUtf8("Widget8")) self.gridLayout_2 = QtGui.QGridLayout(self.Widget8) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.verticalLayout_2 = QtGui.QVBoxLayout() self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) self.textLabel1 = QtGui.QLabel(self.Widget8) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.verticalLayout_2.addWidget(self.textLabel1) self.LEcomp = QtGui.QLineEdit(self.Widget8) self.LEcomp.setMinimumSize(QtCore.QSize(390, 40)) self.LEcomp.setObjectName(_fromUtf8("LEcomp")) self.verticalLayout_2.addWidget(self.LEcomp) self.gridLayout_2.addLayout(self.verticalLayout_2, 0, 0, 1, 1) self.verticalLayout_3 = QtGui.QVBoxLayout() self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_3.addItem(spacerItem) self.groupBox = QtGui.QGroupBox(self.Widget8) self.groupBox.setObjectName(_fromUtf8("groupBox")) self.gridLayout = QtGui.QGridLayout(self.groupBox) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.RBRI = QtGui.QRadioButton(self.groupBox) self.RBRI.setObjectName(_fromUtf8("RBRI")) self.gridLayout.addWidget(self.RBRI, 0, 0, 1, 1) self.RBMP = QtGui.QRadioButton(self.groupBox) self.RBMP.setObjectName(_fromUtf8("RBMP")) self.gridLayout.addWidget(self.RBMP, 1, 0, 1, 1) self.verticalLayout_3.addWidget(self.groupBox) self.gridLayout_2.addLayout(self.verticalLayout_3, 1, 0, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.LEReel = QtGui.QLineEdit(self.Widget8) self.LEReel.setMinimumSize(QtCore.QSize(190, 40)) self.LEReel.setObjectName(_fromUtf8("LEReel")) self.horizontalLayout_2.addWidget(self.LEReel) self.LEImag = QtGui.QLineEdit(self.Widget8) self.LEImag.setMinimumSize(QtCore.QSize(190, 40)) self.LEImag.setObjectName(_fromUtf8("LEImag")) self.horizontalLayout_2.addWidget(self.LEImag) self.gridLayout_2.addLayout(self.horizontalLayout_2, 2, 0, 1, 1) self.verticalLayout = QtGui.QVBoxLayout() self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.Commentaire = QtGui.QLabel(self.Widget8) self.Commentaire.setWordWrap(False) self.Commentaire.setObjectName(_fromUtf8("Commentaire")) self.verticalLayout.addWidget(self.Commentaire) spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem2) self.bOk = QtGui.QPushButton(self.Widget8) self.bOk.setMinimumSize(QtCore.QSize(160, 30)) self.bOk.setMaximumSize(QtCore.QSize(160, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout.addWidget(self.bOk) spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem3) self.verticalLayout.addLayout(self.horizontalLayout) self.gridLayout_2.addLayout(self.verticalLayout, 3, 0, 1, 1) self.tabuniqueinto.addTab(self.Widget8, _fromUtf8("")) self.gridlayout.addWidget(self.tabuniqueinto, 0, 0, 1, 1) self.retranslateUi(DUnComp) QtCore.QMetaObject.connectSlotsByName(DUnComp) def retranslateUi(self, DUnComp): DUnComp.setWindowTitle(QtGui.QApplication.translate("DUnComp", "DUnComp", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("DUnComp", "Complexe de la forme : a+bj", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox.setTitle(QtGui.QApplication.translate("DUnComp", "Ou", None, QtGui.QApplication.UnicodeUTF8)) self.RBRI.setText(QtGui.QApplication.translate("DUnComp", "RI : Réel Imaginaire", None, QtGui.QApplication.UnicodeUTF8)) self.RBMP.setText(QtGui.QApplication.translate("DUnComp", "MP : Module Phase", None, QtGui.QApplication.UnicodeUTF8)) self.Commentaire.setText(QtGui.QApplication.translate("DUnComp", "Un complexe est attendu", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DUnComp", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DUnComp", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DUnComp", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnComp", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DUnComp = QtGui.QWidget() ui = Ui_DUnComp() ui.setupUi(DUnComp) DUnComp.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/OptionsEditeur.py0000644004705000470430000001550211667202771017502 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/OptionsEditeur.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_desOptions(object): def setupUi(self, desOptions): desOptions.setObjectName(_fromUtf8("desOptions")) desOptions.resize(570, 474) self.gridLayout = QtGui.QGridLayout(desOptions) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.groupBox1 = QtGui.QGroupBox(desOptions) self.groupBox1.setMinimumSize(QtCore.QSize(548, 191)) self.groupBox1.setObjectName(_fromUtf8("groupBox1")) self.textLabel1_3 = QtGui.QLabel(self.groupBox1) self.textLabel1_3.setGeometry(QtCore.QRect(30, 60, 280, 20)) self.textLabel1_3.setWordWrap(False) self.textLabel1_3.setObjectName(_fromUtf8("textLabel1_3")) self.textLabel1_2_2 = QtGui.QLabel(self.groupBox1) self.textLabel1_2_2.setGeometry(QtCore.QRect(30, 120, 280, 20)) self.textLabel1_2_2.setWordWrap(False) self.textLabel1_2_2.setObjectName(_fromUtf8("textLabel1_2_2")) self.CBVersions = QtGui.QComboBox(self.groupBox1) self.CBVersions.setGeometry(QtCore.QRect(30, 20, 90, 30)) self.CBVersions.setObjectName(_fromUtf8("CBVersions")) self.LERepMat = QtGui.QLineEdit(self.groupBox1) self.LERepMat.setGeometry(QtCore.QRect(30, 140, 501, 31)) self.LERepMat.setMinimumSize(QtCore.QSize(501, 31)) self.LERepMat.setText(_fromUtf8("")) self.LERepMat.setObjectName(_fromUtf8("LERepMat")) self.LERepCata = QtGui.QLineEdit(self.groupBox1) self.LERepCata.setGeometry(QtCore.QRect(30, 80, 501, 31)) self.LERepCata.setMinimumSize(QtCore.QSize(501, 31)) self.LERepCata.setText(_fromUtf8("")) self.LERepCata.setObjectName(_fromUtf8("LERepCata")) self.Bok = QtGui.QPushButton(self.groupBox1) self.Bok.setGeometry(QtCore.QRect(440, 20, 90, 31)) self.Bok.setMinimumSize(QtCore.QSize(90, 31)) self.Bok.setAutoDefault(False) self.Bok.setObjectName(_fromUtf8("Bok")) self.gridLayout.addWidget(self.groupBox1, 0, 0, 1, 2) self.groupBox2 = QtGui.QGroupBox(desOptions) self.groupBox2.setMinimumSize(QtCore.QSize(548, 90)) self.groupBox2.setObjectName(_fromUtf8("groupBox2")) self.LEVersionAjout = QtGui.QLineEdit(self.groupBox2) self.LEVersionAjout.setGeometry(QtCore.QRect(120, 31, 101, 30)) self.LEVersionAjout.setMinimumSize(QtCore.QSize(101, 30)) self.LEVersionAjout.setObjectName(_fromUtf8("LEVersionAjout")) self.LEVersionSup = QtGui.QLineEdit(self.groupBox2) self.LEVersionSup.setGeometry(QtCore.QRect(410, 30, 101, 30)) self.LEVersionSup.setObjectName(_fromUtf8("LEVersionSup")) self.PBSup = QtGui.QPushButton(self.groupBox2) self.PBSup.setGeometry(QtCore.QRect(300, 20, 101, 41)) self.PBSup.setMinimumSize(QtCore.QSize(101, 41)) self.PBSup.setObjectName(_fromUtf8("PBSup")) self.PBajout = QtGui.QPushButton(self.groupBox2) self.PBajout.setGeometry(QtCore.QRect(10, 20, 101, 41)) self.PBajout.setMinimumSize(QtCore.QSize(101, 41)) self.PBajout.setObjectName(_fromUtf8("PBajout")) self.gridLayout.addWidget(self.groupBox2, 1, 0, 1, 2) self.groupBox3 = QtGui.QGroupBox(desOptions) self.groupBox3.setMinimumSize(QtCore.QSize(548, 90)) self.groupBox3.setObjectName(_fromUtf8("groupBox3")) self.LERepDoc = QtGui.QLineEdit(self.groupBox3) self.LERepDoc.setGeometry(QtCore.QRect(20, 50, 520, 31)) self.LERepDoc.setMinimumSize(QtCore.QSize(520, 31)) self.LERepDoc.setText(_fromUtf8("")) self.LERepDoc.setObjectName(_fromUtf8("LERepDoc")) self.textLabel1 = QtGui.QLabel(self.groupBox3) self.textLabel1.setGeometry(QtCore.QRect(20, 20, 280, 30)) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.gridLayout.addWidget(self.groupBox3, 2, 0, 1, 2) self.Bdefaut = QtGui.QCheckBox(desOptions) self.Bdefaut.setMinimumSize(QtCore.QSize(340, 20)) font = QtGui.QFont() font.setPointSize(12) self.Bdefaut.setFont(font) self.Bdefaut.setObjectName(_fromUtf8("Bdefaut")) self.gridLayout.addWidget(self.Bdefaut, 3, 0, 1, 1) self.PBQuit = QtGui.QPushButton(desOptions) self.PBQuit.setMinimumSize(QtCore.QSize(151, 31)) self.PBQuit.setObjectName(_fromUtf8("PBQuit")) self.gridLayout.addWidget(self.PBQuit, 3, 1, 1, 1) self.retranslateUi(desOptions) QtCore.QMetaObject.connectSlotsByName(desOptions) def retranslateUi(self, desOptions): desOptions.setWindowTitle(QtGui.QApplication.translate("desOptions", "Options Aster", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox1.setTitle(QtGui.QApplication.translate("desOptions", "Configurer une Version", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_3.setText(QtGui.QApplication.translate("desOptions", "Répertoire d\'accès au catalogue :", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_2_2.setText(QtGui.QApplication.translate("desOptions", "Répertoire d\'accès aux matériaux :", None, QtGui.QApplication.UnicodeUTF8)) self.Bok.setText(QtGui.QApplication.translate("desOptions", "Valider", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox2.setTitle(QtGui.QApplication.translate("desOptions", "Gérer les versions", None, QtGui.QApplication.UnicodeUTF8)) self.PBSup.setText(QtGui.QApplication.translate("desOptions", "Supprimer\n" "Version :", None, QtGui.QApplication.UnicodeUTF8)) self.PBajout.setText(QtGui.QApplication.translate("desOptions", "Ajouter\n" "Version :", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox3.setTitle(QtGui.QApplication.translate("desOptions", "Doc", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("desOptions", "Repertoire d\'acces à la documentation :", None, QtGui.QApplication.UnicodeUTF8)) self.Bdefaut.setText(QtGui.QApplication.translate("desOptions", "Reinitialiser avec les valeurs par defaut", None, QtGui.QApplication.UnicodeUTF8)) self.PBQuit.setText(QtGui.QApplication.translate("desOptions", "Quitter", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) desOptions = QtGui.QDialog() ui = Ui_desOptions() ui.setupUi(desOptions) desOptions.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desRacine.py0000644004705000470430000001755311667202771016432 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desRacine.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DRac(object): def setupUi(self, DRac): DRac.setObjectName(_fromUtf8("DRac")) DRac.resize(582, 540) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(DRac.sizePolicy().hasHeightForWidth()) DRac.setSizePolicy(sizePolicy) DRac.setMinimumSize(QtCore.QSize(505, 0)) self.gridLayout_2 = QtGui.QGridLayout(DRac) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.verticalLayout = QtGui.QVBoxLayout() self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.textLabel1_4 = QtGui.QLabel(DRac) self.textLabel1_4.setMinimumSize(QtCore.QSize(0, 20)) self.textLabel1_4.setWordWrap(False) self.textLabel1_4.setObjectName(_fromUtf8("textLabel1_4")) self.horizontalLayout.addWidget(self.textLabel1_4) self.textLabel1_4_2 = QtGui.QLabel(DRac) self.textLabel1_4_2.setWordWrap(False) self.textLabel1_4_2.setObjectName(_fromUtf8("textLabel1_4_2")) self.horizontalLayout.addWidget(self.textLabel1_4_2) self.verticalLayout.addLayout(self.horizontalLayout) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.RBalpha = QtGui.QRadioButton(DRac) self.RBalpha.setChecked(True) self.RBalpha.setObjectName(_fromUtf8("RBalpha")) self.horizontalLayout_2.addWidget(self.RBalpha) self.RBGroupe = QtGui.QRadioButton(DRac) self.RBGroupe.setObjectName(_fromUtf8("RBGroupe")) self.horizontalLayout_2.addWidget(self.RBGroupe) spacerItem = QtGui.QSpacerItem(228, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem) self.verticalLayout.addLayout(self.horizontalLayout_2) self.horizontalLayout_3 = QtGui.QHBoxLayout() self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) self.textLabel6 = QtGui.QLabel(DRac) self.textLabel6.setMinimumSize(QtCore.QSize(40, 0)) self.textLabel6.setWordWrap(False) self.textLabel6.setObjectName(_fromUtf8("textLabel6")) self.horizontalLayout_3.addWidget(self.textLabel6) self.LEFiltre = QtGui.QLineEdit(DRac) self.LEFiltre.setMinimumSize(QtCore.QSize(0, 30)) self.LEFiltre.setObjectName(_fromUtf8("LEFiltre")) self.horizontalLayout_3.addWidget(self.LEFiltre) self.BNext = QtGui.QPushButton(DRac) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.BNext.sizePolicy().hasHeightForWidth()) self.BNext.setSizePolicy(sizePolicy) self.BNext.setObjectName(_fromUtf8("BNext")) self.horizontalLayout_3.addWidget(self.BNext) spacerItem1 = QtGui.QSpacerItem(268, 27, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem1) self.verticalLayout.addLayout(self.horizontalLayout_3) self.gridLayout_2.addLayout(self.verticalLayout, 0, 0, 1, 1) self.gridLayout = QtGui.QGridLayout() self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.LBNouvCommande = QtGui.QListWidget(DRac) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.LBNouvCommande.sizePolicy().hasHeightForWidth()) self.LBNouvCommande.setSizePolicy(sizePolicy) self.LBNouvCommande.setObjectName(_fromUtf8("LBNouvCommande")) self.gridLayout.addWidget(self.LBNouvCommande, 0, 0, 1, 1) self.LBRegles = QtGui.QListWidget(DRac) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.LBRegles.sizePolicy().hasHeightForWidth()) self.LBRegles.setSizePolicy(sizePolicy) self.LBRegles.setMinimumSize(QtCore.QSize(0, 0)) self.LBRegles.setObjectName(_fromUtf8("LBRegles")) self.gridLayout.addWidget(self.LBRegles, 0, 1, 1, 1) self.gridLayout_2.addLayout(self.gridLayout, 1, 0, 1, 1) self.horizontalLayout_4 = QtGui.QHBoxLayout() self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4")) spacerItem2 = QtGui.QSpacerItem(148, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem2) self.bOk = QtGui.QPushButton(DRac) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.bOk.sizePolicy().hasHeightForWidth()) self.bOk.setSizePolicy(sizePolicy) self.bOk.setMinimumSize(QtCore.QSize(160, 30)) self.bOk.setAutoDefault(True) self.bOk.setDefault(True) self.bOk.setObjectName(_fromUtf8("bOk")) self.horizontalLayout_4.addWidget(self.bOk) spacerItem3 = QtGui.QSpacerItem(148, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem3) self.gridLayout_2.addLayout(self.horizontalLayout_4, 2, 0, 1, 1) self.retranslateUi(DRac) QtCore.QMetaObject.connectSlotsByName(DRac) DRac.setTabOrder(self.LEFiltre, self.LBNouvCommande) DRac.setTabOrder(self.LBNouvCommande, self.bOk) DRac.setTabOrder(self.bOk, self.LBRegles) def retranslateUi(self, DRac): DRac.setWindowTitle(QtGui.QApplication.translate("DRac", "DMacro", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_4.setText(QtGui.QApplication.translate("DRac", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_4_2.setText(QtGui.QApplication.translate("DRac", "

Régles :

", None, QtGui.QApplication.UnicodeUTF8)) self.RBalpha.setText(QtGui.QApplication.translate("DRac", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) self.RBGroupe.setText(QtGui.QApplication.translate("DRac", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel6.setText(QtGui.QApplication.translate("DRac", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) self.BNext.setText(QtGui.QApplication.translate("DRac", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setToolTip(QtGui.QApplication.translate("DRac", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setText(QtGui.QApplication.translate("DRac", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) self.bOk.setShortcut(QtGui.QApplication.translate("DRac", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DRac = QtGui.QWidget() ui = Ui_DRac() ui.setupUi(DRac) DRac.show() sys.exit(app.exec_()) eficas-6.4.0/UiQT4/desInactif.py0000644004705000470430000001143711667202771016601 0ustar courtoisasterdev# -*- coding: utf-8 -*- # Form implementation generated from reading ui file '/local01/salome/V6_4_0rc2/tools/src/Eficasv1-V6_4_0rc2-py266-qt463p1-sip4112-pyqt481-cm285/UiQT4/desInactif.ui' # # Created: Mon Dec 5 18:57:13 2011 # by: PyQt4 UI code generator 4.8.1 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_DInactif(object): def setupUi(self, DInactif): DInactif.setObjectName(_fromUtf8("DInactif")) DInactif.resize(452, 480) DInactif.setMinimumSize(QtCore.QSize(350, 0)) self.gridLayout = QtGui.QGridLayout(DInactif) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.textLabel1_3 = QtGui.QLabel(DInactif) self.textLabel1_3.setMinimumSize(QtCore.QSize(0, 0)) self.textLabel1_3.setWordWrap(False) self.textLabel1_3.setObjectName(_fromUtf8("textLabel1_3")) self.gridLayout.addWidget(self.textLabel1_3, 0, 0, 1, 3) self.textLabel1 = QtGui.QLabel(DInactif) self.textLabel1.setWordWrap(False) self.textLabel1.setObjectName(_fromUtf8("textLabel1")) self.gridLayout.addWidget(self.textLabel1, 1, 0, 1, 3) spacerItem = QtGui.QSpacerItem(167, 146, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem, 2, 0, 1, 1) self.bSup = QtGui.QPushButton(DInactif) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.bSup.sizePolicy().hasHeightForWidth()) self.bSup.setSizePolicy(sizePolicy) self.bSup.setMinimumSize(QtCore.QSize(170, 40)) self.bSup.setAutoDefault(True) self.bSup.setObjectName(_fromUtf8("bSup")) self.gridLayout.addWidget(self.bSup, 2, 1, 1, 1) spacerItem1 = QtGui.QSpacerItem(166, 146, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem1, 2, 2, 1, 1) self.retranslateUi(DInactif) QtCore.QMetaObject.connectSlotsByName(DInactif) def retranslateUi(self, DInactif): DInactif.setWindowTitle(QtGui.QApplication.translate("DInactif", "DInactif", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1_3.setText(QtGui.QApplication.translate("DInactif", "\n" "\n" "

Le noeud sélectionné ne correspond

\n" "

pas à un objet actif.

", None, QtGui.QApplication.UnicodeUTF8)) self.textLabel1.setText(QtGui.QApplication.translate("DInactif", "\n" "\n" "

Seules les commandes placées

\n" "

entre : DEBUT / FIN sont actives

", None, QtGui.QApplication.UnicodeUTF8)) self.bSup.setToolTip(QtGui.QApplication.translate("DInactif", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) self.bSup.setText(QtGui.QApplication.translate("DInactif", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) self.bSup.setShortcut(QtGui.QApplication.translate("DInactif", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) DInactif = QtGui.QWidget() ui = Ui_DInactif() ui.setupUi(DInactif) DInactif.show() sys.exit(app.exec_()) eficas-6.4.0/generator/0000755004705000470430000000000011670106364015223 5ustar courtoisasterdeveficas-6.4.0/generator/generator_aplat.py0000644004705000470430000002472411444664427020765 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient le plugin generateur de fichier au format aplat pour EFICAS. """ import traceback import types,string,re from Noyau import N_CR from Noyau.N_utils import repr_float from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL from Accas import GEOM,ASSD,MCNUPLET from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM def entryPoint(): """ Retourne les informations nécessaires pour le chargeur de plugins Ces informations sont retournées dans un dictionnaire """ return { # Le nom du plugin 'name' : 'aplat', # La factory pour créer une instance du plugin 'factory' : AplatGenerator, } class AplatGenerator: """ Ce generateur parcourt un objet de type JDC et produit un fichier au format aplat L'acquisition et le parcours sont réalisés par la méthode generator.gener(objet_jdc,format) L'écriture du fichier au format ini par appel de la méthode generator.writefile(nom_fichier) Ses caractéristiques principales sont exposées dans des attributs de classe : - extensions : qui donne une liste d'extensions de fichier préconisées """ # Les extensions de fichier préconisées extensions=('.*',) def __init__(self,cr=None): # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard if cr : self.cr=cr else: self.cr=N_CR.CR(debut='CR generateur format aplat pour eficas', fin='fin CR format aplat pour eficas') self.init='' # Le séparateur utiisé self.sep='//' # Le texte au format aplat est stocké dans l'attribut text self.text='' def writefile(self,filename): fp=open(filename,'w') fp.write(self.text) fp.close() def gener(self,obj,format='brut',config=None): """ Retourne une représentation du JDC obj sous une forme qui est paramétrée par format. Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu de generator """ liste= self.generator(obj) if format == 'brut': self.text=liste elif format == 'standard': self.text=liste elif format == 'beautifie': self.text=liste else: raise "Format pas implémenté : "+format return self.text def generator(self,obj): """ Cette methode joue un role d'aiguillage en fonction du type de obj On pourrait utiliser les méthodes accept et visitxxx à la place (dépend des gouts !!!) """ # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage) if isinstance(obj,PROC_ETAPE): return self.generPROC_ETAPE(obj) elif isinstance(obj,MACRO_ETAPE): return self.generMACRO_ETAPE(obj) elif isinstance(obj,FORM_ETAPE): return self.generFORM_ETAPE(obj) elif isinstance(obj,ETAPE): return self.generETAPE(obj) elif isinstance(obj,MCFACT): return self.generMCFACT(obj) elif isinstance(obj,MCList): return self.generMCList(obj) elif isinstance(obj,MCBLOC): return self.generMCBLOC(obj) elif isinstance(obj,MCSIMP): return self.generMCSIMP(obj) elif isinstance(obj,ASSD): return self.generASSD(obj) elif isinstance(obj,ETAPE_NIVEAU): return self.generETAPE_NIVEAU(obj) elif isinstance(obj,COMMENTAIRE): return self.generCOMMENTAIRE(obj) # Attention doit etre placé avant PARAMETRE (raison : héritage) elif isinstance(obj,PARAMETRE_EVAL): return self.generPARAMETRE_EVAL(obj) elif isinstance(obj,PARAMETRE): return self.generPARAMETRE(obj) elif isinstance(obj,EVAL): return self.generEVAL(obj) elif isinstance(obj,COMMANDE_COMM): return self.generCOMMANDE_COMM(obj) elif isinstance(obj,JDC): return self.generJDC(obj) elif isinstance(obj,MCNUPLET): return self.generMCNUPLET(obj) else: raise "Type d'objet non prévu",obj def generJDC(self,obj): """ Cette méthode convertit un objet JDC en une chaine de caractères à la syntaxe aplat """ text='' if obj.definition.l_niveaux == (): # Il n'y a pas de niveaux for etape in obj.etapes: text=text+self.generator(etape)+'\n' else: # Il y a des niveaux for etape_niveau in obj.etapes_niveaux: text=text+self.generator(etape_niveau)+'\n' return text def generCOMMANDE_COMM(self,obj): """ Cette méthode convertit un COMMANDE_COMM en une chaine de caractères à la syntaxe aplat """ l_lignes = string.split(obj.valeur,'\n') txt='' for ligne in l_lignes: txt = txt + '##'+ligne+'\n' return txt def generEVAL(self,obj): """ Cette méthode convertit un EVAL en une chaine de caractères à la syntaxe aplat """ return 'EVAL("""'+ obj.valeur +'""")' def generCOMMENTAIRE(self,obj): """ Cette méthode convertit un COMMENTAIRE en une chaine de caractères à la syntaxe aplat """ l_lignes = string.split(obj.valeur,'\n') txt='' for ligne in l_lignes: txt = txt + '#'+ligne+'\n' return txt def generPARAMETRE_EVAL(self,obj): """ Cette méthode convertit un PARAMETRE_EVAL en une chaine de caractères à la syntaxe aplat """ if obj.valeur == None: return obj.nom + ' = None ;\n' else: return obj.nom + ' = '+ self.generator(obj.valeur) +';\n' def generPARAMETRE(self,obj): """ Cette méthode convertit un PARAMETRE en une chaine de caractères à la syntaxe aplat """ if type(obj.valeur) == types.StringType: # PN pour corriger le bug a='3+4' au lieu de a= 3+4 #return obj.nom + " = '" + obj.valeur + "';\n" return obj.nom + " = " + obj.valeur + ";\n" else: return obj.nom + ' = ' + str(obj.valeur) + ';\n' def generETAPE_NIVEAU(self,obj): """ Cette méthode convertit une étape niveau en une chaine de caractères à la syntaxe aplat """ text='' if obj.etapes_niveaux == []: for etape in obj.etapes: text=text+self.generator(etape)+'\n' else: for etape_niveau in obj.etapes_niveaux: text=text+self.generator(etape_niveau)+'\n' return text def gener_etape(self,obj): """ Cette méthode est utilisé pour convertir les objets etape en une chaine de caractères à la syntaxe aplat """ text='' for v in obj.mc_liste: text=text + self.generator(v) if text=='': return self.init+'\n' else: return text def generETAPE(self,obj): """ Cette méthode convertit une étape en une chaine de caractères à la syntaxe aplat """ try: sdname= self.generator(obj.sd) except: sdname='sansnom' self.init = sdname + self.sep + obj.nom return self.gener_etape(obj) def generMACRO_ETAPE(self,obj): """ Cette méthode convertit une macro-étape en une chaine de caractères à la syntaxe aplat """ try: if obj.sd == None: self.init = obj.nom else: sdname= self.generator(obj.sd) self.init = sdname + self.sep + obj.nom except: self.init = 'sansnom' + self.sep + obj.nom return self.gener_etape(obj) generPROC_ETAPE = generMACRO_ETAPE generFORM_ETAPE = generMACRO_ETAPE def generASSD(self,obj): """ Convertit un objet dérivé d'ASSD en une chaine de caractères à la syntaxe aplat """ return obj.get_name() def generMCList(self,obj): """ Convertit un objet MCList en une chaine de caractères à la syntaxe aplat """ i=0 text = '' init = self.init + self.sep + obj.nom old_init=self.init for data in obj.data : i=i+1 self.init = init + self.sep + "occurrence n°"+`i` text = text + self.generator(data) self.init=old_init return text def generMCSIMP(self,obj) : """ Convertit un objet MCSIMP en une chaine de caractères à la syntaxe aplat """ if type(obj.valeur) in (types.TupleType,types.ListType) : # On est en présence d'une liste de valeur rep = '(' for val in obj.valeur: if type(val) == types.InstanceType : rep = rep + self.generator(val) +',' else: rep = rep + `val`+',' rep = rep + ')' elif type(obj.valeur) == types.InstanceType : # On est en présence d'une valeur unique de type instance rep = self.generator(obj.valeur) else : # On est en présence d'une valeur unique rep = `obj.valeur` return self.init + self.sep + obj.nom + ' :' + rep + '\n' def generMCCOMPO(self,obj): """ Convertit un objet MCCOMPO en une chaine de caractères à la syntaxe aplat """ text = '' old_init=self.init self.init = self.init + self.sep + obj.nom for mocle in obj.mc_liste : text = text + self.generator(mocle) self.init=old_init return text generMCFACT=generMCCOMPO generMCBLOC=generMCCOMPO generMCNUPLET=generMCCOMPO eficas-6.4.0/generator/OpenturnsBase.py0000644004705000470430000001021511444664427020374 0ustar courtoisasterdev#@ AJOUT OpenturnsSolver Macro # -*- coding: iso-8859-1 -*- # RESPONSABLE """ Ce module contient la partie commune aux generateurs XML et Etude d Openturns """ __revision__ = "V1.0" import os import sys path=os.getcwd() pathDef=path+"DefautOpenturns" sys.path.append(pathDef) #============================================= # La classe generale #============================================= class Generateur : ''' Classe generale du generateur DictMCVal : dictionnaire des mots-cles ListeVariables : chaque variable est decrite par un dictionnaire ; cette liste les regroupe DictLois : dictionnaires des lois ''' def __init__ (self, appli, DictMCVal = {}, ListeVariables = [], DictLois = {}, DictVariables = {} ) : #---------------------------------------------------------# self.ListeVariables = ListeVariables self.ListeVariablesIn = [] self.ListeVariablesOut = [] self.DictLois = DictLois self.DictVariables = DictVariables self.DictMCVal = DictMCVal self.DictTypeVar = {} self.nbVarIn = 0 self.nbVarOut = 0 self.creeInfoVar() self.appli = appli # # On charge eventuellement le Solver par defaut # et les valeurs par defaut du Solver (dans l init) # try : #if 1 : Solver = self.DictMCVal["PhysicalSolver"] import_name = "Defaut"+Solver self.module = __import__( import_name, globals(), locals() ) monDefaut = self.module.Defaut( self ) #else : except: self.module = None def getSTDGenerateur(self) : #--------------------------# try : gener = self.module.__dict__["MonSTDGenerateur"] monSTDGenerateur=gener( self.DictMCVal, self.ListeVariablesIn, self.ListeVariablesOut, self.DictLois ) except : from OpenturnsSTD import STDGenerateur monSTDGenerateur = STDGenerateur( self.appli, self.DictMCVal, self.ListeVariablesIn, self.ListeVariablesOut, self.DictLois ) return monSTDGenerateur def getXMLGenerateur(self) : #--------------------------# try : gener = self.module.__dict__["MonXMLGenerateur"] monXMLGenerateur=gener( self.DictMCVal, self.ListeVariables, self.DictLois ) except : from OpenturnsXML import XMLGenerateur monXMLGenerateur = XMLGenerateur( self.appli, self.DictMCVal, self.DictVariables ) return monXMLGenerateur def creeInfoVar (self) : #----------------------# """ On repere les variables in/out et on les numerote. """ num = 0 liste = [] for DictVariable in self.ListeVariables : if not DictVariable.has_key("Type") : DictVariable["Type"] = "in" self.DictTypeVar[num] = DictVariable["Type"] if DictVariable["Type"] == "in" : self.nbVarIn = self.nbVarIn + 1 self.ListeVariablesIn.append( DictVariable ) print "OpenturnsBase.py: new input variable = ", DictVariable else: self.nbVarOut = self.nbVarOut + 1 self.ListeVariablesOut.append( DictVariable ) print "OpenturnsBase.py: new output variable = ", DictVariable liste.append( DictVariable ) num = num + 1 self.ListeVariables = liste def ajouteDictMCVal(self, dicoPlus) : #-----------------------------------# # Appele par le classe Defaut du python specifique au code (exple DefautASTER.py) # enrichit self.DictMCVal avec les valeurs donnees dans dicoPlus # si elles ne sont pas deja dans le dictionnaire for clef in dicoPlus.keys(): if not self.DictMCVal.has_key(clef) : self.DictMCVal[clef] = dicoPlus[clef] def ajouteInfoVariables (self, dicoVariablesIn, dicoVariablesOut) : #-----------------------------------------------------------------# # Appele par le classe Defaut du python specifique au code (exple DefautASTER.py) # met a jour les dictionnaires qui decrivent les variables (regexp par exemple) liste=[] num = 0 for dictVariable in self.ListeVariables: if self.DictTypeVar[num] == "in" : dico = dicoVariablesIn else : dico = dicoVariablesOut for nouvelleVariable in dico.keys() : if not dictVariable.has_key(nouvelleVariable): dictVariable[nouvelleVariable] = dico[nouvelleVariable] liste.append( dictVariable ) num = num + 1 eficas-6.4.0/generator/OpenturnsSTD.py0000644004705000470430000015160111637114344020151 0ustar courtoisasterdev#@ AJOUT OpenturnsSolver Macro # -*- coding: iso-8859-1 -*- # RESPONSABLE """ Ce module contient le generateur Etude pour Openturns """ __revision__ = "V1.0" defaultSTD = """#! /usr/bin/env python class StudyFileGenerationError: def __init__ (self, st): self.st = st def __str__(self): return "'%s'" % self.st raise StudyFileGenerationError, "The study file was not generated. Check analysis type." """ headerSTD = """#! /usr/bin/env python # Chargement du module systeme import sys sys.path[:0]=['%s'] # Chargement du module math import math # Chargement du module Open TURNS from openturns import * results = {} """ viewerSTD = """ from openturns.viewer import ViewImage,StopViewer,WaitForViewer """ footerSTD = """ # Flush des messages en attente Log.Flush() # Terminaison du fichier #sys.exit( 0 ) """ #============================================= # La classe de creation du fichier STD #============================================= class STDGenerateur : ''' Generation du fichier python ''' def __init__ (self, appli, DictMCVal, ListeVariablesIn, ListeVariablesOut, DictLois ) : self.DictMCVal = DictMCVal self.ListeVariablesIn = ListeVariablesIn self.ListeVariablesOut = ListeVariablesOut self.DictLois = DictLois #print "DictMCVal=", DictMCVal print "ListeVariablesIn=", ListeVariablesIn print "ListeVariablesOut=", ListeVariablesOut #print "DictLois=", DictLois self.texteSTD = defaultSTD self.OpenTURNS_path = appli.CONFIGURATION.OpenTURNS_path # Ce dictionnaire fait la correspondance entre le mot lu dans le dictionnaire des mots-clefs et la methode a appeler self.traitement = { "Min/Max" : ( "MinMax", { "Experiment Plane" : "ExperimentPlane", "Random Sampling" : "MinMaxRandomSampling", }, ), "Central Uncertainty" : ( "CentralUncertainty", { "Taylor Variance Decomposition" : "TaylorVarianceDecomposition", "Random Sampling" : "CentralUncertaintyRandomSampling", }, ), "Threshold Exceedence" : ( "ThresholdExceedence", { "Simulation" : "Simulation", "FORM_SORM" : "Analytical", "MonteCarlo" : "MonteCarlo", "LHS" : "LHS", "ImportanceSampling" : "ImportanceSampling", "FirstOrder" : "FORM", "SecondOrder" : "SORM", "Cobyla" : "Cobyla", "AbdoRackwitz" : "AbdoRackwitz", }, ), } # Ce dictionnaire liste le nom des variables utilisees dans le script # La clef est le nom attendu par les methodes, la valeur est le nom produit dans le fichier de sortie # Le fait de passer par un dictionnaire permet de controler que les variables existent et sont correctement nommees # meme si clef == valeur self.variable = { "n" : "n", "p" : "p", "wrapper" : "wrapper", "wrapperdata" : "wrapperdata", "frameworkdata" : "frameworkdata", "framework" : "framework", "studyid" : "studyid", "studycase" : "studycase", "componentname" : "componentname", "model" : "model", "scaledVector" : "scaledVector", "translationVector" : "translationVector", "levels" : "levels", "myCenteredReductedGrid" : "myCenteredReductedGrid", "myExperimentPlane" : "myExperimentPlane", "inputSample" : "inputSample", "outputSample" : "outputSample", "minValue" : 'results["minValue"]', "maxValue" : 'results["maxValue"]', "flags" : "flags", "inSize" : "inSize", "distribution" : "distribution", "marginal" : "marginal", "collection" : "collection", "copula" : "copula", "correlation" : "correlation", "R" : "R", "vars" : "vars", "description" : "description", "inputRandomVector" : "inputRandomVector", "outputRandomVector" : "outputRandomVector", "myQuadraticCumul" : "myQuadraticCumul", "meanFirstOrder" : 'results["meanFirstOrder"]', "meanSecondOrder" : 'results["meanSecondOrder"]', "standardDeviationFirstOrder" : 'results["standardDeviationFirstOrder"]', "importanceFactors" : 'results["importanceFactors"]', "importanceFactorsGraph" : "importanceFactorsGraph", "importanceFactorsDrawing" : "importanceFactorsDrawing", "empiricalMean" : 'results["empiricalMean"]', "empiricalStandardDeviation" : 'results["empiricalStandardDeviation"]', "empiricalQuantile" : 'results["empiricalQuantile"]', "alpha" : "alpha", "beta" : "beta", "PCCcoefficient" : 'results["PCCcoefficient"]', "PRCCcoefficient" : 'results["PRCCcoefficient"]', "SRCcoefficient" : 'results["SRCcoefficient"]', "SRRCcoefficient" : 'results["SRRCcoefficient"]', "kernel" : "kernel", "kernelSmoothedDist" : "kernelSmoothedDist", "kernelSmoothedPDFDrawing" : "kernelSmoothedPDFDrawing", "kernelSmoothedGraph" : "kernelSmoothedGraph", "meanVector" : "meanVector", "importanceDensity" : "importanceDensity", "myEvent" : "myEvent", "myAlgo" : "myAlgo", "myResult" : "myResult", "probability" : 'results["probability"]', "standardDeviation" : 'results["standardDeviation"]', "level" : "level", "length" : "length", "coefficientOfVariation" : 'results["coefficientOfVariation"]', "convergenceGraph" : "convergenceGraph", "convergenceDrawing" : "convergenceDrawing", "simulationNumbers" : 'results["simulationNumbers"]', "myOptimizer" : "myOptimizer", "specificParameters" : "specificParameters", "startingPoint" : "startingPoint", "hasoferReliabilityIndex" : 'results["hasoferReliabilityIndex"]', "standardSpaceDesignPoint" : 'results["standardSpaceDesignPoint"]', "physicalSpaceDesignPoint" : 'results["physicalSpaceDesignPoint"]', "eventProbabilitySensitivity" : 'results["eventProbabilitySensitivity"]', "hasoferReliabilityIndexSensitivity" : 'results["hasoferReliabilityIndexSensitivity"]', "eventProbabilitySensitivityGraph" : "eventProbabilitySensitivityGraph", "eventProbabilitySensitivityDrawing" : "eventProbabilitySensitivityDrawing", "hasoferReliabilityIndexSensitivityGraph" : "hasoferReliabilityIndexSensitivityGraph", "hasoferReliabilityIndexSensitivityDrawing" : "hasoferReliabilityIndexSensitivityDrawing", "modelEvaluationCalls" : 'results["modelEvaluationCalls"]', "modelGradientCalls" : 'results["modelGradientCalls"]', "modelHessianCalls" : 'results["modelHessianCalls"]', "tvedtApproximation" : 'results["tvedtApproximation"]', "hohenBichlerApproximation" : 'results["hohenBichlerApproximation"]', "breitungApproximation" : 'results["breitungApproximation"]', } # Ce dictionnaire fait la correspondance entre le mot-clef du catalogue et le flag de la bibliotheque self.logFlags = { "DebugMessages" : "Log.DBG", "WrapperMessages" : "Log.WRAPPER", "UserMessages" : "Log.USER", "InfoMessages" : "Log.INFO", "WarningMessages" : "Log.WARN", "ErrorMessages" : "Log.ERROR", } def CreeSTD (self) : ''' Pilotage de la creation du fichier python ''' TypeAnalyse = None if ( self.DictMCVal.has_key( 'Type' ) ): TypeAnalyse = self.DictMCVal[ 'Type' ] Traitement = None subDict = {} if ( self.traitement.has_key( TypeAnalyse ) ): (Traitement, subDict) = self.traitement[ TypeAnalyse ] if ( Traitement is not None ): self.texteSTD = apply( STDGenerateur.__dict__[ Traitement ], (self, subDict) ) return self.texteSTD def Header (self) : ''' Imprime l entete commun a tous les fichiers ''' txt = headerSTD % self.OpenTURNS_path txt += viewerSTD txt += "# Definit le niveau d'affichage de la log\n" txt += "%s = Log.NONE\n" % self.variable["flags"] for flag in self.logFlags.keys(): if ( self.DictMCVal.has_key( flag ) ): val = self.DictMCVal[ flag ] op = "-" if val == 'yes' : op = "+" txt += "%s = %s %s %s\n" % (self.variable["flags"], self.variable["flags"], op, self.logFlags[ flag ]) txt += "Log.Show( %s )\n" % self.variable["flags"] txt += "\n" return txt def Footer (self) : ''' Imprime le pied de page commun a tous les fichiers ''' return footerSTD def MinMax (self, subDict): ''' Produit le fichier study correspondant a une analyse Min/Max ''' txt = self.Header() txt += self.Model() Methode = None if ( self.DictMCVal.has_key( 'Method' ) ): Methode = self.DictMCVal[ 'Method' ] Traitement = None if ( subDict.has_key( Methode ) ): Traitement = subDict[ Methode ] if ( Traitement is not None ): txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) ) txt += self.MinMaxResult() txt += self.Footer() return txt def Model (self): ''' Importe le modele physique ''' if ( self.DictMCVal.has_key( 'FileName' ) ): name = self.DictMCVal[ 'FileName' ] txt = "# Charge le modele physique\n" txt += "%s = WrapperFile( '%s' )\n" % (self.variable["wrapper"], name) txt += "%s = %s.getWrapperData()\n" % (self.variable["wrapperdata"], self.variable["wrapper"]) txt += "# Ces lignes sont utiles pour le fonctionnement du script sous Salome\n" txt += "if globals().has_key('%s'):\n" % self.variable["framework"] txt += " %s = %s.getFrameworkData()\n" % (self.variable["frameworkdata"], self.variable["wrapperdata"]) txt += " %s.studyid_ = %s['%s']\n" % (self.variable["frameworkdata"], self.variable["framework"], self.variable["studyid"]) txt += " %s.studycase_ = %s['%s']\n" % (self.variable["frameworkdata"], self.variable["framework"], self.variable["studycase"]) txt += " %s.componentname_ = %s['%s']\n" % (self.variable["frameworkdata"], self.variable["framework"], self.variable["componentname"]) txt += " %s.setFrameworkData( %s )\n" % (self.variable["wrapperdata"], self.variable["frameworkdata"]) txt += " %s.setWrapperData( %s )\n" % (self.variable["wrapper"], self.variable["wrapperdata"]) txt += "# Fin des lignes pour Salome\n" txt += "%s = NumericalMathFunction( %s )\n" % (self.variable["model"], self.variable["wrapper"],) txt += "%s = %s.getInputDimension()\n" % (self.variable["n"], self.variable["model"]) txt += "\n" return txt def ExperimentPlane (self): ''' Etude par plan d experience ''' txt = "# Etude par plan d'experience\n" txt += self.Levels() txt += self.CenteredReductedGrid() txt += self.ScaledVector() txt += self.TranslationVector() txt += "%s = %s\n" % (self.variable["inputSample"], self.variable["myExperimentPlane"]) txt += "\n" txt += "# Etude 'Min/Max'\n" txt += "# Calcul\n" txt += "%s = %s( %s )\n" % (self.variable["outputSample"], self.variable["model"], self.variable["inputSample"]) txt += "\n" return txt def MinMaxRandomSampling (self): ''' Etude par echantillonage aleatoire ''' size = 0 if ( self.DictMCVal.has_key( 'SimulationsNumber' ) ): size = self.DictMCVal[ 'SimulationsNumber' ] txt = "# Etude par echantillonage aleatoire\n" txt += self.InputDistribution() txt += self.InputRandomVector() txt += "\n" txt += "# Etude 'Min/Max'\n" txt += "# Calcul\n" txt += "%s = %d\n" % (self.variable["inSize"], size) txt += "%s = RandomVector( %s, %s )\n" % (self.variable["outputRandomVector"], self.variable["model"], self.variable["inputRandomVector"]) txt += "%s = %s.getNumericalSample( %s )\n" % (self.variable["outputSample"], self.variable["outputRandomVector"], self.variable["inSize"]) return txt def InputDistribution (self): ''' Cree la loi jointe des variables d entree ''' txt = "# Definit la loi jointe des variables d'entree\n" txt += "%s = DistributionCollection( %s )\n" % (self.variable["collection"], self.variable["n"]) txt += "%s = Description( %s )\n" % (self.variable["description"], self.variable["n"]) txt += "\n" dictVariables = {} for variable in self.ListeVariablesIn: nomVar = variable['ModelVariable'].get_name() dictVariables[ nomVar ] = variable['Distribution'] i = 0 sortedVarNames = dictVariables.keys() sortedVarNames.sort() for variable in sortedVarNames: conceptloi = dictVariables[ variable ] loi = self.DictLois[ conceptloi ] if loi.has_key( 'Kind' ): marginale = "%s_%d" % (self.variable["marginal"], i) txt += "# Definit la loi marginale de la composante %d\n" % i txt += "%s = %s\n" % (marginale, apply( STDGenerateur.__dict__[ loi[ 'Kind' ] ], (self, loi) )) txt += "%s.setName( '%s' )\n" % (marginale, conceptloi.get_name()) txt += "%s[ %d ] = '%s'\n" % (self.variable["description"], i, variable) txt += "%s[ %d ] = Distribution( %s )\n" % (self.variable["collection"], i, marginale) txt += "\n" i += 1 txt += self.Copula() txt += "# Definit la loi jointe\n" txt += "%s = ComposedDistribution( %s, Copula( %s ) )\n" % (self.variable["distribution"], self.variable["collection"], self.variable["copula"]) txt += "%s.setDescription( %s )\n" % (self.variable["distribution"], self.variable["description"]) txt += "\n" return txt def Copula (self): ''' Cree la copule de la loi jointe ''' txt = "# Definit la copule de la loi jointe\n" if ( not self.DictMCVal.has_key( 'Copula' ) ): self.DictMCVal[ 'Copula' ] = 'Independent' if ( self.DictMCVal[ 'Copula' ] in ( 'Independent', ) ): txt += "%s = IndependentCopula( %s )\n" % (self.variable["copula"], self.variable["n"]) elif ( self.DictMCVal[ 'Copula' ] in ( 'Normal', ) ): varList = self.DictMCVal[ 'CorrelationMatrix' ][0] dimension = len(varList) txt += "%s = {}\n" % self.variable["correlation"] for i in range( dimension ): txt += "%s['%s'] = {}\n" % (self.variable["correlation"], varList[i]) for j in range ( dimension ): txt += "%s['%s']['%s'] = %g\n" % (self.variable["correlation"], varList[i], varList[j], self.DictMCVal[ 'CorrelationMatrix' ][i+1][j]) txt += "%s = getCorrelationMatrixFromMap( %s.getVariableList(), %s )\n" % (self.variable["R"], self.variable["wrapperdata"], self.variable["correlation"]) txt += "%s = NormalCopula( %s )\n" % (self.variable["copula"], self.variable["R"]) txt += "\n" return txt def InputRandomVector (self): ''' Cree le vector aleatoire d entree ''' txt = "# Definit le vecteur aleatoire d'entree\n" txt += "%s = RandomVector( %s )\n" % (self.variable["inputRandomVector"], self.variable["distribution"]) txt += "\n" return txt def OutputRandomVector (self): ''' Cree le vector aleatoire de sortie ''' nomVar = "output" for variable in self.ListeVariablesOut: nomVar = variable['ModelVariable'].get_name() txt = "# Definit le vecteur aleatoire de sortie\n" txt += "%s = RandomVector( %s, %s )\n" % (self.variable["outputRandomVector"], self.variable["model"], self.variable["inputRandomVector"]) txt += "%s.setName( '%s' )\n" % (self.variable["outputRandomVector"], nomVar) txt += "\n" return txt def ScaledVector (self): ''' Definit les coefficients multiplicateurs par composante du vecteur ''' dimension = 0 if ( self.DictMCVal.has_key( 'UnitsPerDimension' ) ): unitsPerDimension = self.DictMCVal[ 'UnitsPerDimension' ] dimension = len( unitsPerDimension ) txt = "# Definit les facteurs d'echelle dans chaque direction\n" txt += "%s = NumericalPoint( %s )\n" % (self.variable["scaledVector"], self.variable["n"]) for i in range(dimension): txt += "%s[%d] = %g\n" % (self.variable["scaledVector"], i, unitsPerDimension[i]) txt += "%s.scale( %s )\n" % (self.variable["myExperimentPlane"], self.variable["scaledVector"]) txt += "\n" return txt def TranslationVector (self): ''' Definit le vecteur de translation ''' dimension = 0 if ( self.DictMCVal.has_key( 'Center' ) ): center = self.DictMCVal[ 'Center' ] dimension = len( center ) txt = "# Definit le vecteur de translation\n" txt += "%s = NumericalPoint( %s )\n" % (self.variable["translationVector"], self.variable["n"]) for i in range(dimension): txt += "%s[%d] = %g\n" % (self.variable["translationVector"], i, center[i]) txt += "%s.translate( %s )\n" % (self.variable["myExperimentPlane"], self.variable["translationVector"]) txt += "\n" return txt def Levels (self): ''' Definit les niveaux du plan d experience ''' dimension = 0 if ( self.DictMCVal.has_key( 'Levels' ) ): levels = self.DictMCVal[ 'Levels' ] dimension = len( levels ) txt = "# Definit les niveaux de la structure de grille\n" txt += "%s = NumericalPoint( %d )\n" % (self.variable["levels"], dimension) for i in range(dimension): txt += "%s[%d] = %g\n" % (self.variable["levels"], i, levels[i]) txt += "\n" return txt def CenteredReductedGrid (self): ''' Definit la grille reduite du plan d experience ''' plane = None if ( self.DictMCVal.has_key( 'ExperimentPlane' ) ): plane = self.DictMCVal[ 'ExperimentPlane' ] txt = "# Cree le plan d'experience centre reduit\n" txt += "%s = %s(%s, %s)\n" % (self.variable["myCenteredReductedGrid"], plane, self.variable["n"], self.variable["levels"]) txt += "%s = %s.generate()\n" % (self.variable["myExperimentPlane"], self.variable["myCenteredReductedGrid"]) txt += "\n" return txt def MinMaxResult (self): ''' Produit les resultats de l etude ''' txt = "# Resultats\n" txt += "%s = %s.getMin()\n" % (self.variable["minValue"], self.variable["outputSample"]) txt += "print '%s = ', %s\n" % ("minValue", self.variable["minValue"]) txt += "\n" txt += "%s = %s.getMax()\n" % (self.variable["maxValue"], self.variable["outputSample"]) txt += "print '%s = ', %s\n" % ("maxValue", self.variable["maxValue"]) txt += "\n" return txt def CentralUncertainty (self, subDict): ''' Produit le fichier study correspondant a une analyse d incertitude en valeur centrale ''' txt = self.Header() txt += self.Model() txt += self.InputDistribution() txt += self.InputRandomVector() txt += self.OutputRandomVector() Methode = None if ( self.DictMCVal.has_key( 'Method' ) ): Methode = self.DictMCVal[ 'Method' ] Traitement = None if ( subDict.has_key( Methode ) ): Traitement = subDict[ Methode ] if ( Traitement is not None ): txt += "# Etude 'Central Uncertainty'\n" txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) ) txt += self.Footer() return txt def TaylorVarianceDecomposition (self): ''' Etude par decomposition de Taylor ''' txt = "# Cumul quadratique (decomposition de Taylor)\n" txt += "%s = QuadraticCumul( %s )\n" % (self.variable["myQuadraticCumul"], self.variable["outputRandomVector"]) txt += "\n" txt += "# Resultats\n" if ( self.DictMCVal.has_key( 'MeanFirstOrder' ) ): if ( self.DictMCVal[ 'MeanFirstOrder' ] == "yes" ): txt += "%s = %s.getMeanFirstOrder()\n" % (self.variable["meanFirstOrder"], self.variable["myQuadraticCumul"]) txt += "print '%s = ', %s\n" % ("mean First Order", self.variable["meanFirstOrder"]) txt += "\n" if ( self.DictMCVal.has_key( 'MeanSecondOrder' ) ): if ( self.DictMCVal[ 'MeanSecondOrder' ] == "yes" ): txt += "%s = %s.getMeanSecondOrder()\n" % (self.variable["meanSecondOrder"], self.variable["myQuadraticCumul"]) txt += "print '%s = ', %s\n" % ("mean Second Order", self.variable["meanSecondOrder"]) txt += "\n" if ( self.DictMCVal.has_key( 'StandardDeviationFirstOrder' ) ): if ( self.DictMCVal[ 'StandardDeviationFirstOrder' ] == "yes" ): txt += "%s = %s.getCovariance()\n" % (self.variable["standardDeviationFirstOrder"], self.variable["myQuadraticCumul"]) txt += "dim = %s.getDimension()\n" % self.variable["standardDeviationFirstOrder"] txt += "for i in range( dim ):\n" txt += " %s[ i, i ] = math.sqrt( %s[ i, i ] )\n" % (self.variable["standardDeviationFirstOrder"], self.variable["standardDeviationFirstOrder"]) txt += " print '%s = ', %s[ i, i ]\n" % ("standard Deviation First Order", self.variable["standardDeviationFirstOrder"]) txt += "\n" if ( self.DictMCVal.has_key( 'ImportanceFactor' ) ): if ( self.DictMCVal[ 'ImportanceFactor' ] == "yes" ): txt += "%s = %s.getImportanceFactors()\n" % (self.variable["importanceFactors"], self.variable["myQuadraticCumul"]) txt += "for i in range(%s.getDimension()):\n" % self.variable["importanceFactors"] txt += " print %s.getDescription()[i], ':', %s[i]*100., '%%'\n" % (self.variable["distribution"], self.variable["importanceFactors"]) txt += "\n" txt += "%s = %s.drawImportanceFactors()\n" % (self.variable["importanceFactorsGraph"], self.variable["myQuadraticCumul"]) txt += "#Show( %s )\n" % self.variable["importanceFactorsGraph"] txt += "%s = '%s'\n" % (self.variable["importanceFactorsDrawing"], self.DictMCVal[ 'ImportanceFactorDrawingFilename' ]) txt += "%s.draw( %s )\n" % (self.variable["importanceFactorsGraph"], self.variable["importanceFactorsDrawing"]) txt += "ViewImage( %s.getBitmap() )\n" % self.variable["importanceFactorsGraph"] txt += "print 'bitmap =', %s.getBitmap()\n" % self.variable["importanceFactorsGraph"] txt += "print 'postscript =', %s.getPostscript()\n" % self.variable["importanceFactorsGraph"] txt += "\n" txt += "\n" return txt def CentralUncertaintyRandomSampling (self): ''' Etude par echantillonage aleatoire ''' size = 0 if ( self.DictMCVal.has_key( 'SimulationsNumber' ) ): size = self.DictMCVal[ 'SimulationsNumber' ] txt = "# Echantillonnage aleatoire de la variable de sortie\n" txt += "%s = %d\n" % (self.variable["inSize"], size) txt += "%s = %s.getNumericalSample( %s )\n" % (self.variable["inputSample"], self.variable["inputRandomVector"], self.variable["inSize"]) txt += "%s = %s( %s )\n" % (self.variable["outputSample"], self.variable["model"], self.variable["inputSample"]) txt += "\n" if ( self.DictMCVal.has_key( 'EmpiricalMean' ) ): if ( self.DictMCVal[ 'EmpiricalMean' ] == "yes" ): txt += "%s = %s.computeMean()\n" % (self.variable["empiricalMean"], self.variable["outputSample"]) txt += "print '%s =', %s[0]\n" % ("empirical Mean", self.variable["empiricalMean"]) txt += "\n" if ( self.DictMCVal.has_key( 'EmpiricalStandardDeviation' ) ): if ( self.DictMCVal[ 'EmpiricalStandardDeviation' ] == "yes" ): txt += "%s = %s.computeCovariance()\n" % (self.variable["empiricalStandardDeviation"], self.variable["outputSample"]) txt += "dim = %s.getDimension()\n" % self.variable["empiricalStandardDeviation"] txt += "for i in range( dim ):\n" txt += " %s[ i, i ] = math.sqrt( %s[ i, i ] )\n" % (self.variable["empiricalStandardDeviation"], self.variable["empiricalStandardDeviation"]) txt += " print '%s = ', %s[ i, i ]\n" % ("empirical Standard Deviation", self.variable["empiricalStandardDeviation"]) txt += "\n" if ( self.DictMCVal.has_key( 'EmpiricalQuantile_Order' ) ): ordre = self.DictMCVal[ 'EmpiricalQuantile_Order' ] txt += "%s = %s.computeQuantile( %s )\n" % (self.variable["empiricalQuantile"], self.variable["outputSample"], ordre) txt += "print '%s ( %s ) =', %s\n" % ("empirical Quantile", ordre, self.variable["empiricalQuantile"]) txt += "\n" if ( self.DictMCVal.has_key( 'CorrelationAnalysis' ) ): if ( self.DictMCVal[ 'CorrelationAnalysis' ] == "yes" ): txt += "if ( %s.getDimension() == 1 ):\n" % self.variable["outputSample"] txt += " %s = CorrelationAnalysis.PCC( %s, %s )\n" % (self.variable["PCCcoefficient"], self.variable["inputSample"], self.variable["outputSample"]) txt += " print 'PCC Coefficients:'\n" txt += " for i in range( %s ):\n" % self.variable["n"] txt += " print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["PCCcoefficient"]) txt += "\n" txt += " %s = CorrelationAnalysis.PRCC( %s, %s )\n" % (self.variable["PRCCcoefficient"], self.variable["inputSample"], self.variable["outputSample"]) txt += " print 'PRCC Coefficients:'\n" txt += " for i in range( %s ):\n" % self.variable["n"] txt += " print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["PRCCcoefficient"]) txt += "\n" txt += " %s = CorrelationAnalysis.SRC( %s, %s )\n" % (self.variable["SRCcoefficient"], self.variable["inputSample"], self.variable["outputSample"]) txt += " print 'SRC Coefficients:'\n" txt += " for i in range( %s ):\n" % self.variable["n"] txt += " print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["SRCcoefficient"]) txt += "\n" txt += " %s = CorrelationAnalysis.SRRC( %s, %s )\n" % (self.variable["SRRCcoefficient"], self.variable["inputSample"], self.variable["outputSample"]) txt += " print 'SRRC Coefficients:'\n" txt += " for i in range( %s ):\n" % self.variable["n"] txt += " print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["SRRCcoefficient"]) txt += "\n" if ( self.DictMCVal.has_key( 'KernelSmoothing' ) ): if ( self.DictMCVal[ 'KernelSmoothing' ] == "yes" ): txt += "# Kernel Smoohing\n" txt += "%s = KernelSmoothing()\n" % self.variable["kernel"] txt += "if ( %s.getDimension() == 1 ):\n" % self.variable["outputSample"] txt += " %s.setName( 'Output' )\n" % self.variable["outputSample"] txt += " %s = %s.buildImplementation( %s, 'TRUE')\n" % (self.variable["kernelSmoothedDist"], self.variable["kernel"], self.variable["outputSample"]) txt += " %s = %s.drawPDF()\n" % (self.variable["kernelSmoothedGraph"], self.variable["kernelSmoothedDist"]) txt += " #Show( %s )\n" % self.variable["kernelSmoothedGraph"] txt += " %s = '%s'\n" % (self.variable["kernelSmoothedPDFDrawing"], self.DictMCVal[ 'KernelSmoothingDrawingFilename' ]) txt += " %s.draw( %s )\n" % (self.variable["kernelSmoothedGraph"], self.variable["kernelSmoothedPDFDrawing"]) txt += " ViewImage( %s.getBitmap() )\n" % self.variable["kernelSmoothedGraph"] txt += " print 'bitmap =', %s.getBitmap()\n" % self.variable["kernelSmoothedGraph"] txt += " print 'postscript =', %s.getPostscript()\n" % self.variable["kernelSmoothedGraph"] txt += "\n" return txt def ThresholdExceedence (self, subDict): ''' Produit le fichier study correspondant a une analyse de depassement de seuil ''' txt = self.Header() txt += "# Etude 'Threshold Exceedence'\n" txt += self.RandomGenerator() txt += self.Model() txt += self.InputDistribution() txt += self.InputRandomVector() txt += self.OutputRandomVector() txt += self.Event() Methode = None if ( self.DictMCVal.has_key( 'Method' ) ): Methode = self.DictMCVal[ 'Method' ] Traitement = None if ( subDict.has_key( Methode ) ): Traitement = subDict[ Methode ] if ( Traitement is not None ): txt += apply( STDGenerateur.__dict__[ Traitement ], (self, subDict) ) txt += self.Footer() return txt def Simulation (self, subDict): ''' Methodes de simulation ''' Algorithme = None if ( self.DictMCVal.has_key( 'Algorithm' ) ): Algorithme = self.DictMCVal[ 'Algorithm' ] Traitement = None if ( subDict.has_key( Algorithme ) ): Traitement = subDict[ Algorithme ] if ( Traitement is not None ): txt = apply( STDGenerateur.__dict__[ Traitement ], (self,) ) maxOuterSampling = None if ( self.DictMCVal.has_key( 'MaximumOuterSampling' ) ): maxOuterSampling = self.DictMCVal[ 'MaximumOuterSampling' ] txt += "%s.setMaximumOuterSampling( %s )\n" % (self.variable["myAlgo"], maxOuterSampling) blockSize = None if ( self.DictMCVal.has_key( 'BlockSize' ) ): blockSize = self.DictMCVal[ 'BlockSize' ] txt += "%s.setBlockSize( %s )\n" % (self.variable["myAlgo"], blockSize) maxCoefficientOfVariation = None if ( self.DictMCVal.has_key( 'MaximumCoefficientOfVariation' ) ): maxCoefficientOfVariation = self.DictMCVal[ 'MaximumCoefficientOfVariation' ] txt += "%s.setMaximumCoefficientOfVariation( %s )\n" % (self.variable["myAlgo"], maxCoefficientOfVariation) txt += "%s.run()\n" % self.variable["myAlgo"] txt += "\n" txt += "# Resultats de la simulation\n" txt += "%s = %s.getResult()\n" % (self.variable["myResult"], self.variable["myAlgo"]) txt += "\n" if ( self.DictMCVal.has_key( 'Probability' ) ): if ( self.DictMCVal[ 'Probability' ] == "yes" ): txt += "%s = %s.getProbabilityEstimate()\n" % (self.variable["probability"], self.variable["myResult"]) txt += "print '%s =', %s\n" % ("probability", self.variable["probability"]) txt += "\n" if ( self.DictMCVal.has_key( 'StandardDeviation' ) ): if ( self.DictMCVal[ 'StandardDeviation' ] == "yes" ): txt += "%s = math.sqrt( %s.getProbabilityEstimate() )\n" % (self.variable["standardDeviation"], self.variable["myResult"]) txt += "print '%s =', %s\n" % ("standard Deviation", self.variable["standardDeviation"]) txt += "\n" if ( self.DictMCVal.has_key( 'ConfidenceInterval' ) and self.DictMCVal.has_key( 'Probability' ) ): if ( ( self.DictMCVal[ 'ConfidenceInterval' ] == "yes" ) and ( self.DictMCVal[ 'Probability' ] == "yes" ) ): level = self.DictMCVal[ 'Level' ] txt += "%s = %s.getConfidenceLength( %s )\n" % (self.variable["length"], self.variable["myResult"], level) txt += "print 'confidence interval at %s = [', %s-0.5*%s, ',', %s+0.5*%s, ']'\n" % (level, self.variable["probability"], self.variable["length"], self.variable["probability"], self.variable["length"]) txt += "\n" if ( self.DictMCVal.has_key( 'VariationCoefficient' ) ): if ( self.DictMCVal[ 'VariationCoefficient' ] == "yes" ): txt += "%s = %s.getCoefficientOfVariation()\n" % (self.variable["coefficientOfVariation"], self.variable["myResult"]) txt += "print '%s =', %s\n" % ("coefficient of Variation", self.variable["coefficientOfVariation"]) txt += "\n" if ( self.DictMCVal.has_key( 'SimulationsNumber' ) ): if ( self.DictMCVal[ 'SimulationsNumber' ] == "yes" ): txt += "%s = %s.getOuterSampling()\n" % (self.variable["simulationNumbers"], self.variable["myResult"]) txt += "print '%s =', %s\n" % ("simulation Numbers", self.variable["simulationNumbers"]) txt += "\n" if ( self.DictMCVal.has_key( 'ConvergenceGraph' ) and self.DictMCVal.has_key( 'ConfidenceInterval' ) ): if ( ( self.DictMCVal[ 'ConvergenceGraph' ] == "yes" ) and ( self.DictMCVal[ 'ConfidenceInterval' ] == "yes" ) ): txt += "%s = %s\n" % (self.variable["alpha"], self.DictMCVal[ 'Level' ]) txt += "%s = %s.drawProbabilityConvergence( %s )\n" % (self.variable["convergenceGraph"], self.variable["myAlgo"], self.variable["alpha"]) txt += "#Show( %s )\n" % self.variable["convergenceGraph"] txt += "%s = '%s'\n" % (self.variable["convergenceDrawing"], self.DictMCVal[ 'ConvergenceDrawingFilename' ]) txt += "%s.draw( %s )\n" % (self.variable["convergenceGraph"], self.variable["convergenceDrawing"]) txt += "ViewImage( %s.getBitmap() )\n" % self.variable["convergenceGraph"] txt += "\n" return txt def Analytical (self, subDict): ''' Methodes analytiques ''' txt = "" OptimizationAlgo = None if ( self.DictMCVal.has_key( 'OptimizationAlgorithm' ) ): OptimizationAlgo = self.DictMCVal[ 'OptimizationAlgorithm' ] Traitement = None if ( subDict.has_key( OptimizationAlgo ) ): Traitement = subDict[ OptimizationAlgo ] if ( Traitement is not None ): txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) ) txt += self.OptimizerSettings() txt += self.PhysicalStartingPoint() Approximation = None if ( self.DictMCVal.has_key( 'Approximation' ) ): Approximation = self.DictMCVal[ 'Approximation' ] Traitement = None if ( subDict.has_key( Approximation ) ): Traitement = subDict[ Approximation ] if ( Traitement is not None ): txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) ) txt += self.RunAlgorithm() txt += self.AnalyticalResult() return txt def OptimizerSettings (self): ''' Parametrage de l optimiseur ''' txt = "" simulationNumbers = None if ( self.DictMCVal.has_key( 'MaximumIterationsNumber' ) ): simulationNumbers = self.DictMCVal[ 'MaximumIterationsNumber' ] txt += "%s.setMaximumIterationsNumber( %s )\n" % (self.variable["myOptimizer"], simulationNumbers) absoluteError = None if ( self.DictMCVal.has_key( 'MaximumAbsoluteError' ) ): absoluteError = self.DictMCVal[ 'MaximumAbsoluteError' ] txt += "%s.setMaximumAbsoluteError( %s )\n" % (self.variable["myOptimizer"], absoluteError) relativeError = None if ( self.DictMCVal.has_key( 'MaximumRelativeError' ) ): relativeError = self.DictMCVal[ 'MaximumRelativeError' ] txt += "%s.setMaximumRelativeError( %s )\n" % (self.variable["myOptimizer"], relativeError) residualError = None if ( self.DictMCVal.has_key( 'MaximumResidualError' ) ): residualError = self.DictMCVal[ 'MaximumResidualError' ] txt += "%s.setMaximumResidualError( %s )\n" % (self.variable["myOptimizer"], residualError) constraintError = None if ( self.DictMCVal.has_key( 'MaximumConstraintError' ) ): constraintError = self.DictMCVal[ 'MaximumConstraintError' ] txt += "%s.setMaximumConstraintError( %s )\n" % (self.variable["myOptimizer"], constraintError) txt += "\n" return txt def PhysicalStartingPoint (self): ''' Point physique de depart ''' txt = "# Point physique de depart\n" if ( self.DictMCVal.has_key( 'PhysicalStartingPoint' ) ): point = self.DictMCVal[ 'PhysicalStartingPoint' ] dimension = len( point ) txt += "%s = NumericalPoint( %d )\n" % (self.variable["startingPoint"], dimension) for i in range( dimension ): txt += "%s[ %d ] = %g\n" % (self.variable["startingPoint"], i, point[i]) else: txt += "%s = %s.getMean()\n" % (self.variable["startingPoint"], self.variable["inputRandomVector"]) txt += "\n" return txt def AnalyticalResult (self): ''' Resultat des methodes analytiques ''' txt = "# Resultat des methodes analytiques\n" txt += "%s = %s.getResult()\n" % (self.variable["myResult"], self.variable["myAlgo"]) if ( self.DictMCVal.has_key( 'Probability' ) ): if ( self.DictMCVal[ 'Probability' ] == "yes" ): txt += "%s = %s.getEventProbability()\n" % (self.variable["probability"], self.variable["myResult"]) txt += "print '%s =', %s\n" % (self.variable["probability"], self.variable["probability"]) txt += "\n" if ( self.DictMCVal.has_key( 'HasoferReliabilityIndex' ) ): if ( self.DictMCVal[ 'HasoferReliabilityIndex' ] == "yes" ): txt += "%s = %s.getHasoferReliabilityIndex()\n" % (self.variable["hasoferReliabilityIndex"], self.variable["myResult"]) txt += "print '%s =', %s\n" % ("hasofer Reliability Index", self.variable["hasoferReliabilityIndex"]) txt += "\n" if ( self.DictMCVal.has_key( 'DesignPoint' ) ): if ( self.DictMCVal[ 'DesignPoint' ] == "yes" ): txt += "%s = %s.getStandardSpaceDesignPoint()\n" % (self.variable["standardSpaceDesignPoint"], self.variable["myResult"]) txt += "print '%s =', %s\n" % ("standard Space Design Point", self.variable["standardSpaceDesignPoint"]) txt += "%s = %s.getPhysicalSpaceDesignPoint()\n" % (self.variable["physicalSpaceDesignPoint"], self.variable["myResult"]) txt += "print '%s =', %s\n" % ("physical Space Design Point", self.variable["physicalSpaceDesignPoint"]) txt += "\n" if ( self.DictMCVal.has_key( 'ImportanceFactor' ) ): if ( self.DictMCVal[ 'ImportanceFactor' ] == "yes" ): txt += "print 'Importance Factors:'\n" txt += "%s = %s.getImportanceFactors()\n" % (self.variable["importanceFactors"], self.variable["myResult"]) txt += "for i in range(%s.getDimension()):\n" % self.variable["importanceFactors"] txt += " print %s.getDescription()[i], ':', %s[i]*100., '%%'\n" % (self.variable["distribution"], self.variable["importanceFactors"]) txt += "\n" txt += "%s = %s.drawImportanceFactors()\n" % (self.variable["importanceFactorsGraph"], self.variable["myResult"]) txt += "#Show( %s )\n" % self.variable["importanceFactorsGraph"] txt += "%s = '%s'\n" % (self.variable["importanceFactorsDrawing"], self.DictMCVal[ 'ImportanceFactorDrawingFilename' ]) txt += "%s.draw( %s )\n" % (self.variable["importanceFactorsGraph"], self.variable["importanceFactorsDrawing"]) txt += "ViewImage( %s.getBitmap() )\n" % self.variable["importanceFactorsGraph"] txt += "print 'bitmap =', %s.getBitmap()\n" % self.variable["importanceFactorsGraph"] txt += "print 'postscript =', %s.getPostscript()\n" % self.variable["importanceFactorsGraph"] txt += "\n" if ( self.DictMCVal.has_key( 'FORMEventProbabilitySensitivity' ) ): if ( self.DictMCVal[ 'FORMEventProbabilitySensitivity' ] == "yes" ): txt += "%s = %s.getEventProbabilitySensitivity()\n" % (self.variable["eventProbabilitySensitivity"], self.variable["myResult"]) txt += "print 'FORM Event Probability Sensitivity:'\n" txt += "for i in range( %s ):\n" % self.variable["n"] txt += " print %s.getDescription()[i], ':'\n" % self.variable["distribution"] txt += " for j in range( %s[i].getDimension() ):\n" % self.variable["eventProbabilitySensitivity"] txt += " print ' ', %s[i].getDescription()[j], ':', %s[i][j]\n" % (self.variable["eventProbabilitySensitivity"], self.variable["eventProbabilitySensitivity"]) txt += "\n" txt += "%s = %s.drawEventProbabilitySensitivity()[0]\n" % (self.variable["eventProbabilitySensitivityGraph"], self.variable["myResult"]) txt += "#Show( %s )\n" % self.variable["eventProbabilitySensitivityGraph"] txt += "%s = '%s'\n" % (self.variable["eventProbabilitySensitivityDrawing"], self.DictMCVal[ 'FORMEventProbabilitySensitivityDrawingFilename' ]) txt += "%s.draw( %s )\n" % (self.variable["eventProbabilitySensitivityGraph"], self.variable["eventProbabilitySensitivityDrawing"]) txt += "ViewImage( %s.getBitmap() )\n" % self.variable["eventProbabilitySensitivityGraph"] txt += "print 'bitmap =', %s.getBitmap()\n" % self.variable["eventProbabilitySensitivityGraph"] txt += "print 'postscript =', %s.getPostscript()\n" % self.variable["eventProbabilitySensitivityGraph"] txt += "\n" if ( self.DictMCVal.has_key( 'HasoferReliabilityIndexSensitivity' ) ): if ( self.DictMCVal[ 'HasoferReliabilityIndexSensitivity' ] == "yes" ): txt += "%s = %s.getHasoferReliabilityIndexSensitivity()\n" % (self.variable["hasoferReliabilityIndexSensitivity"], self.variable["myResult"]) txt += "print 'Hasofer Reliability Index Sensitivity:'\n" txt += "for i in range( %s ):\n" % self.variable["n"] txt += " print %s.getDescription()[i], ':'\n" % self.variable["distribution"] txt += " for j in range( %s[i].getDimension() ):\n" % self.variable["hasoferReliabilityIndexSensitivity"] txt += " print ' ', %s[i].getDescription()[j], ':', %s[i][j]\n" % (self.variable["hasoferReliabilityIndexSensitivity"], self.variable["hasoferReliabilityIndexSensitivity"]) txt += "\n" txt += "%s = %s.drawHasoferReliabilityIndexSensitivity()[0]\n" % (self.variable["hasoferReliabilityIndexSensitivityGraph"], self.variable["myResult"]) txt += "#Show( %s )\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"] txt += "%s = '%s'\n" % (self.variable["hasoferReliabilityIndexSensitivityDrawing"], self.DictMCVal[ 'HasoferReliabilityIndexSensitivityDrawingFilename' ]) txt += "%s.draw( %s )\n" % (self.variable["hasoferReliabilityIndexSensitivityGraph"], self.variable["hasoferReliabilityIndexSensitivityDrawing"]) txt += "ViewImage( %s.getBitmap() )\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"] txt += "print 'bitmap =', %s.getBitmap()\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"] txt += "print 'postscript =', %s.getPostscript()\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"] txt += "\n" if ( self.DictMCVal.has_key( 'TvedtApproximation' ) ): if ( self.DictMCVal[ 'TvedtApproximation' ] == "yes" ): txt += "%s = %s.getEventProbabilityTvedt()\n" % (self.variable["tvedtApproximation"], self.variable["myResult"]) txt += "print '%s =', %s\n" % ("Tvedt Approximation", self.variable["tvedtApproximation"]) txt += "\n" if ( self.DictMCVal.has_key( 'HohenBichlerApproximation' ) ): if ( self.DictMCVal[ 'HohenBichlerApproximation' ] == "yes" ): txt += "%s = %s.getEventProbabilityHohenBichler()\n" % (self.variable["hohenBichlerApproximation"], self.variable["myResult"]) txt += "print '%s =', %s\n" % ("HohenBichler Approximation", self.variable["tvedtApproximation"]) txt += "\n" if ( self.DictMCVal.has_key( 'BreitungApproximation' ) ): if ( self.DictMCVal[ 'BreitungApproximation' ] == "yes" ): txt += "%s = %s.getEventProbabilityBreitung()\n" % (self.variable["breitungApproximation"], self.variable["myResult"]) txt += "print '%s =', %s\n" % ("Breitung Approximation", self.variable["breitungApproximation"]) txt += "\n" return txt def RandomGenerator (self): ''' Generateur Aleatoire ''' txt = "" seed = None if ( self.DictMCVal.has_key( 'RandomGeneratorSeed' ) ): seed = self.DictMCVal[ 'RandomGeneratorSeed' ] txt += "# Initialise le generateur aleatoire\n" txt += "RandomGenerator.SetSeed( %s )\n" % seed txt += "\n" return txt def Event (self): ''' Definition de l evenement de defaillance ''' operator = None if ( self.DictMCVal.has_key( 'ComparisonOperator' ) ): operator = self.DictMCVal[ 'ComparisonOperator' ] threshold = None if ( self.DictMCVal.has_key( 'Threshold' ) ): threshold = self.DictMCVal[ 'Threshold' ] txt = "# Evenement de defaillance\n" txt += "%s = Event( %s, ComparisonOperator( %s() ), %s )\n" % (self.variable["myEvent"], self.variable["outputRandomVector"], operator, threshold) txt += "%s.setName( '%s' )\n" % (self.variable["myEvent"], "myEvent") txt += "\n" return txt def MonteCarlo (self): ''' Methode de MonteCarlo ''' txt = "# Simulation par MonteCarlo\n" txt += "%s = MonteCarlo( %s )\n" % (self.variable["myAlgo"], self.variable["myEvent"]) txt += "\n" return txt def LHS (self): ''' Methode LHS ''' txt = "# Simulation par LHS\n" txt += "%s = LHS( %s )\n" % (self.variable["myAlgo"], self.variable["myEvent"]) txt += "\n" return txt def ImportanceSampling (self): ''' Methode de tirage d importance ''' dimension = 0 if ( self.DictMCVal.has_key( 'MeanVector' ) ): meanVector = self.DictMCVal[ 'MeanVector' ] dimension = len( meanVector ) txt = "# Simulation par Tirage d'importance\n" txt += "# Densite d'importance\n" txt += "%s = NumericalPoint( %s )\n" % (self.variable["meanVector"], self.variable["n"]) for i in range(dimension): txt += "%s[%d] = %g\n" % (self.variable["meanVector"], i, meanVector[i]) txt += "%s = Normal( %s, CovarianceMatrix( IdentityMatrix( %s ) ) )\n" % (self.variable["importanceDensity"], self.variable["meanVector"], self.variable["n"]) txt += "%s = ImportanceSampling( %s, Distribution( %s ) )\n" % (self.variable["myAlgo"], self.variable["myEvent"], self.variable["importanceDensity"]) txt += "\n" return txt def FORM (self): ''' Methode FORM ''' txt = "# Algorithme FORM\n" txt += "%s = FORM ( NearestPointAlgorithm( %s ), %s, %s )\n" % (self.variable["myAlgo"], self.variable["myOptimizer"], self.variable["myEvent"], self.variable["startingPoint"]) txt += "\n" return txt def SORM (self): ''' Methode SORM ''' txt = "# Algorithme SORM\n" txt += "%s = SORM ( NearestPointAlgorithm( %s ), %s, %s )\n" % (self.variable["myAlgo"], self.variable["myOptimizer"], self.variable["myEvent"], self.variable["startingPoint"]) txt += "\n" return txt def RunAlgorithm (self): ''' Do the computation ''' txt = "" if ( self.DictMCVal.has_key( 'FunctionCallsNumber' ) ): if ( self.DictMCVal[ 'FunctionCallsNumber' ] == "yes" ): txt += "%s = %s.getEvaluationCallsNumber()\n" % (self.variable["modelEvaluationCalls"], self.variable["model"]) txt += "%s = %s.getGradientCallsNumber()\n" % (self.variable["modelGradientCalls"], self.variable["model"]) txt += "%s = %s.getHessianCallsNumber()\n" % (self.variable["modelHessianCalls"], self.variable["model"]) txt += "\n" txt += "# Perform the computation\n" txt += "%s.run()\n" % self.variable["myAlgo"] txt += "\n" if ( self.DictMCVal.has_key( 'FunctionCallsNumber' ) ): if ( self.DictMCVal[ 'FunctionCallsNumber' ] == "yes" ): txt += "%s = %s.getEvaluationCallsNumber() - %s\n" % (self.variable["modelEvaluationCalls"], self.variable["model"], self.variable["modelEvaluationCalls"]) txt += "%s = %s.getGradientCallsNumber() - %s\n" % (self.variable["modelGradientCalls"], self.variable["model"], self.variable["modelGradientCalls"]) txt += "%s = %s.getHessianCallsNumber() - %s\n" % (self.variable["modelHessianCalls"], self.variable["model"], self.variable["modelHessianCalls"]) txt += "\n" txt += "print '%s =', %s\n" % ("model Evaluation Calls", self.variable["modelEvaluationCalls"]) txt += "print '%s =', %s\n" % ("model Gradient Calls", self.variable["modelGradientCalls"]) txt += "print '%s =', %s\n" % ("model Hessian Calls", self.variable["modelHessianCalls"]) txt += "\n" return txt def Cobyla (self): ''' Methode Cobyla ''' txt = "# Optimisation par Cobyla\n" txt += "%s = Cobyla()\n" % self.variable["myOptimizer"] txt += "#%s = CobylaSpecificParameters()\n" % self.variable["specificParameters"] txt += "#%s.setSpecificParameters( %s )\n" % (self.variable["myOptimizer"], self.variable["specificParameters"]) txt += "\n" return txt def AbdoRackwitz (self): ''' Methode AbdoRackwitz ''' txt = "# Optimisation par AbdoRackwitz\n" txt += "%s = AbdoRackwitz()\n" % self.variable["myOptimizer"] txt += "#%s = AbdoRackwitzSpecificParameters()\n" % self.variable["specificParameters"] txt += "#%s.setSpecificParameters( %s )\n" % (self.variable["myOptimizer"], self.variable["specificParameters"]) txt += "\n" return txt def Beta (self, loi): ''' Definition de la loi Beta ''' settings = { "RT" : "Beta.RT", "MuSigma" : "Beta.MUSIGMA", } if loi[ 'Settings' ] == 'RT' : arg1 = loi[ 'R' ] arg2 = loi[ 'T' ] else : arg1 = loi[ 'Mu' ] arg2 = loi[ 'Sigma' ] arg3 = loi[ 'A' ] arg4 = loi[ 'B' ] txt = "Beta( %g, %g, %g, %g, %s )" % (arg1, arg2, arg3, arg4, settings[ loi[ 'Settings' ] ]) return txt def Exponential (self, loi): ''' Definition de la loi Exponential ''' arg1 = loi[ 'Lambda' ] arg2 = loi[ 'Gamma' ] txt = "Exponential( %g, %g )" % (arg1, arg2) return txt def Gamma (self, loi): ''' Definition de la loi Gamma ''' settings = { "KLambda" : "Gamma.KLAMBDA", "MuSigma" : "Gamma.MUSIGMA", } if loi[ 'Settings' ] == 'KLambda' : arg1 = loi[ 'K' ] arg2 = loi[ 'Lambda' ] else : arg1 = loi[ 'Mu' ] arg2 = loi[ 'Sigma' ] arg3 = loi[ 'Gamma' ] txt = "Gamma( %g, %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ]) return txt def Geometric (self, loi): ''' Definition de la loi Geometric ''' txt = "Geometric( %g )" % loi[ 'P' ] return txt def Gumbel (self, loi): ''' Definition de la loi Gumbel ''' settings = { "AlphaBeta" : "Gumbel.ALPHABETA", "MuSigma" : "Gumbel.MUSIGMA", } if loi[ 'Settings' ] == 'AlphaBeta' : arg1 = loi[ 'Alpha' ] arg2 = loi[ 'Beta' ] else : arg1 = loi[ 'Mu' ] arg2 = loi[ 'Sigma' ] txt = "Gumbel( %g, %g, %s )" % (arg1, arg2, settings[ loi[ 'Settings' ] ]) return txt def Histogram (self, loi): ''' Definition de la loi Histogram ''' arg1 = loi[ 'First' ] arg2 = loi[ 'Values' ] txt = "Histogram( %g, %s )" % (arg1, arg2) return txt def Laplace (self, loi): ''' Definition de la loi Laplace ''' arg1 = loi[ 'Lambda' ] arg2 = loi[ 'Mu' ] txt = "Laplace( %g, %g )" % (arg1, arg2) return txt def Logistic (self, loi): ''' Definition de la loi Logistic ''' arg1 = loi[ 'Alpha' ] arg2 = loi[ 'Beta' ] txt = "Logistic( %g, %g )" % (arg1, arg2) return txt def LogNormal (self, loi): ''' Definition de la loi LogNormal ''' settings = { "MuSigmaLog" : "LogNormal.MUSIGMA_LOG", "MuSigma" : "LogNormal.MUSIGMA", "MuSigmaOverMu" : "LogNormal.MU_SIGMAOVERMU", } if loi[ 'Settings' ] == 'MuSigmaLog' : arg1 = loi[ 'MuLog' ] arg2 = loi[ 'SigmaLog' ] elif loi[ 'Settings' ] == 'MuSigmaOverMu' : arg1 = loi[ 'Mu' ] arg2 = loi[ 'SigmaOverMu' ] else : arg1 = loi[ 'Mu' ] arg2 = loi[ 'Sigma' ] arg3 = loi[ 'Gamma' ] txt = "LogNormal( %g, %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ]) return txt def MultiNomial (self, loi): ''' Definition de la loi MultiNomial ''' arg1 = loi[ 'Values' ] arg2 = loi[ 'N' ] txt = "MultiNomial( NumericalPoint( %s ) , %d)" % (arg1, arg2) return txt def NonCentralStudent (self, loi): ''' Definition de la loi NonCentralStudent ''' arg1 = loi[ 'Nu' ] arg2 = loi[ 'Delta' ] arg3 = loi[ 'Gamma' ] txt = "NonCentralStudent( %g, %g )" % (arg1, arg2, arg3) return txt def Normal (self, loi): ''' Definition de la loi Normal ''' arg1 = loi[ 'Mu' ] arg2 = loi[ 'Sigma' ] txt = "Normal( %g, %g )" % (arg1, arg2) return txt def TruncatedNormal (self, loi): ''' Definition de la loi TruncatedNormal ''' arg1 = loi[ 'MuN' ] arg2 = loi[ 'SigmaN' ] arg3 = loi[ 'A' ] arg4 = loi[ 'B' ] txt = "TruncatedNormal( %g, %g, %g, %g )" % (arg1, arg2, arg3, arg4) return txt def Poisson (self, loi): ''' Definition de la loi Poisson ''' txt = "Poisson( %g )" % loi[ 'Lambda' ] return txt def Rayleigh (self, loi): ''' Definition de la loi Rayleigh ''' arg1 = loi[ 'Sigma' ] arg2 = loi[ 'Gamma' ] txt = "Rayleigh( %g, %g )" % (arg1, arg2) return txt def Student (self, loi): ''' Definition de la loi Student ''' arg1 = loi[ 'Mu' ] arg2 = loi[ 'Nu' ] arg3 = loi[ 'Sigma' ] txt = "Student( %g, %g, %g )" % (arg1, arg2, arg3) return txt def Triangular (self, loi): ''' Definition de la loi Triangular ''' arg1 = loi[ 'A' ] arg2 = loi[ 'M' ] arg3 = loi[ 'B' ] txt = "Triangular( %g, %g, %g )" % (arg1, arg2, arg3) return txt def Uniform (self, loi): ''' Definition de la loi Uniform ''' arg1 = loi[ 'A' ] arg2 = loi[ 'B' ] txt = "Uniform( %g, %g )" % (arg1, arg2) return txt def UserDefined (self, loi): ''' Definition de la loi UserDefined ''' txt = "** UserDefined not defined yet **" return txt def Weibull (self, loi): ''' Definition de la loi Weibull ''' settings = { "AlphaBeta" : "Weibull.ALPHABETA", "MuSigma" : "Weibull.MUSIGMA", } if loi[ 'Settings' ] == 'AlphaBeta' : arg1 = loi[ 'Alpha' ] arg2 = loi[ 'Beta' ] else : arg1 = loi[ 'Mu' ] arg2 = loi[ 'Sigma' ] arg3 = loi[ 'Gamma' ] txt = "Weibull( %g, %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ]) return txt def GraphiquePDF (self, loi, fichier): ''' Produit une image PNG representant la PDF de la loi ''' txt = headerSTD % self.OpenTURNS_path txt += "dist = %s\n" % apply( STDGenerateur.__dict__[ loi[ 'Kind' ] ], (self, loi) ) txt += "graph = dist.drawPDF()\n" txt += "graph.draw( '%s' )\n" % fichier txt += footerSTD return txt eficas-6.4.0/generator/generator_asterv5.py0000644004705000470430000003723510120346653021242 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient le plugin generateur de fichier au format asterv5 pour EFICAS. """ import traceback import types,string from Noyau import N_CR from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL from Accas import GEOM,ASSD from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM from Formatage import Formatage def entryPoint(): """ Retourne les informations nécessaires pour le chargeur de plugins Ces informations sont retournées dans un dictionnaire """ return { # Le nom du plugin 'name' : 'asterv5', # La factory pour créer une instance du plugin 'factory' : AsterGenerator, } class AsterGenerator: """ Ce generateur parcourt un objet de type JDC et produit un fichier au format asterv5 L'acquisition et le parcours sont réalisés par la méthode generator.gener(objet_jdc,format) L'écriture du fichier au format asterv5 est réalisée par appel de la méthode generator.writefile(nom_fichier) Ses caractéristiques principales sont exposées dans des attributs de classe : - extensions : qui donne une liste d'extensions de fichier préconisées """ # Les extensions de fichier préconisées extensions=('.comm',) def __init__(self,cr=None): # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard if cr : self.cr=cr else: self.cr=N_CR.CR(debut='CR generateur format asterv5', fin='fin CR format asterv5') # Le texte au format asterv5 est stocké dans l'attribut text self.text='' def writefile(self,filename): fp=open(filename,'w') fp.write(self.text) fp.close() def gener(self,obj,format='brut'): """ Retourne une représentation du JDC obj sous une forme qui est paramétrée par format. Si format vaut 'brut', retourne une liste de listes de ... Si format vaut 'standard', retourne un texte obtenu par concaténation de la liste Si format vaut 'beautifie', retourne le meme texte beautifié """ liste= self.generator(obj) if format == 'brut': self.text=liste elif format == 'standard': self.text=string.join(liste) elif format == 'beautifie': jdc_formate = Formatage(liste,sep=':',l_max=72) self.text=jdc_formate.formate_jdc() else: raise "Format pas implémenté : "+format return self.text def generator(self,obj): """ Cette methode joue un role d'aiguillage en fonction du type de obj On pourrait utiliser les méthodes accept et visitxxx à la place (dépend des gouts !!!) """ # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage) if isinstance(obj,PROC_ETAPE): return self.generPROC_ETAPE(obj) elif isinstance(obj,MACRO_ETAPE): return self.generMACRO_ETAPE(obj) elif isinstance(obj,FORM_ETAPE): return self.generFORM_ETAPE(obj) elif isinstance(obj,ETAPE): return self.generETAPE(obj) elif isinstance(obj,MCFACT): return self.generMCFACT(obj) elif isinstance(obj,MCList): return self.generMCList(obj) elif isinstance(obj,MCBLOC): return self.generMCBLOC(obj) elif isinstance(obj,MCSIMP): return self.generMCSIMP(obj) elif isinstance(obj,ASSD): return self.generASSD(obj) elif isinstance(obj,ETAPE_NIVEAU): return self.generETAPE_NIVEAU(obj) elif isinstance(obj,COMMENTAIRE): return self.generCOMMENTAIRE(obj) # Attention doit etre placé avant PARAMETRE (raison : héritage) elif isinstance(obj,PARAMETRE_EVAL): return self.generPARAMETRE_EVAL(obj) elif isinstance(obj,PARAMETRE): return self.generPARAMETRE(obj) elif isinstance(obj,EVAL): return self.generEVAL(obj) elif isinstance(obj,COMMANDE_COMM): return self.generCOMMANDE_COMM(obj) elif isinstance(obj,JDC): return self.generJDC(obj) else: raise "Type d'objet non prévu",obj def generJDC(self,obj): """ Cette méthode convertit un objet JDC en une liste de chaines de caractères à la syntaxe asterv5 """ l=[] if obj.definition.l_niveaux == (): # Il n'y a pas de niveaux for etape in obj.etapes: l.append(self.generator(etape)) else: # Il y a des niveaux for etape_niveau in obj.etapes_niveaux: l.extend(self.generator(etape_niveau)) if l != [] : # Si au moins une étape, on ajoute le retour chariot sur la dernière étape if type(l[-1])==types.ListType: l[-1][-1] = l[-1][-1]+'\n' elif type(l[-1])==types.StringType: l[-1] = l[-1]+'\n' return l def generCOMMANDE_COMM(self,obj): """ Cette méthode convertit un COMMANDE_COMM en une liste de chaines de caractères à la syntaxe asterv5 """ l_lignes = string.split(obj.valeur,'\n') txt='' for ligne in l_lignes: txt = txt + '%%'+ligne+'\n' return txt def generEVAL(self,obj): """ Cette méthode convertit un EVAL en une liste de chaines de caractères à la syntaxe asterv5 """ return 'EVAL("'+ obj.valeur +'")' def generCOMMENTAIRE(self,obj): """ Cette méthode convertit un COMMENTAIRE en une liste de chaines de caractères à la syntaxe asterv5 """ l_lignes = string.split(obj.valeur,'\n') txt='' for ligne in l_lignes: txt = txt + '%'+ligne+'\n' return txt def generPARAMETRE_EVAL(self,obj): """ Cette méthode convertit un PARAMETRE_EVAL en une liste de chaines de caractères à la syntaxe asterv5 """ if obj.valeur == None: return obj.nom + ' = None ;\n' else: return obj.nom + ' = '+ self.generator(obj.valeur) +';\n' def generPARAMETRE(self,obj): """ Cette méthode convertit un PARAMETRE en une liste de chaines de caractères à la syntaxe asterv5 """ if type(obj.valeur) == types.StringType: return obj.nom + " = '" + obj.valeur + "';\n" else: return obj.nom + ' = ' + str(obj.valeur) + ';\n' def generETAPE_NIVEAU(self,obj): """ Cette méthode convertit une étape niveau en une liste de chaines de caractères à la syntaxe asterv5 """ l=[] if obj.etapes_niveaux == []: for etape in obj.etapes: l.append(self.generator(etape)) else: for etape_niveau in obj.etapes_niveaux: l.extend(self.generator(etape_niveau)) return l def generETAPE(self,obj): """ Cette méthode convertit une étape en une liste de chaines de caractères à la syntaxe asterv5 """ try: if obj.reuse != None: sdname= "&" + self.generator(obj.reuse) else: sdname= self.generator(obj.sd) except: sdname='sansnom' l=[] label=sdname + '='+obj.definition.nom+'(' l.append(label) for v in obj.mc_liste: if isinstance(v,MCBLOC) or isinstance(v,MCList): liste=self.generator(v) for mocle in liste : l.append(mocle) else: l.append(self.generator(v)) if len(l) == 1: l[0]=label+');' else : l.append(');') return l def generFORM_ETAPE(self,obj): """ Méthode particulière pour les objets de type FORMULE """ l=[] nom = obj.get_nom() if nom == '' : nom = 'sansnom' if len(obj.mc_liste)>0: l.append(nom + ' = FORMULE(') s=obj.type_retourne + ' = ' + "'''" + obj.arguments + ' = ' + obj.corps+"'''" l.append(s) l.append(');') else: l.append(nom+' = FORMULE();') return l def generMACRO_ETAPE(self,obj): """ Cette méthode convertit une macro-étape en une liste de chaines de caractères à la syntaxe asterv5 """ if obj.definition.nom == 'FORMULE' : return self.gen_ast_formule(obj) try: if obj.reuse != None: sdname= "&" + self.generator(obj.reuse)+'=' elif obj.sd == None: sdname='' else: sdname= self.generator(obj.sd)+'=' except: sdname='sansnom=' l=[] label = sdname + obj.definition.nom+'(' l.append(label) for v in obj.mc_liste: if isinstance(v,MCBLOC) or isinstance(v,MCList): liste=self.generator(v) for mocle in liste : l.append(mocle) else: # MCFACT ou MCSIMP l.append(self.generator(v)) if len(l) == 1: l[0]=label+');' else : l.append(');') return l def gen_ast_formule(self,obj): """ Méthode gen_ast particuliere aux objets de type FORMULE """ label='!FORMULE(' try: sdname= self.generator(obj.sd) except: sdname='sansnom' l=[] l.append(label) for v in obj.mc_liste: s='' s= v.nom+':'+sdname+'('+v.valeur+')' l.append(s) if len(l) == 1: l[0]=label+');' else : l.append(');') return l def generPROC_ETAPE(self,obj): """ Cette méthode convertit une étape en une liste de chaines de caractères à la syntaxe asterv5 """ l=[] label=obj.definition.nom+'(' l.append(label) for v in obj.mc_liste: if isinstance(v,MCBLOC) or isinstance(v,MCList): liste=self.generator(v) for mocle in liste : l.append(mocle) else: l.append(self.generator(v)) if len(l) == 1: l[0]=label+');' else : l.append(');') return l def generMCSIMP(self,obj) : """ Convertit un objet MCSIMP en une liste de chaines de caractères à la syntaxe asterv5 """ if type(obj.valeur) == types.TupleType : s = '(' for val in obj.valeur : if s != '(': s = s + ',' if type(val) == types.InstanceType : if isinstance(val,PARAMETRE): # il ne faut pas prendre la string que retourne gen_ast # mais seulement le nom dans le cas d'un paramètre s = s + val.nom else: s = s + self.generator(val) elif self.wait_geom(obj): s = s + val elif type(val) == types.FloatType : #s = s + self.repr_float(val) s = s + str(val) else : s = s + `val` s = s + ')' s=obj.nom+':'+s+' ' return s else : if type(obj.valeur) == types.InstanceType : if isinstance(obj.valeur,PARAMETRE): # il ne faut pas prendre la string que retourne gen_ast # mais seulement str dans le cas d'un paramètre s = obj.valeur.nom else: s = self.generator(obj.valeur) elif self.wait_geom(obj): s = obj.valeur elif type(obj.valeur) == types.FloatType : #s = self.repr_float(obj.valeur) s = str(obj.valeur) else : s = `obj.valeur` s=obj.nom+':'+s+' ' return s def wait_geom(self,obj): for typ in obj.definition.type: if type(typ) == types.ClassType : if issubclass(typ,GEOM) : return 1 return 0 def repr_float(self,valeur): """ Cette fonction représente le réel valeur comme une chaîne de caractères sous forme mantisse exposant si nécessaire cad si le nombre contient plus de 5 caractères NB : valeur est un réel au format Python ou une chaîne de caractères représentant un réel """ if type(valeur) == types.StringType : valeur = eval(valeur) if valeur == 0. : return '0.0' if abs(valeur) > 1. : if abs(valeur) < 10000. : return repr(valeur) else : if abs(valeur) > 0.01 : return repr(valeur) t=repr(valeur) if string.find(t,'e') != -1 or string.find(t,'E') != -1 : # le réel est déjà sous forme mantisse exposant ! # --> on remplace e par E t=string.replace(t,'e','E') # --> on doit encore vérifier que la mantisse contient bien un '.' if string.find(t,'.')!= -1: return t else: # -->il faut rajouter le point avant le E t=string.replace(t,'E','.E') return t s='' neg = 0 if t[0]=='-': s=s+t[0] t=t[1:] cpt = 0 if string.atof(t[0]) == 0.: # réel plus petit que 1 neg = 1 t=t[2:] cpt=1 while string.atof(t[0]) == 0. : cpt = cpt+1 t=t[1:] s=s+t[0]+'.' for c in t[1:]: s=s+c else: # réel plus grand que 1 s=s+t[0]+'.' if string.atof(t[1:]) == 0.: l=string.split(t[1:],'.') cpt = len(l[0]) else: r=0 pt=0 for c in t[1:]: r=r+1 if c != '.' : if pt != 1 : cpt = cpt + 1 s=s+c else: pt = 1 if r+1 == len(t) or string.atof(t[r+1:]) == 0.:break s=s+'E'+neg*'-'+repr(cpt) return s def generASSD(self,obj): """ Convertit un objet dérivé d'ASSD en une chaine de caractères à la syntaxe asterv5 """ return obj.get_name() def generMCFACT(self,obj): """ Convertit un objet MCFACT en une liste de chaines de caractères à la syntaxe asterv5 """ l=[] label=obj.nom + ':(' l.append(label) for v in obj.mc_liste: if isinstance(v,MCBLOC) or isinstance(v,MCList): liste=self.generator(v) for mocle in liste : l.append(mocle) else: l.append(self.generator(v)) l.append(')') return l def generMCList(self,obj): """ Convertit un objet MCList en une liste de chaines de caractères à la syntaxe asterv5 """ l=[] for mcfact in obj.data: l.append(self.generator(mcfact)) return l def generMCBLOC(self,obj): """ Convertit un objet MCBLOC en une liste de chaines de caractères à la syntaxe asterv5 """ l=[] for v in obj.mc_liste: if isinstance(v,MCBLOC) or isinstance(v,MCList): liste=self.generator(v) for mocle in liste : l.append(mocle) else: l.append(self.generator(v)) return l eficas-6.4.0/generator/generator_openturns.py0000644004705000470430000001067711444664427021723 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient le plugin generateur de fichier au format openturns pour EFICAS. """ import traceback import types,string,re from generator_python import PythonGenerator from OpenturnsBase import Generateur #from OpenturnsXML import XMLGenerateur #from OpenturnsSTD import STDGenerateur def entryPoint(): """ Retourne les informations necessaires pour le chargeur de plugins Ces informations sont retournees dans un dictionnaire """ return { # Le nom du plugin 'name' : 'openturns', # La factory pour creer une instance du plugin 'factory' : OpenturnsGenerator, } class OpenturnsGenerator(PythonGenerator): """ Ce generateur parcourt un objet de type JDC et produit un texte au format eficas et un texte au format xml """ # Les extensions de fichier permis? extensions=('.comm',) def initDico(self): self.dictMCVal={} self.listeVariables=[] self.listeFichiers=[] self.dictMCLois={} self.dictTempo={} self.TraiteMCSIMP=1 def gener(self,obj,format='brut',config=None): #print "IDM: gener dans generator_openturns.py" self.initDico() self.text=PythonGenerator.gener(self,obj,format) self.genereXML() self.genereSTD() return self.text def generMCSIMP(self,obj) : """ Convertit un objet MCSIMP en texte python Remplit le dictionnaire des MCSIMP si nous ne sommes pas ni dans une loi, ni dans une variable """ s=PythonGenerator.generMCSIMP(self,obj) if self.TraiteMCSIMP == 1 : self.dictMCVal[obj.nom]=obj.valeur else : self.dictTempo[obj.nom]=obj.valeur return s def generMCFACT(self,obj): # Il n est pas possible d utiliser obj.valeur qui n est pas # a jour pour les nouvelles variables ou les modifications if obj.nom == "Variables" or "Files": self.TraiteMCSIMP=0 self.dictTempo={} s=PythonGenerator.generMCFACT(self,obj) if obj.nom == "Variables" : self.listeVariables.append(self.dictTempo) self.dictTempo={} else : self.listeFichiers.append(self.dictTempo) self.TraiteMCSIMP=1 return s def generETAPE(self,obj): if obj.nom == "DISTRIBUTION" : self.TraiteMCSIMP=0 self.dictTempo={} s=PythonGenerator.generETAPE(self,obj) if obj.nom == "DISTRIBUTION" : self.dictMCLois[obj.sd]=self.dictTempo self.dictTempo={} self.TraiteMCSIMP=1 return s def genereXML(self): #print "IDM: genereXML dans generator_openturns.py" if self.listeFichiers != [] : self.dictMCVal["exchange_file"]=self.listeFichiers MonBaseGenerateur=Generateur(self.dictMCVal, self.listeVariables, self.dictMCLois) MonGenerateur=MonBaseGenerateur.getXMLGenerateur() #try : if 1== 1 : self.texteXML=MonGenerateur.CreeXML() #except : else : self.texteXML="Il y a un pb a la Creation du XML" def genereSTD(self): MonBaseGenerateur=Generateur(self.dictMCVal, self.listeVariables, self.dictMCLois) MonGenerateur=MonBaseGenerateur.getSTDGenerateur() #try : if 1== 1 : self.texteSTD=MonGenerateur.CreeSTD() #except : else : self.texteSTD="Il y a un pb a la Creation du STD" def getOpenturnsXML(self): return self.texteXML def getOpenturnsSTD(self): return self.texteSTD eficas-6.4.0/generator/__init__.py0000644004705000470430000000235210120346653017332 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce package contient tous les générateurs de formats de sortie à partir des objets d' EFICAS. Ces générateurs sont implémentés sous forme de plugins """ from Extensions import pluginloader import generator plugins=pluginloader.PluginLoader(generator) eficas-6.4.0/generator/Formatage.py0000644004705000470430000002500611444664427017515 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe Formatage qui permet le formatage d'une liste de chaines de caractères dans une syntaxe représentative d'un jeu de commandes en un texte présentable """ import types,string,re class Formatage : """ Cette classe contient toutes les méthodes nécessaires au formatage de la chaine de caracteres issue d'un generator en un fichier 'lisible' ie avec indentations L'objet attend en parametre du constructeur (argument l_jdc) une representation du jeu de commandes sous la forme d'une liste. Chaque element de la liste est la representation d'une etape. La representation d'une etape est une liste dont le premier element est une chaine de caracteres donnant le debut de la commande ("xxx=lire_maillage(", par exemple). Les elements suivants sont les representations des mots cles simples et facteurs. Elle se termine avec un element de fin : ");" La representation d'un mot cle simple est une chaine de caracteres (info=2, par exemple). La representation d'un mot cle facteur est semblable à celle de l'étape : premier element caracteristique du mot cle facteur suivi d'elements representatifs des mots cles simples. Elle se termine avec un element de fin : ")" ou "),". """ def __init__(self,l_jdc,code=None,mode=None,sep='=',l_max=72): # l_jdc représente le jeu de commandes brut sous forme de liste self.l_jdc = l_jdc self.jdc_fini ='' self.count = 0 self.sep=sep self.l_max=l_max if mode == '.py': self.sep = '=' self.l_max = 132 elif code == 'ASTER': self.sep = ':' self.l_max = 72 def formate_jdc(self): comment=re.compile("\n#") commentaireavant=0 for etape in self.l_jdc: self.count = self.count+1 self.texte_etape = '' if type(etape)==types.ListType: # L'etape est sous la forme d'une liste dont le premier element est une chaine self.indent=[] self.indent.append(len(etape[0])) self.indent_courant = self.indent[0] self.texte_etape = '\n' + etape[0] if len(etape)>1 : self.formate_etape(etape[1:]) else : # L'etape est deja sous forme de chaine de caracteres self.indent=[] self.texte_etape = etape m=comment.match(self.texte_etape) # si ce n est pas la premiere ligne if self.jdc_fini != "" : # si il n y avait pas de commentaire avant on met un saut de ligne if commentaireavant == 0 : self.jdc_fini = self.jdc_fini + '\n' + self.texte_etape else : self.jdc_fini = self.jdc_fini + self.texte_etape # si c est la premiere ligne else : # on ne met pas de saut de ligne avant la premiere ligne # si c est un commentaire on enleve le saut de ligne precedent if m : self.texte_etape=self.texte_etape[1:] self.jdc_fini = self.texte_etape if m : commentaireavant=1 else : commentaireavant=0 return self.jdc_fini def formate_etape(self,liste): """ Enrichissement de la chaine de caracteres representant l'etape (attribut texte_etape de l'objet Formatage). Les elements a ajouter sont dans l'argument liste de la methode. L'objet "liste" à traiter a été produit par le module generator. En particulier les parenthèses et les virgules ont été produites par ce module """ l_patterns_fin_etape = ( ');' , ');\n' ) l_patterns_fin_mcf = ( ')' , '),' ) ind = 0 for element in liste : if type(element) == types.ListType: # il s'agit d'un mot-clé facteur # on écrit son nom (element[0]) longueur = self.longueur(self.texte_etape) try: increment = len(('\n'+self.indent_courant*' ')*ind + element[0]) except: print 'ERREUR' print liste print element self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind + element[0] length = len(self.indent) self.indent.insert(length,self.indent[length-1]+len(element[0])) self.indent_courant = self.indent[length] # on écrit ses fils self.formate_etape(element[1:]) elif type(element) == types.StringType: # il s'agit d'un mot-clé simple ou de ')' ou ');' ou '),' ou ');\n' if element in l_patterns_fin_mcf : self.traite_mcfact(s_mcfact=element,ind=ind) elif element in l_patterns_fin_etape : self.traite_etape(s_etape=element,ind=ind) else : self.traite_mcsimp(s_mcsimp=element,ind=ind) ind = 1 def traite_etape(self,s_etape,ind) : """ Traite une partie du jdc formaté : s_etape, une chaîne de caractères contenant une étape L'attribut self.texte_etape est modifié (complété) par le traitement L'attribut self.indent est modifié par le traitement L'attribut self.indent_courant est modifié par le traitement """ length = len(self.indent) if length > 1: last = self.indent[length-1] self.indent.remove(last) self.indent_courant=self.indent[length-2] else : self.indent_courant=self.indent[0] self.texte_etape = self.texte_etape + string.strip(s_etape) def traite_mcfact(self,s_mcfact,ind) : """ Traite une partie du jdc formaté : s_mcfact, une chaîne de caractères contenant un mot-clef facteur. L'attribut self.texte_etape est modifié (complété) par le traitement L'attribut self.indent est modifié par le traitement L'attribut self.indent_courant est modifié par le traitement """ self.texte_etape = self.texte_etape + string.strip(s_mcfact) length = len(self.indent) if length > 1: last = self.indent[length-1] self.indent.remove(last) self.indent_courant=self.indent[length-2] else : self.indent_courant=self.indent[0] return def traite_mcsimp(self,s_mcsimp,ind) : """ Traite une partie du jdc formaté : s_mcsimp, une chaîne de caractères contenant un mot-clef simple. L'attribut self.texte_etape est modifié (complété) par le traitement """ # # Ajout PN pour defi_fonction if self.texte_etape.find("DEFI_FONCTION") > 1 : bool_fonction=1 if s_mcsimp.find("\n") > 1: txt=""; bool = 0; numident=1 for l in s_mcsimp.splitlines() : if bool == 0 : bool = 1 numident=s_mcsimp.find("=")+2 txt=l else : txt=txt+('\n'+self.indent_courant*' '+numident*' ')*ind+l s_mcsimp = txt else : bool_fonction=0 longueur = self.longueur(self.texte_etape) increment = len(('\n'+self.indent_courant*' ')*ind + string.strip(s_mcsimp)) #self.jdc_fini = self.jdc_fini + ('\n'+self.indent_courant*' ')*ind + string.strip(s_mcsimp) if (bool_fonction == 1 ) : self.texte_etape = self.texte_etape +s_mcsimp elif ( ((1-ind)*longueur+increment) <= self.l_max ) : self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind + string.strip(s_mcsimp) else : # il faut couper ... nom,valeur = string.split(s_mcsimp,self.sep,1) chaine = self.creer_chaine(nom,valeur,'\n'+self.indent_courant*' ',ind) #self.jdc_fini = self.jdc_fini + ('\n'+self.indent_courant*' ')*ind + string.strip(s_mcsimp) self.texte_etape = self.texte_etape + chaine return def longueur(self,texte): """ texte est une string qui peut contenir des retours chariots Cette méthode retourne la longueur de la dernière ligne de texte """ liste = string.split(texte,'\n') return len(liste[-1]) def creer_chaine(self,nom,valeur,increment,ind): """ La methode creer_chaine reconstitue un objet Eficas à partir de - son nom, - sa valeur. """ s='' if len(increment + nom + self.sep) <= self.l_max: texte = increment*ind label = nom + self.sep s=texte + label longueur = len(increment + label) if ('(' not in valeur) or (valeur[0:3]=='"""'): # if ('(' not in valeur): # il s'agit d'une vraie chaîne de caractères val = len(valeur) texte = (self.l_max-2-val)*' '+valeur s=s+'\n'+texte elif ',' in valeur: # il s'agit d'une liste de tuple # c est trop complique on ne splitte pas if valeur[0:2]=='((' or valeur[0:2]=='[(': s=s+valeur return s # il s'agit d'une liste liste = string.split(valeur,',') i=0 for arg in liste : ajout = string.strip(arg) if len(ajout) == 0 : continue longueur = self.longueur(texte = (texte + label)) + len(ajout +',') + (1-i)*len(increment) if longueur <= self.l_max: if ajout[-1] != ')': texte = texte + ajout +',' else : texte = texte + ajout else : i=1 if ajout[-1] != ')': texte = texte + increment + (len(label)+2)*' ' + ajout + ',' else : texte = texte + increment + (len(label)+2)*' ' + ajout s=s+texte s = s + ',' else : # On a une ( mais pas de , . On passe la chaine sans modification val = len(valeur) texte = (self.l_max-2-val)*' '+valeur s=s+'\n'+texte return s eficas-6.4.0/generator/generator_GroupMA.py0000644004705000470430000000526611444664427021176 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient le plugin generateur d une liste des GroupNo et GroupMA """ import traceback import types,string,re from generator_python import PythonGenerator def entryPoint(): """ Retourne les informations nécessaires pour le chargeur de plugins Ces informations sont retournées dans un dictionnaire """ return { # Le nom du plugin 'name' : 'GroupMA', # La factory pour créer une instance du plugin 'factory' : GroupMAGenerator, } class GroupMAGenerator(PythonGenerator): """ Ce generateur parcourt un objet de type JDC et produit un texte au format eficas et un texte au format homard """ # Les extensions de fichier préconisées extensions=('.comm',) def __init__(self): PythonGenerator.__init__(self) self.listeMA=[] self.listeNO=[] def gener(self,obj,format='brut',config=None): self.liste=[] self.text=PythonGenerator.gener(self,obj,'brut',config=None) return self.listeMA,self.listeNO def generMCSIMP(self,obj) : if 'grma' in repr(obj.definition.type) : if not type(obj.valeur) in (list, tuple): aTraiter=(obj.valeur,) else : aTraiter=obj.valeur for group in aTraiter : if group not in self.listeMA : self.listeMA.append(group) if 'grno' in repr(obj.definition.type) : if not type(obj.valeur) in (list, tuple): aTraiter=(obj.valeur,) else : aTraiter=obj.valeur for group in aTraiter : if group not in self.listeNO : self.listeNO.append(group) s=PythonGenerator.generMCSIMP(self,obj) return s eficas-6.4.0/generator/generator_file_from_template.py0000644004705000470430000000731211444664427023513 0ustar courtoisasterdev# CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== import os from generator_python import PythonGenerator def entryPoint(): """ Return a dictionary containing the description needed to load the plugin """ return {'name' : 'file_from_template', 'factory' : FileFromTemplateGenerator} class FileFromTemplateGenerator(PythonGenerator): """ This generator creates an output file from a template (file with holes) in addition to Eficas .comm file. The parts to replace in the template must be in the form %KEYWORD%, where KEYWORD may be either the name of the Eficas element (short form, for instance MY_MCSIMP) or the "path" to the Eficas element (long form, for instance MYPROC.MYBLOC.MY_MCSIMP). To use this generator, the configuration of the code must implement two methods: get_extension() that must return the extension of the output file and get_template_file() that must return the path of the template file. Be sure also that your catalog is coherent with your template file. """ def gener(self, obj, format = 'brut', config = None): self.config = config self.kw_dict = {} self.text = PythonGenerator.gener(self, obj, format) self.generate_output_from_template() return self.text def generate_output_from_template(self) : """ Generate the output text from the template file and the keywords """ templateFileName = self.config.get_template_file() if not os.path.isfile(templateFileName): raise Exception("Template file %s does not exist." % templateFileName) f = file(templateFileName, "r") template = f.read() f.close() self.output_text = self.replace_keywords(template) def generMCSIMP(self, obj) : """ Save object value in the keyword dict for further use, then generate the text corresponding to the MCSIMP element. """ short_keyword = obj.nom.strip() long_keyword = "" for i in obj.get_genealogie()[:-1]: long_keyword += i + "." long_keyword += short_keyword self.kw_dict[short_keyword] = obj.valeur self.kw_dict[long_keyword] = obj.valeur return PythonGenerator.generMCSIMP(self, obj) def replace_keywords(self, template_string): result = template_string for item in self.kw_dict.iteritems(): replace_str = "%" + item[0] + "%" result = result.replace(replace_str, str(item[1])) return result def writeDefault(self, basefilename): output_filename = os.path.splitext(basefilename)[0] + \ self.config.get_extension() f = open(output_filename, 'w') f.write(self.output_text) f.close() eficas-6.4.0/generator/generator_openturns_study.py0000644004705000470430000001111111514016302023110 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient le plugin generateur de fichier au format openturns pour EFICAS. """ import traceback import types,string,re from generator_python import PythonGenerator from OpenturnsBase import Generateur #from OpenturnsXML import XMLGenerateur #from OpenturnsSTD import STDGenerateur def entryPoint(): """ Retourne les informations necessaires pour le chargeur de plugins Ces informations sont retournees dans un dictionnaire """ return { # Le nom du plugin 'name' : 'openturns_study', # La factory pour creer une instance du plugin 'factory' : OpenturnsGenerator, } class OpenturnsGenerator(PythonGenerator): """ Ce generateur parcourt un objet de type JDC et produit un texte au format eficas et un texte au format xml """ # Les extensions de fichier permis? extensions=('.comm',) def initDico(self): self.dictMCVal={} self.listeVariables=[] self.listeFichiers=[] self.dictMCLois={} self.dictTempo={} self.TraiteMCSIMP=1 self.texteSTD="""#!/usr/bin/env python import sys print "Invalid file. Check build process." sys.exit(1) """ def gener(self,obj,format='brut',config=None): print "IDM: gener dans generator_openturns_study.py" self.initDico() self.text=PythonGenerator.gener(self,obj,format) self.genereSTD() return self.text def generMCSIMP(self,obj) : """ Convertit un objet MCSIMP en texte python Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable """ s=PythonGenerator.generMCSIMP(self,obj) if self.TraiteMCSIMP == 1 : self.dictMCVal[obj.nom]=obj.valeur else : self.dictTempo[obj.nom]=obj.valeur return s def generETAPE(self,obj): print "IDM: generETAPE dans generator_openturns_study.py" print "IDM: obj.nom=", obj.nom if obj.nom in ( "DISTRIBUTION", ) : self.TraiteMCSIMP=0 self.dictTempo={} s=PythonGenerator.generETAPE(self,obj) if obj.nom in ( "DISTRIBUTION", ) : self.dictMCLois[obj.sd]=self.dictTempo self.dictTempo={} self.TraiteMCSIMP=1 return s def generPROC_ETAPE(self,obj): print "IDM: generPROC_ETAPE dans generator_openturns_study.py" print "IDM: obj.nom=", obj.nom if obj.nom in ( "VARIABLE", ) : self.TraiteMCSIMP=0 self.dictTempo={} s=PythonGenerator.generPROC_ETAPE(self,obj) if obj.nom in ( "VARIABLE", ) : self.listeVariables.append(self.dictTempo) self.dictTempo={} self.TraiteMCSIMP=1 return s def genereSTD(self): print "IDM: genereSTD dans generator_openturns_study.py" print "IDM: self.listeVariables=", self.listeVariables MonGenerateur=self.getGenerateur() #try : if 1== 1 : self.texteSTD=MonGenerateur.CreeSTD() #except : else : self.texteSTD="Il y a un pb a la Creation du STD" def writeDefault(self, fn): fileSTD = fn[:fn.rfind(".")] + '.py' f = open( str(fileSTD), 'wb') f.write( self.texteSTD ) f.close() def getGenerateur (self): print "IDM: getGenerateur dans generator_openturns_study.py" print "IDM: self.dictMCVal=", self.dictMCVal print "IDM: self.listeVariables=", self.listeVariables print "IDM: self.dictMCLois=", self.dictMCLois MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, self.listeVariables, self.dictMCLois) MonGenerateur=MonBaseGenerateur.getSTDGenerateur() return MonGenerateur eficas-6.4.0/generator/generator_python.py0000644004705000470430000004336611444664427021210 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient le plugin generateur de fichier au format python pour EFICAS. """ import traceback import types,string,re from Noyau import N_CR from Noyau.N_utils import repr_float import Accas import Extensions from Extensions.parametre import ITEM_PARAMETRE from Formatage import Formatage from Extensions.param2 import Formula def entryPoint(): """ Retourne les informations nécessaires pour le chargeur de plugins Ces informations sont retournées dans un dictionnaire """ return { # Le nom du plugin 'name' : 'python', # La factory pour créer une instance du plugin 'factory' : PythonGenerator, } class PythonGenerator: """ Ce generateur parcourt un objet de type JDC et produit un fichier au format python L'acquisition et le parcours sont réalisés par la méthode generator.gener(objet_jdc,format) L'écriture du fichier au format ini par appel de la méthode generator.writefile(nom_fichier) Ses caractéristiques principales sont exposées dans des attributs de classe : - extensions : qui donne une liste d'extensions de fichier préconisées """ # Les extensions de fichier préconisées extensions=('.comm',) def __init__(self,cr=None): # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard if cr : self.cr=cr else: self.cr=N_CR.CR(debut='CR generateur format python pour python', fin='fin CR format python pour python') # Le texte au format python est stocké dans l'attribut text self.text='' self.appli=None def writefile(self,filename): fp=open(filename,'w') fp.write(self.text) fp.close() def gener(self,obj,format='brut',config=None): """ Retourne une représentation du JDC obj sous une forme qui est paramétrée par format. Si format vaut 'brut', retourne une liste de listes de ... Si format vaut 'standard', retourne un texte obtenu par concaténation de la liste Si format vaut 'beautifie', retourne le meme texte beautifié """ self.appli=obj.get_jdc_root().appli #self.appli=obj.appli liste= self.generator(obj) if format == 'brut': self.text=liste elif format == 'standard': self.text=string.join(liste) elif format == 'beautifie': jdc_formate = Formatage(liste,mode='.py') self.text=jdc_formate.formate_jdc() else: raise "Format pas implémenté : "+format return self.text def generator(self,obj): """ Cette methode joue un role d'aiguillage en fonction du type de obj On pourrait utiliser les méthodes accept et visitxxx à la place (dépend des gouts !!!) """ # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage) if isinstance(obj,Accas.PROC_ETAPE): return self.generPROC_ETAPE(obj) # Attention doit etre placé avant MACRO (raison : héritage) elif isinstance(obj,Accas.FORM_ETAPE): return self.generFORM_ETAPE(obj) elif isinstance(obj,Accas.MACRO_ETAPE): return self.generMACRO_ETAPE(obj) elif isinstance(obj,Accas.ETAPE): return self.generETAPE(obj) elif isinstance(obj,Accas.MCFACT): return self.generMCFACT(obj) elif isinstance(obj,Accas.MCList): return self.generMCList(obj) elif isinstance(obj,Accas.MCBLOC): return self.generMCBLOC(obj) elif isinstance(obj,Accas.MCSIMP): return self.generMCSIMP(obj) elif isinstance(obj,Accas.ASSD): return self.generASSD(obj) elif isinstance(obj,Accas.ETAPE_NIVEAU): return self.generETAPE_NIVEAU(obj) elif isinstance(obj,Accas.COMMENTAIRE): return self.generCOMMENTAIRE(obj) # Attention doit etre placé avant PARAMETRE (raison : héritage) elif isinstance(obj,Accas.PARAMETRE_EVAL): return self.generPARAMETRE_EVAL(obj) elif isinstance(obj,Accas.PARAMETRE): return self.generPARAMETRE(obj) elif isinstance(obj,Accas.EVAL): return self.generEVAL(obj) elif isinstance(obj,Accas.COMMANDE_COMM): return self.generCOMMANDE_COMM(obj) elif isinstance(obj,Accas.JDC): return self.generJDC(obj) elif isinstance(obj,Accas.MCNUPLET): return self.generMCNUPLET(obj) elif isinstance(obj,ITEM_PARAMETRE): return self.generITEM_PARAMETRE(obj) elif isinstance(obj,Formula): return self.generFormula(obj) else: raise "Type d'objet non prevu",obj def generJDC(self,obj): """ Cette méthode convertit un objet JDC en une liste de chaines de caractères à la syntaxe python """ l=[] if obj.definition.l_niveaux == (): # Il n'y a pas de niveaux for etape in obj.etapes: l.append(self.generator(etape)) else: # Il y a des niveaux for etape_niveau in obj.etapes_niveaux: l.extend(self.generator(etape_niveau)) if l != [] : # Si au moins une étape, on ajoute le retour chariot sur la dernière étape if type(l[-1])==types.ListType: l[-1][-1] = l[-1][-1]+'\n' elif type(l[-1])==types.StringType: l[-1] = l[-1]+'\n' return l def generMCNUPLET(self,obj): """ Méthode générant une représentation de self permettant son ecriture dans le format python """ l=[] l.append('(') for v in obj.mc_liste: text = re.sub(".*=","",self.generator(v)) l.append(text) l.append('),') return l def generCOMMANDE_COMM(self,obj): """ Cette méthode convertit un COMMANDE_COMM en une liste de chaines de caractères à la syntaxe python """ l_lignes = string.split(obj.valeur,'\n') txt='' for ligne in l_lignes: txt = txt + '##'+ligne+'\n' return txt def generEVAL(self,obj): """ Cette méthode convertit un EVAL en une liste de chaines de caractères à la syntaxe python """ return 'EVAL("""'+ obj.valeur +'""")' def generCOMMENTAIRE(self,obj): """ Cette méthode convertit un COMMENTAIRE en une liste de chaines de caractères à la syntaxe python """ # modification pour répondre à la demande de C. Durand, d'éviter # l'ajout systématique d'un dièse, à la suite du commentaire # Dans la chaine de caracteres obj.valeur, on supprime le dernier # saut de ligne sans_saut = re.sub("\n$","",obj.valeur) l_lignes = string.split(sans_saut,'\n') txt='' i=1 for ligne in l_lignes: txt = txt + '#'+ligne+'\n' # suppression du dernier saut de ligne #txt = re.sub("\n$","",txt) # on ajoute un saut de ligne avant pattern=re.compile(" ?\#") m=pattern.match(txt) if m: txt="\n"+txt return txt def generPARAMETRE_EVAL(self,obj): """ Cette méthode convertit un PARAMETRE_EVAL en une liste de chaines de caractères à la syntaxe python """ if obj.valeur == None: return obj.nom + ' = None ;\n' else: return obj.nom + ' = '+ self.generator(obj.valeur) +';\n' def generITEM_PARAMETRE(self,obj): return repr(obj) def generFormula(self,obj): #return repr(obj) return str(obj) def generPARAMETRE(self,obj): """ Cette méthode convertit un PARAMETRE en une liste de chaines de caractères à la syntaxe python """ return repr(obj) + ";\n" def generETAPE_NIVEAU(self,obj): """ Cette méthode convertit une étape niveau en une liste de chaines de caractères à la syntaxe python """ l=[] if obj.etapes_niveaux == []: for etape in obj.etapes: l.append(self.generator(etape)) else: for etape_niveau in obj.etapes_niveaux: l.extend(self.generator(etape_niveau)) return l def generETAPE(self,obj): """ Cette méthode convertit une étape en une liste de chaines de caractères à la syntaxe python """ try: sdname= self.generator(obj.sd) except: sdname='sansnom' l=[] label=sdname + '='+obj.definition.nom+'(' l.append(label) if obj.reuse != None : str = 'reuse ='+ self.generator(obj.reuse) + ',' l.append(str) for v in obj.mc_liste: if isinstance(v,Accas.MCBLOC) : liste=self.generator(v) for mocle in liste : l.append(mocle) elif isinstance(v,Accas.MCSIMP) : text=self.generator(v) l.append(v.nom+'='+text) else: # MCFACT ou MCList liste=self.generator(v) liste[0]=v.nom+'='+liste[0] l.append(liste) if len(l) == 1: l[0]=label+');' else : l.append(');') return l def generFORM_ETAPE(self,obj): """ Méthode particulière pour les objets de type FORMULE """ l=[] nom = obj.get_nom() if nom == '' : nom = 'sansnom' l.append(nom + ' = FORMULE(') for v in obj.mc_liste: text=self.generator(v) l.append(v.nom+'='+text) l.append(');') return l def generMACRO_ETAPE(self,obj): """ Cette méthode convertit une macro-étape en une liste de chaines de caractères à la syntaxe python """ try: if obj.sd == None: sdname='' else: sdname= self.generator(obj.sd)+'=' except: sdname='sansnom=' l=[] label = sdname + obj.definition.nom+'(' l.append(label) if obj.reuse != None: # XXX faut il la virgule ou pas ???? str = "reuse =" + self.generator(obj.reuse) + ',' l.append(str) for v in obj.mc_liste: if isinstance(v,Accas.MCBLOC) : liste=self.generator(v) for mocle in liste : l.append(mocle) elif isinstance(v,Accas.MCSIMP) : text=self.generator(v) l.append(v.nom+'='+text) else: # MCFACT ou MCList liste=self.generator(v) liste[0]=v.nom+'='+liste[0] l.append(liste) if len(l) == 1: l[0]=label+');' else : l.append(');') return l def generPROC_ETAPE(self,obj): """ Cette méthode convertit une PROC étape en une liste de chaines de caractères à la syntaxe python """ l=[] label=obj.definition.nom+'(' l.append(label) for v in obj.mc_liste: if isinstance(v,Accas.MCBLOC) : liste=self.generator(v) for mocle in liste : l.append(mocle) elif isinstance(v,Accas.MCSIMP) : text=self.generator(v) l.append(v.nom+'='+text) else: # MCFACT ou MCList liste=self.generator(v) liste[0]=v.nom+'='+liste[0] l.append(liste) if len(l) == 1: l[0]=label+');' else : l.append(');') return l def generASSD(self,obj): """ Convertit un objet dérivé d'ASSD en une chaine de caractères à la syntaxe python """ return obj.get_name() def generMCFACT(self,obj): """ Convertit un objet MCFACT en une liste de chaines de caractères à la syntaxe python """ l=[] l.append('_F(') for v in obj.mc_liste: if not isinstance(v,Accas.MCSIMP) and not isinstance (v,Accas.MCBLOC) : # on est en présence d'une entite composée : on récupère une liste liste=self.generator(v) liste[0]=v.nom+'='+liste[0] l.append(liste) elif isinstance(v,Accas.MCBLOC): liste=self.generator(v) for arg in liste : l.append(arg) else: # on est en présence d'un MCSIMP : on récupère une string text =self.generator(v) l.append(v.nom+'='+text) # il faut être plus subtil dans l'ajout de la virgule en différenciant # le cas où elle est obligatoire (si self a des frères cadets # dans self.parent) ou non # (cas où self est seul ou le benjamin de self.parent) l.append('),') return l def generMCList(self,obj): """ Convertit un objet MCList en une liste de chaines de caractères à la syntaxe python """ if len(obj.data) > 1: l=['('] for mcfact in obj.data: l.append(self.generator(mcfact)) l.append('),') else: l= self.generator(obj.data[0]) return l def generMCBLOC(self,obj): """ Convertit un objet MCBLOC en une liste de chaines de caractères à la syntaxe python """ l=[] for v in obj.mc_liste: if isinstance(v,Accas.MCBLOC) : liste=self.generator(v) for mocle in liste : l.append(mocle) elif isinstance(v,Accas.MCFACT): liste=self.generator(v) elif isinstance(v,Accas.MCList): liste=self.generator(v) liste[0]=v.nom+'='+liste[0] # PN essai de correction bug identation if (hasattr(v,'data')) : if (isinstance(v.data[0],Accas.MCFACT) and (len(v.data) == 1)): l.append(liste) else: for mocle in liste : l.append(mocle) else : for mocle in liste : l.append(mocle) else: data=self.generator(v) if type(data) == types.ListType: data[0]=v.nom+'='+data[0] else: data=v.nom+'='+data l.append(data) return l def format_item(self,valeur,etape): if type(valeur) == types.FloatType : # Pour un flottant on utilise str # ou la notation scientifique s = str(valeur) clefobj=etape.get_sdname() if self.appli.appliEficas and self.appli.appliEficas.dict_reels.has_key(clefobj): if self.appli.appliEficas.dict_reels[clefobj].has_key(valeur): s=self.appli.appliEficas.dict_reels[clefobj][valeur] elif type(valeur) == types.StringType : if valeur.find('\n') == -1: # pas de retour chariot, on utilise repr s = repr(valeur) elif valeur.find('"""') == -1: # retour chariot mais pas de triple ", on formatte s='"""'+valeur+'"""' else: s = repr(valeur) elif isinstance(valeur,Accas.CO) or hasattr(etape,'sdprods') and valeur in etape.sdprods: s = "CO('"+ self.generator(valeur) +"')" elif isinstance(valeur,Accas.ASSD): s = self.generator(valeur) elif isinstance(valeur,Accas.PARAMETRE): # il ne faut pas prendre la string que retourne gener # mais seulement le nom dans le cas d'un paramètre s = valeur.nom #elif type(valeur) == types.InstanceType or isinstance(valeur,object): # if valeur.__class__.__name__ == 'CO' or hasattr(etape,'sdprods') and valeur in etape.sdprods : # s = "CO('"+ self.generator(valeur) +"')" # elif isinstance(valeur,Accas.PARAMETRE): # il ne faut pas prendre la string que retourne gener # mais seulement le nom dans le cas d'un paramètre # s = valeur.nom # else: # print valeur # s = self.generator(valeur) else : # Pour les autres types on utilise repr s = repr(valeur) return s def generMCSIMP(self,obj) : """ Convertit un objet MCSIMP en une liste de chaines de caractères à la syntaxe python """ waitTuple=0 if type(obj.valeur) in (types.TupleType,types.ListType) : s = '' for ss_type in obj.definition.type: if repr(ss_type).find('Tuple') != -1 : waitTuple=1 break if waitTuple : s = str(obj.valeur) +',' else : for val in obj.valeur : s =s +self.format_item(val,obj.etape) + ',' if len(obj.valeur) > 1: s = '(' + s + '),' if obj.nbrColonnes() : s=self.formatColonnes(obj.nbrColonnes(),s) else : s=self.format_item(obj.valeur,obj.etape) + ',' return s def formatColonnes(self,nbrColonnes,text): try : #if 1 == 1 : liste=text.split(",") indice=0 textformat="" while ( indice < len(liste) -2 ) : for l in range(nbrColonnes) : textformat=textformat+liste[indice]+"," indice=indice+1 textformat=textformat+"\n" textformat=textformat+")," except : #else : textformat=text return textformat eficas-6.4.0/generator/generator_openturns_wrapper.py0000644004705000470430000001127611514016302023434 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient le plugin generateur de fichier au format openturns pour EFICAS. """ import traceback import types,string,re from generator_python import PythonGenerator from OpenturnsBase import Generateur #from OpenturnsXML import XMLGenerateur #from OpenturnsSTD import STDGenerateur def entryPoint(): """ Retourne les informations necessaires pour le chargeur de plugins Ces informations sont retournees dans un dictionnaire """ return { # Le nom du plugin 'name' : 'openturns_wrapper', # La factory pour creer une instance du plugin 'factory' : OpenturnsGenerator, } class OpenturnsGenerator(PythonGenerator): """ Ce generateur parcourt un objet de type JDC et produit un texte au format eficas et un texte au format xml """ # Les extensions de fichier permis? extensions=('.comm',) def initDico(self): self.dictMCVal={} self.dictVariables={} self.listeFichiers=[] self.dictTempo={} self.traiteMCSIMP=1 self.numOrdre=0 self.texteSTD="""#!/usr/bin/env python import sys print "Invalid file. Check build process." sys.exit(1) """ self.wrapperXML=None def gener(self,obj,format='brut',config=None): #print "IDM: gener dans generator_openturns_wrapper.py" self.initDico() self.text=PythonGenerator.gener(self,obj,format) self.genereXML() #self.genereSTD() return self.text def generMCSIMP(self,obj) : """ Convertit un objet MCSIMP en texte python Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable """ s=PythonGenerator.generMCSIMP(self,obj) if not( type(obj.valeur) in (list, tuple)) and (obj.get_min_max()[1] != 1): valeur=(obj.valeur,) else : valeur=obj.valeur if self.traiteMCSIMP == 1 : self.dictMCVal[obj.nom]=valeur else : self.dictTempo[obj.nom]=valeur return s def generETAPE(self,obj): #print "generETAPE" , obj.nom if obj.nom == "VARIABLE" : self.traiteMCSIMP=0 self.dictTempo={} s=PythonGenerator.generETAPE(self,obj) if obj.nom == "VARIABLE" : self.dictTempo["numOrdre"]=self.numOrdre self.numOrdre = self.numOrdre +1 if obj.sd == None : self.dictVariables["SansNom"]=self.dictTempo else : self.dictVariables[obj.sd.nom]=self.dictTempo self.dictTempo={} self.traiteMCSIMP=1 return s def generMCFACT(self,obj): # Il n est pas possible d utiliser obj.valeur qui n est pas # a jour pour les nouvelles variables ou les modifications if obj.nom in ( "Files", ) : self.traiteMCSIMP=0 self.dictTempo={} s=PythonGenerator.generMCFACT(self,obj) self.listeFichiers.append(self.dictTempo) self.traiteMCSIMP=1 return s def genereXML(self): print "IDM: genereXML dans generator_openturns_wrapper.py" #print "appli.CONFIGURATION=",self.appli.CONFIGURATION.__dict__ if self.listeFichiers != [] : self.dictMCVal["Files"]=self.listeFichiers print "dictMCVal", self.dictMCVal, "dictVariables", self.dictVariables MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, [], {} ,self.dictVariables) MonGenerateur=MonBaseGenerateur.getXMLGenerateur() try : #if 1== 1 : self.wrapperXML=MonGenerateur.CreeXML() except : #else : self.wrapperXML=None def writeDefault(self, filename): fileXML = filename[:filename.rfind(".")] + '.xml' self.wrapperXML.writeFile( str(fileXML) ) eficas-6.4.0/generator/OpenturnsXML.py0000644004705000470430000001627211444664427020173 0ustar courtoisasterdev#@ AJOUT OpenturnsSolver Macro # -*- coding: iso-8859-1 -*- # RESPONSABLE """ Ce module contient le generateur XML pour Openturns """ import sys print sys.path import openturns # Dictionnaires de conversion des valeurs lues dans EFICAS # en valeurs reconnues par Open TURNS # Les clefs 'None' sont les valeurs par defaut VariableTypeByName = { "in" : openturns.WrapperDataVariableType.IN, "out" : openturns.WrapperDataVariableType.OUT, None : openturns.WrapperDataVariableType.IN, } FileTypeByName = { "in" : openturns.WrapperDataFileType.IN, "out" : openturns.WrapperDataFileType.OUT, None : openturns.WrapperDataFileType.IN, } SymbolProvidedByName = { "no" : openturns.WrapperSymbolProvided.NO, "yes" : openturns.WrapperSymbolProvided.YES, None : openturns.WrapperSymbolProvided.NO, } WrapperStateByName = { "shared" : openturns.WrapperState.SHARED, "specific" : openturns.WrapperState.SPECIFIC, None : openturns.WrapperState.SPECIFIC, } WrapperModeByName = { "static-link" : openturns.WrapperMode.STATICLINK, "dynamic-link" : openturns.WrapperMode.DYNAMICLINK, "fork" : openturns.WrapperMode.FORK, None : openturns.WrapperMode.FORK, } WrapperDataTransferByName = { "files" : openturns.WrapperDataTransfer.FILES, "pipe" : openturns.WrapperDataTransfer.PIPE, "arguments" : openturns.WrapperDataTransfer.ARGUMENTS, "socket" : openturns.WrapperDataTransfer.SOCKET, "corba" : openturns.WrapperDataTransfer.CORBA, None : openturns.WrapperDataTransfer.FILES, } #========================== # La classe de creation XML #========================== class XMLGenerateur : ''' Generation du fichier XML ''' def __init__ (self, appli, DictMCVal, DictVariables ) : self.DictMCVal = DictMCVal self.DictVariables = DictVariables self.appli = appli def CreeXML (self) : ''' Pilotage general de la creation du fichier XML ''' data = openturns.WrapperData() data.setLibraryPath( self.GetMCVal('WrapperPath','') ) data.setVariableList( self.VariableList() ) data.setFunctionDescription( self.FunctionDefinition() ) data.setGradientDescription( self.GradientDefinition() ) data.setHessianDescription( self.HessianDefinition() ) data.setFileList( self.FileList() ) data.setParameters( self.Parameters() ) data.setFrameworkData( self.FrameworkData() ) wrapper=openturns.WrapperFile() wrapper.setWrapperData( data ) return wrapper class __variable_ordering: def __init__ (self, dictVar) : self.dictVar = dictVar def __call__(self, a, b): return self.dictVar[a]['numOrdre'] - self.dictVar[b]['numOrdre'] def VariableList (self) : ''' Ecrit la liste des variables ''' varList = openturns.WrapperDataVariableCollection() for var in sorted( self.DictVariables.keys(), self.__variable_ordering( self.DictVariables ) ) : varList.add( self.Variable( var, self.DictVariables[var] ) ) return varList def Variable (self, var, dictVar) : ''' Ecrit le parametrage d une variable ''' variable = openturns.WrapperDataVariable() variable.id_ = var if dictVar[ 'Type' ] in VariableTypeByName.keys() : variable.type_ = VariableTypeByName[ dictVar[ 'Type' ] ] if dictVar.has_key('Comment') : variable.comment_ = dictVar[ 'Comment' ] if dictVar.has_key('Unit') : variable.unit_ = dictVar[ 'Unit' ] if dictVar.has_key('Regexp') : variable.regexp_ = dictVar[ 'Regexp' ] if dictVar.has_key('Format') : variable.format_ = dictVar[ 'Format' ] return variable def FunctionDefinition (self) : ''' Ecrit la description de la Fonction ''' func = openturns.WrapperFunctionDescription() func.name_ = self.GetMCVal( 'FunctionName', '' ) if (len(func.name_) != 0) : func.provided_ = SymbolProvidedByName[ 'yes' ] return func def GradientDefinition (self) : ''' Ecrit la description du Gradient ''' grad = openturns.WrapperFunctionDescription() grad.name_ = self.GetMCVal( 'GradientName', '' ) if (len(grad.name_) != 0) : grad.provided_ = SymbolProvidedByName[ 'yes' ] return grad def HessianDefinition (self) : ''' Ecrit la description de la Hessienne ''' hess = openturns.WrapperFunctionDescription() hess.name_ = self.GetMCVal( 'HessianName', '' ) if (len(hess.name_) != 0) : hess.provided_ = SymbolProvidedByName[ 'yes' ] return hess def FileList (self) : ''' Ecrit la liste des fichiers ''' fileList = openturns.WrapperDataFileCollection() for dictFile in self.GetMCVal('Files', []) : fileList.add( self.File( dictFile ) ) return fileList def File (self, dictFile ) : ''' Ecrit le parametrage d un fichier ''' fich = openturns.WrapperDataFile() fich.id_ = dictFile[ 'Id' ] if dictFile[ 'Type' ] in FileTypeByName.keys() : fich.type_ = FileTypeByName[ dictFile[ 'Type' ] ] if dictFile.has_key('Name') : fich.name_ = dictFile[ 'Name' ] if dictFile.has_key('Path') : fich.path_ = dictFile[ 'Path' ] if dictFile.has_key('Subst') : import string fich.subst_ = string.join( dictFile[ 'Subst' ], ',' ) return fich def Parameters (self) : ''' Ecrit les parametres de couplage au code externe ''' parameters = openturns.WrapperParameter() parameters.mode_ = WrapperModeByName[ self.GetMCVal('WrapCouplingMode') ] if (parameters.mode_ == openturns.WrapperMode.FORK ): parameters.command_ = self.GetMCVal('Command') userPrefix = self.GetMCVal('UserPrefix', None) if userPrefix != None : parameters.userPrefix_ = userPrefix parameters.state_ = WrapperStateByName[ self.GetMCVal('State') ] parameters.in_ = WrapperDataTransferByName[ self.GetMCVal('InDataTransfer') ] parameters.out_ = WrapperDataTransferByName[ self.GetMCVal('OutDataTransfer') ] return parameters def FrameworkData (self) : ''' Ecrit les donnees liees a l utilisation d un framework englobant ''' framework = openturns.WrapperFrameworkData() # framework.studycase_ = "12:23:34" # framework.componentname_ = self.GetMCVal('SolverComponentName', 'UNDEFINED') CN = self.GetMCVal('SolverComponentName', 'UNDEFINED') print 'CN = ', CN framework.componentname_ = CN return framework # --------------------------------------------------------------------------------- def GetTag (self, tag) : ''' Recupere la chaine associee au tag dans la table dictTagsXML. Leve une exception si le tag n est pas trouve ''' if ( dictTagsXML.has_key(tag) ) : return dictTagsXML[tag] else : raise KeyError, "Tag '%s' is undefined. This is an internal bug. Report bug to developers" % tag pass def GetMCVal (self, MC, default = None, mandatory = False) : ''' Recupere la chaine associee au MC dans la table DictMCVal. Leve une exception si le MC n est pas trouve et mandatory vaut True ''' if ( self.DictMCVal.has_key(MC) and self.DictMCVal[MC] != None ) : return self.DictMCVal[MC] else : if ( mandatory ) : raise KeyError, "Keyword '%s' is mandatory" % MC else : return default pass eficas-6.4.0/generator/generator_vers3DSalome.py0000644004705000470430000001631011473465060022155 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient le plugin generateur de fichier au format python pour EFICAS. PN """ import traceback import types,string,re import math from Noyau import N_CR from Noyau.N_utils import repr_float import Accas import Extensions from Extensions.parametre import ITEM_PARAMETRE from Formatage import Formatage from generator_python import PythonGenerator #from Editeur.widgets import showerror def entryPoint(): """ Retourne les informations nécessaires pour le chargeur de plugins Ces informations sont retournées dans un dictionnaire """ return { # Le nom du plugin 'name' : 'vers3DSalome', # La factory pour créer une instance du plugin 'factory' : vers3DSalomeGenerator, } class vers3DSalomeGenerator(PythonGenerator): """ Ce generateur parcourt un objet AFFE-CARA_ELEM et produit un fichier au format texte contenant les instructions idl pour PAL """ def __init__(self,cr=None): self.list_commandes=[]; self.jdc=None self.node=None self.clefs=None self.liste_motetat = ("AFFE_CARA_ELEM", "ORIG_AXE", "AXE" , "BARRE", "CABLE", "CARA", "COQUE", "EPAIS", "EXCENTREMENT", "GROUP_MA", "ORIENTATION", "POUTRE", "SECTION", "VALE", "VARI_SECT", "GRILLE", "ANGL_REP", "VECTEUR", "b_constant", "b_homothetique", "b_rectangle", "b_affine", "b_cercle" ) self.dict_deb_com={"POUTRE":"VisuPoutre", "CABLE" : "VisuCable", "COQUE" : "VisuCoque", "GRILLE" : "VisuGrille", "ORIENTATION" : "Orientation", "BARRE" : "VisuBarre"} self.dict_suite_com={"RECTANGLE":"Rectangle","GENERALE":"Generale", "CERCLE":"Cercle"} self.dict_traduit={"VARI_SECT":"extrusion","EXCENTREMENT":"Excentre","EPAIS":"Epais","VECTEUR":"Vecteur"} self.init_ligne() def init_jdc(self,jdc) : self.jdc=jdc def init_ligne (self) : self.boolGpMa = 0 self.commande = "" self.dict_attributs = {} def gener(self,node,config=None): """ """ self.node=node self.list_commandes=[]; self.generator(self.node.object) #print self.list_commandes return self.list_commandes def generator(self,obj): if (obj.nom in self.liste_motetat) and (self.calcule_ouinon(obj)): PythonGenerator.generator(self,obj) """ f1=PythonGenerator.generator(self,obj) else : return "" """ def calcule_ouinon(self,obj): ouinon=1 for l in obj.get_genealogie() : if not l in self.liste_motetat : ouinon=0 break return ouinon def generETAPE(self,obj): """ """ if obj.isvalid() == 0 : #showerror("Element non valide","Salome ne sait pas traiter les elements non valides") return for v in obj.mc_liste: liste=self.generator(v) def generMCSIMP(self,obj) : """ """ if obj.nom in dir(self) : suite = self.__class__.__dict__[obj.nom](self,obj) else : clef=self.dict_traduit[obj.nom] # Traitement des parametres try : self.dict_attributs[clef]=obj.val.eval() except : self.dict_attributs[clef]=obj.val def generMCFACT(self,obj): """ Convertit un objet MCFACT en une liste de chaines de caractères à la syntaxe python """ self.init_ligne() self.commande=self.dict_deb_com[obj.nom] for v in obj.mc_liste: self.generator(v) if self.boolGpMa == 1: self.list_commandes.append((self.commande,self.dict_attributs)) else : #showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element") print ("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element") pass def generMCList(self,obj): """ """ for mcfact in obj.data: self.generator(mcfact) def generMCBLOC(self,obj): """ """ for v in obj.mc_liste: self.generator(v) def GROUP_MA(self,obj): self.boolGpMa = 1 self.dict_attributs["Group_Maille"]=obj.val def SECTION(self,obj): assert (self.commande != "" ) if self.commande == "VisuCable" : self.dict_attributs["R"]= math.sqrt(obj.val/math.pi).eval() elif (self.commande !="VisuGrille") : self.commande=self.commande+self.dict_suite_com[obj.valeur] def CARA(self,obj) : self.clefs=obj.val if type(self.clefs) == types.StringType : self.clefs=(obj.val,) def VALE(self,obj) : atraiter=obj.val if len(self.clefs) > 1 : assert (len(atraiter) == len(self.clefs)) else : atraiter=(atraiter,) for k in range(len(atraiter)) : clef=self.clefs[k] val =atraiter[k] if isinstance(val, (types.TupleType, types.ListType)) and len(val) == 1: val = val[0] if isinstance (val, Extensions.parametre.PARAMETRE): val=val.valeur print val.__class__ context={} if type(val) == type("aaa") : for p in self.jdc.params: context[p.nom]=eval(p.val,self.jdc.const_context, context) print context[p.nom] res=eval(val,self.jdc.const_context, context) val=res self.dict_attributs[clef]=val def ANGL_REP(self,obj) : assert (len(obj.val) == 2) alpha,beta=obj.val self.dict_attributs["angleAlpha"]=alpha self.dict_attributs["angleBeta"]=beta def ORIG_AXE(self,obj) : assert (len(obj.val) == 3) alpha,beta,gamma=obj.val self.dict_attributs["origAxeX"]=alpha self.dict_attributs["origAxeY"]=beta self.dict_attributs["origAxeZ"]=gamma def AXE(self,obj) : assert (len(obj.val) == 3) alpha,beta,gamma=obj.val self.dict_attributs["axeX"]=alpha self.dict_attributs["axeY"]=beta self.dict_attributs["axeZ"]=gamma eficas-6.4.0/Extensions/0000755004705000470430000000000011670106364015374 5ustar courtoisasterdeveficas-6.4.0/Extensions/commentaire.py0000644004705000470430000001234110251014122020232 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe COMMENTAIRE qui sert dans EFICAS pour gérer les commentaires dans un JDC """ from Noyau.N_CR import CR from Noyau import N_OBJECT from Ihm import I_OBJECT class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : """ Cette classe permet de créer des objets de type COMMENTAIRE """ nature = 'COMMENTAIRE' idracine = '_comm' def __init__(self,valeur,parent=None): # parent est un objet de type OBJECT (ETAPE ou MC ou JDC...) self.valeur=valeur if not parent : self.jdc = self.parent = CONTEXT.get_current_step() else: self.jdc = self.parent = parent # La classe COMMENTAIRE n'a pas de définition. On utilise self # pour complétude self.definition=self self.nom='' self.niveau = self.parent.niveau self.actif=1 self.state="unchanged" self.register() def register(self): """ Enregistre le commentaire dans la liste des étapes de son parent lorsque celui-ci est un JDC """ if self.parent.nature == 'JDC': # le commentaire est entre deux commandes: # il faut l'enregistrer dans la liste des étapes self.parent.register(self) def isvalid(self): """ Retourne 1 si self est valide, 0 sinon Retourne toujours 1 car un commentaire est toujours valide """ return 1 def isoblig(self): """ Indique si self est obligatoire ou non : retourne toujours 0 """ return 0 def isrepetable(self): """ Indique si self est répétable ou non : retourne toujours 1 """ return 1 def active(self): """ Rend l'etape courante active """ self.actif = 1 def inactive(self): """ Rend l'etape courante inactive NB : un commentaire est toujours actif ! """ self.actif = 1 def isactif(self): """ Booléenne qui retourne 1 si self est valide, 0 sinon """ return self.actif def supprime(self): """ Méthode qui supprime toutes les boucles de références afin que l'objet puisse être correctement détruit par le garbage collector """ self.parent=None self.jdc=None self.definition = None self.niveau = None def liste_mc_presents(self): return [] def get_valeur(self) : """ Retourne la valeur de self, cad le contenu du commentaire """ try : return self.valeur except: return None def set_valeur(self,new_valeur): """ Remplace la valeur de self(si elle existe) par new_valeur """ self.valeur = new_valeur self.init_modif() def init_modif(self): self.state = 'modified' if self.parent: self.parent.init_modif() def supprime_sdprods(self): pass def update_context(self,d): """ Update le dictionnaire d avec les concepts ou objets produits par self --> ne fait rien pour un commentaire """ pass def report(self): """ Génère l'objet rapport (classe CR) """ self.cr=CR() if not self.isvalid(): self.cr.warn("Objet commentaire non valorisé") return self.cr def ident(self): """ Retourne le nom interne associé à self Ce nom n'est jamais vu par l'utilisateur dans EFICAS """ return self.nom def delete_concept(self,sd): pass def replace_concept (self,old_sd,sd): pass def verif_condition_bloc(self): """ Evalue les conditions de tous les blocs fils possibles (en fonction du catalogue donc de la définition) de self et retourne deux listes : - la première contient les noms des blocs à rajouter - la seconde contient les noms des blocs à supprimer """ return [],[] def verif_condition_regles(self,liste_presents): """ Retourne la liste des mots-clés à rajouter pour satisfaire les règles en fonction de la liste des mots-clés présents """ return [] def get_sdprods(self,nom_sd): """ Retourne les concepts produits par la commande """ return None def verif_existence_sd(self): pass def get_fr(self): """ Retourne le commentaire lui meme tronque a la 1ere ligne """ return self.valeur.split('\n',1)[0] def control_sdprods(self,d): """sans objet """ pass def close(self): pass def reset_context(self): pass eficas-6.4.0/Extensions/mcnuplet.py0000644004705000470430000001415310634532644017604 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ """ # Modules Python import string # Modules Eficas from Noyau import N_MCCOMPO from Validation import V_MCCOMPO class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO): """ """ nature = "MCNUPLET" txt_nat="Nuplet : " def __init__(self,val,definition,nom,parent): # val contient la valeur initial du nuplet self.val = val if val == None: self.val=() self.definition=definition self.nom=nom self.parent = parent # GETVAL affecte la valeur par defaut si necessaire self.valeur=self.GETVAL(self.val) if parent : self.jdc = self.parent.jdc self.niveau = self.parent.niveau self.etape = self.parent.etape else: # Le mot cle a été créé sans parent self.jdc = None self.niveau = None self.etape = None self.state = 'undetermined' self.actif=1 self.mc_liste=self.build_mc() def build_mc(self): """ Construit la liste des sous-entites de MCNUPLET à partir de la liste des arguments (valeur) """ args = self.valeur if args ==None : args =() mc_liste=[] # on crée les sous entites du NUPLET a partir des valeurs initiales k=0 for v in self.definition.entites: if k < len(args): val=args[k] else: val=None objet=v(val=val,nom=`k`,parent=self) if hasattr(objet.definition,'position'): if objet.definition.position == 'global' : self.append_mc_global(objet) #XXX et global_jdc ?? mc_liste.append(objet) k=k+1 # Un nuplet n'a pas de mots inconnus self.reste_val={} return mc_liste def isvalid(self,cr='non'): """ Indique si self (MCNUPLET) est un objet valide ou non : retourne 1 si oui, 0 sinon """ if self.state == 'unchanged' : return self.valid else: valid = 1 if hasattr(self,'valid'): old_valid = self.valid else: old_valid = None for child in self.mc_liste : if not child.isvalid(): valid = 0 break if len(self.mc_liste) != len(self.definition.entites): valid=0 if cr == 'oui' : self.cr.fatal(string.join(("Nuplet : ",self.nom," Longueur incorrecte"))) self.valid = valid self.state = 'unchanged' if old_valid: if old_valid != self.valid : self.init_modif_up() return self.valid def __getitem__(self,key): """ Retourne le key ème élément du nuplet """ # Un nuplet est toujours une liste de mots cles simples # On retourne donc la valeur return self.mc_liste[key].valeur def __str__(self): """ Retourne une représentation du nuplet sous forme de chaine de caractères """ s='(' for e in self.mc_liste: s=s + str(e.valeur) + ',' return s + ')' def __repr__(self): """ Retourne une représentation du nuplet sous forme de chaine de caractères """ s='(' for e in self.mc_liste: s=s + str(e.valeur) + ',' return s + ')' def get_regles(self): """ Retourne la liste des règles attachées au nuplet """ return [] def verif_condition_bloc(self): """ Vérifie s'il y a des blocs sous le nuplet et retourne les blocs en question """ # Il n y a pas de BLOCs sous un NUPLET return [],[] def isrepetable(self): """ Indique si le NUPLET peut etre répété. Retourne 1 si c'est le cas. Retourne 0 dans le cas contraire. L'information est donnée par le catalogue, cad la définition de self """ if self.definition.min != self.definition.max : return 1 else : return 0 def makeobjet(self): return self.definition(val = None, nom = self.nom,parent = self.parent) def get_valeur(self): """ Cette méthode doit retourner la valeur de l'objet. Elle est utilisée par cree_dict_valeurs pour construire un dictionnaire contenant les mots clés d'une étape. Dans le cas d'un nuplet, on retournera comme valeur une liste des valeurs des mots clé simples contenus. """ l=[] for v in self.mc_liste: l.append(v.valeur) return l def get_val(self): """ Une autre méthode qui retourne une "autre" valeur du mot clé facteur. Elle est utilisée par la méthode get_mocle """ l=[] for v in self.mc_liste: l.append(v.valeur) return l def isoblig(self): return self.definition.statut=='o' def get_fr(self): """ Retourne le texte d'aide dans la langue choisie """ try : return getattr(self.definition,prefs.lang) except: return '' def cree_dict_valeurs(self,liste=[],condition=0): dico={} return dico def update_condition_bloc(self): """ Realise l'update des blocs conditionnels fils de self et propage au parent (rien a faire pour nuplet) """ eficas-6.4.0/Extensions/interpreteur_formule.py0000644004705000470430000005564010446031313022230 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== import string,re,sys,exceptions,types from Noyau.N_CR import CR def group(*choices): return '(' + string.join(choices, '|') + ')' def any(*choices): return apply(group, choices) + '*' def maybe(*choices): return apply(group, choices) + '?' Intnumber = r'[1-9]\d*' Exponent = r'[eEdD][-+]?\d+' Pointfloat = group(r'\d+\.\d*', r'\.\d+') + maybe(Exponent) Expfloat = r'[1-9]\d*' + Exponent Floatnumber = group(Pointfloat, Expfloat) pat_number = re.compile(r'^([+-]?)([0-9]+)(\.\d*)?(.*)') pat_number_complet = re.compile(r'^([+-]?)([0-9]+)(\.\d*)?([eEdD][+-]?\d+)(.*)') pat_constante = re.compile(r'^([+-]?)([a-zA-Z][a-zA-Z_0-9]*\s*)(.*)') def cmp_function(arg1,arg2): """ Fonction de comparaison permettant de classer les listes de fonctions unaires et binaires selon la longueur de leurs arguments On classe les arguments les plus longs en premier """ if len(arg1) > len(arg2): return -1 elif len(arg1) == len(arg2): return 0 else: return 1 class InterpreteurException(exceptions.Exception): """ Classe servant à définir les exceptions levées par l'interpréteur de formule """ def __init__(self,args=None): self.args = args def __str__(self): return self.args class Interpreteur_Formule: """ Cette classe sert à construire un interpréteur de formules Aster """ l_fonctions_binaires = ['+','-','*','/','**','=','MOD','MIN','MAX','ATAN2'] l_fonctions_unaires = ['+','-','INT','REAL','AIMAG','ABS','SQRT','EXP','LOG', 'LOG10','SIN','COS','TAN','ASIN','ACOS','ATAN','SINH', 'COSH','TANH','HEAVYSID'] l_constantes = ['PI','RD_RG','DG_RD'] def __init__(self,formule=None,constantes=[],fonctions=[],parent=None): """ Constructeur d'interpréteurs de formule Aster - formule = tuple (nom,type,arguments,corps) - constantes = liste des noms de constantes externes - fonctions_unaires = dictionnaire {nom_fonction externe : nb arguments de cette fonction} """ self.new_constantes = constantes self.new_fonctions_unaires = fonctions self.cr = CR() self.l_operateurs = [] self.parent = parent self.l_children = [] if formule : self.set_formule(formule) if self.parent : self.parent.enregistre(self) def set_formule(self,formule): """ Stocke formule (tuple) dans l'attribut t_formule Méthode externe """ if type(formule) != types.TupleType: raise InterpreteurException,"La formule passée à l'interpréteur doit être sous forme de tuple" self.t_formule = formule self.init_cr() self.modify_listes() self.ordonne_listes() def init_cr(self): """ Initialise le cr,cad valorise les chaînes debut et fin """ nom = self.t_formule[0] if nom : if nom[0] in ('+','-') : nom = nom[1:] self.cr.debut = "Début Fonction %s" %nom self.cr.fin = "Fin Fonction %s" %nom def str(self): """ Retourne une liste de chaînes de caractères représentant la formule """ l_txt = [] l_txt.append(self.t_formule[0]) for oper in self.l_operateurs: # oper est ici une liste décrivant oper txt = [] for elem in oper: txt.append(str(elem)) l_txt.append(txt) return l_txt def report(self,decalage=1): """ Retourne le rapport de FORMULE """ txt = self.cr.report() return txt def enregistre(self,fils): """ Enregistre un opérateur fils dans la liste des children """ self.l_children.append(fils) self.cr.add(fils.cr) def isvalid(self): """ Booléenne qui retourne 1 si la formule est valide, 0 sinon Méthode externe """ self.l_operateurs = [] self.cr.purge() # on vide le cr self.init_cr() # on initialise le cr self.interprete_formule() return self.cr.estvide() def interprete_formule(self): """ Réalise l'interprétation du corps de la formule """ texte = self.t_formule[3] if not texte : return if type(texte) != types.ListType: texte = [texte,] for text_arg in texte: text_arg = string.replace(text_arg,'\n','') # Enleve les espaces text_arg = string.replace(text_arg,' ','') try: self.l_operateurs.append(self.split_operateurs(text_arg)) except InterpreteurException,e: self.cr.fatal(str(e)) def modify_listes(self): """ Modifie la liste des constantes en lui ajoutant le nom des paramètres de la fonction à interpréter """ args = self.t_formule[2] # l'interpréteur de formule sert aussi à évaluer les EVAL # dans ce cas il n'y a pas d'arguments puisque pas de fonction ... if args : args = args[1:-1] # on enlève les parenthèses ouvrante et fermante l_args = string.split(args,',') for arg in l_args: typ,nom = string.split(arg,':') nom = string.strip(nom) self.l_constantes.append(nom) # on considère que les fonctions unaires de base sont toutes à un seul argument : l_f = [] self.d_fonctions_unaires = {} for fct in self.l_fonctions_unaires: self.d_fonctions_unaires[fct]=1 # on ajoute les constantes externes for cte in self.new_constantes: self.l_constantes.append(cte) # on ajoute les fonctions unaires externes au dictionnaire des fonctions unaires for new_fonc in self.new_fonctions_unaires: self.d_fonctions_unaires[new_fonc[0]] = self.get_nb_args(new_fonc) #self.d_fonctions_unaires.update(self.new_fonctions_unaires) self.l_fonctions_unaires = self.d_fonctions_unaires.keys() def ordonne_listes(self): """ Ordonne les listes de fonctions unaires et binaires """ self.l_fonctions_binaires.sort(cmp_function) self.l_fonctions_unaires.sort(cmp_function) self.l_constantes.sort(cmp_function) def split_operateurs(self,texte): """ Splite le texte passé en argument en opérateurs plus élémentaires. N'analyse pas l'intérieur des opérateurs (ne fait qu'une passe) """ l_operateurs = [] texte = string.strip(texte) # on recherche un nombre en début de texte try: oper,reste = self.cherche_nombre(texte) except InterpreteurException,e: raise InterpreteurException,str(e) if not oper : # on recherche une constante en début de texte try: oper,reste = self.cherche_constante(texte) except InterpreteurException,e: raise InterpreteurException,str(e) if not oper : # on recherche une expression entre parenthèses... try: oper,reste = self.cherche_expression_entre_parentheses(texte) except InterpreteurException,e: raise InterpreteurException,str(e) if not oper : # on recherche le début d'un opérateur unaire en début de texte try: oper,reste = self.cherche_operateur_unaire(texte) except InterpreteurException,e: raise InterpreteurException,str(e) if not oper : type_objet,nom_objet = self.get_type(texte) if type_objet == 'constante': raise InterpreteurException, "Constante %s inconnue" %nom_objet elif type_objet == 'fonction': raise InterpreteurException, "Fonction %s inconnue dans %s" %(nom_objet,texte) else: raise InterpreteurException, "Impossible d'interpréter : %s" %texte # on a trouvé un opérateur (nombre, constante ou unaire) # il faut encore vérifier que l'on est en fin de texte ou qu'il est bien suivi # d'un opérateur binaire l_operateurs.append(oper) if reste : texte = string.strip(reste) oper,reste = self.cherche_operateur_binaire(texte) if not oper : # on a un reste et pas d'opérateur binaire --> erreur raise InterpreteurException,"L'opérateur %s doit être suivi d'un opérateur binaire" %l_operateurs[-1] else: # on a bien trouvé un opérateur binaire: l_operateurs.append(oper) # il faut recommencer l'analyse du reste par split_operateurs ... try: l_op = self.split_operateurs(reste) except InterpreteurException,e: raise InterpreteurException,str(e) l_operateurs.extend(l_op) return l_operateurs else: # on a fini d'analyser texte return l_operateurs def cherche_nombre(self,texte): """ Cherche un nombre en début de texte Retourne ce nombre et le reste ou None et le texte initial Peut lever une InterpreteurException dans le cas où le nombre n'est pas valide """ texte = string.strip(texte) m = pat_number_complet.match(texte) if m: # on a trouvé un nombre avec exposant l_groups = m.groups() sgn = l_groups[0] nb = l_groups[1] if l_groups[2]: nb = nb+l_groups[2] if l_groups[3]: nb = nb+l_groups[3] nombre = sgn+nb return nombre,l_groups[4] else: m = pat_number.match(texte) if m : # on a trouvé un nombre sans exposant l_groups = m.groups() sgn = l_groups[0] nb = l_groups[1] if l_groups[2]: nb = nb+l_groups[2] nombre = sgn+nb # il faut vérifier si ce nombre n'est pas suivi d'un exposant incomplet ... reste = string.strip(l_groups[3]) if reste == '': return nombre,l_groups[3] if reste[0] in ('e','E','d','D') : raise InterpreteurException,"La syntaxe de l'exposant de %s est erronée " %nb else: return nombre,l_groups[3] else: # on n'a pas trouvé de nombre return None,texte def cherche_constante_old(self,texte): """ Recherche une constante en début de texte parmi la liste des constantes. Retourne le texte représentant la constante et le reste du texte ou Retourne None,texte si aucune constante trouvée """ txt = None texte = string.strip(texte) for cte in self.l_constantes: index = string.find(texte,cte) #if index == 0 : print 'on a trouvé %s dans %s en %d' %(cte,texte,index) if index == 0 : txt = cte zz,reste = string.split(texte,cte,1) break if txt : return txt,reste else: # aucune constante trouvée return None,texte def cherche_constante(self,texte): """ Recherche une constante en début de texte parmi la liste des constantes. Retourne le texte représentant la constante et le reste du texte ou Retourne None,texte si aucune constante trouvée """ txt = None texte = string.strip(texte) m = pat_constante.match(texte) if m : # on a trouvé un identificateur en début de texte l_groups = m.groups() sgn = l_groups[0] identificateur = string.strip(l_groups[1]) reste = l_groups[2] # il faut vérifier qu'il ne s'agit pas d'un appel à une fonction if reste : if reste[0] == '(' : # --> appel de fonction return None,texte # il faut encore vérifier qu'elle est bien dans la liste des constantes... if identificateur not in self.l_constantes : raise InterpreteurException,"La constante %s est inconnue dans %s" %(identificateur,texte) else: return sgn+identificateur,reste else: # aucune constante trouvée return None,texte def cherche_args(self,texte): """ Cherche au début de texte une liste d'arguments entre parenthèses """ if texte[0]!='(': return None,texte else: n=0 cpt=1 while cpt != 0: n=n+1 if n>= len(texte): # on a atteint la fin de texte sans avoir trouvé la parenthèse fermante --> erreur raise InterpreteurException,"Manque parenthèse fermante dans %s" %texte if texte[n] == '(': cpt=cpt+1 elif texte[n]==')': cpt=cpt-1 if (n+1 < len(texte)): return texte[0:n+1],texte[n+1:] else: # on a fini d'analyser le texte : reste = None return texte,None def cherche_operateur_unaire_old(self,texte): """ Cherche dans texte un operateur unaire """ txt = None texte = string.strip(texte) for oper in self.l_fonctions_unaires: index = string.find(texte,oper) if index == 0 : txt = oper zz,reste = string.split(texte,oper,1) break if txt : #print 'on a trouvé :',txt operateur = txt texte = reste try: args,reste = self.cherche_args(texte) except InterpreteurException,e: raise InterpreteurException,str(e) if not args : # opérateur unaire sans arguments raise InterpreteurException,'opérateur unaire %s sans arguments' %operateur else: #operateur = operateur+args args = self.split_args(txt,args,self.d_fonctions_unaires[operateur]) formule_operateur = (txt,'',self.t_formule[2],args) operateur = Interpreteur_Formule(formule = formule_operateur, constantes = self.new_constantes, fonctions_unaires = self.new_fonctions_unaires, parent = self) operateur.interprete_formule() texte = reste return operateur,reste else: # aucun opérateur unaire trouvé return None,texte def cherche_operateur_unaire(self,texte): """ Cherche dans texte un operateur unaire """ txt = None texte = string.strip(texte) m = pat_constante.match(texte) if m : # on a trouvé un identificateur en début de texte # il faut encore vérifier que l'on a bien à faire à un appel de fonction ... l_groups = m.groups() sgn = l_groups[0] identificateur = string.strip(l_groups[1]) reste = l_groups[2] try: args,reste = self.cherche_args(reste) except InterpreteurException,e: raise InterpreteurException,str(e) if not args : # opérateur unaire sans arguments # en principe on ne doit jamais être dans ce cas car il est déjà trappé par cherche_constante ... raise InterpreteurException,'Fonction %s sans arguments !' %identificateur else: # il faut encore vérifier que l'on a bien à faire à une fonction connue if identificateur not in self.l_fonctions_unaires: raise InterpreteurException,'Fonction %s inconnue dans %s !' %(identificateur,texte) args = self.split_args(identificateur,args,self.d_fonctions_unaires[identificateur]) formule_operateur = (sgn+identificateur,'',self.t_formule[2],args) operateur = Interpreteur_Formule(formule = formule_operateur, constantes = self.new_constantes, fonctions = self.new_fonctions_unaires, parent = self) operateur.interprete_formule() texte = reste return operateur,reste elif texte[0] == '-': # Il faut pouvoir trapper les expressions du type exp(-(x+1)) ... try : args,reste = self.cherche_args(texte[1:]) except InterpreteurException,e: raise InterpreteurException,str(e) if not args : # Il ne s'agit pas de '-' comme opérateur unaire --> on retourne None return None,texte else: identificateur = '-' args = self.split_args(identificateur,args,self.d_fonctions_unaires[identificateur]) formule_operateur = (identificateur,'',self.t_formule[2],args) operateur = Interpreteur_Formule(formule = formule_operateur, constantes = self.new_constantes, fonctions = self.new_fonctions_unaires, parent = self) operateur.interprete_formule() texte = reste return operateur,reste else: return None,texte def cherche_operateur_binaire(self,texte): """ Cherche dans texte un operateur unaire """ txt = None texte = string.strip(texte) for oper in self.l_fonctions_binaires: index = string.find(texte,oper) #if index != -1 : print 'on a trouvé %s dans %s en %d' %(oper,texte,index) if index == 0 : txt = oper zz,reste = string.split(texte,oper,1) break if txt : return txt,reste else: # aucun opérateur unaire trouvé return None,texte def cherche_expression_entre_parentheses(self,texte): """ Cherche en début de texte une expression entre parentheses """ args,reste = self.cherche_args(string.strip(texte)) if not args : return None,texte else: # on a trouvé une expression entre parenthèses en début de texte # --> on retourne un objet Interpreteur_Formule formule_operateur = ('','',self.t_formule[2],args[1:-1]) operateur = Interpreteur_Formule(formule = formule_operateur, constantes = self.new_constantes, fonctions = self.new_fonctions_unaires, parent = self) operateur.interprete_formule() texte = reste return operateur,reste def split_args(self,nom_fonction,args,nb_args): """ Tente de partager args en nb_args éléments Retourne une liste de chaînes de caractères (liste de longueur nb_args) """ args = args[1:-1] # on enlève les parenthèses ouvrante et fermante if nb_args == 1 : return args l_args = string.split(args,',') if len(l_args) != nb_args: raise InterpreteurException,"La fonction %s requiert %d arguments : %d fourni(s)" %(nom_fonction,nb_args,len(l_args)) else: return l_args def get_type(self,texte): """ Retourne le type de l'objet défini dans texte, à savoir: - constante - fonction - unknown et son nom """ texte = string.strip(texte) if '(' not in texte: return 'constante',texte if texte[-1] != ')': return 'unknown','' nom_oper,args = string.split(texte,'(',1) return 'fonction',nom_oper def get_nb_args(self,formule): """ Retourne le nombre d'arguments dans la définition de formule (sous forme de tuple) """ args = formule[2][1:-1] # on enlève les parenthèses ouvrante et fermante l_args = string.split(args,',') return len(l_args) if __name__ == '__main__': constantes = ['FREQ3','AMOR1'] fonctions_unaires=[('ACC','REEL','(REEL:x)','''bidon'''),] f1 = ('f1','REEL','(REEL:x)','''SIN(x)+3*x''') f2 = ('f2','REEL','(REEL:x)','''ATAN(x+3)+3*x''') f3 = ('f3','REEL','(REEL:INST)','''ACC(INST,FREQ3,AMOR1)''') f4 = ('f4','REEL','(REEL:INST)','''ACC(INST,FREQ2,AMOR1)''') f5 = ('f5','REEL','(REEL:INST,REEL:Y)','''ACC(INST,FREQ3,AMOR1)+Y*INST''') f6 = ('f6','REEL','(REEL:x)','''(x+ 3)/ 35.698''') f7 = ('f7','REEL','(REEL:x)','''(x+ 3)/ 35.698E-10''') f8 = ('f8','REEL','(REEL:x)','''(x+ 3)/ 35.698E''') f9 = ('f9','REEL','(REEL:INSTA,REEl:INSTB)','''2.*SIN((PI/4)+((INSTA-INSTB)/2.))* COS((PI/4)-((INSTA+INSTB)/2.))''') f10 = ('f10','REEL','(REEL:X)','''EXP(-(X+1))''') for formule in (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10): i = Interpreteur_Formule(formule = formule, constantes = constantes, fonctions = fonctions_unaires) txt = i.str() print '\nformule %s = %s' %(str(formule),txt) if i.isvalid() : print "\n\tPas d'erreur !" else: print i.report() eficas-6.4.0/Extensions/commande_comm.py0000644004705000470430000002031310446031313020532 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== import os,traceback,string from Noyau.N_CR import CR from Noyau.N_Exception import AsException from Noyau import N_OBJECT from Ihm import I_OBJECT class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : """ Cette classe sert à définir les objets de type Commande commentarisée """ nature = "COMMANDE_COMMENTARISEE" idracine='_comm' def __init__(self,texte='',parent=None,reg='oui'): self.valeur = texte if not parent : self.jdc = self.parent = CONTEXT.get_current_step() else: self.jdc = self.parent = parent if hasattr(self.parent,'etape'): self.etape = self.parent.etape else : self.etape = None self.definition=self self.nom = '' self.niveau = self.parent.niveau self.actif=1 self.state="unchanged" #self.appel = N_utils.callee_where(niveau=2) if reg=='oui' : self.register() def isvalid(self): return 1 def report(self): """ Génère l'objet rapport (classe CR) """ self.cr=CR() if not self.isvalid(): self.cr.warn("Objet commande commentarisé invalide") return self.cr def copy(self): """ Retourne une copie de self cad un objet COMMANDE_COMM """ # XXX self.texte ne semble pas exister ??? return COMMANDE_COMM(self.texte,parent = self.parent,reg='non') def init_modif(self): self.state = 'modified' self.parent.init_modif() def set_valeur(self,new_valeur): """ Remplace la valeur de self(si elle existe) par new_valeur) """ self.valeur = new_valeur self.init_modif() def get_valeur(self) : """ Retourne la valeur de self, cad le texte de la commande commentarisée """ return self.valeur def register(self): """ Enregistre la commande commenatrisée dans la liste des étapes de son parent lorsque celui-ci est un JDC """ self.parent.register(self) def isoblig(self): """ Indique si self est obligatoire ou non : retourne toujours 0 """ return 0 def ident(self): """ Retourne le nom interne associé à self Ce nom n'est jamais vu par l'utilisateur dans EFICAS """ return self.nom def isrepetable(self): """ Indique si self est répétable ou non : retourne toujours 1 """ return 1 def get_attribut(self,nom_attribut) : """ Retourne l'attribut de nom nom_attribut de self (ou hérité) """ if hasattr(self,nom_attribut) : return getattr(self,nom_attribut) else : return None def get_fr(self): """ Retourne l'attribut fr de self.definition """ try : return getattr(self.definition,'fr') except: return '' def liste_mc_presents(self): return [] def supprime(self): """ Méthode qui supprime toutes les boucles de références afin que l'objet puisse être correctement détruit par le garbage collector """ self.parent = None self.etape = None self.jdc = None self.niveau = None self.definition = None self.valeur = None self.val = None self.appel = None def supprime_sdprods(self): pass def update_context(self,d): """ Update le dictionnaire d avec les concepts ou objets produits par self --> ne fait rien pour une commande en commentaire """ pass def delete_concept(self,sd): pass def replace_concept (self,old_sd,sd): pass def get_sdprods(self,nom_sd): return None def uncomment(self): """ Cette méthode a pour but de décommentariser l'objet courant, cad de retourner un tuple contenant : - l'objet CMD associé - le nom de la sdprod éventuellement produite (sinon None) """ # on récupère le contexte avant la commande commentarisée context_ini = self.jdc.get_contexte_avant(self) try: # on essaie de créer un objet JDC... CONTEXT.unset_current_step() J=self.jdc.__class__(procedure=self.valeur, definition=self.jdc.definition, cata=self.jdc.cata, cata_ord_dico=self.jdc.cata_ordonne_dico, context_ini = context_ini, ) J.analyse() except Exception,e: traceback.print_exc() #self.jdc.set_context() raise AsException("Erreur",str(e)) if len(J.cr.crfatal)>0 : # des erreurs fatales ont été rencontrées #self.jdc.set_context() print 'erreurs fatales !!!' raise AsException("Erreurs fatales",string.join(J.cr.crfatal)) if not J.etapes : # des erreurs ont été rencontrées raise AsException("Impossible reconstruire commande\n",str(J.cr)) #self.jdc.set_context() new_etape = J.etapes[0] if new_etape.sd : nom_sd = new_etape.sd.nom else: nom_sd = None #new_etape=new_etape.copy() #print "uncomment",new_etape.sd pos=self.parent.etapes.index(self) # L'ordre d'appel est important : suppentite fait le menage des concepts dans les etapes suivantes self.parent.addentite(new_etape,pos) self.parent.suppentite(self) return new_etape,nom_sd def active(self): """ Rend l'etape courante active """ self.actif = 1 def inactive(self): """ Rend l'etape courante inactive """ self.actif = 0 def isactif(self): """ Booléenne qui retourne 1 si self est valide, 0 sinon """ return self.actif def verif_condition_bloc(self): """ Evalue les conditions de tous les blocs fils possibles (en fonction du catalogue donc de la définition) de self et retourne deux listes : - la première contient les noms des blocs à rajouter - la seconde contient les noms des blocs à supprimer """ return [],[] def verif_condition_regles(self,liste_presents): """ Retourne la liste des mots-clés à rajouter pour satisfaire les règles en fonction de la liste des mots-clés présents """ return [] def reparent(self,parent): """ Cette methode sert a reinitialiser la parente de l'objet """ self.parent=parent self.jdc=parent.get_jdc_root() self.etape=self def verif_existence_sd(self): """ Vérifie que les structures de données utilisées dans self existent bien dans le contexte avant étape, sinon enlève la référence à ces concepts --> sans objet pour les commandes commentarisées """ pass def control_sdprods(self,d): """sans objet pour les commandes commentarisées""" pass def close(self): pass def reset_context(self): pass eficas-6.4.0/Extensions/parametre.py0000644004705000470430000002534711655731137017746 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe PARAMETRE qui sert à définir des objets paramètres qui sont compréhensibles et donc affichables par EFICAS. Ces objets sont créés à partir de la modification du fichier de commandes de l'utilisateur par le parseur de fichiers Python """ # import de modules Python import string,types from math import * import traceback # import de modules Eficas from Noyau.N_CR import CR from Noyau import N_OBJECT from Ihm import I_OBJECT from param2 import * from Ihm import CONNECTOR class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) : """ Cette classe permet de créer des objets de type PARAMETRE cad des affectations directes dans le jeu de commandes (ex: a=10.) qui sont interprétées par le parseur de fichiers Python. Les objets ainsi créés constituent des paramètres pour le jdc """ nature = 'PARAMETRE' idracine = 'param' def __init__(self,nom,valeur=None): self.nom = nom # La classe PARAMETRE n'a pas de définition : on utilise self pour # complétude self.definition=self # parent ne peut être qu'un objet de type JDC self.jdc = self.parent = CONTEXT.get_current_step() self.niveau=self.parent.niveau self.actif=1 self.state='undetermined' self.register() self.dict_valeur=[] #self.valeur = self.interprete_valeur(valeur) #self.val=valeur self.valeur = valeur self.val=repr(valeur) def interprete_valeur(self,val): """ Essaie d'interpréter val (chaîne de caractères)comme : - un entier - un réel - une chaîne de caractères - une liste d'items d'un type qui précède Retourne la valeur interprétée """ #if not val : return None valeur = None if type(val) == types.ListType: # Un premier traitement a ete fait lors de la saisie # permet de tester les parametres qui sont des listes l_new_val = [] for v in val : try : valeur=eval(str(v)) l_new_val.append(v) except : return None return l_new_val if type(val) == types.StringType: # on tente l'evaluation dans un contexte fourni par le parent s'il existe if self.parent: valeur=self.parent.eval_in_context(val,self) else: try : valeur = eval(val) except: #traceback.print_exc() pass #PN je n ose pas modifier je rajoute # refus des listes heterogenes : ne dvrait pas etre la if valeur != None : if type(valeur) == types.TupleType: l_new_val = [] typ = None for v in valeur : if not typ: typ = type(v) else: if type(v) != typ : # la liste est hétérogène --> on refuse d'interpréter # self comme une liste # on retourne la string initiale print 'liste hétérogène ',val return val l_new_val.append(v) return tuple(l_new_val) if valeur != None : if type(valeur).__name__ == 'list': self.dict_valeur=[] for i in range(len(valeur)): self.dict_valeur.append(valeur[i]) return valeur # on retourne val comme une string car on n'a pas su l'interpréter return val def get_valeurs(self): valeurretour=[] if self.dict_valeur != []: for val in self.dict_valeur: valeurretour.append(val) else: valeurretour.append(self.valeur) return valeurretour def set_valeur(self,new_valeur): """ Remplace la valeur de self par new_valeur interprétée """ self.valeur = self.interprete_valeur(new_valeur) self.parent.update_concept_after_etape(self,self) self.init_modif() def set_nom(self,new_nom): """ Change le nom du parametre """ self.init_modif() self.nom=new_nom self.fin_modif() def init_modif(self): """ Méthode qui déclare l'objet courant comme modifié et propage cet état modifié à ses ascendants """ self.state = 'modified' if self.parent: self.parent.init_modif() def get_jdc_root(self): if self.parent: return self.parent.get_jdc_root() else: return self def register(self): """ Enregistre le paramètre dans la liste des étapes de son parent (JDC) """ self.parent.register_parametre(self) self.parent.register(self) def isvalid(self,cr='non'): """ Retourne 1 si self est valide, 0 sinon Un paramètre est considéré comme valide si : - il a un nom - il a une valeur """ if self.nom == '' : if cr == 'oui': self.cr.fatal("Pas de nom donné au paramètre ") return 0 else: if self.valeur == None : if cr == 'oui' : self.cr.fatal("Le paramètre %s ne peut valoir None" % self.nom) return 0 return 1 def isoblig(self): """ Indique si self est obligatoire ou non : retourne toujours 0 """ return 0 def isrepetable(self): """ Indique si self est répétable ou non : retourne toujours 1 """ return 1 def liste_mc_presents(self): return [] def supprime(self): """ Méthode qui supprime toutes les boucles de références afin que l'objet puisse être correctement détruit par le garbage collector """ self.parent = None self.jdc = None self.definition=None self.niveau=None def active(self): """ Rend l'etape courante active. Il faut ajouter le paramètre au contexte global du JDC """ self.actif = 1 try: self.jdc.append_param(self) except: pass CONNECTOR.Emit(self,"add",None) CONNECTOR.Emit(self,"valid") def inactive(self): """ Rend l'etape courante inactive Il faut supprimer le paramètre du contexte global du JDC """ self.actif = 0 self.jdc.del_param(self) self.jdc.delete_concept_after_etape(self,self) CONNECTOR.Emit(self,"supp",None) CONNECTOR.Emit(self,"valid") def isactif(self): """ Booléenne qui retourne 1 si self est actif, 0 sinon """ return self.actif def set_attribut(self,nom_attr,new_valeur): """ Remplace la valeur de self.nom_attr par new_valeur) """ if hasattr(self,nom_attr): setattr(self,nom_attr,new_valeur) self.init_modif() def supprime_sdprods(self): """ Il faut supprimer le paramètre qui a été entré dans la liste des paramètres du JDC """ self.jdc.delete_param(self) self.parent.delete_concept(self) def update_context(self,d): """ Update le dictionnaire d avec le paramètre que produit self """ d[self.nom]=self def __repr__(self): """ Donne un echo de self sous la forme nom = valeur """ if type(self.valeur) == types.StringType: if self.valeur.find('\n') == -1: # pas de retour chariot, on utilise repr return self.nom+' = '+ repr(self.valeur) elif self.valeur.find('"""') == -1: # retour chariot mais pas de triple ", on formatte return self.nom+' = """'+self.valeur+'"""' else: return self.nom+' = '+ repr(self.valeur) else: if type(self.valeur) == types.ListType : aRetourner=self.nom+' = [' for l in self.valeur : aRetourner=aRetourner+str(l) +"," aRetourner=aRetourner[0:-1]+']' return aRetourner return self.nom+' = '+ str(self.valeur) def __str__(self): """ Retourne le nom du paramètre comme représentation de self """ return self.nom def get_sdprods(self,nom_sd): """ Retourne les concepts produits par la commande """ return None def report(self): """ Génère l'objet rapport (classe CR) """ self.cr=CR() self.isvalid(cr='oui') return self.cr def ident(self): """ Retourne le nom interne associé à self Ce nom n'est jamais vu par l'utilisateur dans EFICAS """ return self.nom def delete_concept(self,sd): pass def replace_concept(self,old_sd,sd): pass def verif_condition_bloc(self): """ Evalue les conditions de tous les blocs fils possibles (en fonction du catalogue donc de la définition) de self et retourne deux listes : - la première contient les noms des blocs à rajouter - la seconde contient les noms des blocs à supprimer """ return [],[] def verif_condition_regles(self,liste_presents): """ Retourne la liste des mots-clés à rajouter pour satisfaire les règles en fonction de la liste des mots-clés présents """ return [] def verif_existence_sd(self): pass def control_sdprods(self,d): """sans objet """ pass def close(self): pass def reset_context(self): pass def eval(self): if isinstance(self.valeur,Formula): return self.valeur.eval() else: return self.valeur def __adapt__(self,validator): return validator.adapt(self.eval()) class COMBI_PARAMETRE : def __init__(self,chainevaleur,valeur): self.chainevaleur=chainevaleur self.valeur=valeur def __repr__(self): return self.chainevaleur def isvalid(self): if self.valeur and self.chainevaleur: return 1 class ITEM_PARAMETRE : def __init__(self,param_pere,item=None): self.param_pere = param_pere self.item = item def __repr__(self): return self.param_pere.nom+'['+str(self.item)+']' def isvalid(self): isvalid = 1 if self.item < 0: isvalid = 0 try: longueur= len(self.param_pere.dict_valeur) - 1 except: longueur=0 if self.item > longueur : isvalid= 0 return isvalid eficas-6.4.0/Extensions/__init__.py0000644004705000470430000000173610120346637017512 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== eficas-6.4.0/Extensions/jdc.py0000644004705000470430000000271410120346640016502 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe mixin qui porte les méthodes pour traiter les niveaux au sein d'un JDC """ import etape_niveau class JDC: def __init__(self): self.dict_niveaux={} self.build_niveaux() def build_niveaux(self): for niveau in self.definition.l_niveaux: etape_niv = etape_niveau.ETAPE_NIVEAU(niveau,self) self.etapes_niveaux.append(etape_niv) self.dict_niveaux[niveau.nom]=etape_niv self.dict_niveaux.update(etape_niv.dict_niveaux) eficas-6.4.0/Extensions/pluginloader.py0000644004705000470430000000462010120346640020425 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient le chargeur dynamique de plugins (emprunté à HappyDoc) """ import glob,os,sys,traceback import UserDict class PluginLoader(UserDict.UserDict): def __init__(self,module): UserDict.UserDict.__init__(self) self.plugin_dir=module.__path__[0] self.plugin_set_name=module.__name__ _module_list = glob.glob( os.path.join( self.plugin_dir, '%s*py' % self.plugin_set_name, ) ) _module_list.sort() for _module_name in _module_list: _module_name = os.path.basename(_module_name)[:-3] _import_name = '%s.%s' % ( self.plugin_set_name, _module_name ) try: _module = __import__( _import_name ) except: sys.stderr.write('\n--- Plugin Module Error ---\n') traceback.print_exc() sys.stderr.write('---------------------------\n\n') continue try: _module = getattr(_module, _module_name) except AttributeError: sys.stderr.write('ERROR: Could not retrieve %s\n' % _import_name) try: info = _module.entryPoint() except AttributeError: pass else: self.addEntryPoint(info) def addEntryPoint(self,infoDict): name=infoDict['name'] factory=infoDict['factory'] self[name]=factory eficas-6.4.0/Extensions/niveau.py0000644004705000470430000000334310120346640017230 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe NIVEAU qui sert à définir des groupes de commandes dans le catalogue """ class NIVEAU: def __init__(self,nom='',label='',niveaux=(),valide_vide=1,actif=1): self.nom = nom self.label = label self.statut='o' self.min = 1 self.max = 1 self.entites = [] self.l_noms_entites=[] self.valide_vide = valide_vide self.actif = actif self.d_niveaux = {} self.l_niveaux = niveaux for niveau in niveaux: self.d_niveaux[niveau.nom]=niveau self.d_niveaux.update(niveau.d_niveaux) def enregistre(self,commande): self.entites.append(commande) self.l_noms_entites.append(commande.nom) def get_liste_cmd(self): self.l_noms_entites.sort() return self.l_noms_entites eficas-6.4.0/Extensions/parametre_eval.py0000644004705000470430000001740510120346640020734 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe PARAMETRE_EVAL qui sert à définir des objets paramètres qui sont compréhensibles et donc affichables par EFICAS. Ces objets sont créés à partir de la modification du fichier de commandes de l'utilisateur par le parseur de fichiers Python """ # import de modules Python import string,types,re import traceback # import modules Eficas import interpreteur_formule from Noyau.N_CR import CR import parametre pattern_eval = re.compile(r'^(EVAL)([ \t\r\f\v]*)\(([\w\W]*)') class PARAMETRE_EVAL(parametre.PARAMETRE) : """ Cette classe permet de créer des objets de type PARAMETRE_EVAL cad des affectations directes évaluées dans le jeu de commandes (ex: a=EVAL('''10.*SQRT(25)''')) qui sont interprétées par le parseur de fichiers Python. Les objets ainsi créés constituent des paramètres évalués pour le jdc """ nature = 'PARAMETRE_EVAL' idracine='param_eval' def __init__(self,nom,valeur=None): # parent ne peut être qu'un objet de type JDC import Accas self.Accas_EVAL=Accas.EVAL self.valeur = self.interprete_valeur(valeur) self.val = valeur self.nom = nom self.jdc = self.parent = CONTEXT.get_current_step() self.definition=self self.niveau = self.parent.niveau self.actif=1 self.state='undetermined' # Ceci est-il indispensable ??? #self.appel = N_utils.callee_where(niveau=2) self.register() def __repr__(self): """ Donne un echo de self sous la forme nom = valeur """ return self.nom+' = '+ repr(self.valeur) def __str__(self): """ Retourne le nom du paramètre évalué comme représentation de self """ return self.nom def interprete_valeur(self,val): """ Essaie d'interpréter val (chaîne de caractères ou None) comme : une instance de Accas.EVAL Retourne la valeur interprétée """ if not val : return None d={} val = string.strip(val) if val[-1] == ';' : val = val[0:-1] d['EVAL'] = self.Accas_EVAL try: valeur = eval(val,{},d) return valeur except: traceback.print_exc() print "Le texte %s n'est pas celui d'un paramètre évalué" %val return None def set_valeur(self,new_valeur): """ Remplace la valeur de self par new_valeur interprétée. """ self.valeur = self.interprete_valeur(new_valeur) self.val = new_valeur self.init_modif() def get_nom(self) : """ Retourne le nom du paramètre """ return self.nom def get_valeur(self): """ Retourne la valeur de self, cad le texte de l'objet class_eval.EVAL """ if self.valeur : return self.valeur.valeur else: return '' def verif_eval(self,exp_eval=None,cr='non'): """ Cette méthode a pour but de vérifier si l'expression EVAL est syntaxiquement correcte. Retourne : - un booléen, qui vaut 1 si licite, 0 sinon - un message d'erreurs ('' si illicite) """ if not exp_eval: if self.valeur : exp_eval = self.valeur.valeur[3:-3] # on enlève les triples guillemets else: exp_eval = None if exp_eval : # on construit un interpréteur de formule formule=(self.nom,'',None,exp_eval) # on récupère la liste des constantes et des autres fonctions prédéfinies # et qui peuvent être utilisées dans le corps de la formule courante l_ctes,l_form = self.jdc.get_parametres_fonctions_avant_etape(self) # on crée un objet vérificateur verificateur = interpreteur_formule.Interpreteur_Formule(formule=formule, constantes = l_ctes, fonctions = l_form) if cr == 'oui' : if not verificateur.cr.estvide(): self.cr.fatal(verificateur.cr.get_mess_fatal()) return verificateur.isvalid(),string.join(verificateur.cr.crfatal) else: # pas d'expression EVAL --> self non valide if cr == 'oui' : self.cr.fatal("Le paramètre EVAL %s ne peut valoir None" % self.nom) return 0,"Le paramètre EVAL ne peut valoir None" def verif_nom(self,nom=None,cr='non'): """ Vérifie si le nom passé en argument (si aucun prend le nom courant) est un nom valide pour un paramètre EVAL Retourne : - un booléen, qui vaut 1 si nom licite, 0 sinon - un message d'erreurs ('' si illicite) """ if not nom : nom = self.nom if nom == "" : if cr == 'oui' : self.cr.fatal("Pas de nom donné au paramètre EVAL") return 0,"Pas de nom donné au paramètre EVAL" if len(nom) > 8 : if cr == 'oui' : self.cr.fatal("Un nom de paramètre ne peut dépasser 8 caractères") return 0,"Un nom de paramètre ne peut dépasser 8 caractères" sd = self.parent.get_sd_autour_etape(nom,self) if sd : if cr == 'oui' : self.cr.fatal("Un concept de nom %s existe déjà !" %nom) return 0,"Un concept de nom %s existe déjà !" %nom return 1,'' def verif_parametre_eval(self,param=None,cr='non'): """ Vérifie la validité du paramètre EVAL passé en argument. Ce nouveau paramètre est passé sous la forme d'un tuple : (nom,valeur) Si aucun tuple passé, prend les valeurs courantes de l'objet Retourne : - un booléen, qui vaut 1 si EVAL licite, 0 sinon - un message d'erreurs ('' si illicite) """ if not param : if self.valeur : param = (self.nom,self.valeur.valeur) else: param = (self.nom,None) test_nom,erreur_nom = self.verif_nom(param[0],cr=cr) test_eval,erreur_eval = self.verif_eval(param[1],cr=cr) # test global = produit des tests partiels test = test_nom*test_eval # message d'erreurs global = concaténation des messages partiels erreur = '' if not test : for mess in (erreur_nom,erreur_eval): erreur = erreur+(len(mess) > 0)*'\n'+mess return test,erreur def update(self,param): """ Méthode externe. Met à jour les champs nom, valeur de self par les nouvelles valeurs passées dans le tuple formule. On stocke les valeurs SANS vérifications. """ self.init_modif() self.set_nom(param[0]) self.set_valeur('EVAL("""'+param[1]+'""")') def isvalid(self,cr='non'): """ Retourne 1 si self est valide, 0 sinon Un paramètre évalué est considéré comme valide si : - il a un nom - il a une valeur qui est interprétable par l'interpréteur de FORMULEs """ resu,erreur= self.verif_parametre_eval(cr=cr) return resu def report(self): """ Génère l'objet rapport (classe CR) """ self.cr = CR() self.isvalid(cr='oui') return self.cr def set_nom(self,new_nom): """ Remplace le nom de self par new_nom """ self.nom = new_nom eficas-6.4.0/Extensions/etape_niveau.py0000644004705000470430000001024010120346640020400 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe ETAPE_NIVEAU qui sert à concrétiser les niveaux au sein d'un JDC """ import traceback from Noyau import N_OBJECT import prefs class ETAPE_NIVEAU(N_OBJECT.OBJECT): def __init__(self,niveau,parent): self.parent = parent self.jdc = self.parent.get_jdc_root() self.niveau = self self.definition = niveau self.etapes=[] self.etapes_niveaux = [] self.dict_niveaux={} self.editmode = 0 self.state="undetermined" self.build_niveaux() def build_niveaux(self): for niveau in self.definition.l_niveaux: etape_niveau = ETAPE_NIVEAU(niveau,self) self.etapes_niveaux.append(etape_niveau) self.dict_niveaux[niveau.nom]=etape_niveau def register(self,etape): """ Enregistre la commande étape : - si editmode = 0 : on est en mode relecture d'un fichier de commandes auquel cas on ajoute etape à la fin de la liste self.etapes - si editmode = 1 : on est en mode ajout d'étape depuis eficas auquel cas cette méthode ne fait rien, c'est addentité qui enregistre etape à la bonne place dans self.etapes """ if self.editmode : return self.etapes.append(etape) def unregister(self,etape): """ Desenregistre l'etape du niveau """ self.etapes.remove(etape) def ident(self): return self.definition.label def isactif(self): #print 'Niveau : ',self.definition.nom #print '\tactif =',self.definition.actif if self.definition.actif == 1 : return 1 else : # self.actif est une condition à évaluer dans un certain contexte ... d = self.cree_dict_valeurs() try: t=eval(self.definition.actif,d) return t except: traceback.print_exc() return 0 def cree_dict_valeurs(self): """ Retourne le dictionnaire des frères aînés de self composé des couples : {nom_frère isvalid()} """ d={} for niveau in self.parent.etapes_niveaux: if niveau is self : break d[niveau.definition.nom]=niveau.isvalid() return d def isvalid(self): """ Méthode booléenne qui retourne 0 si le niveau est invalide, 1 sinon """ if self.etapes_niveaux == []: if len(self.etapes) == 0: return self.definition.valide_vide else: for etape in self.etapes : if not etape.isvalid() : return 0 return 1 else: for etape_niveau in self.etapes_niveaux : if not etape_niveau.isvalid() : return 0 return 1 def accept(self,visitor): visitor.visitETAPE_NIVEAU(self) def addentite(self,name,pos_rel): self.editmode = 1 try : pos_abs=self.jdc.get_nb_etapes_avant(self)+pos_rel cmd = self.jdc.addentite(name,pos_abs) self.etapes.insert(pos_rel,cmd) self.editmode = 0 return cmd except: traceback.print_exc() self.editmode = 0 return None def suppentite(self,etape) : """ Classe ETAPE_NIVEAU Supprime une étape """ self.jdc.suppentite(etape) def get_fr(self): """ Retourne le texte d'aide dans la langue choisie """ try : return getattr(self.definition,prefs.lang) except: return '' eficas-6.4.0/Extensions/jdc_include.py0000644004705000470430000003512010540543226020207 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe JDC_INCLUDE qui sert a inclure dans un jeu de commandes une partie de jeu de commandes au moyen de la fonctionnalite INCLUDE ou INCLUDE_MATERIAU Quand l'utilisateur veut inclure un fichier il faut versifier que le jeu de commandes inclus est valide et compatible avec le contexte avant et apres l'insertion """ import string from Accas import JDC,ASSD,AsException,JDC_CATA from Ihm import CONNECTOR class JDC_POURSUITE(JDC): def __init__(self,definition=None,procedure=None,cata=None, cata_ord_dico=None,parent=None, nom='SansNom',appli=None,context_ini=None, jdc_pere=None,etape_include=None,prefix_include=None, recorded_units=None,old_recorded_units=None,**args): JDC.__init__(self, definition=definition, procedure=procedure, cata=cata, cata_ord_dico=cata_ord_dico, parent=parent, nom=nom, appli=appli, context_ini=context_ini, **args ) self.jdc_pere=jdc_pere self.etape_include=etape_include self.prefix_include=prefix_include if recorded_units is not None:self.recorded_units=recorded_units if old_recorded_units is not None:self.old_recorded_units=old_recorded_units def o_register(self,sd): return self.jdc_pere.o_register(sd) def NommerSdprod(self,sd,sdnom,restrict='non'): """ Nomme la SD apres avoir verifie que le nommage est possible : nom non utilise Ajoute un prefixe s'il est specifie (INCLUDE_MATERIAU) Si le nom est deja utilise, leve une exception Met le concept créé dans le contexe global g_context """ #print "NommerSdprod",sd,sdnom,restrict if self.prefix_include: if sdnom != self.prefix_include:sdnom=self.prefix_include+sdnom if sdnom != '' and sdnom[0] == '_': # Si le nom du concept commence par le caractere _ on lui attribue # un identificateur automatique comme dans JEVEUX (voir gcncon) # # nom commencant par __ : il s'agit de concepts qui seront detruits # nom commencant par _ : il s'agit de concepts intermediaires qui seront gardes # ATTENTION : il faut traiter différemment les concepts dont le nom # commence par _ mais qui sont des concepts nommés automatiquement par # une éventuelle sous macro. if sdnom[1] in string.digits: # Ce concept provient probablement d'une sous macro (cas improbable) #pas de renommage pass elif sdnom[1] == '_': #cas d'un concept à ne pas conserver apres execution de la commande sdnom=sd.id[2:] pass else: sdnom=sd.id[2:] pass o=self.sds_dict.get(sdnom,None) if isinstance(o,ASSD): raise AsException("Nom de concept deja defini : %s" % sdnom) # On pourrait verifier que le jdc_pere apres l'etape etape_include # ne contient pas deja un concept de ce nom #if self.jdc_pere.get_sd_apres_etape_avec_detruire(sdnom,etape=self.etape_include): # Il existe un concept apres self => impossible d'inserer # raise AsException("Nom de concept deja defini : %s" % sdnom) # On a choisi de ne pas faire ce test ici mais de le faire en bloc # si necessaire apres en appelant la methode verif_contexte # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja. # Ajoute a la creation (appel de reg_sd). self.sds_dict[sdnom]=sd sd.nom=sdnom # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC if restrict == 'non': self.g_context[sdnom]=sd def get_verif_contexte(self): #print "get_verif_contexte" j_context=self.get_contexte_avant(None) self.verif_contexte(j_context) return j_context def force_contexte(self,contexte): for nom_sd,sd in contexte.items(): if not isinstance(sd,ASSD):continue autre_sd= self.jdc_pere.get_sd_apres_etape_avec_detruire(nom_sd,sd, etape=self.etape_include) if autre_sd is None:continue if sd is not autre_sd: # Il existe un autre concept de meme nom produit par une etape apres self # on detruit ce concept pour pouvoir inserer les etapes du jdc_include if sd.etape: sd.etape.supprime_sdprod(sd) return contexte def verif_contexte(self,context): """ Cette methode verifie si le contexte passé en argument (context) peut etre inséré dans le jdc pere de l'include. Elle verifie que les concepts contenus dans ce contexte n'entrent pas en conflit avec les concepts produits dans le jdc pere apres l'include. Si le contexte ne peut pas etre inséré, la méthode leve une exception sinon elle retourne le contexte inchangé """ #print "verif_contexte" for nom_sd,sd in context.items(): if not isinstance(sd,ASSD):continue autre_sd= self.jdc_pere.get_sd_apres_etape_avec_detruire(nom_sd,sd, etape=self.etape_include) if autre_sd is None:continue if sd is not autre_sd: # Il existe un concept produit par une etape apres self # => impossible d'inserer raise Exception("Impossible d'inclure le fichier. Un concept de nom " + "%s existe déjà dans le jeu de commandes." % nom_sd) return context def get_liste_cmd(self): """ Retourne la liste des commandes du catalogue """ if self.jdc_pere is None: return JDC.get_liste_cmd(self) return self.jdc_pere.get_liste_cmd() def get_groups(self): """ Retourne la liste des commandes du catalogue par groupes """ if self.jdc_pere is None: return JDC.get_groups(self) return self.jdc_pere.get_groups() def init_modif(self): """ Met l'état de l'étape à : modifié Propage la modification au parent Attention : init_modif doit etre appelé avant de réaliser une modification La validité devra etre recalculée apres cette modification mais par un appel à fin_modif pour préserver l'état modified de tous les objets entre temps """ #print "jdc_include.init_modif",self,self.etape_include self.state = 'modified' if self.etape_include: self.etape_include.init_modif() def fin_modif(self): """ Méthode appelée une fois qu'une modification a été faite afin de déclencher d'éventuels traitements post-modification ex : INCLUDE et POURSUITE """ #print "jdc_include.fin_modif",self,self.etape_include CONNECTOR.Emit(self,"valid") if self.etape_include: self.etape_include.fin_modif() def supprime(self): """ On ne supprime rien directement pour un jdc auxiliaire d'include ou de poursuite Utiliser supprime_aux """ pass def supprime_aux(self): #print "supprime_aux",self JDC.supprime(self) self.jdc_pere=None self.etape_include=None # self.cata_ordonne_dico={} self.appli=None # self.context_ini={} # self.procedure=None def get_contexte_avant(self,etape): """ Retourne le dictionnaire des concepts connus avant etape On tient compte des concepts produits par le jdc pere en reactualisant le contexte initial context_ini On tient compte des commandes qui modifient le contexte comme DETRUIRE ou les macros Si etape == None, on retourne le contexte en fin de JDC """ #print "jdc_include.get_contexte_avant",etape,etape and etape.nom if self.etape_include: new_context=self.etape_include.parent.get_contexte_avant(self.etape_include).copy() self.context_ini=new_context d= JDC.get_contexte_avant(self,etape) return d def reset_context(self): #print "jdc_include.reset_context",self,self.nom if self.etape_include: self.etape_include.parent.reset_context() new_context=self.etape_include.parent.get_contexte_avant(self.etape_include).copy() self.context_ini=new_context JDC.reset_context(self) def get_sd_apres_etape(self,nom_sd,etape,avec='non'): """ Cette méthode retourne la SD de nom nom_sd qui est éventuellement définie apres etape Si avec vaut 'non' exclut etape de la recherche """ if self.etape_include: sd=self.etape_include.parent.get_sd_apres_etape(nom_sd,self.etape_include,'non') if sd:return sd return JDC.get_sd_apres_etape(self,nom_sd,etape,avec) def get_sd_apres_etape_avec_detruire(self,nom_sd,sd,etape,avec='non'): """ On veut savoir ce que devient le concept sd de nom nom_sd apres etape. Il peut etre detruit, remplacé ou conservé Cette méthode retourne la SD sd de nom nom_sd qui est éventuellement définie apres etape en tenant compte des concepts detruits Si avec vaut 'non' exclut etape de la recherche """ #print "jdc_include.get_sd_apres_etape_avec_detruire",nom_sd,sd,id(sd) autre_sd=JDC.get_sd_apres_etape_avec_detruire(self,nom_sd,sd,etape,avec) # si autre_sd vaut None le concept sd a ete detruit. On peut terminer # la recherche en retournant None # Si autre_sd ne vaut pas sd, le concept a ete redefini. On peut terminer # la recherche en retournant le concept nouvellement defini # Sinon, on poursuit la recherche dans les etapes du niveau superieur. if autre_sd is None or autre_sd is not sd :return autre_sd return self.etape_include.parent.get_sd_apres_etape_avec_detruire(nom_sd,sd,self.etape_include,'non') def delete_concept(self,sd): """ Fonction : Mettre a jour les etapes du JDC suite à la disparition du concept sd Seuls les mots cles simples MCSIMP font un traitement autre que de transmettre aux fils """ # Nettoyage des etapes de l'include JDC.delete_concept(self,sd) # Nettoyage des etapes du parent if self.etape_include: self.etape_include.parent.delete_concept_after_etape(self.etape_include,sd) def delete_concept_after_etape(self,etape,sd): """ Fonction : Mettre à jour les étapes du JDC qui sont après etape suite à la disparition du concept sd """ # Nettoyage des etapes de l'include JDC.delete_concept_after_etape(self,etape,sd) # Nettoyage des etapes du parent if self.etape_include: self.etape_include.parent.delete_concept_after_etape(self.etape_include,sd) def update_concept_after_etape(self,etape,sd): """ Fonction : mettre a jour les etapes du JDC suite a une modification du concept sd (principalement renommage) """ JDC.update_concept_after_etape(self,etape,sd) if self.etape_include: self.etape_include.parent.update_concept_after_etape(self.etape_include,sd) def replace_concept_after_etape(self,etape,old_sd,sd): """ Fonction : Mettre à jour les étapes du JDC qui sont après etape suite au remplacement du concept old_sd par sd """ # Nettoyage des etapes de l'include JDC.replace_concept_after_etape(self,etape,old_sd,sd) # Nettoyage des etapes du parent if self.etape_include: self.etape_include.parent.replace_concept_after_etape(self.etape_include,old_sd,sd) def changefichier(self,fichier): if self.etape_include: self.etape_include.fichier_ini=fichier self.fin_modif() def control_context_apres(self,etape): """ Cette méthode verifie que les etapes apres l'etape etape ont bien des concepts produits acceptables (pas de conflit de nom principalement) Si des concepts produits ne sont pas acceptables ils sont supprimés. Effectue les verifications sur les etapes du jdc mais aussi sur les jdc parents s'ils existent. """ #print "jdc_include.control_context_apres",self,etape #Regularise les etapes du jdc apres l'etape etape self.control_jdc_context_apres(etape) if self.etape_include: #print "CONTROL_INCLUDE:",self.etape_include,self.etape_include.nom # il existe un jdc pere. On propage la regularisation self.etape_include.parent.control_context_apres(self.etape_include) class JDC_INCLUDE(JDC_POURSUITE): def get_liste_cmd(self): """ Retourne la liste des commandes du catalogue """ if self.jdc_pere is None: return JDC.get_liste_cmd(self) return [e for e in self.jdc_pere.get_liste_cmd() if e not in ("DEBUT","POURSUITE","FIN") ] def active_etapes(self): for e in self.etapes: e.active() class JDC_CATA_INCLUDE(JDC_CATA): class_instance=JDC_INCLUDE class JDC_CATA_POURSUITE(JDC_CATA): class_instance=JDC_POURSUITE from Accas import AU_MOINS_UN,A_CLASSER JdC_include=JDC_CATA_INCLUDE(code='ASTER', execmodul=None) JdC_poursuite=JDC_CATA_POURSUITE(code='ASTER', execmodul=None, regles = (AU_MOINS_UN('DEBUT','POURSUITE'), AU_MOINS_UN('FIN'), A_CLASSER(('DEBUT','POURSUITE'),'FIN') ) ) eficas-6.4.0/Extensions/param2.py0000644004705000470430000001557211444664425017150 0ustar courtoisasterdev# -*- coding: utf-8 -*- from __future__ import division import math import types try: import Numeric except: import numpy Numeric = numpy def mkf(value): if type(value) in (type(1), type(1L), type(1.5), type(1j),type("hh")) : return Constant(value) elif isinstance(value, Formula): return value elif type(value) == type([]): return Constant(value) else: # return Constant(value) raise TypeError, ("Can't make formula from", value) #class Formula(object): class Formula: def __len__(self): val=self.eval() if val is None:return 0 try: return len(val) except: return 1 def __complex__(self): return complex(self.eval()) def __int__(self): return int(self.eval()) def __long__(self): return long(self.eval()) def __float__(self): return float(self.eval()) def __pos__(self): return self # positive def __neg__(self): return Unop('-', self) def __abs__(self): return Unop('abs', self) def __add__(self, other): return Binop('+', self, other) def __radd__(self, other): return Binop('+', other, self) def __sub__(self, other): return Binop('-', self, other) def __rsub__(self, other): return Binop('-', other, self) def __mul__(self, other): return Binop('*', self, other) def __rmul__(self, other): return Binop('*', other, self) def __div__(self, other): return Binop('/', self, other) def __rdiv__(self, other): return Binop('/', other, self) def __truediv__(self, other): return Binop('/', self, other) def __rtruediv__(self, other): return Binop('/', other, self) def __floordiv__(self, other): return Binop('//', self, other) def __rfloordiv__(self, other): return Binop('//', other, self) def __pow__(self, other): return Binop('**', self, other) def __rpow__(self, other): return Binop('**', other, self) def __getitem__(self,i):return Binop('[]',self,i) def __cmp__( self, other ): return self.eval().__cmp__(other) def __eq__( self, other ): return self.eval() == other def __ne__( self, other ): return self.eval() != other def __lt__( self, other ): return self.eval() < other def __le__( self, other ): return self.eval() <= other def __gt__( self, other ): return self.eval() > other def __ge__( self, other ): return self.eval() >= other def __hash__(self):return id(self) def _div(a,b): if isinstance(a,(int,long)) and isinstance(b,(int,long)): if a%b: return a/b else: return a//b else: return a/b class Binop(Formula): opmap = { '+': lambda a, b: a + b, '*': lambda a, b: a * b, '-': lambda a, b: a - b, '/': _div, '//': lambda a, b: a // b, '**': lambda a, b: a ** b, '[]': lambda a, b: a[b] , } def __init__(self, op, value1, value2): self.op = op self.values = mkf(value1), mkf(value2) def __str__(self): if self.op == '[]': return "%s[%s]" % (self.values[0], self.values[1]) else: return "(%s %s %s)" % (self.values[0], self.op, self.values[1]) def __repr__(self): if self.op == '[]': return "%s[%s]" % (self.values[0], self.values[1]) else: return "(%s %s %s)" % (self.values[0], self.op, self.values[1]) def eval(self): result= self.opmap[self.op](self.values[0].eval(), self.values[1].eval()) while isinstance(result,Formula): result=result.eval() return result def __adapt__(self,validator): return validator.adapt(self.eval()) class Unop(Formula): opmap = { '-': lambda x: -x, 'abs': lambda x: abs(x), } def __init__(self, op, arg): self._op = op self._arg = mkf(arg) def __str__(self): return "%s(%s)" % (self._op, self._arg) def __repr__(self): return "%s(%s)" % (self._op, self._arg) def eval(self): return self.opmap[self._op](self._arg.eval()) def __adapt__(self,validator): return validator.adapt(self.eval()) class Unop2(Unop): def __init__(self, nom, op, arg): self._nom = nom self._op = op self._arg=[] for a in arg: self._arg.append(mkf(a)) def __str__(self): s="%s(" % self._nom for a in self._arg: s=s+str(a)+',' s=s+")" return s def __repr__(self): s="%s(" % self._nom for a in self._arg: s=s+str(a)+',' s=s+")" return s def eval(self): l=[] for a in self._arg: l.append(a.eval()) return self._op(*l) class Constant(Formula): def __init__(self, value): self._value = value def eval(self): return self._value def __str__(self): return str(self._value) def __adapt__(self,validator): return validator.adapt(self._value) class Variable(Formula): def __init__(self,name,value): self._name=name self._value=value def eval(self): return self._value def __repr__(self): return "Variable('%s',%s)" % (self._name, self._value) def __str__(self): return self._name def __adapt__(self,validator): return validator.adapt(self._value) def Eval(f): if isinstance(f,Formula): f=f.eval() elif type(f) in (types.ListType, ): f=[Eval(i) for i in f] elif type(f) in (types.TupleType,): f=tuple([Eval(i) for i in f]) return f #surcharge de la fonction cos de Numeric pour les parametres original_ncos=Numeric.cos def cos(f): return Unop('ncos', f) Unop.opmap['ncos']=lambda x: original_ncos(x) Numeric.cos=cos #surcharge de la fonction sin de Numeric pour les parametres original_nsin=Numeric.sin def sin(f): return Unop('nsin', f) Unop.opmap['nsin']=lambda x: original_nsin(x) Numeric.sin=sin #surcharge de la fonction array de Numeric pour les parametres original_narray=Numeric.array def array(f,*tup,**args): """array de Numeric met en défaut la mécanique des parametres on la supprime dans ce cas. Il faut que la valeur du parametre soit bien définie """ return original_narray(Eval(f),*tup,**args) Numeric.array=array #surcharge de la fonction sin de math pour les parametres original_sin=math.sin def sin(f): return Unop('sin', f) Unop.opmap['sin']=lambda x: original_sin(x) math.sin=sin #surcharge de la fonction cos de math pour les parametres original_cos=math.cos Unop.opmap['cos']=lambda x: original_cos(x) def cos(f): return Unop('cos', f) math.cos=cos #surcharge de la fonction sqrt de math pour les parametres original_sqrt=math.sqrt def sqrt(f): return Unop('sqrt', f) Unop.opmap['sqrt']=lambda x: original_sqrt(x) math.sqrt=sqrt #surcharge de la fonction ceil de math pour les parametres original_ceil=math.ceil Unop.opmap['ceil']=lambda x: original_ceil(x) def ceil(f): return Unop('ceil', f) math.ceil=ceil eficas-6.4.0/Extensions/nuplet.py0000644004705000470430000001053010120346640017244 0ustar courtoisasterdev# -*- coding: utf-8 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 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. # # # ====================================================================== """ Ce module contient la classe de définition pour les nuplets NUPL """ # Modules Python import types # Modules Eficas from Noyau import N_ENTITE,N_MCLIST,N_CR from Ihm import I_ENTITE import mcnuplet class NUPL(N_ENTITE.ENTITE,I_ENTITE.ENTITE): """ """ class_instance = mcnuplet.MCNUPLET list_instance = N_MCLIST.MCList label='NUPLET' CR=N_CR.CR def __init__(self,fr="",ang="",docu="",statut='f',defaut=None,min=0,max=1, elements=None): N_ENTITE.ENTITE.__init__(self) I_ENTITE.ENTITE.__init__(self) self.fr=fr self.ang=ang self.docu=docu self.statut=statut self.defaut=defaut self.min=min self.max=max self.entites=elements self.regles=() # on force le statut des sous entites a obligatoire for e in elements:e.statut='o' self.idracine="NUPLET" self.affecter_parente() def verif_cata(self): """ Cette methode sert à valider les attributs de l'objet de définition de la classe NUPL """ if type(self.min) != types.IntType : if self.min != '**': self.cr.fatal("L'attribut 'min' doit être un entier : "+`self.min`) if type(self.max) != types.IntType : if self.max != '**' : self.cr.fatal("L'attribut 'max' doit être un entier : "+`self.max`) if self.min > self.max : self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`)) if type(self.fr) != types.StringType : self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" +`self.fr`) if self.statut not in ['o','f','c','d']: self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`) if type(self.docu) != types.StringType : self.cr.fatal("L'attribut 'docu' doit être une chaîne de caractères : %s" %`self.docu`) self.verif_cata_regles() def __call__(self,val,nom,parent): """ Construit la structure de donnees pour un NUPLET a partir de sa definition (self) de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent) """ if (type(val) == types.TupleType or type(val) == types.ListType) and type(val[0]) == types.TupleType: # On est en presence d une liste de nuplets l=self.list_instance() l.init(nom=nom,parent=parent) for v in val: objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent) l.append(objet) return l else: # on est en presence d un seul nuplet return self.class_instance(nom=nom,definition=self,val=val,parent=parent) def report(self): """ Méthode qui crée le rapport de vérification du catalogue du nuplet """ self.cr = self.CR() self.verif_cata() for v in self.entites : cr = v.report() cr.debut = "Début "+v.__class__.__name__+ ' : ' cr.fin = "Fin "+v.__class__.__name__+ ' : ' self.cr.add(cr) return self.cr def affecter_parente(self): """ Cette methode a pour fonction de donner un nom et un pere aux sous entités qui n'ont aucun moyen pour atteindre leur parent directement Il s'agit principalement des mots cles """ k=0 for v in self.entites: v.pere = self v.nom = str(k) k=k+1 eficas-6.4.0/Aide/0000755004705000470430000000000011670106364014077 5ustar courtoisasterdeveficas-6.4.0/Aide/fichiers_ASTER/0000755004705000470430000000000011670106364016631 5ustar courtoisasterdeveficas-6.4.0/Aide/fichiers_ASTER/index.html0000644004705000470430000000057511444664421020637 0ustar courtoisasterdev EFICAS

EFICAS


Evolution des versions

FAQ

Macros INCLUDE, INCLUDE_MATERIAU et POURSUITE eficas-6.4.0/Aide/fichiers_ASTER/INSTALL.txt0000644004705000470430000000273611444664421020512 0ustar courtoisasterdev Installation Standard d Eficas

1- Installation standard

Pour installer EFICAS a partir de la distribution : .tgz
faire :
tar xzvf .tgz

ce qui a pour effet de créer un répertoire de nom V1EficasV1_16a4AsterSTA9.

Pour modifier l'emplacement de la doc, le chemin d'accès à Acrobat Reader, les catalogues, il faut modifier le fichier
editeur.ini
dans le répertoire Aster ou utiliser le sous-menu "Parametres Eficas" du men Options .

ATTENTION :
Si Eficas est installé dans un répertoire particulier d'administration dans lequel les utilisateurs n'ont pas le droit d'écriture,
il faut que l'administrateur lance Eficas pour générer les fichiers et catalogues compilés .pyc

2- Utilisation d'Eficas

Pour utiliser Eficas, aller dans le répertoire Aster et faire :
python eficas_aster.py

3- Installation avec un noyau pré-installé

Aller dans le répertoire Aster du répertoire Eficas et modifier le fichier prefs.py comme suit : Mettre dans la variable CODE_PATH le chemin absolu vers le répertoire contenant les deux répertoires Noyau et Validation que vous voulez utiliser à la place de ceux fournis dans la livraison d'Eficas
Pour changer les catalogues, modifier le fichier editeur.ini dans le répertoire Aster eficas-6.4.0/Aide/fichiers_ASTER/NEWS.txt0000644004705000470430000000621311444664421020152 0ustar courtoisasterdevVersion 2.O (12/2009):
fusion des versions d Eficas pour Code_Aster, Outils Metiers et OpenTURNS
Version 1.17 (12/2009):
Mise en synchronisation avec la version 10.0 de Code_Aster de décembre 2009.
Version en QT4
La version TK est figee

Version 1.16 (6/2009):
Mise en synchronisation avec la version 9.3 de Code_Aster de mai 2007.

Version 1.13 (6/2008):
Mise en synchronisation avec la version 9.2 de Code_Aster de mai 2007.

Version 1.12 (6/2007):
Mise en synchronisation avec la version 9.1 de Code_Aster de mai 2007.

Version 1.11 (12/2006):
Mise en synchronisation avec la version 8.4 de Code_Aster de decembre 2006. Première version du Traducteur de V7 en V8

Version 1.10 (6/2006):
Mise en synchronisation avec la version 8.3 de Code_Aster de juin 2006.

Version 1.9 (12/2005):
Mise en synchronisation avec la version 8.2 de Code_Aster de decembre 2005.

Version 1.8 (6/2005):
Mise en synchronisation avec la version 8.1 de Code_Aster de mai 2005. Les includes et poursuites peuvent etre édités. Introduction de la notation scientifique pour les flottants.

Version 1.7 : (12/2004)
Mise en synchronisation avec la version STA7 de Code_Aster (7.4). Les formules changent et deviennent des formules au sens python. Disparition des PARAMETRE-EVAL Les touches raccourcis (CtrlC par exple) sont activées et paramétrables dans prefs.py.

Version 1.6 : (05/2004)
Mise en synchronisation avec la version STA7 de Code_Aster (7.2.26) Evolution de la saisie des valeurs pour definir une fonction (EO2003-241) : - Saisie des valeurs sous forme de tuple. - Si une valeur est selectionnée, l'insertion se fera après cette valeur et non en fin de liste

Version 1.5 (10/2003):
Mise en synchronisation avec la version STA7 de Code_Aster d'octobre 2003 (7.2) Introduction des validateurs de mots cles simples

Version 1.4 (5/2003):
Mise en synchronisation avec la version STA7 de Code_Aster de mai 2003 (7.1) Possibilité de donner un nom de fichier en argument lors de l'ouverture d'EFICAS (EO2003-060) Correction d'une anomalie dans la fonctionnalité de commentarisation des commandes (AO2003-041) Ajout du bouton de documentation dans le panneau FORMULE (AO2002-447) Selection automatique du concept quand il n'en existe qu'un (EO2002-162)

Version 1.3 (11/2002):
Mise en synchronisation avec la version STA6 de Code_Aster de septembre 2002 Ajout de la possibilité de visualiser les INCLUDE, INCLUDE_MATERIAU et POURSUITE (popup sur click droit de la souris sur l'icone de la commande) Possibilité d'afficher la liste des commandes par groupe (menu option->affichage commandes) Reprise profonde du mécanisme de gestion des fichiers inclus (voir menus d'AIDE pour plus de détails) Corrections diverses

Version 1.2 (5/2002):
Reconception de la version 1.1 : décomposition en packages Python Mise en synchronisation avec la version STA6 de Code_Aster de fevrier 2002

eficas-6.4.0/Aide/fichiers_ASTER/faqs.txt0000644004705000470430000000420511444664421020327 0ustar courtoisasterdev
------------------------------------------------------------------------------------------------------------- FAQs et Limitations d'EFICAS -------------------------------------------------------------------------------------------------------------

1. Mots réservés :
Tous les mots du langage Python sont des mots réservés. On ne peut donc pas appeler une variable ou un concept 'fin' ou 'dir' Pour la liste complète de ces mots-clés, veuillez vous référer à la documentation Python

2. Concepts réentrants :
Ne pas indiquer par un '&' devant son nom qu'un concept est utilisé comme concept réentrant. En effet EFICAS le sait !

3. Carte commentaire :
La carte commentaire est désormais le '#' (dièse) au lieu du '%' (pourcent) Les commentaires sont gérés comme des objets de même niveau que les commandes ; il n'est plus possible de placer des commentaires "dans" une commande. Attention, lors de la traduction d'un fichier de version 5 en 6, les commentaires "dans" les commandes seront perdus.

4. Nommer le concept produit par un opérateur :
Vous ne pouvez nommer le concept produit d'un opérateur que lorsque celui-ci aura été entièrement et correctement rempli.

5. Règle de rémanence dans les mots-clés facteurs répétés : La règle de rémanence qui permettait pour certains mots-clés facteurs et pour certains de leurs mots-clés simples de ne pas répeter la valeur de ces derniers dans toutes les occurrences du mot-clé facteur n'est pas connue d'EFICAS. En conséquence, vous devez répéter les mots-clés simples concernés dans toutes les occurrences des mots-clés facteurs.

6. Besoin d'aide ?
La documentation d'utilisation d'EFICAS a pris un peu de retard sur le produit ... Néanmoins, vous disposez sur la plupart des panneaux contextuels ( les panneaux à droite de l'arbre) d'une aide en ligne que vous pouvez activer en maintenant le bouton droit de votre souris enfoncé. eficas-6.4.0/Aide/fichiers_ASTER/includes.txt0000644004705000470430000000510711444664421021205 0ustar courtoisasterdevLes macros INCLUDE, INCLUDE_MATERIAU et POURSUITE ont un fonctionnement spécial.
Les concepts produits par ces macros sont obtenus par une interpretation séparée du fichier de commandes correspondant. Les concepts produits sont ensuite inclus dans le contexte du jeu de commandes principal.
La mise à jour du jeu de commandes et de ses includes et poursuites est presque complètement automatique. Cependant dans quelques cas particuliers le mécanisme de mise à jour peut être pris en défaut.

Les principes retenus sont les suivants :

1- Un fichier invalide n'est pas du tout pris en compte meme si quelques commandes de ce fichier sont valides

2- Il est possible de visualiser (bouton droit de la souris sur l'icone de la macro -> menu View) le contenu de ces types de macros. Le bouton (icone loupe) permet de visualiser le source du fichier inclus.

3- Les fichiers inclus sont mémorisés en fonction de leur UNITE pour les INCLUDE, du nom de matériau pour les INCLUDE_MATERIAU et comme poursuite pour une POURSUITE (il n'est pas possible d'avoir plus d'une POURSUITE par fichier). ATTENTION : comme on s'appuie sur l'UNITE pour memoriser les fichers inclus il est conseillé d'utiliser des numéros d'UNITE différents sinon la reactualisation sera faite avec le meme fichier pour des INCLUDE différents.

4- Pour changer les fichiers inclus, il faut passer par l'onglet FICHIER, modifier le nom du fichier et appuyer sur le bouton Valider. Il est possible en passant par cet onglet de forcer la prise en compte d'un fichier include partiellement valide ce qui n'est pas possible lors de l'import initial. Pour changer un fichier INCLUDE contenu dans un INCLUDE ou dans une POURSUITE, il faut editer l'INCLUDE ou la POURSUITE englobante (voir 6.) et passer par l'onglet FICHIER.

5- Le nom d'un fichier INCLUDE_MATERIAU est construit à partir des valeurs des mots-clés de la commande, il n'est donc jamais demandé explicitement à l'utilisateur.

6- Il est possible d'editer un fichier include ou poursuite. Pour cela, il suffit d'utiliser l'entrée "Edit" du menu contextuel de l'étape en question (bouton droit de la souris). Le fichier include ou poursuite en cours d'edition apparaitra dans un onglet distinct. Les modifications dans un fichier include ou poursuite sont normalement propagées au fichier principal et aux autres includes et poursuites. Il est cependant possible que quelques cas tordus ne soient pas correctement traités. Dans le doute, une demande de rapport de validation peut permettre de réactualiser l'état des différents fichiers. eficas-6.4.0/Aide/fichiers_OPENTURNS_STUDY/0000755004705000470430000000000011670106364020340 5ustar courtoisasterdeveficas-6.4.0/Aide/fichiers_OPENTURNS_STUDY/EficasGui.txt0000644004705000470430000000241411444664421022743 0ustar courtoisasterdev What is the EFICAS Graphical User Interface?

What is the EFICAS Graphical User Interface?


EFICAS is an open source software which proposes a graphical user interface to OpenTURNS.
EFICAS enables to the User to lead an uncertainty study without having to learn the python statements.

Eficas is structured in two parts :
  • 1. Part 1 defines the calculus function (the wrapper definition);
  • 2. Part 2 defines the uncertainty study using a previously defined model.
note that Part 1 must be fulfilled before Part 2.


It has been made with the following objectives :
  • 1. to ease the use of Open TURNS, avoiding to the User writing the python statements;
  • 2. to ease the learning of the python statements by generating the python script after the study has been graphically defined.


When used, the EFICAS GUI generates :
  • 1. the file.comm which contains all the information declared in the EFICAS GUI.
  • 2. the file.py which is the python script associated to the study and that can be launched through a python session.
  • eficas-6.4.0/Aide/fichiers_OPENTURNS_STUDY/index.html0000644004705000470430000000056611444664421022346 0ustar courtoisasterdev EFICAS

    EFICAS


    What is the EFICAS Graphical User Interface

    Definition of the uncertainty study eficas-6.4.0/Aide/fichiers_OPENTURNS_STUDY/UncertaintyStudy.txt0000644004705000470430000002575511444664421024457 0ustar courtoisasterdev DEFINITION OF THE UNCERTAINTY STUDY

    DEFINITION OF THE UNCERTAINTY STUDY

    Limitations of the EFICAS GUI

    EFICAS version 2.0 has the following limitations :