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

Tests catégorie Rosen

parent 257156a7
......@@ -332,6 +332,13 @@ class Bouquets:
def transformer_graphviz(self):
for bouquet in self.bouquets:
bouquet.transformer_graphviz()
def __getitem__(self,key):
return self.bouquets[key]
def __iter__(self):
for bouquet in self.bouquets:
yield bouquet
class CompositionBouquets(BouquetAbstrait):
"""Appeler le constructeur de Composition n'instancie pas forcément une nouvelle composition.
......
......@@ -276,6 +276,63 @@ class CompositionClustersActifs(ClusterActif):
raise Exception("Composition de clusters impossible : "+clusters.__repr__())
instance = ClusterActif(clusters[0].source,clusters[-1].cible)
return instance
class ProtoClusterPerspectifs(ClusterAbstrait):
"""Seules les contraintes sur les perspectives sont prises en compte pour le cluster perspectif"""
def __init__(self, foncteur1, foncteur2, composantes):
ClusterAbstrait.__init__(self,foncteur1, foncteur2, composantes)
if TOUJOURS_VERIFIER_COHERENCE:
ProtoClusterPerspectifs.verifier_coherence(self)
def verifier_coherence(self):
if self.foncteur1.cat_cible != self.foncteur2.cat_cible:
raise Exception("Incoherence ProtoClusterPerspectifs : les deux foncteurs n'ont pas la meme image.")
impl1, impl2 = [self.foncteur1.categorie_image(),self.foncteur2.categorie_image()]
for composante in self.composantes:
if composante.source not in impl1.objets:
raise Exception("Incoherence ProtoClusterActif : la composante "+str(composante)+" ne prend pas sa source dans l'image de F1")
if composante.cible not in impl2.objets:
raise Exception("Incoherence ProtoClusterActif : la composante "+str(composante)+" ne prend pas sa cible dans l'image de F2")
# contrainte 1) au moins une flèche part de chacun des objets de D1
for d in self.foncteur1.cat_source.objets:
for composante in self.composantes:
if composante.source == self.foncteur1(d):
break
else:
raise Exception("Incoherence ProtoClusterActif : l'objet "+str(self.foncteur1(d))+" de D1 n'a pas de d'image par le cluster")
# contrainte 2) les composantes qui sortent d'un objet d de D1 mènent à des objets e de D2 reliés par un zig zag dans la catégorie sous d
for d in self.foncteur1.cat_source.objets:
E_e = [] #les images des composantes
for composante in self.composantes:
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:
raise Exception("Incoherence ProtoClusterActif : l'objet "+str(E_e[0])+" n'est pas dans la même composante connexe que "+str(e))
# contrainte 3) eog = g'
for composante in self.composantes:
for e in self.foncteur2.cat_source.objets:
if self.foncteur2(e) == composante.cible:
for eps in self.foncteur2.cat_source.morph_sortants[e]:
composee = self.categorie.Composee(composante,self.foncteur2(eps))
if composee not in self.composantes:
raise Exception("Incoherence ProtoClusterActif : la composee de la composante "+str(composante)+" avec la fleche "+str(self.foncteur2(eps))+" de D2 n'est pas dans le cluster")
# contrainte 4) god = g'
for composante in self.composantes:
for d in self.foncteur1.cat_source.objets:
if self.foncteur1(d) == composante.source:
for delta in self.foncteur1.cat_source.morph_entrants[d]:
composee = self.categorie.Composee(self.foncteur1(delta),composante)
if composee not in self.composantes:
raise Exception("Incoherence ProtoClusterActif : la composee de la fleche "+str(self.foncteur1(delta))+" de D1 avec la composante "+str(composante)+" n'est pas dans le cluster")
def main():
......
......@@ -42,8 +42,8 @@ class Cone():
pA = self.jambes[A]
pB = self.jambes[B]
if pB != self.foncteur.cat_cible.Composee(pA,self.foncteur(f)):
raise Exception("Incoherence cone : deux jambes ne commutent pas avec un morphisme image du foncteur.\npA = "+\
str(pA)+"\npB = "+str(pB)+"\nf = "+str(f)+"\nD(f) = "+str(self.foncteur(f))+"\npB != D(f) o pA")
raise Exception("Incoherence cone : deux jambes ne commutent pas avec un morphisme image du foncteur.\np"+str(A)+" = "+\
str(pA)+"\np"+str(B)+" = "+str(pB)+"\nf = "+str(f)+"\nD(f) = "+str(self.foncteur(f))+"\np"+str(B)+" != D(f) o p"+str(A)+"")
def transformer_graphviz(self, destination=None, afficher_identites = False):
"""Permet de visualiser la catégorie avec graphviz"""
......
......@@ -41,7 +41,7 @@ class Foncteur(Morphisme.Morphisme):
return Diagramme.Diagramme(self.cat_source,self.cat_cible,self.app_objets,self.app_morph)
def verifier_coherence(self):
# self.transformer_graphviz("graphviz/ErreurFoncteur")
Foncteur.transformer_graphviz(self,"graphviz/ErreurFoncteur")
for o in self.cat_source.objets:
if o not in self.app_objets:
......
import Categorie,CategorieAleatoire
import Diagramme
import CategorieCones,CategorieCocones
import CategorieCones,CategorieCocones,CategorieFleurie,CategorieClusters
import Bouquet
import random
import itertools
from Morphisme import Morphisme
import Foncteur
......@@ -44,35 +45,35 @@ from Morphisme import Morphisme
# b = Bouquet.Bouquets(diag2,diag1)
# b.transformer_graphviz()
cat = Categorie.Categorie()
cat.ajouter_objets("AB")
f = Morphisme('A','B','f')
g = Morphisme('A','B','g')
cat.ajouter_morphismes([f,g])
cat.transformer_graphviz()
# cat = Categorie.Categorie()
# cat.ajouter_objets("AB")
# f = Morphisme('A','B','f')
# g = Morphisme('A','B','g')
# cat.ajouter_morphismes([f,g])
# cat.transformer_graphviz()
diag1 = Diagramme.Fleche(cat,f)
diag1.transformer_graphviz()
diag2 = Diagramme.Fleche(cat,g)
diag2.transformer_graphviz()
# diag1 = Diagramme.Fleche(cat,f)
# diag1.transformer_graphviz()
# diag2 = Diagramme.Fleche(cat,g)
# diag2.transformer_graphviz()
f = diag1.est_prohomologue_a(diag2)
if f != None:
f.transformer_graphviz()
# f = diag1.est_prohomologue_a(diag2)
# if f != None:
# f.transformer_graphviz()
f = diag1.est_homologue_a(diag2)
if f != None:
f.transformer_graphviz()
# f = diag1.est_homologue_a(diag2)
# if f != None:
# f.transformer_graphviz()
b = Bouquet.BouquetsPerceptifs(diag1,diag2)
b.transformer_graphviz()
# b = Bouquet.BouquetsPerceptifs(diag1,diag2)
# b.transformer_graphviz()
b = Bouquet.BouquetsPerceptifs(diag2,diag1)
b.transformer_graphviz()
# b = Bouquet.BouquetsPerceptifs(diag2,diag1)
# b.transformer_graphviz()
diag1.champ_perceptif().transformer_graphviz()
diag2.champ_perceptif().transformer_graphviz()
# diag1.champ_perceptif().transformer_graphviz()
# diag2.champ_perceptif().transformer_graphviz()
# random.seed(1561741474774747587575775887517)
# cat = CategorieAleatoire.CategorieAlea(7,8)
......@@ -176,3 +177,59 @@ diag2.champ_perceptif().transformer_graphviz()
# bouquets = Bouquet.Bouquets(diag2,diag1)
# bouquets.transformer_graphviz()
cat = Categorie.Categorie("Rosen")
cat.ajouter_objets("ABfp")
a,b,c,d,e,g = [Morphisme('A','B','a'),Morphisme('B','f','b'),Morphisme('f','B','c'),Morphisme('f','p','d'),Morphisme('p','f','e'),Morphisme('B','p','g')]
cat.ajouter_morphismes([a,b,c,d,e,g])
diag = Diagramme.DiagrammeIdentite(cat)
diag.faire_commuter()
cat.csv_loi_de_composition('lois de composition/loi.csv')
diag = Diagramme.Fleche(cat,a)
cat.transformer_graphviz()
cat_fleurie = CategorieFleurie.CategorieFleurie(cat)
cat_fleurie.ajouter_diagramme_interet(diag)
cat_fleurie.transformer_graphviz()
cat_cluster = CategorieClusters.CategorieClustersActifs(cat)
cat_cluster.ajouter_diagramme_interet(diag)
cat_cluster.transformer_graphviz()
# cat = Categorie.Categorie("Test cocone cluster")
# cat.ajouter_objets("ABC")
# a,b,c,d = [Morphisme('A','B','a'),Morphisme('A','C','b'),Morphisme('B','C','c'),Morphisme('C','C','d')]
# cat.ajouter_morphismes([a,b,c,d])
# diag = Diagramme.Triangle(cat,"CCC",[d,d,d])
# diag.faire_commuter()
# cat.transformer_graphviz()
# cat_index = Categorie.Categorie()
# cat_index.ajouter_objets("ABC")
# e,f = [Morphisme('A','B','e'),Morphisme('C','B','f')]
# cat_index.ajouter_morphismes([e,f])
# cat_index.transformer_graphviz()
# cat.transformer_graphviz()
# fonct = Foncteur.Foncteur(cat_index,cat,{"A":"B","B":"C","C":"C"},{e:c,f:d})
# fonct.transformer_graphviz()
# cat_cones = CategorieCones.CategorieCones(fonct)
# cat_cones.transformer_graphviz()
# import Cone
# cone = Cone.Cone(fonct,"A",{"A":a,"B":cat.Composee(a,c),"C":cat.Composee(a,c,d)})
# cone.transformer_graphviz()
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