N_FONCTION.FONCTION.__init__(self,etape=etape,sd=sd,reg=reg)
I_FONCTION.FONCTION.__init__(self,etape=etape,sd=sd,reg=reg)
-class formule(N_FONCTION.formule,I_FONCTION.formule,ASSD):
+class formule(I_FONCTION.formule,N_FONCTION.formule,ASSD):
def __init__(self,etape=None,sd=None,reg='oui'):
N_FONCTION.formule.__init__(self,etape=etape,sd=sd,reg=reg)
I_FONCTION.formule.__init__(self,etape=etape,sd=sd,reg=reg)
from copy import copy,deepcopy
# import du chargeur de composants
-from comploader import gettreeitem,make_objecttreeitem
+from comploader import make_objecttreeitem
import treewidget
from Ihm import CONNECTOR
return self.object.get_genealogie()
def get_index_child(self,nom_fils):
+ """
+ Retourne l'index dans la liste des fils de self du nouveau fils de nom nom_fils
+ Nécessaire pour savoir à quelle position dans la liste des fils il faut ajouter
+ le nouveau mot-clé
+ """
+ return self.object.get_index_child(nom_fils)
+
+ def get_index_child_old(self,nom_fils):
"""
Retourne l'index dans la liste des fils de self du nouveau fils de nom nom_fils
Nécessaire pour savoir à quelle position dans la liste des fils il faut ajouter
Cette methode, globale pour les objets de type item, permet de construire et de retourner un objet
de type item associé à l'object passé en argument.
"""
- c = gettreeitem(object)
- return c(appli,labeltext, object, setfunction)
+ return make_objecttreeitem(appli,labeltext,object,setfunction)
#def __del__(self):
# print "__del__",self
"""
# Modules Python
import os
+import string
import sys
import types
import Pmw
import fontes
import tooltip
import properties
+import convert,generator
+import comploader
+from utils import extension_fichier,stripPath
+
from widgets import Fenetre
from Misc import MakeNomComplet
import session
f.wait()
+class valeur:
+ def __init__(self,v=None):
+ self.v=v
+ def set(self,v):
+ self.v=v
+ def get(self):
+ return self.v
+
+class STANDALONE(APPLI):
+ def __init__ (self,code=prefs.code,fichier=None,version='v8.2') :
+ self.code=code
+ self.top=None
+ self.format_fichier=valeur()
+
+ self.dict_reels={}
+ self.liste_simp_reel=[]
+ # L'attribut test doit valoir 1 si on ne veut pas creer les fenetres
+ self.test=1
+
+ # Lecture des parametres de configuration (fichier global editeur.ini
+ # et utilisateur eficas.ini)
+ self.lecture_parametres()
+
+ self.message=''
+ # Avant la creation du bureau qui lit le catalogue
+ self.version_code=version
+ import readercata
+ self.readercata=readercata.READERCATA(self,None)
+
+ self.dir=None
+
+ def affiche_infos(self,message):
+ return
+
+ def get_text_JDC(self,JDC,format):
+ if generator.plugins.has_key(format):
+ # Le generateur existe on l'utilise
+ g=generator.plugins[format]()
+ jdc_formate=g.gener(JDC,format='beautifie')
+ return jdc_formate
+ else:
+ # Il n'existe pas c'est une erreur
+ return
+
+ def newJDC(self):
+ CONTEXT.unset_current_step()
+ J=self.readercata.cata[0].JdC(procedure="",
+ appli=self,
+ cata=self.readercata.cata,
+ cata_ord_dico=self.readercata.cata_ordonne_dico,
+ rep_mat=self.CONFIGURATION.rep_mat,
+ )
+ J.analyse()
+ return J
+
+ def openJDC(self,file):
+ self.fileName = file
+ e=extension_fichier(file)
+ self.JDCName=stripPath(file)
+ self.initialdir = os.path.dirname(os.path.abspath(file))
+ format=self.format_fichier.get()
+ # Il faut convertir le contenu du fichier en fonction du format
+ if convert.plugins.has_key(format):
+ # Le convertisseur existe on l'utilise
+ p=convert.plugins[format]()
+ p.readfile(file)
+ text=p.convert('exec',self)
+ # On se met dans le repertoire ou se trouve le fichier de commandes
+ # pour trouver les eventuels fichiers include ou autres
+ # localises a cote du fichier de commandes
+ os.chdir(self.initialdir)
+ CONTEXT.unset_current_step()
+ J=self.readercata.cata[0].JdC(procedure=text,
+ appli=self,
+ cata=self.readercata.cata,
+ cata_ord_dico=self.readercata.cata_ordonne_dico,
+ nom=self.JDCName,
+ rep_mat=self.CONFIGURATION.rep_mat,
+ )
+ J.analyse()
+ return J
+
+ def create_item(self,obj):
+ return comploader.make_objecttreeitem(self,getattr(obj,"nom","item"),obj)
+
+ def get_file(self,unite=None,fic_origine = ''):
+ """
+ Retourne le nom du fichier correspondant a l unite logique unite (entier)
+ ou d'un fichier poursuite
+ """
+ f,ext=os.path.splitext(fic_origine)
+ if unite :
+ #include
+ finclude=f+".%d" % unite
+ else:
+ #poursuite
+ n=ext[-1]
+ if n == '0':
+ ext=".comm"
+ else:
+ ext=".com%d" % (string.atoi(n)-1)
+ if ext == '.com0' and not os.path.isfile(f+".com0"):
+ ext=".comm"
+ finclude=f+ext
+ ff=open(finclude)
+ text=ff.read()
+ ff.close()
+ return finclude,text
+
+ def affiche_alerte(self,titre,message):
+ print titre+ "\n\n" + message
Cette classe item dépend bien sûr de la nature de object, d'où
l'interrogation du dictionnaire composants
"""
+ # Si la definition de l'objet a un attribut itemeditor, il indique
+ # la classe a utiliser pour l'item
+ try:
+ return object.definition.itemeditor
+ except:
+ pass
-
- if type(object) == types.InstanceType:
- # Si la definition de l'objet a un attribut itemeditor, il indique
- # la classe a utiliser pour l'item
- try:
- return object.definition.itemeditor
- except:
- pass
-
- # On cherche ensuite dans les composants (plugins)
- try:
- itemtype= composants[object.__class__]
- return itemtype
- except:
- pass
-
- try :
- for e in composants.keys():
- if isinstance(object,e):
- itemtype= composants[e]
- return itemtype
- except :
- pass
+ # On cherche ensuite dans les composants (plugins)
+ try:
+ itemtype= composants[object.__class__]
+ return itemtype
+ except:
+ pass
# Puis une eventuelle classe heritee (aleatoire car sans ordre)
for e in composants.keys():
- if isinstance(object,e):
- itemtype= composants[e]
- return itemtype
+ if e and isinstance(object,e):
+ itemtype= composants[e]
+ return itemtype
- # Apres poum ??? Les lignes suivantes sont elles utiles ?
# Si on n'a rien trouve dans les composants on utilise l'objet par defaut
- print itemtype
- itemtype=ObjectTreeItem
+ itemtype=composants[None]
return itemtype
def make_objecttreeitem(appli,labeltext, object, setfunction=None):
--- /dev/null
+import Objecttreeitem
+treeitem = Objecttreeitem.ObjectTreeItem
+objet = None
return self.object.get_noms_sd_oper_reentrant()
def get_objet_commentarise(self):
+ """
+ Cette méthode retourne un objet commentarisé
+ représentatif de self.object
+ """
+ # Format de fichier utilisé
+ format=self.appli.format_fichier.get()
+ return self.object.get_objet_commentarise(format)
+
+ def get_objet_commentarise_BAK(self):
"""
Cette méthode retourne un objet commentarisé
représentatif de self.object
"""
Renomme le paramètre
"""
- self.object.set_attribut('nom',new_nom)
+ self.object.set_nom(new_nom)
+ #self.object.set_attribut('nom',new_nom)
def get_fr(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):
"""
from __future__ import division
import math
+import Numeric
def mkf(value):
if type(value) in (type(1), type(1L), type(1.5), type(1j),type("hh")):
self.values = mkf(value1), mkf(value2)
def __str__(self):
if self.op == '[]':
- return "(%s[%s])" % (self.values[0], self.values[1])
+ 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])
+ 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=result.eval()
return result
+original_cos=math.cos
+original_sin=math.sin
+original_ncos=Numeric.cos
+original_nsin=Numeric.sin
+
class Unop(Formula):
opmap = { '-': lambda x: -x,
'sin': lambda x: math.sin(x),
- 'cos': lambda x: math.cos(x) }
+ 'cos': lambda x: original_cos(x) ,
+ 'ncos': lambda x: original_ncos(x),
+ 'nsin': lambda x: original_nsin(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())
+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 __repr__(self): return "Variable('%s',%s)" % (self._name, self._value)
def __str__(self): return self._name
+def cos(f): return Unop('ncos', f)
+def sin(f): return Unop('nsin', f)
+Numeric.cos=cos
+Numeric.sin=sin
def cos(f): return Unop('cos', f)
def sin(f): return Unop('sin', f)
+math.cos=cos
+math.sin=sin
# import de modules Python
import string,types
from math import *
+import traceback
# import de modules Eficas
from Noyau.N_CR import CR
idracine = 'param'
def __init__(self,nom,valeur=None):
- # parent ne peut être qu'un objet de type JDC
- self.dict_valeur=[]
- self.valeur = self.interprete_valeur(valeur)
- self.val=valeur
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
- def __getitem__(self,key):
- param_item=ITEM_PARAMETRE(self,key)
- return param_item
+# def __getitem__(self,key):
+# param_item=ITEM_PARAMETRE(self,key)
+# return param_item
# def __neg__(self):
# try:
- une liste d'items d'un type qui précède
Retourne la valeur interprétée
"""
- if not val : return None
+ #if not val : return None
valeur = None
# on vérifie si val est un entier
- try :
- valeur = string.atoi(val) # on a un entier
- return valeur
- except :
- pass
+ #try :
+ # valeur = string.atoi(val) # on a un entier
+ # print "int",valeur
+ # return valeur
+ #except :
+ # traceback.print_exc()
+ # pass
+ #print val,valeur
# on vérifie si val est un réel
- try:
- valeur = string.atof(val) # on a un réel
- return valeur
- except :
- pass
- # on vérifie si val est un tuple
- try :
- valeur = eval(val)
- except:
- pass
+ #try:
+ # valeur = string.atof(val) # on a un réel
+ # print "float",valeur
+ # return valeur
+ #except :
+ # traceback.print_exc()
+ # pass
+ #print val,valeur
+
+ if type(val) == types.StringType:
+ # on tente l'evaluation (dans quel contexte ?)
+ 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
if valeur != None :
if type(valeur) == types.TupleType:
# on a réussi à évaluer val en autre chose qu'un tuple ...
#print "on a réussi à évaluer %s en autre chose qu'un tuple ..." %val
#print 'on trouve : ',str(valeur),' de type : ',type(valeur)
- # on retourne val comme une string car on n'a pas su l'interpréter
if valeur != None :
if type(valeur).__name__ == 'list':
self.dict_valeur=[]
for i in range(len(valeur)):
- self.dict_valeur.append(valeur[i])
+ 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):
self.valeur = self.interprete_valeur(new_valeur)
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
self.parent = None
self.jdc = None
self.definition=None
+ self.niveau=None
def active(self):
"""
"""
Donne un echo de self sous la forme nom = valeur
"""
- return self.nom+' = '+str(self.valeur)
+ if type(self.valeur) == types.StringType:
+ return self.nom+' = '+ repr(self.valeur)
+ else:
+ return self.nom+' = '+ str(self.valeur)
def __str__(self):
"""
pass
def eval(self):
- return self.valeur
+ if isinstance(self.valeur,Formula):
+ return self.valeur.eval()
+ else:
+ return self.valeur
class COMBI_PARAMETRE :
def __init__(self,chainevaleur,valeur):
class ASSD:
def __repr__(self):
return "concept %s de type %s" % (self.get_name(),self.__class__.__name__)
+ #def __del__(self):
+ # print "__del__",self
# Modules EFICAS
import I_MCCOMPO
import CONNECTOR
+from Extensions import commande_comm
class ETAPE(I_MCCOMPO.MCCOMPO):
"""
if self.actif:return
self.actif = 1
+ self.init_modif()
if self.sd :
try:
self.jdc.append_sdprod(self.sd)
et de la liste des sd
"""
self.actif = 0
+ self.init_modif()
if self.sd :
self.jdc.del_sdprod(self.sd)
self.jdc.delete_concept_after_etape(self,self.sd)
Realise l'update des blocs conditionnels fils de self
"""
self._update_condition_bloc()
+
+ def get_objet_commentarise(self,format):
+ """
+ Cette méthode retourne un objet commande commentarisée
+ representant la commande self
+ """
+ import generator
+ g=generator.plugins[format]()
+ texte_commande = g.gener(self,format='beautifie')
+ # Il faut enlever la première ligne vide de texte_commande que
+ # rajoute le generator
+ rebut,texte_commande = string.split(texte_commande,'\n',1)
+ # on construit l'objet COMMANDE_COMM repésentatif de self mais non
+ # enregistré dans le jdc (pas ajouté dans jdc.etapes)
+ parent=self.parent
+ pos=self.parent.etapes.index(self)
+ commande_comment = commande_comm.COMMANDE_COMM(texte=texte_commande,
+ reg='non',
+ parent=parent)
+ self.parent.suppentite(self)
+ parent.addentite(commande_comment,pos)
+
+ return commande_comment
+
#ATTENTION SURCHARGE: a garder en synchro ou a reintegrer dans le Noyau
def Build_sd(self,nom):
#
#
# ======================================================================
+import string
from I_ASSD import ASSD
class FONCTION(ASSD):
# modification de C Durand sur la gestion des formules dans le superviseur
# On conserve l'ancienne classe fonction (ceinture et bretelles)
class fonction(FONCTION) : pass
-class formule(FONCTION) : pass
+
+from Extensions import param2
+class formule(FONCTION) :
+ def __call__(self,*val):
+ return param2.Unop2(self.nom,self.real_call,val)
+
+ def real_call(self,*val):
+ if hasattr(self.parent,'contexte_fichier_init'):
+ context=self.parent.contexte_fichier_init
+ else : context={}
+ i=0
+ for param in self.nompar :
+ context[param]=val[i]
+ i=i+1
+ try :
+ res=eval(self.expression,self.jdc.const_context, context)
+ except :
+ print 75*'!'
+ print '! '+string.ljust('Erreur evaluation formule '+self.nom,72)+'!'
+ print 75*'!'
+ raise
+ return res
+
return O
arguments=formule[3]
if arguments[0] == '(' :
- arguments=[1,-1 ]
- if arguments[-1] == '(' :
- arguments=[0,-2 ]
+ arguments=arguments[1:]
+ if arguments[-1] == ')' :
+ arguments=arguments[:-1]
self.arguments=tuple(arguments.split(','))
i=1
Il faut ajouter la formule au contexte global du JDC
"""
self.actif = 1
+ self.init_modif()
nom = self.get_nom()
if nom == '' : return
try:
Il faut supprimer la formule du contexte global du JDC
"""
self.actif = 0
+ self.init_modif()
if not self.sd : return
self.jdc.del_fonction(self.sd)
def changefichier(self,fichier):
self.fin_modif()
+ def eval_in_context(self,valeur,etape):
+ """ Tente d'evaluer valeur dans le contexte courant de etape
+ Retourne le parametre valeur inchange si l'evaluation est impossible
+ """
+ #contexte initial du jdc
+ context=self.condition_context.copy()
+ #contexte courant des concepts
+ context.update(self.get_contexte_avant(etape))
+ #contexte des parametres
+ for e in self.etapes:
+ if e is etape:break
+ if not e.isactif():continue
+ e.update_context(context)
+ try :
+ objet = eval(valeur,context)
+ return objet
+ except:
+ pass
+ return valeur
+
+#ATTENTION SURCHARGE : cette methode doit etre gardée en synchronisation avec celle de Noyau
+ def supprime(self):
+ #print "supprime",self
+ Noyau.N_JDC.JDC.supprime(self)
+ # self.appli=None
+ # self.g_context={}
+ # self.const_context={}
+ # self.sds=[]
+ # self.sds_dict={}
+ # self.mc_globaux={}
+ # self.current_context={}
+ # self.condition_context={}
+ # self.etapes_niveaux=[]
+ # self.niveau=None
+ # self.params=[]
+ # self.fonctions=[]
+ # self._etape_context=None
+ # self.etapes=[]
+
#ATTENTION SURCHARGE : cette methode doit etre gardée en synchronisation avec celle de Noyau
def register(self,etape):
"""
# de prendre cette precaution mais ce n'est pas vrai partout.
old_recorded_units=self.recorded_units.copy()
+ # on supprime l'ancien jdc_aux s'il existe
+ if hasattr(self,'jdc_aux') and self.jdc_aux:
+ self.jdc_aux.supprime_aux()
+
if fichier is None:fichier="SansNom"
j=self.JdC_aux( procedure=text, nom=fichier,
appli=self.jdc.appli,
# On recupere le contexte de l'include verifie
try:
j_context=j.get_verif_contexte()
+ #print j_context.keys()
+ #print j.g_context.keys()
except:
# On retablit l'etape courante step
CONTEXT.unset_current_step()
Cette méthode sert à créer un contexte en interprétant un texte source
Python
"""
- #print "make_contexte_include"
+ #print "make_contexte_include",fichier
# on récupère le contexte d'un nouveau jdc dans lequel on interprete text
contexte = self.get_contexte_jdc(fichier,text)
if contexte == None :
self.jdc_aux.supprime_aux()
self.jdc_aux=None
Noyau.N_MACRO_ETAPE.MACRO_ETAPE.supprime(self)
+ # self.contexte_fichier_init={}
+ # self.old_contexte_fichier_init={}
+ # self.g_context={}
+ # self.current_context={}
+ # self.etapes=[]
+ # self.mc_liste=[]
#ATTENTION SURCHARGE : cette methode surcharge celle de Noyau (a garder en synchro)
def get_file(self,unite=None,fic_origine=''):
en interprétant un texte source Python
Elle est appelee par la fonction sd_prd d'INCLUDE_MATERIAU
"""
+ #print "make_contexte",fichier
# On supprime l'attribut mat qui bloque l'evaluation du source de l'INCLUDE_MATERIAU
# car on ne s'appuie pas sur lui dans EFICAS mais sur l'attribut fichier_ini
if hasattr(self,'mat'):del self.mat
if CONTEXT.debug : traceback.print_exc()
return None,0
+ def eval_val(self,new_valeur):
+ """
+ Tente d'evaluer new_valeur comme un objet du jdc (par appel a eval_val_item)
+ ou comme une liste de ces memes objets
+ Si new_valeur contient au moins un separateur (,), tente l'evaluation sur
+ la chaine splittee
+ """
+ if type(new_valeur) in (types.ListType,types.TupleType):
+ valeurretour=[]
+ for item in new_valeur :
+ valeurretour.append(self.eval_val_item(item))
+ return valeurretour
+ else:
+ valeur=self.eval_val_item(new_valeur)
+ if valeur == new_valeur and new_valeur.find(',') > 0:
+ valeurretour=[]
+ for item in new_valeur.split(',') :
+ valeurretour.append(self.eval_val_item(item))
+ return valeurretour
+ return valeur
+
+ def eval_val_item(self,new_valeur):
+ """
+ Tente d'evaluer new_valeur comme un concept, un parametre, un objet Python
+ Si c'est impossible retourne new_valeur inchange
+ argument new_valeur : string (nom de concept, de parametre, expression ou simple chaine)
+ """
+ # concept ?
+ sd = self.jdc.get_sd_avant_etape(new_valeur,self.etape)
+ if sd :
+ return sd
+ # expression ou item parametre ?
+ d={}
+ # On veut EVAL avec tous ses comportements. On utilise Accas. Perfs ??
+ d['EVAL']=Accas.EVAL
+ for p in self.jdc.params:
+ d[p.nom]=p
+ try :
+ objet = eval(new_valeur,d)
+ return objet
+ except:
+ pass
+ return new_valeur
+
def cherche_item_parametre (self,new_valeur):
try:
nomparam=new_valeur[0:new_valeur.find("[")]
if self.jdc:
self.jdc.mc_globaux[self.nom]=self
+ def nbrColonnes(self):
+ genea = self.get_genealogie()
+ if "VALE_C" in genea and "DEFI_FONCTION" in genea : return 3
+ if "VALE" in genea and "DEFI_FONCTION" in genea : return 2
+ return 0
+
#--------------------------------------------------------------------------------
#ATTENTION SURCHARGE : toutes les methodes ci apres sont des surcharges du Noyau et de Validation
verif_type=self.verif_type(val=v,cr=None)
# cas des tuples avec un ITEM_PARAMETRE
if verif_type == 0:
- if type(v) == types.TupleType :
+ if type(v) in ( types.TupleType ,types.ListType):
new_val=[]
for i in v:
if ((issubclass(i.__class__,param2.Formula)) or
val.eval()
return 1
except :
- pass
+ traceback.print_exc()
+ pass
return self.verif_type(val,cr)
def verif_typeliste(self,val,cr='non') :
for v in val :
verif=verif+self.verif_typeihm(v,cr)
return verif
-
+
--- /dev/null
+
+import sys
+sys.path.insert(0,"../Aster")
+import prefs
+ASTERDIR="/local/chris/ASTER/instals/STA8.2/astest"
+
import unittest
from optparse import OptionParser
-sys.path[:0]=[".."]
+import config
testMatch = sre.compile(r'^[Tt]est')
class TestSuite(unittest.TestSuite):
+ ignore=[]
loader = unittest.defaultTestLoader
def __init__(self, names=[]):
mod = getattr(mod,comp)
return mod
+ def importdir(self,rep,path):
+ init = os.path.abspath(os.path.join(path,'__init__.py'))
+ if os.path.isfile(init):
+ package=self._import(rep)
+ if package:
+ return TestPackageSuite(package)
+ else:
+ return TestDirectorySuite(path)
+
+ def importfile(self,item,path):
+ root, ext = os.path.splitext(item)
+ if ext != '.py':
+ return
+ if root.find('/') >= 0:
+ dirname, file = os.path.split(path)
+ root, ext = os.path.splitext(file)
+ sys.path.insert(0,dirname)
+ mod=self._import(root)
+ sys.path.remove(dirname)
+ else:
+ mod=self._import(root)
+ return ModuleTestSuite(mod)
+
def collectTests(self):
if self.names:
entries=self.names
else:
entries = [ item for item in os.listdir(os.getcwd())
if item.lower().find('test') >= 0 ]
+ self.path=os.getcwd()
+ return self._collectTests(entries)
+ def _collectTests(self,entries):
tests=[]
for item in entries:
- path=os.path.abspath(os.path.join(os.getcwd(),item))
- if os.path.isfile(item):
- root, ext = os.path.splitext(item)
- if ext == '.py':
- if root.find('/') >= 0:
- dirname, file = os.path.split(path)
- root, ext = os.path.splitext(file)
- sys.path.insert(0,dirname)
- mod=self._import(root)
- sys.path.remove(dirname)
- else:
- mod=self._import(root)
- tests.append(ModuleTestSuite(mod))
- elif os.path.isdir(item):
- init = os.path.abspath(os.path.join(item,'__init__.py'))
- if os.path.isfile(init):
- package=self._import(item)
- if package:
- tests.append(TestPackageSuite(package))
- else:
- tests.append(TestDirectorySuite(path))
+ if (item[0] == '.'
+ or item in self.ignore
+ or not testMatch.search(item)):
+ continue
+ path=os.path.abspath(os.path.join(self.path,item))
+ if os.path.isfile(path):
+ t=self.importfile(item,path)
+ if t:tests.append(t)
+ elif os.path.isdir(path):
+ tests.append(self.importdir(item,path))
return tests
class TestDirectorySuite(TestSuite):
- ignore=[]
def __init__(self,path):
self.path=path
super(TestDirectorySuite,self).__init__()
sys.path.insert(0,self.path)
entries = os.listdir(self.path)
entries.sort()
- for item in entries:
- if (item[0] == '.'
- or item in self.ignore
- or not testMatch.search(item)):
- continue
- item_path = os.path.abspath(os.path.join(self.path,item))
- if os.path.isfile(item_path):
- root, ext = os.path.splitext(item)
- if ext != '.py':
- continue
- if root.find('/') >= 0:
- dirname, file = os.path.split(item_path)
- root, ext = os.path.splitext(file)
- sys.path.insert(0,dirname)
- mod=self._import(root)
- sys.path.remove(dirname)
- else:
- mod=self._import(root)
- tests.append(ModuleTestSuite(mod))
- elif os.path.isdir(item_path):
- init = os.path.abspath(os.path.join(item_path,'__init__.py'))
- if os.path.isfile(init):
- package=self._import(item)
- if package:
- tests.append(TestPackageSuite(package))
- else:
- tests.append(TestDirectorySuite(item_path))
+ tests=self._collectTests(entries)
sys.path.remove(self.path)
return tests
path=os.path.abspath(os.path.dirname(self.package.__file__))
super(TestPackageSuite,self).__init__(path)
- def collectTests(self):
- tests=[]
- if self.path:
- sys.path.insert(0,self.path)
- entries = os.listdir(self.path)
- entries.sort()
- for item in entries:
- if (item[0] == '.'
- or item in self.ignore
- or not testMatch.search(item)):
- continue
- item_path = os.path.abspath(os.path.join(self.path,item))
- if os.path.isfile(item_path):
- root, ext = os.path.splitext(item)
- if ext != '.py':
- continue
- name="%s.%s" % (self.package.__name__,root)
- mod=self._import(name)
- tests.append(ModuleTestSuite(mod))
- elif os.path.isdir(item_path):
- init = os.path.abspath(os.path.join(item_path,'__init__.py'))
- if os.path.isfile(init):
- name="%s.%s" % (self.package.__name__,item)
- package=self._import(name)
- if package:
- tests.append(TestPackageSuite(package))
- else:
- tests.append(TestDirectorySuite(item_path))
- sys.path.remove(self.path)
- return tests
-
+ def importdir(self,item,path):
+ init = os.path.abspath(os.path.join(path,'__init__.py'))
+ if os.path.isfile(init):
+ name="%s.%s" % (self.package.__name__,item)
+ package=self._import(name)
+ if package:
+ return TestPackageSuite(package)
+ else:
+ return TestDirectorySuite(path)
+
+ def importfile(self,item,path):
+ root, ext = os.path.splitext(item)
+ if ext != '.py':
+ return
+ name="%s.%s" % (self.package.__name__,root)
+ mod=self._import(name)
+ return ModuleTestSuite(mod)
class ModuleTestSuite(TestSuite):
--- /dev/null
+MM=LIRE_MAILLAGE()
--- /dev/null
+POURSUITE()
+MA=LIRE_MAILLAGE(INFO=inf)
+FIN()
--- /dev/null
+DEBUT()
+inf=1
+FIN()
--- /dev/null
+DEBUT()
+inf1=1
+MA=LIRE_MAILLAGE(INFO=inf1)
+INCLUDE_MATERIAU( NOM_AFNOR='18MND5', TYPE_MODELE='REF',
+ VARIANTE='A', TYPE_VALE='NOMI',
+ NOM_MATER='MAT3', INFO=1 )
+
+FIN()
--- /dev/null
+DEBUT()
+a=1
+fmt_raison='-'*80+"""
+
+ Exception erreur_Fatale interceptee
+ Raison : %s
+
+"""+'-'*80+'\n'
+FIN()
--- /dev/null
+from Numeric import cos
+DEBUT()
+RAYCRA=1.
+EPCRA=0.1
+S_CR=3.1415*(RAYCRA**2-(RAYCRA-EPCRA)**2)
+T_CR=3.1415
+n=2
+
+MA=LIRE_MAILLAGE( )
+
+MO=AFFE_MODELE( MAILLAGE=MA,
+ AFFE=(_F(GROUP_MA = ('LI1'),
+ PHENOMENE = 'MECANIQUE',
+ MODELISATION = 'DIS_TR'),
+ ),
+ INFO=2,);
+
+carel=[0.]*78
+
+CAREG=AFFE_CARA_ELEM(MODELE=MO,
+ DISCRET=_F(GROUP_MA=('LI1'),
+ CARA = 'K_TR_L',
+ VALE = carel,
+ REPERE='LOCAL' , ),
+ ORIENTATION=(_F(GROUP_MA=('LI1',),
+ CARA='VECT_Y',
+ VALE=(0.,0.,1.),),),
+ AFFE_FIBRE =( _F(GROUP_MA='CRAYON', COOR_AXE_POUTRE = (0.,0.,), CARA='SURFACE', VALE=( 0.,S_CR/4,)),
+ _F(GROUP_MA='CRAYON', COOR_AXE_POUTRE = (0.,0.,), CARA='SURFACE', VALE=( 0.,T_CR,)),
+ _F(GROUP_MA='CRAYON', COOR_AXE_POUTRE = (0.,sin(n*22.5*pi/180),), CARA='SURFACE', VALE=( 0.,T_CR/4,)),
+ _F(GROUP_MA='CRAYON', COOR_AXE_POUTRE = (0.,(cos(n*22.5*pi/180)),), CARA='SURFACE', VALE=( 0.,T_CR/4,)),
+ ),
+ );
+
+FIN()
--- /dev/null
+DEBUT()
+a=1
+MA=LIRE_MAILLAGE()
+FIN()
--- /dev/null
+DEPL2 = FORMULE(NOM_PARA='INST',VALE='sin(OMEGAA*INST)/(OMEGAA**xx)')
+DEPLACE2=CALC_FONC_INTERP( FONCTION=DEPL2,
+ LIST_PARA=L_INST,
+ NOM_PARA='INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',
+ NOM_RESU='DEPL' )
+
+MONO_X=CALC_CHAR_SEISME( MATR_MASS=MASSE,
+ DIRECTION=( 1., 0., 0.,),
+ MONO_APPUI='OUI' )
+
+
+MACRO_PROJ_BASE(BASE=MODE_MEC,MATR_ASSE_GENE=(
+ _F( MATRICE = CO("MASS_GEN"), MATR_ASSE = MASSE),
+ _F( MATRICE = CO("RIGI_GEN"), MATR_ASSE = RIGIDITE)),
+ VECT_ASSE_GENE=_F( VECTEUR = CO("VECT_X"), VECT_ASSE = MONO_X)
+ )
+
--- /dev/null
+POURSUITE(CODE=_F( NOM = 'EFICA01A'))
+
+INCLUDE_MATERIAU( NOM_AFNOR='18MND5', TYPE_MODELE='REF',
+ VARIANTE='A', TYPE_VALE='NOMI',
+ NOM_MATER='MAT3', INFO=1 )
+
+CHMAT3=AFFE_MATERIAU( MAILLAGE=MAILLA3,
+ AFFE=_F( TOUT='OUI', MATER = MAT3, TEMP_REF = 20.))
+
+riginor = 2.88E7
+
+TRAN_GE2=DYNA_TRAN_MODAL( MASS_GENE=MGEN_BIC, RIGI_GENE=RGEN_BIC,
+ METHODE='EULER',
+ AMOR_REDUIT=( 0.07, 0.07, ),
+ MODE_STAT=MSTA_BIC,EXCIT=(
+ _F( VECT_GENE = VECT_X1, ACCE = ACCELER1,
+ MULT_APPUI = 'OUI',
+ DIRECTION = ( 1., 0., 0.,), NOEUD = 'NO1',
+ VITE = VITESSE1, DEPL = DEPLACE1),
+ _F( VECT_GENE = VECT_X2, ACCE = ACCELER2,
+ MULT_APPUI = 'OUI',
+ DIRECTION = ( 1., 0., 0.,), NOEUD = 'NO11',
+ VITE = VITESSE2, DEPL = DEPLACE2)),
+ CHOC=_F( GROUP_NO_1 = 'MASSES1',
+ GROUP_NO_2 = 'MASSES2',
+ OBSTACLE = GRILLE,
+ INTITULE = 'NO2/NO12',
+ NORM_OBST = (0., 0., 1.,),
+ DIST_1 = 0.4495,
+ DIST_2 = 0.4495,
+ RIGI_NOR = riginor,
+ AMOR_NOR = 0.,
+ RIGI_TAN = 0.,
+ COULOMB = 0.),
+ INCREMENT=_F( INST_INIT = 0., INST_FIN = 1., PAS = 0.00025),
+ ARCHIVAGE=_F( PAS_ARCH = 8)
+ )
+
+LISTIMP=DEFI_LIST_REEL( DEBUT=0.,
+ INTERVALLE=_F( JUSQU_A = 1., NOMBRE = 500))
+
+RESUA1=REST_BASE_PHYS( RESU_GENE=TRAN_GE1,
+ LIST_INST=LISTIMP,
+ INTERPOL='LIN',
+ NOM_CHAM='DEPL',
+ MULT_APPUI='OUI'
+ )
+
+FIN()
--- /dev/null
+# MODIF DATE 20/09/2004 AUTEUR DURAND C.DURAND
+# TITRE TEST DE NON REGRESSION DE L IHM EFICAS - DERIVE DE SDND102A
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 cas test est gere en configuration dans la base ASTER, il sert de
+# modele pour prononcer la recette de l IHM d EFICAS : l objectif est de
+# pouvoir recreer ce test a l identique dans EFICAS a partir d une page
+# blanche.
+# On a donc essaye d y placer toutes les commandes un peu particulieres
+# du langage de commandes d ASTER
+#
+# Il s agit en fait du test SDND102A auquel on a ajoute :
+# la definition d un parametre (VAL)
+# l inclusion d un fichier (INCLUDE)
+# une poursuite (POURSUITE)
+# Il contient ainsi :
+# des parametres, des formules, des macros, des mots cles facteurs repetes
+# (y compris conditionnes par des regles : calc_fonction / COMB),
+# des blocs (mode_iter_simult,calc_char_seisme), un defi_valeur, un parametre.
+#
+#
+# Il faudra y associer quelques recommandations pour la recette :
+# - verifier qu en ouvrant le .com0, il demande bien a browser le .comm puis, en cascade, le .11
+# - verifier qu on peut bien supprimer une commande, un mot cle simple et facteur
+# - verifier les acces a la doc
+#
+#
+
+
+DEBUT(CODE=_F(NOM='EFICA01A',NIV_PUB_WEB='INTERNET',VISU_EFICAS='NON'),)
+
+MAILLAGE=LIRE_MAILLAGE()
+
+MAILLAGE=DEFI_GROUP(reuse=MAILLAGE,
+ MAILLAGE=MAILLAGE,
+ CREA_GROUP_NO=(_F(NOEUD='NO2',
+ NOM='MASSES',),
+ _F(NOEUD='NO1',
+ NOM='ENCASTRE',),),)
+
+MAILLA2=LIRE_MAILLAGE(UNITE=21,)
+
+MODELE=AFFE_MODELE(MAILLAGE=MAILLAGE,
+ AFFE=(_F(GROUP_MA='RESSORT',
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),
+ _F(GROUP_NO='MASSES',
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),),)
+
+BICHOC=AFFE_MODELE(MAILLAGE=MAILLA2,
+ AFFE=(_F(GROUP_MA='RESSORTS',
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),
+ _F(GROUP_NO=('MASSES1','MASSES2',),
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),),)
+VAL = 98696.0
+
+
+CARA_ELE=AFFE_CARA_ELEM(MODELE=MODELE,
+ DISCRET=(_F(GROUP_MA='RESSORT',
+ REPERE='GLOBAL',
+ CARA='K_T_D_L',
+ VALE=(VAL,0.0,0.0,),),
+ _F(GROUP_NO='MASSES',
+ CARA='M_T_D_N',
+ VALE=25.0,),),)
+
+CARA_BIC=AFFE_CARA_ELEM(MODELE=BICHOC,
+ DISCRET=(_F(GROUP_MA='RESSORTS',
+ REPERE='GLOBAL',
+ CARA='K_T_D_L',
+ VALE=(VAL,0.0,0.0,),),
+ _F(GROUP_NO='MASSES1',
+ CARA='M_T_D_N',
+ VALE=25.0,),
+ _F(GROUP_NO='MASSES2',
+ CARA='M_T_D_N',
+ VALE=25.0,),),)
+
+CON_LIM=AFFE_CHAR_MECA(MODELE=MODELE,
+ DDL_IMPO=(_F(GROUP_NO='ENCASTRE',
+ DX=0.0,
+ DY=0.0,
+ DZ=0.0,),
+ _F(GROUP_NO='MASSES',
+ DY=0.0,
+ DZ=0.0,),),)
+
+CL_BICHO=AFFE_CHAR_MECA(MODELE=BICHOC,
+ DDL_IMPO=(_F(GROUP_NO='ENCBICHO',
+ DX=0.0,
+ DY=0.0,
+ DZ=0.0,),
+ _F(GROUP_NO=('MASSES1','MASSES2',),
+ DY=0.0,
+ DZ=0.0,),),)
+
+MACRO_MATR_ASSE(MODELE=MODELE,
+ CARA_ELEM=CARA_ELE,
+ CHARGE=CON_LIM,
+ NUME_DDL=CO('NUMEDDL'),
+ MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
+ OPTION='RIGI_MECA',),
+ _F(MATRICE=CO('MASSE'),
+ OPTION='MASS_MECA',),),)
+
+MACRO_MATR_ASSE(MODELE=BICHOC,
+ CARA_ELEM=CARA_BIC,
+ CHARGE=CL_BICHO,
+ NUME_DDL=CO('NUMDDLC'),
+ MATR_ASSE=(_F(MATRICE=CO('RIGI_BIC'),
+ OPTION='RIGI_MECA',),
+ _F(MATRICE=CO('MASS_BIC'),
+ OPTION='MASS_MECA',),),)
+
+MODE_MEC=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
+ MATR_B=MASSE,)
+
+MODE_MEC=NORM_MODE(reuse =MODE_MEC,
+ MODE=MODE_MEC,
+ NORME='MASS_GENE',)
+
+MODE_BIC=MODE_ITER_SIMULT(MATR_A=RIGI_BIC,
+ MATR_B=MASS_BIC,
+ METHODE='JACOBI',
+ OPTION='SANS',
+ CALC_FREQ=_F(OPTION='BANDE',
+ FREQ=(1.0,10.0,),),)
+
+MODE_BIC=NORM_MODE(reuse =MODE_BIC,
+ MODE=MODE_BIC,
+ NORME='MASS_GENE',)
+
+MODE_STA=MODE_STATIQUE(MATR_RIGI=RIGIDITE,
+ MATR_MASS=MASSE,
+ MODE_STAT=_F(TOUT='OUI',
+ AVEC_CMP='DX',),)
+
+MSTA_BIC=MODE_STATIQUE(MATR_RIGI=RIGI_BIC,
+ MATR_MASS=MASS_BIC,
+ MODE_STAT=_F(TOUT='OUI',
+ AVEC_CMP='DX',),)
+
+L_INST=DEFI_LIST_REEL(DEBUT=0.0,
+ INTERVALLE=_F(JUSQU_A=1.0,
+ PAS=1.E-4,),)
+
+OMEGAA=2.*pi*10.
+
+ACCE1 = FORMULE(VALE = 'sin(OMEGAA*INST)',
+ NOM_PARA='INST')
+
+ACCELER1=CALC_FONC_INTERP(FONCTION=ACCE1,
+ NOM_RESU='ACCE',
+ LIST_PARA=L_INST,
+ NOM_PARA = 'INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',)
+
+ACCE2 = FORMULE(VALE = '-sin(OMEGAA*INST)',
+ NOM_PARA='INST')
+
+ACCELER2=CALC_FONC_INTERP(FONCTION=ACCE2,
+ NOM_RESU='ACCE',
+ LIST_PARA=L_INST,
+ NOM_PARA = 'INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',)
+
+VITE1 = FORMULE(VALE = '-cos(OMEGAA*INST)/OMEGAA',
+ NOM_PARA='INST')
+
+VITESSE1=CALC_FONC_INTERP(FONCTION=VITE1,
+ NOM_RESU='VITE',
+ LIST_PARA=L_INST,
+ NOM_PARA = 'INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',)
+
+DEPL1 = FORMULE(VALE = '-sin(OMEGAA*INST)/(OMEGAA**2)',
+ NOM_PARA='INST')
+
+DEPLACE1=CALC_FONC_INTERP(FONCTION=DEPL1,
+ NOM_RESU='DEPL',
+ LIST_PARA=L_INST,
+ NOM_PARA = 'INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',)
+
+VITE2 = FORMULE(VALE = 'cos(OMEGAA*INST)/OMEGAA',
+ NOM_PARA='INST')
+
+VITESSE2=CALC_FONC_INTERP(FONCTION=VITE2,
+ NOM_RESU='VITE',
+ LIST_PARA=L_INST,
+ NOM_PARA = 'INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',)
+
+xx=2
+
+INCLUDE(UNITE=11,
+ INFO=1,)
+
+MUR=DEFI_OBSTACLE(TYPE='PLAN_Z',)
+
+TRAN_GE1=DYNA_TRAN_MODAL(METHODE='EULER',
+ MASS_GENE=MASS_GEN,
+ RIGI_GENE=RIGI_GEN,
+ AMOR_REDUIT=0.07,
+ MODE_STAT=MODE_STA,
+ INCREMENT=_F(INST_INIT=0.0,
+ INST_FIN=1.0,
+ PAS=2.0E-4,),
+ ARCHIVAGE=_F(PAS_ARCH=8,),
+ EXCIT=_F(VECT_GENE=VECT_X,
+ ACCE=ACCELER1,
+ VITE=VITESSE1,
+ DEPL=DEPLACE1,
+ MULT_APPUI='OUI',
+ DIRECTION=(1.0,0.0,0.0,),
+ NOEUD='NO1',),
+ CHOC=_F(INTITULE='NO2/MUR',
+ GROUP_NO_1='MASSES',
+ OBSTACLE=MUR,
+ ORIG_OBST=(-1.0,0.0,0.0,),
+ NORM_OBST=(0.0,0.0,1.0,),
+ JEU=1.1005,
+ RIGI_NOR=5.76E7,
+ AMOR_NOR=0.0,
+ RIGI_TAN=0.0,
+ COULOMB=0.0,),)
+
+MULT_X1=CALC_CHAR_SEISME(MATR_MASS=MASS_BIC,
+ DIRECTION=(1.0,0.0,0.0,),
+ MODE_STAT=MSTA_BIC,
+ NOEUD='NO1',)
+
+MULT_X2=CALC_CHAR_SEISME(MATR_MASS=MASS_BIC,
+ DIRECTION=(1.0,0.0,0.0,),
+ MODE_STAT=MSTA_BIC,
+ NOEUD='NO11',)
+
+MACRO_PROJ_BASE(BASE=MODE_BIC,
+ MATR_ASSE_GENE=(_F(MATRICE=CO('MGEN_BIC'),
+ MATR_ASSE=MASS_BIC,),
+ _F(MATRICE=CO('RGEN_BIC'),
+ MATR_ASSE=RIGI_BIC,),),
+ VECT_ASSE_GENE=(_F(VECTEUR=CO('VECT_X1'),
+ VECT_ASSE=MULT_X1,),
+ _F(VECTEUR=CO('VECT_X2'),
+ VECT_ASSE=MULT_X2,),),)
+
+GRILLE=DEFI_OBSTACLE(TYPE='BI_PLAN_Z',)
+
+MAILLA3=LIRE_MAILLAGE(UNITE=22,)
+
+FIN()
--- /dev/null
+DEPL2 = FORMULE(NOM_PARA='INST',VALE='sin(OMEGAA*INST)/(OMEGAA**xx)')
+DEPLACE2=CALC_FONC_INTERP( FONCTION=DEPL2,
+ LIST_PARA=L_INST,
+ NOM_PARA='INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',
+ NOM_RESU='DEPL' )
+
+MONO_X=CALC_CHAR_SEISME( MATR_MASS=MASSE,
+ DIRECTION=( 1., 0., 0.,),
+ MONO_APPUI='OUI' )
+
+
+MACRO_PROJ_BASE(BASE=MODE_MEC,MATR_ASSE_GENE=(
+ _F( MATRICE = CO("MASS_GEN"), MATR_ASSE = MASSE),
+ _F( MATRICE = CO("RIGI_GEN"), MATR_ASSE = RIGIDITE)),
+ VECT_ASSE_GENE=_F( VECTEUR = CO("VECT_X"), VECT_ASSE = MONO_X)
+ )
+
--- /dev/null
+# MODIF DATE 20/09/2004 AUTEUR DURAND C.DURAND
+# TITRE TEST DE NON REGRESSION DE L IHM EFICAS - DERIVE DE SDND102A
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001 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 cas test est gere en configuration dans la base ASTER, il sert de
+# modele pour prononcer la recette de l IHM d EFICAS : l objectif est de
+# pouvoir recreer ce test a l identique dans EFICAS a partir d une page
+# blanche.
+# On a donc essaye d y placer toutes les commandes un peu particulieres
+# du langage de commandes d ASTER
+#
+# Il s agit en fait du test SDND102A auquel on a ajoute :
+# la definition d un parametre (VAL)
+# l inclusion d un fichier (INCLUDE)
+# une poursuite (POURSUITE)
+# Il contient ainsi :
+# des parametres, des formules, des macros, des mots cles facteurs repetes
+# (y compris conditionnes par des regles : calc_fonction / COMB),
+# des blocs (mode_iter_simult,calc_char_seisme), un defi_valeur, un parametre.
+#
+#
+# Il faudra y associer quelques recommandations pour la recette :
+# - verifier qu en ouvrant le .com0, il demande bien a browser le .comm puis, en cascade, le .11
+# - verifier qu on peut bien supprimer une commande, un mot cle simple et facteur
+# - verifier les acces a la doc
+#
+#
+
+
+DEBUT(CODE=_F(NOM='EFICA01A',NIV_PUB_WEB='INTERNET',VISU_EFICAS='NON'),)
+
+MAILLAGE=LIRE_MAILLAGE()
+
+MAILLAGE=DEFI_GROUP(reuse=MAILLAGE,
+ MAILLAGE=MAILLAGE,
+ CREA_GROUP_NO=(_F(NOEUD='NO2',
+ NOM='MASSES',),
+ _F(NOEUD='NO1',
+ NOM='ENCASTRE',),),)
+
+MAILLA2=LIRE_MAILLAGE(UNITE=21,)
+
+MODELE=AFFE_MODELE(MAILLAGE=MAILLAGE,
+ AFFE=(_F(GROUP_MA='RESSORT',
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),
+ _F(GROUP_NO='MASSES',
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),),)
+
+BICHOC=AFFE_MODELE(MAILLAGE=MAILLA2,
+ AFFE=(_F(GROUP_MA='RESSORTS',
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),
+ _F(GROUP_NO=('MASSES1','MASSES2',),
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),),)
+VAL = 98696.0
+
+
+CARA_ELE=AFFE_CARA_ELEM(MODELE=MODELE,
+ DISCRET=(_F(GROUP_MA='RESSORT',
+ REPERE='GLOBAL',
+ CARA='K_T_D_L',
+ VALE=(VAL,0.0,0.0,),),
+ _F(GROUP_NO='MASSES',
+ CARA='M_T_D_N',
+ VALE=25.0,),),)
+
+CARA_BIC=AFFE_CARA_ELEM(MODELE=BICHOC,
+ DISCRET=(_F(GROUP_MA='RESSORTS',
+ REPERE='GLOBAL',
+ CARA='K_T_D_L',
+ VALE=(VAL,0.0,0.0,),),
+ _F(GROUP_NO='MASSES1',
+ CARA='M_T_D_N',
+ VALE=25.0,),
+ _F(GROUP_NO='MASSES2',
+ CARA='M_T_D_N',
+ VALE=25.0,),),)
+
+CON_LIM=AFFE_CHAR_MECA(MODELE=MODELE,
+ DDL_IMPO=(_F(GROUP_NO='ENCASTRE',
+ DX=0.0,
+ DY=0.0,
+ DZ=0.0,),
+ _F(GROUP_NO='MASSES',
+ DY=0.0,
+ DZ=0.0,),),)
+
+CL_BICHO=AFFE_CHAR_MECA(MODELE=BICHOC,
+ DDL_IMPO=(_F(GROUP_NO='ENCBICHO',
+ DX=0.0,
+ DY=0.0,
+ DZ=0.0,),
+ _F(GROUP_NO=('MASSES1','MASSES2',),
+ DY=0.0,
+ DZ=0.0,),),)
+
+MACRO_MATR_ASSE(MODELE=MODELE,
+ CARA_ELEM=CARA_ELE,
+ CHARGE=CON_LIM,
+ NUME_DDL=CO('NUMEDDL'),
+ MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'),
+ OPTION='RIGI_MECA',),
+ _F(MATRICE=CO('MASSE'),
+ OPTION='MASS_MECA',),),)
+
+MACRO_MATR_ASSE(MODELE=BICHOC,
+ CARA_ELEM=CARA_BIC,
+ CHARGE=CL_BICHO,
+ NUME_DDL=CO('NUMDDLC'),
+ MATR_ASSE=(_F(MATRICE=CO('RIGI_BIC'),
+ OPTION='RIGI_MECA',),
+ _F(MATRICE=CO('MASS_BIC'),
+ OPTION='MASS_MECA',),),)
+
+MODE_MEC=MODE_ITER_SIMULT(MATR_A=RIGIDITE,
+ MATR_B=MASSE,)
+
+MODE_MEC=NORM_MODE(reuse =MODE_MEC,
+ MODE=MODE_MEC,
+ NORME='MASS_GENE',)
+
+MODE_BIC=MODE_ITER_SIMULT(MATR_A=RIGI_BIC,
+ MATR_B=MASS_BIC,
+ METHODE='JACOBI',
+ OPTION='SANS',
+ CALC_FREQ=_F(OPTION='BANDE',
+ FREQ=(1.0,10.0,),),)
+
+MODE_BIC=NORM_MODE(reuse =MODE_BIC,
+ MODE=MODE_BIC,
+ NORME='MASS_GENE',)
+
+MODE_STA=MODE_STATIQUE(MATR_RIGI=RIGIDITE,
+ MATR_MASS=MASSE,
+ MODE_STAT=_F(TOUT='OUI',
+ AVEC_CMP='DX',),)
+
+MSTA_BIC=MODE_STATIQUE(MATR_RIGI=RIGI_BIC,
+ MATR_MASS=MASS_BIC,
+ MODE_STAT=_F(TOUT='OUI',
+ AVEC_CMP='DX',),)
+
+L_INST=DEFI_LIST_REEL(DEBUT=0.0,
+ INTERVALLE=_F(JUSQU_A=1.0,
+ PAS=1.E-4,),)
+
+OMEGAA=2.*pi*10.
+
+ACCE1 = FORMULE(VALE = 'sin(OMEGAA*INST)',
+ NOM_PARA='INST')
+
+ACCELER1=CALC_FONC_INTERP(FONCTION=ACCE1,
+ NOM_RESU='ACCE',
+ LIST_PARA=L_INST,
+ NOM_PARA = 'INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',)
+
+ACCE2 = FORMULE(VALE = '-sin(OMEGAA*INST)',
+ NOM_PARA='INST')
+
+ACCELER2=CALC_FONC_INTERP(FONCTION=ACCE2,
+ NOM_RESU='ACCE',
+ LIST_PARA=L_INST,
+ NOM_PARA = 'INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',)
+
+VITE1 = FORMULE(VALE = '-cos(OMEGAA*INST)/OMEGAA',
+ NOM_PARA='INST')
+
+VITESSE1=CALC_FONC_INTERP(FONCTION=VITE1,
+ NOM_RESU='VITE',
+ LIST_PARA=L_INST,
+ NOM_PARA = 'INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',)
+
+DEPL1 = FORMULE(VALE = '-sin(OMEGAA*INST)/(OMEGAA**2)',
+ NOM_PARA='INST')
+
+DEPLACE1=CALC_FONC_INTERP(FONCTION=DEPL1,
+ NOM_RESU='DEPL',
+ LIST_PARA=L_INST,
+ NOM_PARA = 'INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',)
+
+VITE2 = FORMULE(VALE = 'cos(OMEGAA*INST)/OMEGAA',
+ NOM_PARA='INST')
+
+VITESSE2=CALC_FONC_INTERP(FONCTION=VITE2,
+ NOM_RESU='VITE',
+ LIST_PARA=L_INST,
+ NOM_PARA = 'INST',
+ PROL_DROITE='LINEAIRE',
+ PROL_GAUCHE='LINEAIRE',)
+
+xx=2
+
+INCLUDE(UNITE=11,
+ INFO=1,)
+
+MUR=DEFI_OBSTACLE(TYPE='PLAN_Z',)
+
+TRAN_GE1=DYNA_TRAN_MODAL(METHODE='EULER',
+ MASS_GENE=MASS_GEN,
+ RIGI_GENE=RIGI_GEN,
+ AMOR_REDUIT=0.07,
+ MODE_STAT=MODE_STA,
+ INCREMENT=_F(INST_INIT=0.0,
+ INST_FIN=1.0,
+ PAS=2.0E-4,),
+ ARCHIVAGE=_F(PAS_ARCH=8,),
+ EXCIT=_F(VECT_GENE=VECT_X,
+ ACCE=ACCELER1,
+ VITE=VITESSE1,
+ DEPL=DEPLACE1,
+ MULT_APPUI='OUI',
+ DIRECTION=(1.0,0.0,0.0,),
+ NOEUD='NO1',),
+ CHOC=_F(INTITULE='NO2/MUR',
+ GROUP_NO_1='MASSES',
+ OBSTACLE=MUR,
+ ORIG_OBST=(-1.0,0.0,0.0,),
+ NORM_OBST=(0.0,0.0,1.0,),
+ JEU=1.1005,
+ RIGI_NOR=5.76E7,
+ AMOR_NOR=0.0,
+ RIGI_TAN=0.0,
+ COULOMB=0.0,),)
+
+MULT_X1=CALC_CHAR_SEISME(MATR_MASS=MASS_BIC,
+ DIRECTION=(1.0,0.0,0.0,),
+ MODE_STAT=MSTA_BIC,
+ NOEUD='NO1',)
+
+MULT_X2=CALC_CHAR_SEISME(MATR_MASS=MASS_BIC,
+ DIRECTION=(1.0,0.0,0.0,),
+ MODE_STAT=MSTA_BIC,
+ NOEUD='NO11',)
+
+MACRO_PROJ_BASE(BASE=MODE_BIC,
+ MATR_ASSE_GENE=(_F(MATRICE=CO('MGEN_BIC'),
+ MATR_ASSE=MASS_BIC,),
+ _F(MATRICE=CO('RGEN_BIC'),
+ MATR_ASSE=RIGI_BIC,),),
+ VECT_ASSE_GENE=(_F(VECTEUR=CO('VECT_X1'),
+ VECT_ASSE=MULT_X1,),
+ _F(VECTEUR=CO('VECT_X2'),
+ VECT_ASSE=MULT_X2,),),)
+
+GRILLE=DEFI_OBSTACLE(TYPE='BI_PLAN_Z',)
+
+MAILLA3=LIRE_MAILLAGE(UNITE=22,)
+
+FIN()
--- /dev/null
+DEBUT()
+MA=LIRE_MAILLAGE()
+INCLUDE_MATERIAU( NOM_AFNOR='18MND5', TYPE_MODELE='REF',
+ VARIANTE='A', TYPE_VALE='NOMI',
+ NOM_MATER='MAT3', INFO=1 )
+
+FIN()
--- /dev/null
+DEBUT()
+P1 = 9.8;
+
+P2 = 8.8;
+
+P3 = 7;
+
+P5 = P3*P1;
+
+P6 = P1-3;
+
+P4 = [2,3,4];
+
+a = 1.
+b=3
+c= 3 * 5
+cc="b+3"
+d= 4 + \
+ 5 \
+ -4
+e=LIRE_MAILLAGE()
+##MA=LIRE_MAILLAGE()
+x=(1,2)
+y=[3,
+#comme
+4]
+z="a"
+zz='v'
+u='''aaaa
+bbbb'''
+if 1:
+ a=45
+else:
+ a=5.6
+d={"a":0}
+e={"a":0,
+#comme
+"d":4}
+a==1
+s="-"*80
+fmt_raison='-'*80+'''
+
+ Exception erreur_Fatale interceptee
+ Raison : %s
+
+'''+'-'*80+'xxxxxxxxxxxxxxxx\n'
+
+# commen """
+# commen '''
+# commen '
+# commen "
+BETA=3.41557E-08
+
+C_0=105.7
+
+C_EQ_I05=69.1
+
+C_EQ_E05=69.1
+
+C_EQ_I10=51.6
+
+C_EQ_E10=69.1
+
+FL_INT05 = FORMULE(NOM_PARA='TEMP',VALE='''
+(0.5*BETA / ((C_0 - C_EQ_I05 )**2)
+ * (TEMP - (2.*C_0 - C_EQ_I05 ))*(TEMP - C_EQ_I05 ))''')
+
+zz=8.9;
+zz=8.9;aa=10
+
+FIN()
--- /dev/null
+import os,glob,sys
+import unittest
+
+from Editeur import appli
+
+from config import ASTERDIR
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(ASTERDIR,"[a-l]*.comm")):
+ ff=open(f)
+ text=ff.read()
+ ff.close()
+ if text.find("VISU_EFICAS") != -1:continue
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i,f,ff,text,o
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
--- /dev/null
+import os,glob,sys
+import unittest
+
+from Editeur import appli
+
+from config import ASTERDIR
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(ASTERDIR,"z*.comm")):
+ if f == os.path.join(ASTERDIR,"zzzz118c.comm"):continue
+ if f == os.path.join(ASTERDIR,"zzzz118d.comm"):continue
+ ff=open(f)
+ text=ff.read()
+ ff.close()
+ if text.find("VISU_EFICAS") != -1:continue
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i,f,o,ff,text
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
+
--- /dev/null
+import os,glob,sys
+import unittest
+
+from Editeur import appli
+
+from config import ASTERDIR
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(ASTERDIR,"[m-r]*.comm")):
+ ff=open(f)
+ text=ff.read()
+ ff.close()
+ if text.find("VISU_EFICAS") != -1:continue
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i,f,o,ff,text
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
+
--- /dev/null
+import os,glob,sys
+import unittest
+
+from Editeur import appli
+
+from config import ASTERDIR
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(ASTERDIR,"s[a-d]*.comm")):
+ ff=open(f)
+ text=ff.read()
+ ff.close()
+ if text.find("VISU_EFICAS") != -1:continue
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i,f,o,ff,text
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
+
--- /dev/null
+import os,glob,sys
+import unittest
+
+from Editeur import appli
+
+from config import ASTERDIR
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(ASTERDIR,"s[e-r]*.comm")):
+ ff=open(f)
+ text=ff.read()
+ ff.close()
+ if text.find("VISU_EFICAS") != -1:continue
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i,f,o,ff,text
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
+
--- /dev/null
+import os,glob,sys
+import unittest
+
+from Editeur import appli
+
+from config import ASTERDIR
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(ASTERDIR,"ssl[a-l]*.comm")):
+ ff=open(f)
+ text=ff.read()
+ ff.close()
+ if text.find("VISU_EFICAS") != -1:continue
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i,f,o,ff,text
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
+
--- /dev/null
+import os,glob,sys
+import unittest
+
+from Editeur import appli
+
+from config import ASTERDIR
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(ASTERDIR,"ssl[m-z]*.comm")):
+ ff=open(f)
+ text=ff.read()
+ ff.close()
+ if text.find("VISU_EFICAS") != -1:continue
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i,f,o,ff,text
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
+
--- /dev/null
+import os,glob,sys
+import unittest
+
+from Editeur import appli
+
+from config import ASTERDIR
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(ASTERDIR,"ss[m-z]*.comm")):
+ ff=open(f)
+ text=ff.read()
+ ff.close()
+ if text.find("VISU_EFICAS") != -1:continue
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i,f,o,ff,text
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
+
--- /dev/null
+import os,glob,sys
+import unittest
+
+from Editeur import appli
+
+from config import ASTERDIR
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(ASTERDIR,"s[t-z]*.comm")):
+ ff=open(f)
+ text=ff.read()
+ ff.close()
+ if text.find("VISU_EFICAS") != -1:continue
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i,f,o,ff,text
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
+
--- /dev/null
+import os,glob,sys
+import unittest
+
+from Editeur import appli
+
+from config import ASTERDIR
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(ASTERDIR,"[t-y]*.comm")):
+ ff=open(f)
+ text=ff.read()
+ ff.close()
+ if text.find("VISU_EFICAS") != -1:continue
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i,f,o,ff,text
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
+
--- /dev/null
+import os,glob,sys
+import unittest
+import difflib
+
+import prefs
+from Editeur import appli
+
+def add_param(j,pos,nom,valeur):
+ co=j.addentite("PARAMETRE",pos)
+ co.set_nom(nom)
+ co.set_valeur(valeur)
+ return co
+
+def add_mcsimp(obj,nom,valeur):
+ mcs=obj.get_child(nom,restreint='oui')
+ if mcs is None:
+ pos=obj.get_index_child(nom)
+ mcs=obj.addentite(nom,pos)
+ mcs.set_valeur(mcs.eval_val(valeur))
+ return mcs
+
+def cdiff(text1,text2):
+ return " ".join(difflib.context_diff(text1.splitlines(1),text2.splitlines(1)))
+
+class TestCase(unittest.TestCase):
+ app=None
+ def setUp(self):
+ if self.app == None:
+ self.app=appli.STANDALONE(version='v8.2')
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ i=0
+ for f in glob.glob(os.path.join(prefs.INSTALLDIR,"Tests/testcomm/*.comm")):
+ for o in ('3','2','1','0','m'):
+ f=f[:-1]+o
+ if os.path.isfile(f):break
+
+ i=i+1
+ exec """def test%s(self,file="%s"):
+ self.commtest(file)
+""" % (i,f)
+ del i
+
+ def commtest(self,file):
+ """ Test generique"""
+ print file
+ j=self.app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ CONTEXT.unset_current_step()
+ j.supprime()
+ assert sys.getrefcount(j) == 2,sys.getrefcount(j)
--- /dev/null
+DEBUT()
+YOUNG = DEFI_PARA_SENSI(VALE=1.)
+FORC = DEFI_PARA_SENSI(VALE=1.)
+MA=LIRE_MAILLAGE()
+MA=DEFI_GROUP( reuse=MA, MAILLAGE=MA,
+ CREA_GROUP_NO=_F(
+ GROUP_MA = ( 'LP9P10', 'LP9P10B',
+ 'LP8P9', 'LP8P9B',
+ ))
+ )
+
+MO=AFFE_MODELE( MAILLAGE=MA,
+ AFFE=_F( TOUT = 'OUI',
+ PHENOMENE = 'MECANIQUE',
+ MODELISATION = 'C_PLAN')
+ )
+ZERO = DEFI_CONSTANTE(VALE=0.)
+NU = DEFI_CONSTANTE(VALE=0.3)
+ALPHA = DEFI_CONSTANTE(VALE=0.)
+
+MAT=DEFI_MATERIAU(ELAS_FO=_F( E = YOUNG, NU = NU,
+ TEMP_DEF_ALPHA =20.,
+ ALPHA = ALPHA, RHO=7800.,))
+
+CHMAT=AFFE_MATERIAU( MAILLAGE=MA,
+ AFFE=_F( TOUT = 'OUI',
+ MATER = MAT)
+ )
+
+CH=AFFE_CHAR_MECA_F( MODELE=MO,
+ FORCE_INTERNE=_F(TOUT='OUI',FY=FORC,),
+ DDL_IMPO=(
+ _F( GROUP_NO = 'LP8P9',
+ DX = ZERO),
+ _F( GROUP_NO = 'LP8P9B',
+ DX = ZERO),
+ _F( GROUP_NO = 'P11',
+ DY = ZERO))
+ )
+
+DEP=MECA_STATIQUE( MODELE=MO, CHAM_MATER=CHMAT,
+ SENSIBILITE = (FORC),
+ EXCIT=_F( CHARGE = CH),
+ )
+
+DEP=CALC_ELEM(reuse=DEP,RESULTAT=DEP,
+ SENSIBILITE = (FORC),
+ OPTION=('EPSI_ELGA_DEPL','SIEF_ELGA_DEPL',),)
+
+FOND=DEFI_FOND_FISS( MAILLAGE=MA,
+ FOND_FISS=_F( GROUP_NO = ('P0',)),
+ NORMALE=(0., 1., 0.,)
+ )
+
+THETA0=CALC_THETA( MODELE=MO,
+ THETA_2D=_F( GROUP_NO = ('P0',),
+ MODULE = 1.,
+ R_INF = 3.75E-5,
+ R_SUP = 7.50E-5),
+ DIRECTION=(1., 0., 0.,)
+ )
+
+G0=CALC_G_THETA_T( RESULTAT=DEP,
+ THETA=THETA0,
+ SYME_CHAR='SANS',
+ COMP_ELAS=_F( RELATION = 'ELAS',
+ DEFORMATION = 'PETIT')
+ )
+
+DG0=CALC_G_THETA_T( RESULTAT=DEP,
+ SENSIBILITE = (FORC),
+ THETA=THETA0,
+ SYME_CHAR='SANS',
+ COMP_ELAS=_F( RELATION = 'ELAS',
+ DEFORMATION = 'PETIT')
+ )
+
+TEST_TABLE( TABLE=DG0,
+ NOM_PARA='G',
+ SENSIBILITE = (FORC),
+ VALE=1.06E-2,
+ REFERENCE='ANALYTIQUE',
+ PRECISION=0.0005 )
+
+
+FIN()
+MA1=LIRE_MAILLAGE()
+MO1=AFFE_MODELE( MAILLAGE=MA1, AFFE=_F( TOUT = 'OUI',
+ PHENOMENE = 'MECANIQUE', MODELISATION = 'C_PLAN'))
+
+FIN()
--- /dev/null
+
+
+DEBUT();
+P1 = 9.8;
+
+P2 = 8.8;
+
+P3 = 7;
+
+P5 = (P3 * P1);
+
+P6 = (P1 - 3);
+
+P4 = [2, 3, 4];
+
+#Pas trouve shellpanel
+
+MAILLA2=LIRE_MAILLAGE(UNITE=P4[1],);
+
+aaa = FORMULE(VALE='a+z',
+ NOM_PARA=('a','z',),);
+
+MAIL=LIRE_MAILLAGE(UNITE=P3,);
+# 'LIRE_MAILLAGE', 'UNITE' --> uniquebasepanel
+
+az = FORMULE(VALE='aaaaa',
+ NOM_PARA=('ae','inst',),);
+
+AFFE1=AFFE_MODELE(MAILLAGE=MAIL,
+ AFFE=(_F(GROUP_MA=('RESSORT','eee',),
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),
+ _F(GROUP_MA='MASSES',
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),
+ _F(GROUP_NO=('GNP3','GNP5','GNP6','GNP7','GNP8','GNP9','GNP10','GNP11','GNP12',),
+ PHENOMENE='ACOUSTIQUE',
+ MODELISATION='PLAN',),),);
+
+MOD=AFFE_MODELE(MAILLAGE=MAIL,
+ AFFE=(_F(GROUP_MA='RESSORT',
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),
+ _F(GROUP_MA='MASSES',
+ PHENOMENE='MECANIQUE',
+ MODELISATION='DIS_T',),
+ _F(TOUT='OUI',
+ PHENOMENE='THERMIQUE',
+ MODELISATION='COQUE',),),);
+
+CARA=AFFE_CARA_ELEM(MODELE=MOD,
+ POUTRE=_F(GROUP_MA='MA',
+ SECTION='CERCLE',
+ CARA='R',
+ VALE=(3.0,P6,),),);
+# 'AFFE_MODELE', 'MAILLAGE' --> uniqueassdpanel
+# AFFE_MODELE', 'AFFE', 'GROUP_MA' --> plusieursbasepanel
+# 'AFFE_MODELE', 'AFFE', 'PHENOMENE' --> uniqueintopanel
+# 'AFFE_MODELE', 'AFFE', 'b_mecanique'--> plusieursintopanel
+
+F1=DEFI_FONCTION(NOM_PARA='DX',
+ VALE=(5.0,3.0,P4[1],P3,),);
+
+F3=DEFI_FONCTION(NOM_PARA='DRX',
+ VALE_C=(5.0,7.0,9.0,9.0,8.0,7.0,),);
+# 'DEFI_FONCTION', 'VALE' --> fonctionpanel
+
+MATER2=DEFI_MATERIAU(ELAS=_F(E=100000000000.0,
+ NU=0.0,),
+ ECRO_ASYM_LINE=_F(DC_SIGM_EPSI=0.0,
+ SY_C=200000000.0,
+ DT_SIGM_EPSI=0.0,
+ SY_T=50000000.0,),);
+
+PS1=DEFI_PARA_SENSI(VALE=1.0,);
+
+PS2=DEFI_PARA_SENSI(VALE=1.0,);
+
+PS3=DEFI_PARA_SENSI(VALE=1.0,);
+
+CHMAT2=AFFE_MATERIAU(MAILLAGE=MAIL,
+ AFFE=_F(TOUT='OUI',
+ MATER=MATER2,),);
+
+AAAZ=AFFE_CHAR_THER(MODELE=AFFE1,
+ TEMP_IMPO=_F(TOUT='OUI',
+ TEMP=0.0,),);
+
+TH1=THER_LINEAIRE(MODELE=AFFE1,
+ CHAM_MATER=CHMAT2,
+ EXCIT=_F(CHARGE=AAAZ,),
+ SENSIBILITE=(PS1,PS2,),);
+# 'THER_LINEAIRE', 'SENSIBILITE' --> plusieursassdpanel
+
+ACA1=AFFE_CHAR_ACOU(MODELE=AFFE1,
+ PRES_IMPO=_F(TOUT='OUI',
+ PRES=('RI',3.0,3.0,),),);
+# 'AFFE_CHAR_ACOU', 'PRES_IMPO', 'PRES' --> uniquecomppanel
+
+MACRO_MATR_ASSE(MODELE=AFFE1,
+ NUME_DDL=CO('DDL1'),
+ MATR_ASSE=_F(MATRICE=CO('MAT1'),
+ OPTION='RIGI_THER',),);
+# 'MACRO_MATR_ASSE', 'MATR_ASSE', 'MATRICE' --> uniquesdcopanel
+
+FIN();
--- /dev/null
+import os
+import unittest
+import difflib
+
+import prefs
+from Editeur import appli
+from Editeur import comploader
+from Editeur import Objecttreeitem
+
+def add_param(j,pos,nom,valeur):
+ co=j.addentite("PARAMETRE",pos)
+ co.set_nom(nom)
+ co.set_valeur(valeur)
+ return co
+
+def add_mcsimp(obj,nom,valeur):
+ mcs=obj.get_child(nom,restreint='oui')
+ if mcs is None:
+ pos=obj.get_index_child(nom)
+ mcs=obj.addentite(nom,pos)
+ mcs.set_valeur(mcs.eval_val(valeur))
+ return mcs
+
+def cdiff(text1,text2):
+ return " ".join(difflib.context_diff(text1.splitlines(1),text2.splitlines(1)))
+
+class TestCase(unittest.TestCase):
+ """ Tests sur des items """
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ def test001(self):
+ """Test comploader"""
+ composants=comploader.charger_composants()
+ itemtype=comploader.gettreeitem({'a':1})
+ assert itemtype is Objecttreeitem.ObjectTreeItem
+
+ def test002(self):
+ """ Test de commentarisation/decommentarisation a partir d'un item jdc """
+ app=appli.STANDALONE(version='v8.2')
+ file=os.path.join(prefs.INSTALLDIR,"Tests/testelem/az.comm")
+ j=app.openJDC(file=file)
+ item=app.create_item(j)
+ assert item.isvalid(),item.report()
+ # on commente la commande LIRE_MAILLAGE
+ commands=item.GetSubList()
+ for it in commands:
+ if it.nom == "LIRE_MAILLAGE" and it.sd.nom == "MAIL":break
+ pos=commands.index(it)
+ cco=it.get_objet_commentarise()
+ commands=item.GetSubList()
+ commands[pos].uncomment()
+ commands=item.GetSubList()
+ # on reaffecte l'objet MAIL
+ for it in commands:
+ if it.nom in ("AFFE_MODELE","AFFE_MATERIAU") :
+ for mc in it.GetSubList():
+ if mc.nom == "MAILLAGE":
+ valeur,validite=mc.eval_valeur("MAIL")
+ test = mc.set_valeur(valeur)
+ text1=app.get_text_JDC(j,'python')
+ f=open(file)
+ text2=f.read()
+ f.close()
+ assert text1 == text2 , cdiff(text1,text2)
+
--- /dev/null
+import os
+import unittest
+import difflib
+
+import prefs
+from Editeur import appli
+
+def add_param(j,pos,nom,valeur):
+ co=j.addentite("PARAMETRE",pos)
+ co.set_nom(nom)
+ co.set_valeur(valeur)
+ return co
+
+def add_mcsimp(obj,nom,valeur):
+ mcs=obj.get_child(nom,restreint='oui')
+ if mcs is None:
+ pos=obj.get_index_child(nom)
+ mcs=obj.addentite(nom,pos)
+ mcs.set_valeur(mcs.eval_val(valeur))
+ return mcs
+
+def cdiff(text1,text2):
+ return " ".join(difflib.context_diff(text1.splitlines(1),text2.splitlines(1)))
+
+class TestCase(unittest.TestCase):
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ def test001(self):
+ """ Test d'insertion de commandes dans fichier toto.comm"""
+ app=appli.STANDALONE(version='v8.2')
+ file=os.path.join(prefs.INSTALLDIR,"Tests/testelem/toto.comm")
+ j=app.openJDC(file=file)
+ expected="""DEBUT CR validation : toto.comm
+FIN CR validation :toto.comm
+"""
+ cr=str(j.report())
+ assert cr == expected, cr + "!=" + expected
+ co=j.etapes[1]
+ mcs=co.addentite("INFO")
+
+ cr=app.get_text_JDC(j,'python')
+ expected="""
+
+DEBUT();
+
+MA=LIRE_MAILLAGE(INFO=1,);
+
+FIN();
+"""
+ assert cr == expected, cr + "!=" + expected
+ co=j.addentite("LIRE_MAILLAGE",2)
+ test,mess=co.nomme_sd("MA2")
+ assert test == 1
+
+ cr=app.get_text_JDC(j,'python')
+ expected="""
+
+DEBUT();
+
+MA=LIRE_MAILLAGE(INFO=1,);
+
+MA2=LIRE_MAILLAGE();
+
+FIN();
+"""
+ assert cr == expected, cr + "!=" + expected
+
+ def test002(self):
+ """ Test de construction du fichier de commandes az.comm de zero"""
+
+ app=appli.STANDALONE(version='v8.2')
+ j=app.newJDC()
+# commande DEBUT
+ co=j.addentite("DEBUT",0)
+# commande FIN
+ co=j.addentite("FIN",1)
+# parametres
+ pos=0
+ pos=pos+1
+ co=add_param(j,pos,"P1","9.8")
+ pos=pos+1
+ co=add_param(j,pos,"P2","8.8")
+ pos=pos+1
+ co=add_param(j,pos,"P3","7")
+ pos=pos+1
+ co=add_param(j,pos,"P5","P3*P1")
+ pos=pos+1
+ co=add_param(j,pos,"P6","P1-3")
+ pos=pos+1
+ co=add_param(j,pos,"P4","[2,3,4]")
+# commentaire
+ pos=pos+1
+ co=j.addentite("COMMENTAIRE",pos)
+ co.set_valeur("Pas trouve shellpanel")
+# commande LIRE_MAILLAGE
+ pos=pos+1
+ co=j.addentite("LIRE_MAILLAGE",pos)
+ test,mess=co.nomme_sd("MAILLA2")
+ mcs=co.addentite("UNITE")
+ valeur=mcs.eval_val("P4[1]")
+ test=mcs.set_valeur(valeur)
+# formule
+ pos=pos+1
+ co=j.addentite("FORMULE",pos)
+ co.update_formule_python(("aaa","REEL","a+z","(a,z)"))
+# commande LIRE_MAILLAGE
+ pos=pos+1
+ ma=co=j.addentite("LIRE_MAILLAGE",pos)
+ test,mess=co.nomme_sd("MAIL")
+ mcs=co.addentite("UNITE")
+ valeur,validite=mcs.eval_valeur("P3")
+ test=mcs.set_valeur(valeur)
+#
+ pos=pos+1
+ co=j.addentite("COMMENTAIRE",pos)
+ co.set_valeur(" 'LIRE_MAILLAGE', 'UNITE' --> uniquebasepanel")
+# formule
+ pos=pos+1
+ co=j.addentite("FORMULE",pos)
+ co.update_formule_python(("az","REEL","aaaaa","(ae,inst)"))
+# commande AFFE_MODELE
+ pos=pos+1
+ co=j.addentite("AFFE_MODELE",pos)
+ mcs=co.get_child("MAILLAGE")
+ valeur,validite=mcs.eval_valeur("MAIL")
+ assert valeur == ma.sd
+ test=mcs.set_valeur(valeur)
+ assert valeur == co["MAILLAGE"]
+ mcf=co.addentite("AFFE")
+ mcs=mcf[0].get_child("PHENOMENE")
+ valeur=mcs.eval_val_item('MECANIQUE')
+ assert valeur=='MECANIQUE',str(valeur)
+ test=mcs.set_valeur(valeur)
+ assert mcf["PHENOMENE"] == 'MECANIQUE'
+ mcs=mcf[0].get_child("b_mecanique").get_child("MODELISATION")
+ mcs.set_valeur(mcs.eval_val_item('DIS_T'))
+ assert mcf["MODELISATION"] == 'DIS_T'
+ mcs=add_mcsimp(mcf[0],"GROUP_MA",('RESSORT','eee',))
+
+ mcf=co.addentite("AFFE")
+ mcs=mcf[1].get_child("PHENOMENE")
+ mcs.set_valeur(mcs.eval_val_item('MECANIQUE'))
+ mcs=mcf[1].get_child("b_mecanique").get_child("MODELISATION")
+ mcs.set_valeur(mcs.eval_val_item('DIS_T'))
+ mcs=add_mcsimp(mcf[1],"GROUP_MA",'MASSES')
+
+ mcf=co.addentite("AFFE")
+ mcs=mcf[2].get_child("PHENOMENE")
+ mcs.set_valeur(mcs.eval_val_item('ACOUSTIQUE'))
+ mcs=mcf[2].get_child("b_acoustique").get_child("MODELISATION")
+ mcs.set_valeur(mcs.eval_val_item('PLAN'))
+ mcs=add_mcsimp(mcf[2],"GROUP_NO",'GNP3,GNP5,GNP6,GNP7,GNP8,GNP9,GNP10,GNP11,GNP12')
+
+ co.nomme_sd("AFFE1")
+# commande AFFE_MODELE
+ pos=pos+1
+ co=j.addentite("AFFE_MODELE",pos)
+ mcs=co.get_child("MAILLAGE")
+ mcs.set_valeur(mcs.eval_val("MAIL"))
+
+ mcf=co.addentite("AFFE")
+ mcs=mcf[0].get_child("PHENOMENE")
+ valeur=mcs.eval_val_item('MECANIQUE')
+ test=mcs.set_valeur(valeur)
+ mcs=mcf[0].get_child("b_mecanique").get_child("MODELISATION")
+ mcs.set_valeur(mcs.eval_val_item('DIS_T'))
+ mcs=add_mcsimp(mcf[0],"GROUP_MA",'RESSORT')
+
+ mcf=co.addentite("AFFE")
+ mcs=mcf[1].get_child("PHENOMENE")
+ mcs.set_valeur(mcs.eval_val_item('MECANIQUE'))
+ mcs=mcf[1].get_child("b_mecanique").get_child("MODELISATION")
+ mcs.set_valeur(mcs.eval_val_item('DIS_T'))
+ mcs=add_mcsimp(mcf[1],"GROUP_MA",'MASSES')
+
+ mcf=co.addentite("AFFE")
+ mcs=mcf[2].get_child("PHENOMENE")
+ mcs.set_valeur(mcs.eval_val_item('THERMIQUE'))
+ mcs=mcf[2].get_child("b_thermique").get_child("MODELISATION")
+ mcs.set_valeur(mcs.eval_val_item('COQUE'))
+ mcs=add_mcsimp(mcf[2],"TOUT",'OUI')
+
+ co.nomme_sd("MOD")
+#CARA=AFFE_CARA_ELEM(MODELE=MOD,
+# POUTRE=_F(GROUP_MA='MA',
+# SECTION='CERCLE',
+# CARA='R',
+# VALE=(3.0,P6,),),);
+ pos=pos+1
+ co=j.addentite("AFFE_CARA_ELEM",pos)
+ mcs=co.get_child("MODELE")
+ mcs.set_valeur(mcs.eval_val("MOD"))
+ mcf=co.addentite("POUTRE")
+ mcs=mcf[0].get_child("SECTION")
+ mcs.set_valeur(mcs.eval_val('CERCLE'))
+ assert mcf[0]["SECTION"] == 'CERCLE'
+ mcs=add_mcsimp(mcf[0],"GROUP_MA",'MA')
+ mcs=mcf[0].get_child("b_cercle").get_child("b_constant").get_child("CARA")
+ mcs.set_valeur(mcs.eval_val('R'))
+ mcs=mcf[0].get_child("b_cercle").get_child("b_constant").get_child("VALE")
+ mcs.set_valeur(mcs.eval_val('3.0,P6'))
+ co.nomme_sd("CARA")
+# commentaire
+ pos=pos+1
+ co=j.addentite("COMMENTAIRE",pos)
+ text=""" 'AFFE_MODELE', 'MAILLAGE' --> uniqueassdpanel
+ AFFE_MODELE', 'AFFE', 'GROUP_MA' --> plusieursbasepanel
+ 'AFFE_MODELE', 'AFFE', 'PHENOMENE' --> uniqueintopanel
+ 'AFFE_MODELE', 'AFFE', 'b_mecanique'--> plusieursintopanel"""
+ co.set_valeur(text)
+#F1=DEFI_FONCTION(NOM_PARA='DX',
+# VALE=(5.0,3.0,P4[1],P3,),);
+ pos=pos+1
+ co=j.addentite("DEFI_FONCTION",pos)
+ mcs=co.get_child("NOM_PARA")
+ mcs.set_valeur(mcs.eval_val("DX"))
+ mcs=co.addentite("VALE")
+ mcs.set_valeur(mcs.eval_val("5.0,3.0,P4[1],P3"))
+ co.nomme_sd("F1")
+#F3=DEFI_FONCTION(NOM_PARA='DRX',
+# VALE_C=(5.0,7.0,9.0,9.0,8.0,7.0,),);
+ pos=pos+1
+ co=j.addentite("DEFI_FONCTION",pos)
+ mcs=co.get_child("NOM_PARA")
+ mcs.set_valeur(mcs.eval_val("DRX"))
+ mcs=co.addentite("VALE_C")
+ mcs.set_valeur(mcs.eval_val("5.0,7.0,9.0,9.0,8.0,7.0"))
+ co.nomme_sd("F3")
+# commentaire
+ pos=pos+1
+ co=j.addentite("COMMENTAIRE",pos)
+ co.set_valeur(" 'DEFI_FONCTION', 'VALE' --> fonctionpanel ")
+#MATER2=DEFI_MATERIAU(ELAS=_F(E=100000000000.0,
+# NU=0.0,),
+# ECRO_ASYM_LINE=_F(DC_SIGM_EPSI=0.0,
+# SY_C=200000000.0,
+# DT_SIGM_EPSI=0.0,
+# SY_T=50000000.0,),);
+ pos=pos+1
+ co=j.addentite("DEFI_MATERIAU",pos)
+ mcf=co.addentite("ELAS")
+ mcs=mcf[0].get_child("E")
+ mcs.set_valeur(mcs.eval_val("100000000000.0"))
+ mcs=mcf[0].get_child("NU")
+ mcs.set_valeur(mcs.eval_val("0.0"))
+ mcf=co.addentite("ECRO_ASYM_LINE")
+ mcs=mcf[0].get_child("DC_SIGM_EPSI")
+ mcs.set_valeur(mcs.eval_val("0.0"))
+ mcs=mcf[0].get_child("DT_SIGM_EPSI")
+ mcs.set_valeur(mcs.eval_val("0.0"))
+ mcs=mcf[0].get_child("SY_C")
+ mcs.set_valeur(mcs.eval_val("200000000.0"))
+ mcs=mcf[0].get_child("SY_T")
+ mcs.set_valeur(mcs.eval_val("50000000.0"))
+ co.nomme_sd("MATER2")
+#PS1=DEFI_PARA_SENSI(VALE=1.0,);
+#PS2=DEFI_PARA_SENSI(VALE=1.0,);
+#PS3=DEFI_PARA_SENSI(VALE=1.0,);
+ pos=pos+1
+ co=j.addentite("DEFI_PARA_SENSI",pos)
+ mcs=co.get_child("VALE")
+ mcs.set_valeur(mcs.eval_val("1.0"))
+ co.nomme_sd("PS1")
+ pos=pos+1
+ co=j.addentite("DEFI_PARA_SENSI",pos)
+ mcs=co.get_child("VALE")
+ mcs.set_valeur(mcs.eval_val("1.0"))
+ co.nomme_sd("PS2")
+ pos=pos+1
+ co=j.addentite("DEFI_PARA_SENSI",pos)
+ mcs=co.get_child("VALE")
+ mcs.set_valeur(mcs.eval_val("1.0"))
+ co.nomme_sd("PS3")
+#CHMAT2=AFFE_MATERIAU(MAILLAGE=MAIL,
+# AFFE=_F(TOUT='OUI',
+# MATER=MATER2,),);
+ pos=pos+1
+ co=j.addentite("AFFE_MATERIAU",pos)
+ add_mcsimp(co,"MAILLAGE","MAIL")
+ mcf=co.get_child("AFFE")
+ add_mcsimp(mcf[0],"TOUT","OUI")
+ add_mcsimp(mcf[0],"MATER","MATER2")
+ co.nomme_sd("CHMAT2")
+#AAAZ=AFFE_CHAR_THER(MODELE=AFFE1,
+# TEMP_IMPO=_F(TOUT='OUI',
+# TEMP=0.0,),);
+ pos=pos+1
+ co=j.addentite("AFFE_CHAR_THER",pos)
+ add_mcsimp(co,"MODELE","AFFE1")
+ mcf=co.addentite("TEMP_IMPO")
+ add_mcsimp(mcf[0],"TOUT","OUI")
+ add_mcsimp(mcf[0],"TEMP","0.0")
+ co.nomme_sd("AAAZ")
+#TH1=THER_LINEAIRE(MODELE=AFFE1,
+# CHAM_MATER=CHMAT2,
+# EXCIT=_F(CHARGE=AAAZ,),
+# SENSIBILITE=(PS1,PS2,),);
+ pos=pos+1
+ co=j.addentite("THER_LINEAIRE",pos)
+ add_mcsimp(co,"MODELE","AFFE1")
+ add_mcsimp(co,"CHAM_MATER","CHMAT2")
+ mcf=co.get_child("EXCIT")
+ add_mcsimp(mcf[0],"CHARGE","AAAZ")
+ add_mcsimp(co,"SENSIBILITE","PS1,PS2")
+ co.nomme_sd("TH1")
+# commentaire
+ pos=pos+1
+ co=j.addentite("COMMENTAIRE",pos)
+ co.set_valeur(" 'THER_LINEAIRE', 'SENSIBILITE' --> plusieursassdpanel")
+#ACA1=AFFE_CHAR_ACOU(MODELE=AFFE1,
+# PRES_IMPO=_F(TOUT='OUI',
+# PRES=('RI',3.0,3.0,),),);
+ pos=pos+1
+ co=j.addentite("AFFE_CHAR_ACOU",pos)
+ add_mcsimp(co,"MODELE","AFFE1")
+ mcf=co.addentite("PRES_IMPO")
+ add_mcsimp(mcf[0],"TOUT","OUI")
+ add_mcsimp(mcf[0],"PRES","'RI',3.0,3.0")
+ co.nomme_sd("ACA1")
+# commentaire
+ pos=pos+1
+ co=j.addentite("COMMENTAIRE",pos)
+ co.set_valeur(" 'AFFE_CHAR_ACOU', 'PRES_IMPO', 'PRES' --> uniquecomppanel")
+
+# 'AFFE_CHAR_ACOU', 'PRES_IMPO', 'PRES' --> uniquecomppanel
+
+#MACRO_MATR_ASSE(MODELE=AFFE1,
+# NUME_DDL=CO('DDL1'),
+# MATR_ASSE=_F(MATRICE=CO('MAT1'),
+# OPTION='RIGI_THER',),);
+ pos=pos+1
+ co=j.addentite("MACRO_MATR_ASSE",pos)
+ add_mcsimp(co,"MODELE","AFFE1")
+ mcs=co.get_child("NUME_DDL")
+ mcs.set_valeur_co('DDL1')
+ mcf=co.get_child("MATR_ASSE")
+ mcs=mcf[0].get_child("MATRICE")
+ mcs.set_valeur_co('MAT1')
+ add_mcsimp(mcf[0],"OPTION","RIGI_THER")
+# commentaire
+ pos=pos+1
+ co=j.addentite("COMMENTAIRE",pos)
+ co.set_valeur(" 'MACRO_MATR_ASSE', 'MATR_ASSE', 'MATRICE' --> uniquesdcopanel")
+
+ assert j.isvalid()
+
+ text1=app.get_text_JDC(j,'python')
+ file=os.path.join(prefs.INSTALLDIR,"Tests/testelem/az.comm")
+ f=open(file)
+ text2=f.read()
+ f.close()
+ assert text1 == text2 , cdiff(text1,text2)
--- /dev/null
+import os
+import unittest
+import difflib
+
+import prefs
+from Editeur import appli
+
+def add_param(j,pos,nom,valeur):
+ co=j.addentite("PARAMETRE",pos)
+ co.set_nom(nom)
+ co.set_valeur(valeur)
+ return co
+
+def add_mcsimp(obj,nom,valeur):
+ mcs=obj.get_child(nom,restreint='oui')
+ if mcs is None:
+ pos=obj.get_index_child(nom)
+ mcs=obj.addentite(nom,pos)
+ mcs.set_valeur(mcs.eval_val(valeur))
+ return mcs
+
+def cdiff(text1,text2):
+ return " ".join(difflib.context_diff(text1.splitlines(1),text2.splitlines(1)))
+
+class TestCase(unittest.TestCase):
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ CONTEXT.unset_current_step()
+
+ def test001(self):
+ """ Test de commentarisation/decommentarisation de commandes dans fichier az.comm"""
+ app=appli.STANDALONE(version='v8.2')
+ file=os.path.join(prefs.INSTALLDIR,"Tests/testelem/az.comm")
+ j=app.openJDC(file=file)
+ assert j.isvalid(),j.report()
+ # on commente la commande LIRE_MAILLAGE
+ for co in j.etapes:
+ if co.nom == "LIRE_MAILLAGE" and co.sd.nom == "MAIL":break
+ cco=co.get_objet_commentarise(format=app.format_fichier.get())
+ # on decommente la commande LIRE_MAILLAGE
+ commande,nom = cco.uncomment()
+ # on reaffecte l'objet MAIL
+ for co in j.etapes:
+ if co.nom in ("AFFE_MODELE","AFFE_MATERIAU") :
+ add_mcsimp(co,"MAILLAGE",'MAIL')
+
+ text1=app.get_text_JDC(j,'python')
+ f=open(file)
+ text2=f.read()
+ f.close()
+ assert text1 == text2 , cdiff(text1,text2)
+
self.assertEqual(b.eval(),2.56)
c=Variable('q',[1,a,3])
d=c[1]/3
- self.assertEqual(str(d),'((q[1]) / 3)')
+ self.assertEqual(str(d),'(q[1] / 3)')
self.assertEqual(d.eval(),25.6/3)
f=cos(d)
- self.assertEqual(str(f),'cos(((q[1]) / 3))')
+ self.assertEqual(str(f),'cos((q[1] / 3))')
self.assertEqual(f.eval(),-0.628288791022798)
g=a**2
self.assertEqual(str(g),'(n ** 2)')
self.assertEqual(g.eval(),429496.72960000008)
def test003(self):
+ """ Validation d'un parametre (instance de la classe Variable)
+ """
cata=SIMP(statut='o',typ='R',max=3)
liste=((1,1),(Variable('x',(0.,1.)),1), (1.,1),(Variable('x',(0.,1.)),1), (('RI',1,0),0),
(1+0j,0), ("('RI',1,0)",0), ("toto",0), (None,0),
)
for valeur,valid in liste:
o=cata(valeur,'mcs',None)
- print o.val,o.valeur
+ #print o.val,o.valeur
msg="erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report())
self.assertEqual(o.isvalid(),valid,msg=msg)
valid=compare.check(rep,report)
if not valid:
msg="le rapport d'erreur est incorrect.\n valeur = %s\n expected =\n%s\n got =\n%s " % (valeur,report,rep)
- print msg
+ #print msg
self.assert_(valid,msg=msg)
def test001(self):
--- /dev/null
+DEBUT()
+MA=LIRE_MAILLAGE()
+FIN()
--- /dev/null
+# -*- 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 sys,string,re,tokenize
+import cStringIO
+
+class ENTITE_JDC :
+ def __init__(self):
+ self.texte = ''
+
+ def set_text(self,texte):
+ self.texte = texte
+
+ def append_text(self,texte):
+ """
+ """
+ self.texte = self.texte +texte
+
+class COMMENTAIRE(ENTITE_JDC):
+
+ def __str__(self):
+ """
+ Retourne une chaîne de caractères représentant self
+ sous une forme interprétable par EFICAS
+ """
+ t=repr(self.texte)
+ return "COMMENTAIRE("+t+")\n"
+
+ def append_text(self,texte):
+ """
+ Ajoute texte à self.texte en enlevant le # initial
+ """
+ if texte[0] == '#':
+ self.texte = self.texte+texte[1:]
+ else:
+ # le dièse n'est pas sur le premier caractère
+ amont,aval = string.split(texte,'#',1) # on découpe suivant la première occurrence de #
+ self.texte = self.texte +amont + aval
+
+class AFFECTATION(ENTITE_JDC):
+
+ def append_text(self,texte):
+ """
+ Ajoute texte à self.texte en enlevant tout retour chariot et tout point virgule
+ """
+ self.texte = self.texte+texte
+
+ def __str__(self):
+ """
+ Retourne une expression de l'affectation compréhensible par ACCAS
+ et exploitable par EFICAS
+ """
+ t=repr(self.texte)
+ t=self.texte
+ return "PARAMETRE(nom='"+self.name+"',valeur="+t+")"
+
+class COMMANDE_COMMENTARISEE(ENTITE_JDC):
+
+ def append_text(self,texte):
+ """
+ Ajoute texte à self.texte en enlevant les doubles commentaires
+ """
+ texte = string.strip(texte)
+ texte = string.strip(texte[2:])
+ self.texte = self.texte+(len(self.texte)>0)*'\n'+texte
+
+ def __str__(self):
+ """
+ Retourne une expression de la commande commentarisée compréhensible par ACCAS
+ et exploitable par EFICAS
+ """
+ return "COMMANDE_COMM(texte="+repr(self.texte)+")\n"
+
+
+next = {}
+next['if'] = next['elif'] = 'elif', 'else', 'end'
+next['while'] = next['for'] = 'else', 'end'
+next['try'] = 'except', 'finally'
+next['except'] = 'except', 'else', 'end'
+next['else'] = next['finally'] = next['def'] = next['class'] = 'end'
+next['end'] = ()
+start = 'if', 'while', 'for', 'try', 'def', 'class'
+
+class PARSEUR_PYTHON:
+ """
+ Cette classe sert à créer un objet PARSEUR_PYTHON qui réalise l'analyse d'un texte
+ représentant un JDC Python en distinguant :
+ - les commentaires inter commandes
+ - les affectations
+ - les commandes
+ """
+ # au moins 1 caractère non blanc ou non tabulation
+ pattern_ligne_non_blanche = re.compile(r'^[\w\t]+')
+ kwprog = re.compile(
+ r'^\s*(?P<kw>[a-z]+)'
+ r'(\s+(?P<id>[a-zA-Z_]\w*))?'
+ r'[^\w]')
+ endprog = re.compile(
+ r'^\s*#?\s*end\s+(?P<kw>[a-z]+)'
+ r'(\s+(?P<id>[a-zA-Z_]\w*))?'
+ r'[^\w]')
+ wsprog = re.compile(r'^[ \t]*')
+
+ def __init__(self,texte):
+ # on verifie que le texte fourni se compile correctement
+ compile(texte,"<string>",'exec')
+ self.texte = cStringIO.StringIO(texte)
+ self.line=''
+ self.out=""
+ self.lastcol = 0
+ self.lastrow = 1
+ self.please_indent = 1
+ self.indent_list = []
+ self.indentation=0
+ self.paren_level=0
+ self.affectation=0
+ for i in range(5):
+ self.indent_list.append(' '*i)
+ self.objet_courant=None
+ self.stack=[]
+
+ def readline(self):
+ self.line= self.texte.readline()
+ #print "line:",self.line
+ self.indentation=len(self.stack)
+ m = self.kwprog.match(self.line)
+ if m:
+ kw = m.group('kw')
+ if kw in start:
+ self.stack.append((kw, kw))
+ elif next.has_key(kw) and self.stack:
+ kwa,kwb=self.stack[-1]
+ self.stack.append((kwa, kw))
+ return self.line
+
+ def get_texte(self,appli=None):
+ """
+ Retourne le texte issu de l'analyse
+ """
+ for tk in tokenize.generate_tokens(self.readline):
+ self.process_token(tk)
+ return self.out
+
+ def process_token(self, tk):
+ """
+ """
+ ttype, tstring, spos, epos, line = tk
+ thisrow, thiscol = spos
+ #print spos, epos,tokenize.tok_name[ttype]
+
+ if thisrow > self.lastrow:
+ # si plusieurs lignes (>1)
+ self.out=self.out+"\n" * (thisrow - self.lastrow - 1)
+ self.lastcol = 0
+
+ #if thiscol > self.lastcol :
+ # self.out=self.out+ " " * (thiscol - self.lastcol)
+ # self.please_indent = None
+
+ self.thiscol=thiscol
+ #self.nextrow, self.nextcol = epos
+
+ try:
+ fn = getattr(self, tokenize.tok_name[ttype])
+ except AttributeError:
+ print >>sys.stderr, "No match!", tokenize.tok_name[ttype], tstring
+ return
+
+ if ttype != tokenize.DEDENT and ttype != tokenize.INDENT and ttype != tokenize.COMMENT and self.please_indent:
+ self.do_indent()
+
+ fn(tstring)
+ self.lastrow, self.lastcol = epos
+
+ def output(self,tstring):
+ #print "output",tstring
+ #if self.thiscol > self.lastcol :
+ # self.out=self.out+ " " * (self.thiscol - self.lastcol)
+ # self.please_indent = None
+ #self.thiscol=0
+ #self.lastrow, self.lastcol=self.nextrow, self.nextcol
+ if self.objet_courant:
+ #print str(self.objet_courant)
+ self.out=self.out+self.indent_list[self.indentation]
+ self.out= self.out+ str(self.objet_courant)
+ self.objet_courant=None
+ self.lastcol=self.thiscol
+
+ if self.thiscol > self.lastcol :
+ # print self.thiscol,self.lastcol
+ self.out=self.out+ " " * (self.thiscol - self.lastcol)
+ self.lastcol=self.thiscol
+
+ self.out=self.out+tstring
+
+ def output_com(self,tstring):
+ self.out=self.out+tstring
+
+ def do_indent(self):
+ #print "indentation=",self.indentation
+ if self.objet_courant:
+ self.out=self.out+self.indent_list[self.indentation]
+ #self.out=self.out+self.indent_list[-1]
+ self.out= self.out+ str(self.objet_courant)
+ self.objet_courant=None
+
+ #self.lastcol=len(self.indent_list[-1])
+ #self.lastcol=self.indentation
+ self.lastcol=self.thiscol
+ self.out=self.out+self.indent_list[self.indentation]
+ #self.out=self.out+self.indent_list[-1]
+ self.please_indent = None
+
+ def NL(self, tstring):
+ if self.affectation:
+ if self.paren_level == 0:
+ # affectation en cours mais complète
+ self.out= self.out+ str(self.affectation_courante)
+ self.affectation_courante=None
+ self.affectation=0
+ else:
+ # affectation en cours, on ajoute
+ self.affectation_courante.append_text(tstring)
+ return
+
+ self.output(tstring)
+ self.please_indent = 1
+
+ def COMMENT(self, tstring):
+ liste= string.split(self.line,"##",1)
+ if len(liste) > 1:
+ # On a trouve un double commentaire
+ before,after=liste
+ if self.affectation:
+ # affectation en cours, on ignore
+ #self.affectation_courante.append_text(tstring)
+ pass
+ elif self.paren_level > 0:
+ self.output(tstring)
+ elif not self.pattern_ligne_non_blanche.match(before):
+ # il s'agit d'une commande commentarisée
+ if self.objet_courant == None:
+ self.objet_courant=COMMANDE_COMMENTARISEE()
+ self.objet_courant.append_text(tstring)
+ elif isinstance(self.objet_courant,COMMENTAIRE):
+ self.output_com(str(self.objet_courant))
+ self.objet_courant=COMMANDE_COMMENTARISEE()
+ self.objet_courant.append_text(tstring)
+ else:
+ self.objet_courant.append_text(tstring)
+ else:
+ # commentaire inline
+ self.output(tstring)
+ self.please_indent = 1
+ return
+
+ else:
+ # On a un commentaire simple
+ new_line = string.split(self.line,'#')[0]
+ if self.affectation:
+ # affectation en cours, on ignore
+ #self.affectation_courante.append_text(tstring)
+ pass
+ elif self.paren_level > 0:
+ self.output(tstring)
+ elif not self.pattern_ligne_non_blanche.match(new_line):
+ # commentaire précédé de blancs
+ if self.objet_courant == None:
+ self.objet_courant=COMMENTAIRE()
+ self.objet_courant.append_text(tstring)
+ elif isinstance(self.objet_courant,COMMANDE_COMMENTARISEE):
+ self.output_com(str(self.objet_courant))
+ self.objet_courant=COMMENTAIRE()
+ self.objet_courant.append_text(tstring)
+ else:
+ self.objet_courant.append_text(tstring)
+ else:
+ # commentaire inline
+ self.output(tstring)
+ self.please_indent = 1
+ return
+
+ def ERRORTOKEN(self, tstring):
+ print "ERRORTOKEN",tstring
+
+ def NAME(self, tstring):
+ if self.affectation ==1:
+ # on ne veut pas des expressions qui commencent par NAME=NAME(NAME
+ # on en prend le chemin : on met affectation a 3 pour le signaler
+ # on attend d'en savoir plus
+ self.affectation_courante.append_text(tstring)
+ self.affectation=3
+ return
+ elif self.affectation ==4:
+ # on a une expression qui commence par NAME=NAME(NAME
+ # il s'agit tres probablement d'une commande
+ # on annule l'affectation en cours
+ self.out= self.out+ self.affectation_courante.texte
+ self.affectation_courante=None
+ self.affectation=0
+ elif self.affectation == 2:
+ # affectation en cours, on ajoute
+ self.affectation_courante.append_text(tstring)
+ self.affectation=2
+ return
+ self.affectation=0
+ self.name=None
+ if self.paren_level == 0: self.name=tstring
+ self.output(tstring)
+
+ def ident(self, tstring):
+ self.affectation=0
+ self.output(tstring)
+
+ def NUMBER(self, tstring):
+ if self.affectation>=1:
+ # affectation en cours, on ajoute
+ self.affectation_courante.append_text(tstring)
+ self.affectation=2
+ return
+ self.output(tstring)
+
+ def OP(self,tstring):
+ if tstring in ('(','[','{'): self.paren_level=self.paren_level+1
+ if tstring in (')',']','}'): self.paren_level=self.paren_level-1
+
+ if tstring == ')' and self.affectation ==4:
+ # on a une expression qui commence par NAME=NAME()
+ # il peut s'agir d'une commande
+ # on annule l'affectation en cours
+ self.out= self.out+ self.affectation_courante.texte
+ self.affectation_courante=None
+ self.affectation=0
+ elif tstring == '(' and self.affectation == 3:
+ # on a deja trouve NAME=NAME
+ # on passe affectation a 4
+ self.affectation_courante.append_text(tstring)
+ self.affectation=4
+ return
+ elif tstring == ';' and self.affectation>=1:
+ # l'affectation est terminee
+ self.out= self.out+ str(self.affectation_courante)
+ self.affectation_courante=None
+ self.affectation=0
+ elif self.affectation>=1:
+ # on complete l'affectation
+ self.affectation_courante.append_text(tstring)
+ self.affectation=2
+ return
+
+ self.affectation=0
+ if self.name and tstring=='=':
+ self.affectation=1
+ self.affectation_courante=AFFECTATION()
+ self.affectation_courante.name=self.name
+ self.output(tstring)
+
+ ENDMARKER = ident
+ NEWLINE=NL
+
+ def INDENT(self, tstring):
+# self.indent_list.append(tstring)
+ self.affectation=0
+ self.do_indent()
+
+ def DEDENT(self, tstring):
+ self.affectation=0
+ if self.objet_courant:
+ self.out=self.out+self.indent_list[self.indentation]
+ self.out= self.out+ str(self.objet_courant)
+ self.objet_courant=None
+ del self.stack[0]
+ self.indentation=self.indentation-1
+# self.indent_list = self.indent_list[:-1]
+
+ def STRING(self, tstring):
+ if self.affectation>=1:
+ # affectation en cours, on ajoute
+ self.affectation_courante.append_text(tstring)
+ self.affectation=2
+ return
+ self.output(tstring)
+
+if __name__ == "__main__" :
+ import sys
+ import cStringIO
+ text='''
+#
+# comment
+# comment
+# comment
+#
+
+import sys,os
+
+# commentaire
+# commentaire
+# commentaire
+
+DEBUT();
+##toto = FORMULE(REEL='(REEL:A) = A',);
+
+x=2*cos(90.)/34.
+
+a=1.
+if a != 0:
+ a=+1
+
+b=2.
+c=a+b
+#if 1:
+# d=3
+# e=5
+#try:
+# a=1/2
+#except KeyError:
+# pass
+
+if 1:
+ a=2
+ b=3
+ # commenta
+else:
+ # commen
+ # commen
+ a=3
+ # qqqqqqqqqqqqqqqq
+ c=5
+
+b=5
+ # commentaire
+toto = FORMULE(REEL='(REEL:A) = A',);
+titi = FORMULE(REEL='(REEL:A) = A',) # commentaire inline
+tutu = FORMULE(REEL='(REEL:A) = A',) ## commentaire inline
+
+TEST_TABLE( TABLE=RELV[k],
+ FILTRE=(
+ _F( NOM_PARA = 'QUANTITE',
+ VALE_K = 'MAXIMUM'),),
+ # commentaire
+ NOM_PARA='VMIS', # comm
+ VALE=1.9669824189084E9,
+ REFERENCE='NON_REGRESSION',
+ VERSION='8.1.0' )
+
+if 1:
+ a=fff(a=1,
+ b=2)
+if 1:
+ a=2
+ b=3
+ # commenta
+else:
+ # commen
+ # commen
+ a=3
+
+for k in range(1,10):
+
+ # Appel a GMSH pour le maillage
+
+ f=open("coque.geo","w")
+
+'''
+ text="""
+
+a = 1.
+b=3
+c= 3 * 5
+d= 4 + \
+ 5 \
+ -4
+e=toto(a=1)
+x=(1,2)
+y=[3,
+#comme
+4]
+z="a"
+zz='v'
+u='''aaaa
+bbbb'''
+if 1:
+ a=45
+else:
+ a=5.6
+d={"a":0}
+e={"a":0,
+#comme
+"d":4}
+a==1
+x=a==1
+s="-"*80
+fmt_raison='-'*80+'''
+
+ Exception erreur_Fatale interceptee
+ Raison : %s
+
+'''+'-'*80+'xxxxxxxxxxxxxxxx'
+q=30*cos(12)
+f=cos(12)
+#commen'''
+#commen'''
+y=a[1]
+y=["x"]*10
+
+##toto = FORMULE(REEL='(REEL:A) = A',
+## X=2
+## );
+#
+# comment
+# comment
+# comment
+#
+zz=8.9;
+zz=8.9;aa=10
+P1 = 9.8;
+
+P2 = 8.8;
+
+P3 = 7;
+
+P5 = P3*P1;
+
+P6 = P1-3;
+
+P4 = [2,3,4];
+
+P7=P4[1]
+MA=LIRE_MAILLAGE()
+MA=LIRE_MAILLAGE(#comment
+)
+xyz=cos(10)
+MA=LIRE_MAILLAGE(INFO=1)
+MA=LIRE_MAILLAGE(
+INFO=1)
+MA=LIRE_MAILLAGE(#comme
+INFO=1)
+MA=\
+LIRE_MAILLAGE(INFO=1)
+MA= LIRE_MAILLAGE()
+TFIN = 1.790 # Temps fin pour le calcul
+
+PAS = 0.001 # pas de temps du calcul
+DS1=[None]*5
+DS2=[None]*5
+DS3=[None]*5
+DS4=[None]*5
+CHS1=[None]*5
+CHS2=[None]*5
+
+
+
+for k in range(1,5):
+ DS1[k] = CREA_CHAMP( OPERATION='EXTR', TYPE_CHAM='NOEU_DEPL_R',
+ RESULTAT= MODESTA1, NUME_ORDRE=k, NOM_CHAM = 'DEPL');
+
+
+"""
+
+ if len(sys.argv)== 2:
+ progname, input = sys.argv
+ f=open(input)
+ t=f.read()
+ f.close()
+ else:
+ t=text
+ txt = PARSEUR_PYTHON(t).get_texte()
+ print txt
+ compile(txt,"<string>",'exec')
"""
import sys,string,traceback
-import parseur_python
+from autre_parseur import PARSEUR_PYTHON
from Noyau import N_CR
def entryPoint():
def convert(self,outformat,appli=None):
if outformat == 'exec':
try:
- return parseur_python.PARSEUR_PYTHON(self.text).get_texte(appli)
+ return PARSEUR_PYTHON(self.text).get_texte(appli)
except:
# Erreur lors de la conversion
l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
sys.exc_info()[2])
- self.cr.exception("Impossible de convertir le fichier python \
- qui doit contenir des erreurs.\n \
- On retourne le fichier non converti \n \
- Prévenir la maintenance. \n" + string.join(l))
+ self.cr.exception("Impossible de convertir le fichier python "
+ "qui doit contenir des erreurs.\n"
+ "On retourne le fichier non converti.\n"
+ "Prévenir la maintenance. \n" + string.join(l))
# On retourne néanmoins le source initial non converti (au cas où)
return self.text
elif outformat == 'execnoparseur':
#
# ======================================================================
import sys,string,re
+import traceback
class ENTITE_JDC :
def __init__(self,pere):
"""
texte = texte+'\n'
self.texte = self.texte +texte
+ def __str__(self):
+ return self.texte
class COMMENTAIRE(ENTITE_JDC):
"""
Ajoute texte à self.texte en enlevant tout retour chariot et tout point virgule
"""
- if texte[-1] == '\n' : texte = string.strip(texte[0:-1])\r
- if texte[-1] == ';' : texte = string.strip(texte[0:-1])
+ if texte[-1] == '\n' : texte = string.rstrip(texte[0:-1])
+ if texte[-1] == ';' : texte = string.rstrip(texte[0:-1])
self.texte = self.texte+texte
def __str__(self):
et exploitable par EFICAS
"""
nom,valeur = string.split(self.texte,'=',1)
- nom = string.strip(nom)
+ # print nom,valeur
+ n = string.rstrip(nom)
+ nom = string.lstrip(n)
if valeur[-1] == '\n': valeur = valeur[:-1]
- valeur = string.strip(valeur)
+# valeur = string.strip(valeur)
## traitement des "
- if valeur[0]=='"':
- valeur=valeur[1:-1]
- if valeur[-1]=='"':
- valeur=valeur[0:-2]
+# if valeur[0]=='"':
+# valeur=valeur[1:-1]
+# if valeur[-1]=='"':
+# valeur=valeur[0:-2]
- return nom+' = PARAMETRE(nom=\''+nom+'\',valeur="'+valeur+'")\n\n'
+ return n + ' = PARAMETRE(nom=\''+nom+'\',valeur='+valeur+')\n'
class COMMANDE_COMMENTARISEE(ENTITE_JDC):
pattern_commande = re.compile(r'^([A-Z][A-Z0-9_]+)([ \t\r\f\v]*)\(([\w\W]*)')
pattern_eval = re.compile(r'^(EVAL)([ \t\r\f\v]*)\(([\w\W]*)')
pattern_ligne_vide = re.compile(r'^[\t\r\f\v\n]+')
+ pattern_name = re.compile(r'[a-zA-Z_]\w*')
def __init__(self,texte):
self.texte = texte
if self.pattern_commande.match(aval):
return 0
else:
+ s= string.strip(amont)
+ m= self.pattern_name.match(s)
+ if m is None : return 0
+ if m.start() != 0 :return 0
+ if m.end() != len(s):return 0
+ #print texte,amont,aval
return 1
def is_eval(self,texte):
elif commentaire_courant :
# il s'agit de la nième ligne d'un commentaire entre deux commandes
# --> on ajoute cette ligne au commentaire courant
+ #print "ici1",ligne
commentaire_courant.append_text(ligne)
else :
# il s'agit d'un commentaire entre deux commandes
# --> on le crée et il devient le commentaire courant
commentaire_courant = COMMENTAIRE(self)
+ #print "ici2",ligne
commentaire_courant.append_text(ligne)
else:
# la ligne contient des données autre qu'un éventuel commentaire
self.analyse_reel(commande_courante.texte)
commande_courante = None
else:
- #--> poursuite d'une affectation
- # PN -- pour Empecher une erreur pas propre
- if affectation_courante != None :
- affectation_courante.append_text(ligne)
- #affectation_courante.append_text(ligne)
+ if commande_courante:
+ # commande en cours
+ commande_courante.append_text(ligne)
+ affectation_courante = None
+ if commande_courante.get_nb_par() == 0:
+ # la commande courante est terminée (autant de parenthèses fermantes qu'ouvrantes)
+ self.analyse_reel(commande_courante.texte)
+ commande_courante = None
+ else:
+ #print 'ici3',ligne
+ #e=ENTITE_JDC(self)
+ #e.append_text(ligne)
+ #--> poursuite d'une affectation
+ # PN -- pour Empecher une erreur pas propre
+ if affectation_courante != None :
+ affectation_courante.append_text(ligne)
+ #affectation_courante.append_text(ligne)
def enleve (self,texte) :
if __name__ == "__main__" :
#fichier = 'D:/Eficas_dev/Tests/zzzz100a.comm'
fichier = 'U:/Eficas_dev/Tests/test_eval.comm'
+ fichier = '/local/chris/ASTER/Eficas/Eficas1_10/EficasV1/Tests/testcomm/b.comm'
+ fichier = '/local/chris/ASTER/instals/STA8.2/astest/forma11d.comm'
texte = open(fichier,'r').read()
- txt = PARSEUR_PYTHON(texte).get_texte()
+ class appli:
+ dict_reels={}
+ liste_simp_reel=[]
+ txt = PARSEUR_PYTHON(texte).get_texte(appli())
print txt
+ compile(txt, '<string>', 'exec')
import Extensions
from Extensions.parametre import ITEM_PARAMETRE
from Formatage import Formatage
+from Extensions.param2 import Formula
def entryPoint():
"""
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 prévu",obj
def generITEM_PARAMETRE(self,obj):
return repr(obj)
+ def generFormula(self,obj):
+ return repr(obj)
+
def generPARAMETRE(self,obj):
"""
Cette méthode convertit un PARAMETRE
en une liste de chaines de caractères à la syntaxe python
"""
- 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'
+ return repr(obj) + ";\n"
def generETAPE_NIVEAU(self,obj):
"""
l.append(data)
return l
+ def format_item(self,valeur,etape):
+ if type(valeur) == types.InstanceType :
+ 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:
+ s = self.generator(valeur)
+ elif type(valeur) == types.FloatType :
+ # Pour un flottant on utilise str
+ # ou la notation scientifique
+ s = str(valeur)
+ try :
+ clefobj=obj.GetNomConcept()
+ if self.appli.dict_reels.has_key(clefobj):
+ if self.appli.dict_reels[clefobj].has_key(valeur):
+ s=self.appli.dict_reels[clefobj][valeur]
+ except:
+ pass
+ 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)
+ 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
if type(obj.valeur) in (types.TupleType,types.ListType) :
s = ''
for val in obj.valeur :
- if type(val) == types.InstanceType :
- if hasattr(obj.etape,'sdprods') and val in obj.etape.sdprods :
- s = s + "CO('"+ self.generator(val) +"')"
- elif val.__class__.__name__ == 'CO':
- s = s + "CO('"+ self.generator(val) +"')"
- elif isinstance(val,Accas.PARAMETRE):
- # il ne faut pas prendre la string que retourne gener
- # mais seulement le nom dans le cas d'un paramètre
- s = s + val.nom
- else:
- s = s + self.generator(val)
- elif type(val) == types.FloatType :
- # Pour un flottant on utilise str qui a une precision de
- # "seulement" 12 chiffres : evite les flottants du genre 0.599999999999998
- s2=str(val)
- try :
- clefobj=obj.GetNomConcept()
- if self.appli.dict_reels.has_key(clefobj):
- if self.appli.dict_reels[clefobj].has_key(val):
- s2=self.appli.dict_reels[clefobj][val]
- except:
- pass
- s = s + s2
- else :
- # Pour les autres types on utilise repr
- s = s + `val`
- s = s + ','
+ s =s +self.format_item(val,obj.etape) + ','
if len(obj.valeur) > 1:
s = '(' + s + '),'
else :
- val=obj.valeur
- if type(val) == types.InstanceType :
- if hasattr(obj.etape,'sdprods') and val in obj.etape.sdprods :
- s = "CO('"+ self.generator(val) +"')"
- elif val.__class__.__name__ == 'CO':
- s = "CO('"+ self.generator(val) +"')"
- elif isinstance(val,Accas.PARAMETRE):
- # il ne faut pas prendre la string que retourne gener
- # mais seulement le nom dans le cas d'un paramètre
- s = val.nom
- elif isinstance(val,Extensions.parametre.PARAMETRE):
- s = val.nom
- else:
- s = self.generator(val)
- elif type(val) == types.FloatType :
- # Pour un flottant on utilise str
- # ou la notation scientifique
- s = str(val)
- try :
- clefobj=obj.GetNomConcept()
- if self.appli.dict_reels.has_key(clefobj):
- if self.appli.dict_reels[clefobj].has_key(val):
- s=self.appli.dict_reels[clefobj][val]
- except:
- pass
- else :
- # Pour les autres types on utilise repr
- if isinstance(val,Extensions.parametre.PARAMETRE):
- s = val.nom
- else:
- s = `val`
- s= s + ','
+ s=self.format_item(obj.valeur,obj.etape) + ','
return s