Salome HOME
CCAR: mise en coherence de Build_sd de mACRO_ETAPE avec celle de ETAPE
[tools/eficas.git] / Exemples / cyclops2 / main.py
1 """
2    Vérification des cycles de référence d'objets sur 
3    un exemple avec des opérateurs
4 """
5
6 import sys
7 sys.path[:0]=['../..','../../..']
8
9 from Accas import SIMP,FACT,OPER
10
11 # Construction objet de définition
12
13 class concept:
14    def __init__(self,etape):
15       self.etape=etape
16    def is_object(sd):
17       """ Retourne 1 si sd est du bon type par rapport à la classe """
18       return 0
19    def supprime(self):
20       self.etape=None
21
22 OP1 = OPER(nom='OP1',op=1,sd_prod=concept,reentrant='f',
23            a=SIMP(typ='I'),
24            c=SIMP(typ='I',position='global'),
25            b=SIMP(typ=concept),
26           )
27
28 # Vérification objet de définition
29 cr=OP1.report()
30 if cr.estvide():
31    print "L'objet de définition est valide "
32 else:
33    print cr
34
35 class context:
36    def __init__(self):
37       self.etapes=[]
38       self.mc_globaux={}
39       self.cata_ordonne_dico=None
40       self.par_lot="OUI"
41
42    def register(self,etape):
43       self.etapes.append(etape)
44       return self.etapes.index(etape)
45    def get_jdc_root(self):
46       return self
47    def create_sdprod(self,etape,nomsd):
48       sd= etape.get_sd_prod()
49       if sd != None and etape.reuse == None:
50          # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation d un concept
51          sd.nom=nomsd
52       return sd
53
54
55 cont=context()
56 CONTEXT.set_current_step(cont)
57
58 sd=concept(None)
59 # Création de l'objet ETAPE
60 co1=OP1(a=1,b=sd)
61
62 # Vérification objet ETAPE
63 e1=cont.etapes[0]
64 cr= e1.report()
65 if cr.estvide():
66    print "L'objet ETAPE  est valide " 
67 else:
68    print "L'objet ETAPE  n'est pas valide " 
69    print cr
70
71 # Test avec reutilisation de concept
72 co=OP1(reuse=co1,a=1,b=sd)
73 e2=cont.etapes[1]
74 cr= e2.report()
75 if cr.estvide():
76    print "L'objet ETAPE  est valide "
77 else:
78    print "L'objet ETAPE  n'est pas valide "
79    print cr
80
81 e1.supprime()
82 e2.supprime()
83
84 def testcycle():
85    """
86        Cette fonction permet de détecter les cycles de références entre objets
87        à l'aide du module Cyclops
88    """
89    from Misc import Cyclops
90    global e1,e2
91    z=Cyclops.CycleFinder()
92    z.register(e1)
93    z.register(e2)
94    del e1,e2
95    z.find_cycles()
96    z.show_stats()
97    z.show_cycles()
98    z.show_cycleobjs()
99    z.show_sccs()
100    z.show_arcs()
101    print "dead root set objects:"
102    for rc, cyclic, x in z.get_rootset():
103       if rc == 0:
104          z.show_obj(x)
105    z.find_cycles(1)
106    z.show_stats()
107
108 testcycle()
109