Salome HOME
PN bug notation scientifique
[tools/eficas.git] / Exemples / cyclops / main.py
1 # -*- coding: utf-8 -*-
2 """
3    Vérification des cycles de références d'objets dans Accas
4
5    Cet exemple met en oeuvre plusieurs éléments de définition et
6    après l'opération de vérification du dictionnaire d
7    et l'appel à la méthode supprime de l'objet o 
8    exécute l'utilitaire Cyclops pour vérifier qu'il ne reste plus
9    de cycles de références.
10 """
11
12 import sys
13 sys.path[:0]=['../..','../../..']
14
15 from Accas import SIMP,FACT,BLOC
16 from Accas import AU_MOINS_UN
17
18 # Construction objet de définition
19
20 cata= FACT(mcf1=FACT(a=SIMP(typ='I'),b=SIMP(typ='I')),
21            mcf2=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
22            a    =SIMP(typ='I'),
23            bloc1=BLOC(condition="a==1",
24                        c=SIMP(typ='I'),
25                        d=SIMP(typ='I')
26                      ),
27            sect3=FACT(c=SIMP(typ='I'),d=SIMP(typ='I')),
28            regles=AU_MOINS_UN('sect3'),
29           )
30
31 # Vérification objet de définition
32 cr=cata.report()
33 if cr.estvide():
34    print "L'objet de définition est valide "
35 else:
36    print cr
37
38
39 d= {'mcf1':{'a':1,'b':2},
40     'mcf2':({'c':3},{'c':5}),
41     'sect3':{'c':3,'d':5},
42     'a':1,
43     'c':2,
44    }
45
46 # Création de l'objet MCFACT de nom mcf1
47 o=cata(d,'mcf1',None)
48 # Vérification objet MCFACT
49 cr= o.report()
50 if cr.estvide():
51    print "L'objet MCFACT basé sur le dictionnaire %s est valide " % d
52 else:
53    print "L'objet MCFACT basé sur le dictionnaire %s n'est pas valide " % d
54    print cr
55
56 o.supprime()
57
58 def testcycle():
59    """
60        Cette fonction permet de détecter les cycles de références entre objets
61        à l'aide du module Cyclops
62    """
63    from Misc import Cyclops
64    global o,cr,cata
65    z=Cyclops.CycleFinder()
66    z.register(o)
67    z.register(cata)
68    del o,cr,cata
69    z.find_cycles()
70    z.show_stats()
71    z.show_cycles()
72    z.show_cycleobjs()
73    z.show_sccs()
74    z.show_arcs()
75    print "dead root set objects:"
76    for rc, cyclic, x in z.get_rootset():
77       if rc == 0:
78          z.show_obj(x)
79    z.find_cycles(1)
80    z.show_stats()
81
82 testcycle()
83