Commit 5f52d11b authored by Guillaume Sabbagh's avatar Guillaume Sabbagh
Browse files

Diagramme aléatoire (encore buggé)

parent 7c25f6be
......@@ -228,6 +228,10 @@ class Categorie:
break
if TOUJOURS_VERIFIER_COHERENCE:
self.verifier_coherence()
def supprimer_morphismes(self, morphismes):
for morph in copy.copy(morphismes):
self.supprimer_morphisme(morph)
def ajouter_morphisme(self, morphisme):
self.morphismes += [morphisme]
......
......@@ -107,7 +107,7 @@ def main():
# c2.verifier_coherence()
for i in range(10):
print("debut creation")
c = CategorieAleaPreOrdre(20,0.2)
c = CategorieAleaPreOrdreAcyclique(20,0.2)
print("fin creation")
c.transformer_graphviz(complet=False)
c.transformer_graphviz()
......
from Categorie import Categorie
from categorie.Categorie import Categorie
from Diagramme import DiagrammeIdentite
from copy import copy
......
from Categorie import Categorie
from categorie.Categorie import Categorie
import itertools
from Morphisme import Morphisme
from Foncteur import Composition
......
......@@ -7,6 +7,7 @@ import copy
from config import *
if GRAPHVIZ_ENABLED:
from graphviz import Digraph
import random
class Diagramme(Foncteur.Foncteur):
"""categorie_indexante est shallow copiée,
......@@ -180,7 +181,23 @@ class DiagrammeIdentite(Diagramme):
def __init__(self,categorie):
Diagramme.__init__(self,categorie,categorie,{e:e for e in categorie.objets},{e:e for e in categorie.morphismes})
class DiagrammeAlea(Diagramme):
def __init__(self, cat_cible, nb_objets_restants=None, proportion_morphismes_restants=None, retirer_objets_isoles=True):
"""proportion_morphismes entre 0 et 1, nb_objets_restants entre 0 et len(cat_cible.objets)
retirer_objets_isoles n'est pas considéré s'il n'y a que des objets isolés"""
if nb_objets_restants == None:
nb_objets_restants = random.randint(1,len(cat_cible.objets))
if proportion_morphismes_restants == None:
proportion_morphismes_restants = random.random()
cat_source = copy.copy(cat_cible)
cat_source.supprimer_objets(random.sample(cat_cible.objets,len(cat_cible.objets)-nb_objets_restants))
nb_morph_a_suppr = int((1-proportion_morphismes_restants)*(len(cat_source.morphismes)-nb_objets_restants)) #on ne compte pas les identites
cat_source.supprimer_morphismes(random.sample([morph for morph in cat_source.morphismes if not morph.is_identite],nb_morph_a_suppr))
if retirer_objets_isoles and len([obj for obj in cat_source.objets if not(len(cat_source.morph_sortants[obj]) == len(cat_source.morph_entrants[obj]) == 0)]) != 0:
cat_source.supprimer_objets([obj for obj in cat_source.objets if len(cat_source.morph_sortants[obj]) == len(cat_source.morph_entrants[obj]) == 0])
Diagramme.__init__(self,cat_source,cat_cible,{o:o for o in cat_source.objets},{m:m for m in cat_source.morphismes})
def main():
# c = Categorie.Categorie()
# c.ajouter_objets([1,2])
......@@ -196,21 +213,27 @@ def main():
# c.transformer_graphviz()
c = Categorie.Categorie()
c.ajouter_objets([1,2,3,4,5])
f,g,h,i,j,k = [Morphisme(1,2,'f'),Morphisme(1,3,'g'),Morphisme(2,4,'h'),Morphisme(3,4,'i'),Morphisme(4,5,'j'),Morphisme(3,5,'k')]
c.ajouter_morphismes([f,g,h,i,j,k])
c.transformer_graphviz()
triangle = Triangle(c,[3,4,5],[i,j,k])
triangle.faire_commuter()
triangle.faire_commuter()
print(c.diagrammes)
triangle.transformer_graphviz()
Foncteur.Foncteur.transformer_graphviz(triangle,destination="graphviz/diagramme_version_foncteur")
c.transformer_graphviz()
# c = Categorie.Categorie()
# c.ajouter_objets([1,2,3,4,5])
# f,g,h,i,j,k = [Morphisme(1,2,'f'),Morphisme(1,3,'g'),Morphisme(2,4,'h'),Morphisme(3,4,'i'),Morphisme(4,5,'j'),Morphisme(3,5,'k')]
# c.ajouter_morphismes([f,g,h,i,j,k])
# c.transformer_graphviz()
# triangle = Triangle(c,[3,4,5],[i,j,k])
# triangle.faire_commuter()
# triangle.faire_commuter()
# print(c.diagrammes)
# triangle.transformer_graphviz()
# Foncteur.Foncteur.transformer_graphviz(triangle,destination="graphviz/diagramme_version_foncteur")
# c.transformer_graphviz()
new_c = triangle.implementation()
new_c.transformer_graphviz()
# new_c = triangle.implementation()
# new_c.transformer_graphviz()
from CategorieAleatoire import CategorieAleaPreOrdreAcyclique
c = CategorieAleaPreOrdreAcyclique()
c.transformer_graphviz()
d = DiagrammeAlea(c)
d.transformer_graphviz()
......
from Foncteur import Foncteur
from Morphisme import Morphisme
\ No newline at end of file
from Morphisme import Morphisme
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