# coding: utf8 def fonctionCoucouSSVZ(): print("Fichier SSVZ.sage chargé") fonctionCoucouSSVZ() #Fichier regroupant les algorithmes permettant de calculer les modifications #d'un carquois suivant le changement du représentant l'ayant engendrée #d'après Shapiro, Shapiro, Vainshtein, Zelevinsky 2000 "Simply Laced # Coxeter Groups and Groups Generated by Symplectic Transvections" def modifGraineMouvementElementaire(repw,graine,dDelta,mouvement): """ Prend en entrée une graine [[Q0,Q1],etiquettes] correspondant au carquois initial associé à un représentant repw d'un mot w d'un groupe de W. Les étiquettes sont les coordonnées des Delta_w vecteurs des modules associés à ses sommets. mouvement est un 2-uplet ou un 3-uplet correspondant aux positions échangées lors du 2- ou du 3-mouvement. dDelta est le vecteur des coordonnées des Delta-vecteurs de base dans la base B_i """ [Q0,Q1]=graine[0] Q1res=[] etiquettes=graine[1] repw=appliquerMouvement(repw,mouvement) permu=mouvement if len(mouvement)==3: permu=mouvement[1:]#La permutation associée aux trois mouvements #consiste en la transposition des deux derniers indices [[Q0,Q1],etiquettes]=mutaStratesDeltaVecteurs([[Q0,Q1],etiquettes],dDelta,mouvement[0]) for i in Q1:#On applique les changements relatifs aux permutations des sommets Q1res=Q1res+[(permutation(i[0],permu),permutation(i[1],permu))] etiquettetmp=etiquettes[permu[0]-1] etiquettes[permu[0]-1]=etiquettes[permu[1]-1] etiquettes[permu[1]-1]=etiquettetmp #on échange l'ordre des étiquettes return([repw,[[Q0,Q1res],etiquettes]]) def muteCarquoisSSVZ(repwinitial,listeMouvements,W,affiche=False,enregistrement=False): """ Génère un carquois modifié en accord avec la méthode de Shapiro, Shapiro, Vainshtein, Zelevinsky 2000 "Simply Laced Coxeter Groups and Groups Generated by Symplectic Transvections". Prend en entrée repwinitial un représentant d'un mot d'un groupe de Coxeter, listeMouvements une liste de tuples correspondant aux mouvements de tresse et de commutation qu'on applique successivement à ce représentant pour arriver à un autre représentant du même mot et W le groupe de Weyl dans lequel on se place. Retourne la graine associée au représentant modifié mais avec les delta-vecteurs relatifs à repwinitial """ repwcourant=deepcopy(repwinitial) graine=graineInitiale(repwinitial,W,1) #génération de dDelta listeVecteursDimMi=calculDimMi2(W,repwinitial) dDelta=vecteurdDelta(listeVecteursDimMi,creerCarquois(W),repwinitial) if affiche or enregistrement: n=len(listeMouvements) graphes=[] for i in range(2*(n+1)): graphes=graphes+[Graphics()]#On initialise le retour des graphiques deltawvecteurs=[[0]*len(graine[1])]*len(graine[1])#Ici on n'aura pas de #delta_w-vecteurs donc on passe une liste nulle [graphes[0],graphes[1]]=genCarquois(graine[0],graine[1],deltawvecteurs,repwcourant,"Graine initiale\n repw="+str(repwinitial)) k=1 if affiche: graphes[0].show() graphes[1].show() for i in listeMouvements: [repwcourant,graine]=modifGraineMouvementElementaire(repwcourant,graine,dDelta,i) if affiche or enregistrement: [graphes[2*k],graphes[2*k+1]]=genCarquois(graine[0],graine[1],deltawvecteurs,repwcourant,"repw="+str(repwcourant)+" \n Apres la mutation "+str(i)) if affiche: graphes[2*k].show() graphes[2*k+1].show() k=k+1 if enregistrement: sauvegarderSSVZ(graphes,repwinitial,repwcourant,W) if not (affiche or enregistrement): return([repwcourant,graine,dDelta]) else: return([repwcourant,graine,dDelta,graphes]) def sauvegarderSSVZ(graphes,repvinitial,repwfinal,W): """ Sauvegarde les images de graphes dans un dossier """ chemin=repertoireSSVZSauvegarde(repvinitial,repwfinal,W) for i in range(len(graphes)/2): save(graphes[2*i],os.path.expanduser(chemin+str(i)+".png")) save(graphes[2*i+1],os.path.expanduser(chemin+str(i)+"coords.png")) print("Impression figure "+str(i)) print("Les images ont été enregistrées dans "+os.path.expanduser(chemin)) def repertoireSSVZSauvegarde(repvinitial,repwfinal,W): """ Crée un dossier pour sauvegarder les résultats d'un test """ creerRepertoireLog()#On crée le répertoire log typeCartan=W.cartan_type()[0]+str(W.cartan_type()[1])+'/' if not(os.path.exists(os.path.expanduser(cheminCourant+'log/figures/'))):#On crée le dossier #figures si nécessaire os.mkdir(os.path.expanduser(cheminCourant+'log/figures/')) print("Dossier"+os.path.expanduser(cheminCourant+'log/figures/')+" créé") else : print("Le dossier "+os.path.expanduser(cheminCourant+'log/figures/')+" existe déjà") if not(os.path.exists(os.path.expanduser(cheminCourant+'log/figures/SSVZ/'))):#On crée le dossier #SSVZ si nécessaire os.mkdir(os.path.expanduser(cheminCourant+'log/figures/SSVZ/')) print("Dossier"+os.path.expanduser(cheminCourant+'log/figures/SSVZ/')+" créé") else : print("Le dossier "+os.path.expanduser(cheminCourant+'log/figures/SSVZ/')+" existe déjà") if not(os.path.exists(os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan))):#Puis le #dossier au nom du type de Dynkin. os.mkdir(os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan)) print("Dossier"+os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan)+" créé") else : print("Le dossier "+os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan)+" existe déjà") if not(os.path.exists(os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan+'repv='+str(repvinitial)))):#Puis le #sous dossier repw=... os.mkdir(os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan+'repv='+str(repvinitial))) print("Dossier"+os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan+'repv='+str(repvinitial))+" créé") else : print("Le dossier "+os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan+'repv='+str(repvinitial))+" existe déjà") if not(os.path.exists(os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan+'repv='+str(repvinitial)+'/repw='+str(repwfinal)))): #et le sous-sous dossier v= os.mkdir(os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan+'repv='+str(repvinitial)+'/repw='+str(repwfinal))) print("Dossier"+os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan+'repv='+str(repvinitial)+'/repw='+str(repwfinal))+" créé") else : print("Le dossier "+os.path.expanduser(cheminCourant+'log/figures/SSVZ/'+typeCartan+'repv='+str(repvinitial)+'/repw='+str(repwfinal))+" existe déjà") return(cheminCourant+'log/figures/SSVZ/'+typeCartan+'repv='+str(repvinitial)+'/repw='+str(repwfinal)+'/')