Commit bdf3623b authored by Guillaume Sabbagh's avatar Guillaume Sabbagh
Browse files

Tests PM

parent 5854c168
......@@ -16,6 +16,7 @@ class CategorieClustersAbstraite(Categorie):
self.diagrammes_constants = dict() #{obj:Δ(obj)}
self.cat_cones_cocones = {} #{diagramme:{"cat_cones":CategorieCones,"cat_cocones":CategorieCocones}}
for obj in categorie.objets:
print(obj)
diag_constant = DiagrammeObjets(categorie,[obj])
diag_constant.representant = "C("+str(obj)+")"
self.diagrammes_constants[obj] = diag_constant
......@@ -78,32 +79,66 @@ def main():
import CategorieAleatoire
import random
import Diagramme
# random.seed(1918652)
# cat = CategorieAleatoire.CategorieAleaPreOrdre()
# cat.transformer_graphviz(afficher_identites=True)
random.seed(196587456841547744414516412)
youpi = False
while not youpi:
cat = CategorieAleatoire.CategorieAleaPreOrdre(nb_objets = 5)
diag1 = Diagramme.DiagrammeAlea(cat)
diag2 = Diagramme.DiagrammeAlea(cat)
diag1.transformer_graphviz()
diag2.transformer_graphviz()
# cat_f = CategorieClustersActifs(cat)
# cat_f.transformer_graphviz(complet=True)
# cat_f.ajouter_diagramme_interet(diag1)
# cat_f.transformer_graphviz()
# cat_f.ajouter_diagramme_interet(diag2)
# cat_f.transformer_graphviz()
youpi = False
a = ClusterActif(diag1,diag2)
if a == None:
youpi = True
b = ClusterActif(diag2,diag1)
if b == None:
youpi = True
fonct = diag1.est_homologue_a(diag2)
if fonct == None or len(fonct.cat_source.objets) == 0:
youpi=False
cat.transformer_graphviz(afficher_identites=True)
fonct.transformer_graphviz()
print(a,b,fonct)
a.transformer_graphviz()
# cat = Categorie("3")
# cat.ajouter_objets("ABabC")
# F,G,f,g = [Morphisme('A','C','F'),Morphisme('B','C','G'),Morphisme('a','C','f'),Morphisme('b','C','g')]
# cat.ajouter_morphismes([F,G,f,g])
# cat_f = CategorieFleurieAbstraite(cat)
# cat_f.transformer_graphviz(complet=True)
# diag1 = Diagramme.DiagrammeObjets(cat,"Aa")
# diag2 = Diagramme.DiagrammeObjets(cat,"Bb")
cat = Categorie("2")
cat.ajouter_objets("AB")
f,g = [Morphisme('A','B','f'),Morphisme('A','B','g')]
cat.ajouter_morphismes([f,g])
# diag1.transformer_graphviz()
# diag2.transformer_graphviz()
diag1 = Diagramme.Fleche(cat,f)
diag2 = Diagramme.Fleche(cat,g)
# cat_clusters = CategorieClustersActifs(cat)
# cat_clusters.transformer_graphviz(afficher_identites=True)
# cat_clusters.ajouter_diagramme_interet(diag1)
# cat_clusters.transformer_graphviz(afficher_identites=True)
# cat_clusters.ajouter_diagramme_interet(diag2)
# cat_clusters.transformer_graphviz(afficher_identites=True)
diag1.transformer_graphviz()
diag2.transformer_graphviz()
# cat_clusters.csv_loi_de_composition("lois de composition/loi1.csv",';')
cat_clusters = CategorieClustersActifs(cat)
cat_clusters.transformer_graphviz(afficher_identites=True)
cat_clusters.ajouter_diagramme_interet(diag1)
cat_clusters.transformer_graphviz(afficher_identites=True)
cat_clusters.ajouter_diagramme_interet(diag2)
cat_clusters.transformer_graphviz(afficher_identites=True)
# print(diag1.est_homologue_a(diag2))
cat_clusters.csv_loi_de_composition("lois de composition/loi1.csv",';')
if __name__ == '__main__':
main()
\ No newline at end of file
......@@ -57,7 +57,7 @@ class ClusterAbstrait(Morphisme):
def verifier_coherence(self):
raise NotImplementedError()
def transformer_graphviz(self, destination=None):
def transformer_graphviz(self, destination=None, afficher_identites=True):
"""Permet de visualiser le cluster avec graphviz
Composante rouge : diagramme 1
Composante verte : diagramme 2
......@@ -79,8 +79,10 @@ class ClusterAbstrait(Morphisme):
graph.node(str(o),color="#"+''.join(map(lambda x:(2-len(str(hex(x))[2:]))*"0"+str(hex(x))[2:],couleur)))#"grey60")
morphismes = self.categorie.morphismes+image1.morphismes+image2.morphismes+self.composantes
if afficher_identites:
morphismes += self.categorie.identites.values()
for morph in [morphismes[i] for i in range(len(morphismes)) if i==len(morphismes) or morphismes[i] not in morphismes[i+1:]]:
if not morph.is_identite:
if not morph.is_identite or afficher_identites:
couleur = [0,0,0]
if morph in image1.morphismes:
couleur[0] += 255
......@@ -168,6 +170,8 @@ class ProtoClustersActifs:
for i in self.foncteur1.source.objets for j in self.foncteur2.source.objets}
fleches = [e for liste in objets_comma_category.values() for e in liste]
cat_cc = {d:CategorieComposantesConnexes(CategorieSous(self.categorie, self.foncteur1(d))) for d in self.foncteur1.cat_source.objets}
# on énumère toutes les interactions de D1 à D2
for nb_fleches in range(1,len(fleches)+1):
for interaction in itertools.combinations(fleches,nb_fleches):
......@@ -187,11 +191,9 @@ class ProtoClustersActifs:
for composante in interaction:
if composante.source == self.foncteur1(d):
E_e += [composante.cible]
cat_sous = CategorieSous(self.categorie, self.foncteur1(d))
cat_cc = CategorieComposantesConnexes(cat_sous)
# on vérifie que tous les E(e) sont isomorphes dans la catégorie des composantes connexes de la catégorie sous D(d)
for e in E_e[1:]:
if cat_cc.existe_composee(E_e[0],e) == None:
if cat_cc[d].existe_composee(E_e[0],e) == None:
ajouter_cluster = False #raise Exception("Incoherence ProtoClusterActif : l'objet "+str(E_e[0])+" n'est pas dans la même composante connexe que "+str(e))
break
else:
......
......@@ -82,9 +82,9 @@ class Diagramme(Foncteur.Foncteur):
import FoncteurOubli
assert(self.categorie_indexee == other.categorie_indexee)
cat_cones1 = self.champ_perceptif()
cat_cones1.transformer_graphviz(complet=False)
# cat_cones1.transformer_graphviz(complet=False)
cat_cones2 = other.champ_perceptif()
cat_cones2.transformer_graphviz(complet=False)
# cat_cones2.transformer_graphviz(complet=False)
apices = set([e.apex for e in cat_cones1.objets])
apices2 = set([e.apex for e in cat_cones2.objets])
if apices != apices2:
......@@ -155,9 +155,9 @@ class Diagramme(Foncteur.Foncteur):
import FoncteurOubli
assert(self.categorie_indexee == other.categorie_indexee)
cat_cocones1 = self.champ_actif()
cat_cocones1.transformer_graphviz(complet=False)
# cat_cocones1.transformer_graphviz(complet=False)
cat_cocones2 = other.champ_actif()
cat_cocones2.transformer_graphviz(complet=False)
# cat_cocones2.transformer_graphviz(complet=False)
nadirs = set([e.nadir for e in cat_cocones1.objets])
nadirs2 = set([e.nadir for e in cat_cocones2.objets])
if nadirs != nadirs2:
......@@ -253,7 +253,7 @@ class DiagrammeObjets(Diagramme):
""" objets_a_selectionner est une listes d'objets à selectionner dans la catégorie."""
cat = Categorie.Categorie("Objets")
cat.ajouter_objets(range(len(objets_a_selectionner)))
Diagramme.__init__(self,cat,categorie_indexee,{i:objets_a_selectionner[i] for i in range(len(objets_a_selectionner))},dict())
Diagramme.__init__(self,cat,categorie_indexee,{i:objets_a_selectionner[i] for i in range(len(objets_a_selectionner))},dict(),representant="O("+','.join(map(str,objets_a_selectionner))+")")
class Fleche(Diagramme):
"""Permet de selectionner deux objets réliés par une flèche"""
......
;(C(B),IdB,Df);(C(B),IdB,Dg);(C(A),IdA,C(A));(C(A),f/g,C(B));(C(B),IdB,C(B));(C(A),IdA/f/g,Df);(C(A),IdA/f/g,Dg);(Df,f/g/IdB,C(B));(Dg,f/g/IdB,C(B));(Df,IdA/f/g/IdB,Df);(Df,IdA/f/g/IdB,Dg);(Dg,IdA/f/g/IdB,Df);(Dg,IdA/f/g/IdB,Dg)
(C(B),IdB,Df);X;X;X;X;X;X;X;(C(B),IdB,C(B));X;(C(B),IdB,Df);(C(B),IdB,Dg);X;X
(C(B),IdB,Dg);X;X;X;X;X;X;X;X;(C(B),IdB,C(B));X;X;(C(B),IdB,Df);(C(B),IdB,Dg)
(C(A),IdA,C(A));X;X;(C(A),IdA,C(A));(C(A),f/g,C(B));X;(C(A),IdA/f/g,Df);(C(A),IdA/f/g,Dg);X;X;X;X;X;X
(C(A),f/g,C(B));(C(A),IdA/f/g,Df);(C(A),IdA/f/g,Dg);X;X;(C(A),f/g,C(B));X;X;X;X;X;X;X;X
(C(B),IdB,C(B));(C(B),IdB,Df);(C(B),IdB,Dg);X;X;(C(B),IdB,C(B));X;X;X;X;X;X;X;X
(C(A),IdA/f/g,Df);X;X;X;X;X;X;X;(C(A),f/g,C(B));X;(C(A),IdA/f/g,Df);(C(A),IdA/f/g,Dg);X;X
(C(A),IdA/f/g,Dg);X;X;X;X;X;X;X;X;(C(A),f/g,C(B));X;X;(C(A),IdA/f/g,Df);(C(A),IdA/f/g,Dg)
(Df,f/g/IdB,C(B));(Df,IdA/f/g/IdB,Df);(Df,IdA/f/g/IdB,Dg);X;X;(Df,f/g/IdB,C(B));X;X;X;X;X;X;X;X
(Dg,f/g/IdB,C(B));(Dg,IdA/f/g/IdB,Df);(Dg,IdA/f/g/IdB,Dg);X;X;(Dg,f/g/IdB,C(B));X;X;X;X;X;X;X;X
(Df,IdA/f/g/IdB,Df);X;X;X;X;X;X;X;(Df,f/g/IdB,C(B));X;(Df,IdA/f/g/IdB,Df);(Df,IdA/f/g/IdB,Dg);X;X
(Df,IdA/f/g/IdB,Dg);X;X;X;X;X;X;X;X;(Df,f/g/IdB,C(B));X;X;(Df,IdA/f/g/IdB,Df);(Df,IdA/f/g/IdB,Dg)
(Dg,IdA/f/g/IdB,Df);X;X;X;X;X;X;X;(Dg,f/g/IdB,C(B));X;(Dg,IdA/f/g/IdB,Df);(Dg,IdA/f/g/IdB,Dg);X;X
(Dg,IdA/f/g/IdB,Dg);X;X;X;X;X;X;X;X;(Dg,f/g/IdB,C(B));X;X;(Dg,IdA/f/g/IdB,Df);(Dg,IdA/f/g/IdB,Dg)
;(C(A),F,C(C));(C(B),G,C(C));(C(a),f,C(C));(C(b),g,C(C));(C(A),IdA,C(A));(C(B),IdB,C(B));(C(C),IdC,C(C));(C(a),Ida,C(a));(C(b),Idb,C(b));(C(A),IdA,O(A,a));(C(B),IdB,O(B,b));(C(a),Ida,O(A,a));(C(b),Idb,O(B,b));(O(A,a),F/f,C(C));(O(B,b),G/g,C(C));(O(A,a),IdA/Ida,O(A,a));(O(B,b),IdB/Idb,O(B,b))
(C(A),F,C(C));X;X;X;X;X;X;(C(A),F,C(C));X;X;X;X;X;X;X;X;X;X
(C(B),G,C(C));X;X;X;X;X;X;(C(B),G,C(C));X;X;X;X;X;X;X;X;X;X
(C(a),f,C(C));X;X;X;X;X;X;(C(a),f,C(C));X;X;X;X;X;X;X;X;X;X
(C(b),g,C(C));X;X;X;X;X;X;(C(b),g,C(C));X;X;X;X;X;X;X;X;X;X
(C(A),IdA,C(A));(C(A),F,C(C));X;X;X;(C(A),IdA,C(A));X;X;X;X;(C(A),IdA,O(A,a));X;X;X;X;X;X;X
(C(B),IdB,C(B));X;(C(B),G,C(C));X;X;X;(C(B),IdB,C(B));X;X;X;X;(C(B),IdB,O(B,b));X;X;X;X;X;X
(C(C),IdC,C(C));X;X;X;X;X;X;(C(C),IdC,C(C));X;X;X;X;X;X;X;X;X;X
(C(a),Ida,C(a));X;X;(C(a),f,C(C));X;X;X;X;(C(a),Ida,C(a));X;X;X;(C(a),Ida,O(A,a));X;X;X;X;X
(C(b),Idb,C(b));X;X;X;(C(b),g,C(C));X;X;X;X;(C(b),Idb,C(b));X;X;X;(C(b),Idb,O(B,b));X;X;X;X
(C(A),IdA,O(A,a));X;X;X;X;X;X;X;X;X;X;X;X;X;(C(A),F,C(C));X;(C(A),IdA,O(A,a));X
(C(B),IdB,O(B,b));X;X;X;X;X;X;X;X;X;X;X;X;X;X;(C(B),G,C(C));X;(C(B),IdB,O(B,b))
(C(a),Ida,O(A,a));X;X;X;X;X;X;X;X;X;X;X;X;X;(C(a),f,C(C));X;(C(a),Ida,O(A,a));X
(C(b),Idb,O(B,b));X;X;X;X;X;X;X;X;X;X;X;X;X;X;(C(b),g,C(C));X;(C(b),Idb,O(B,b))
(O(A,a),F/f,C(C));X;X;X;X;X;X;(O(A,a),F/f,C(C));X;X;X;X;X;X;X;X;X;X
(O(B,b),G/g,C(C));X;X;X;X;X;X;(O(B,b),G/g,C(C));X;X;X;X;X;X;X;X;X;X
(O(A,a),IdA/Ida,O(A,a));X;X;X;X;X;X;X;X;X;X;X;X;X;(O(A,a),F/f,C(C));X;(O(A,a),IdA/Ida,O(A,a));X
(O(B,b),IdB/Idb,O(B,b));X;X;X;X;X;X;X;X;X;X;X;X;X;X;(O(B,b),G/g,C(C));X;(O(B,b),IdB/Idb,O(B,b))
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment