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