Update opolka/ScoDoc from ScoDoc/ScoDoc #2

Merged
opolka merged 1272 commits from ScoDoc/ScoDoc:master into master 2024-05-27 09:11:04 +02:00
3 changed files with 46 additions and 46 deletions
Showing only changes of commit 196dbab298 - Show all commits

View File

@ -2,25 +2,25 @@ from app.comp import moy_sem
from app.pe.pe_tabletags import TableTag, MoyenneTag from app.pe.pe_tabletags import TableTag, MoyenneTag
from app.pe.pe_etudiant import EtudiantsJuryPE from app.pe.pe_etudiant import EtudiantsJuryPE
from app.pe.pe_rcs import RCS, RCSsJuryPE from app.pe.pe_rcs import RCS, RCSsJuryPE
from app.pe.pe_trajectoiretag import RCSTag from app.pe.pe_rcstag import RCSTag
import pandas as pd import pandas as pd
import numpy as np import numpy as np
class AggregatInterclasseTag(TableTag): class RCSInterclasseTag(TableTag):
# ------------------------------------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------------------------------------
def __init__( def __init__(
self, self,
nom_aggregat: str, nom_rcs: str,
etudiants: EtudiantsJuryPE, etudiants: EtudiantsJuryPE,
trajectoires_jury_pe: RCSsJuryPE, rcss_jury_pe: RCSsJuryPE,
trajectoires_taggues: dict[tuple, RCSTag], rcss_tags: dict[tuple, RCSTag],
): ):
""" """
Interclasse l'ensemble des étudiants diplômés à une année Interclasse l'ensemble des étudiants diplômés à une année
donnée (celle du jury), pour un aggrégat donné (par ex: 'S2', '3S') donnée (celle du jury), pour un RCS donné (par ex: 'S2', '3S')
en reportant : en reportant :
* les moyennes obtenues sur la trajectoire qu'il ont suivi pour atteindre le numéro de semestre de fin de l'aggrégat (indépendamment de son * les moyennes obtenues sur la trajectoire qu'il ont suivi pour atteindre le numéro de semestre de fin de l'aggrégat (indépendamment de son
@ -29,12 +29,12 @@ class AggregatInterclasseTag(TableTag):
""" """
TableTag.__init__(self) TableTag.__init__(self)
self.aggregat = nom_aggregat self.nom_rcs = nom_rcs
"""Aggrégat de l'interclassement""" """Le nom du RCS interclassé"""
self.nom = self.get_repr() self.nom = self.get_repr()
"""Les étudiants diplômés et leurs trajectoires (cf. trajectoires.suivis)""" # TODO """Les étudiants diplômés et leurs rcss""" # TODO
self.diplomes_ids = etudiants.etudiants_diplomes self.diplomes_ids = etudiants.etudiants_diplomes
self.etudiants_diplomes = {etudid for etudid in self.diplomes_ids} self.etudiants_diplomes = {etudid for etudid in self.diplomes_ids}
# pour les exports sous forme de dataFrame # pour les exports sous forme de dataFrame
@ -44,17 +44,17 @@ class AggregatInterclasseTag(TableTag):
} }
# Les trajectoires (et leur version tagguées), en ne gardant que celles associées à l'aggrégat # Les trajectoires (et leur version tagguées), en ne gardant que celles associées à l'aggrégat
self.trajectoires: dict[int, RCS] = {} self.rcss: dict[int, RCS] = {}
"""Ensemble des trajectoires associées à l'aggrégat""" """Ensemble des trajectoires associées à l'aggrégat"""
for trajectoire_id in trajectoires_jury_pe.rcss: for trajectoire_id in rcss_jury_pe.rcss:
trajectoire = trajectoires_jury_pe.rcss[trajectoire_id] trajectoire = rcss_jury_pe.rcss[trajectoire_id]
if trajectoire_id[0] == nom_aggregat: if trajectoire_id[0] == nom_rcs:
self.trajectoires[trajectoire_id] = trajectoire self.rcss[trajectoire_id] = trajectoire
self.trajectoires_taggues: dict[int, RCS] = {} self.trajectoires_taggues: dict[int, RCS] = {}
"""Ensemble des trajectoires tagguées associées à l'aggrégat""" """Ensemble des trajectoires tagguées associées à l'aggrégat"""
for trajectoire_id in self.trajectoires: for trajectoire_id in self.rcss:
self.trajectoires_taggues[trajectoire_id] = trajectoires_taggues[ self.trajectoires_taggues[trajectoire_id] = rcss_tags[
trajectoire_id trajectoire_id
] ]
@ -64,7 +64,7 @@ class AggregatInterclasseTag(TableTag):
"""Association entre chaque étudiant et la trajectoire tagguée à prendre en """Association entre chaque étudiant et la trajectoire tagguée à prendre en
compte pour l'aggrégat""" compte pour l'aggrégat"""
for etudid in self.diplomes_ids: for etudid in self.diplomes_ids:
self.suivi[etudid] = trajectoires_jury_pe.suivi[etudid][nom_aggregat] self.suivi[etudid] = rcss_jury_pe.suivi[etudid][nom_rcs]
self.tags_sorted = self.do_taglist() self.tags_sorted = self.do_taglist()
"""Liste des tags (triés par ordre alphabétique)""" """Liste des tags (triés par ordre alphabétique)"""
@ -84,7 +84,7 @@ class AggregatInterclasseTag(TableTag):
def get_repr(self) -> str: def get_repr(self) -> str:
"""Une représentation textuelle""" """Une représentation textuelle"""
return f"Aggrégat {self.aggregat}" return f"Aggrégat {self.nom_rcs}"
def do_taglist(self): def do_taglist(self):
"""Synthétise les tags à partir des trajectoires_tagguées """Synthétise les tags à partir des trajectoires_tagguées

View File

@ -54,8 +54,8 @@ from app.pe.pe_etudiant import *
from app.pe.pe_rcs import * from app.pe.pe_rcs import *
import app.pe.pe_comp as pe_comp import app.pe.pe_comp as pe_comp
from app.pe.pe_semtag import SemestreTag from app.pe.pe_semtag import SemestreTag
from app.pe.pe_interclasstag import AggregatInterclasseTag from app.pe.pe_interclasstag import RCSInterclasseTag
from app.pe.pe_trajectoiretag import RCSTag from app.pe.pe_rcstag import RCSTag
import app.pe.pe_affichage as pe_affichage import app.pe.pe_affichage as pe_affichage
import pandas as pd import pandas as pd
@ -94,8 +94,8 @@ class JuryPE(object):
else: else:
self._gen_xls_diplomes(zipfile) self._gen_xls_diplomes(zipfile)
self._gen_xls_semestre_taggues(zipfile) self._gen_xls_semestre_taggues(zipfile)
self._gen_xls_trajectoires(zipfile) self._gen_xls_rcss_tags(zipfile)
self._gen_xls_aggregats(zipfile) self._gen_xls_interclassements_rcss(zipfile)
self._gen_xls_synthese_jury_par_tag(zipfile) self._gen_xls_synthese_jury_par_tag(zipfile)
self._gen_xls_synthese_par_etudiant(zipfile) self._gen_xls_synthese_par_etudiant(zipfile)
@ -129,14 +129,14 @@ class JuryPE(object):
def _gen_xls_semestre_taggues(self, zipfile: ZipFile): def _gen_xls_semestre_taggues(self, zipfile: ZipFile):
"Génère les semestres taggués (avec le calcul des moyennes) pour le jury PE" "Génère les semestres taggués (avec le calcul des moyennes) pour le jury PE"
pe_affichage.pe_print("*** Génère les semestres taggués") pe_affichage.pe_print("*** Génère les semestres taggués")
self.semestres_taggues = compute_semestres_tag(self.etudiants) self.sems_tags = compute_semestres_tag(self.etudiants)
# Intègre le bilan des semestres taggués au zip final # Intègre le bilan des semestres taggués au zip final
output = io.BytesIO() output = io.BytesIO()
with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated
output, engine="openpyxl" output, engine="openpyxl"
) as writer: ) as writer:
for formsemestretag in self.semestres_taggues.values(): for formsemestretag in self.sems_tags.values():
onglet = formsemestretag.nom onglet = formsemestretag.nom
df = formsemestretag.df_moyennes_et_classements() df = formsemestretag.df_moyennes_et_classements()
# écriture dans l'onglet # écriture dans l'onglet
@ -150,22 +150,22 @@ class JuryPE(object):
path="details", path="details",
) )
def _gen_xls_trajectoires(self, zipfile: ZipFile): def _gen_xls_rcss_tags(self, zipfile: ZipFile):
"""Génère les trajectoires (combinaison de semestres suivis """Génère les RCS (combinaisons de semestres suivis
par un étudiant pour atteindre le semestre final d'un aggrégat) par un étudiant)
""" """
pe_affichage.pe_print( pe_affichage.pe_print(
"*** Génère les trajectoires (différentes combinaisons de semestres) des étudiants" "*** Génère les trajectoires (différentes combinaisons de semestres) des étudiants"
) )
self.trajectoires = RCSsJuryPE(self.diplome) self.rcss = RCSsJuryPE(self.diplome)
self.trajectoires.cree_rcss(self.etudiants) self.rcss.cree_rcss(self.etudiants)
# Génère les moyennes par tags des trajectoires # Génère les moyennes par tags des trajectoires
pe_affichage.pe_print( pe_affichage.pe_print(
"*** Calcule les moyennes par tag des trajectoires possibles" "*** Calcule les moyennes par tag des RCS possibles"
) )
self.trajectoires_tagguees = compute_trajectoires_tag( self.rcss_tags = compute_trajectoires_tag(
self.trajectoires, self.etudiants, self.semestres_taggues self.rcss, self.etudiants, self.sems_tags
) )
# Intègre le bilan des trajectoires tagguées au zip final # Intègre le bilan des trajectoires tagguées au zip final
@ -173,26 +173,26 @@ class JuryPE(object):
with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated
output, engine="openpyxl" output, engine="openpyxl"
) as writer: ) as writer:
for trajectoire_tagguee in self.trajectoires_tagguees.values(): for rcs_tag in self.rcss_tags.values():
onglet = trajectoire_tagguee.get_repr() onglet = rcs_tag.get_repr()
df = trajectoire_tagguee.df_moyennes_et_classements() df = rcs_tag.df_moyennes_et_classements()
# écriture dans l'onglet # écriture dans l'onglet
df.to_excel(writer, onglet, index=True, header=True) df.to_excel(writer, onglet, index=True, header=True)
output.seek(0) output.seek(0)
self.add_file_to_zip( self.add_file_to_zip(
zipfile, zipfile,
f"trajectoires_taggues_{self.diplome}.xlsx", f"RCS_taggues_{self.diplome}.xlsx",
output.read(), output.read(),
path="details", path="details",
) )
def _gen_xls_aggregats(self, zipfile: ZipFile): def _gen_xls_interclassements_rcss(self, zipfile: ZipFile):
"""Intègre le bilan des aggrégats (interclassé par promo) au zip""" """Intègre le bilan des RCS (interclassé par promo) au zip"""
# Génère les interclassements (par promo et) par (nom d') aggrégat # Génère les interclassements (par promo et) par (nom d') aggrégat
pe_affichage.pe_print("*** Génère les interclassements par aggrégat") pe_affichage.pe_print("*** Génère les interclassements par aggrégat")
self.interclassements_taggues = compute_interclassements( self.interclassements_taggues = compute_interclassements(
self.etudiants, self.trajectoires, self.trajectoires_tagguees self.etudiants, self.rcss, self.rcss_tags
) )
# Intègre le bilan des aggrégats (interclassé par promo) au zip final # Intègre le bilan des aggrégats (interclassé par promo) au zip final
@ -276,7 +276,7 @@ class JuryPE(object):
self.zipdata.seek(0) self.zipdata.seek(0)
return self.zipdata return self.zipdata
def do_tags_list(self, interclassements: dict[str, AggregatInterclasseTag]): def do_tags_list(self, interclassements: dict[str, RCSInterclasseTag]):
"""La liste des tags extraites des interclassements""" """La liste des tags extraites des interclassements"""
tags = [] tags = []
for aggregat in interclassements: for aggregat in interclassements:
@ -338,10 +338,10 @@ class JuryPE(object):
# considéré # considéré
trajectoires_tagguees = [] trajectoires_tagguees = []
for etudid in etudids: for etudid in etudids:
trajectoire = self.trajectoires.suivi[etudid][aggregat] trajectoire = self.rcss.suivi[etudid][aggregat]
if trajectoire: if trajectoire:
tid = trajectoire.rcs_id tid = trajectoire.rcs_id
trajectoire_tagguee = self.trajectoires_tagguees[tid] trajectoire_tagguee = self.rcss_tags[tid]
if ( if (
tag in trajectoire_tagguee.moyennes_tags tag in trajectoire_tagguee.moyennes_tags
and trajectoire_tagguee not in trajectoires_tagguees and trajectoire_tagguee not in trajectoires_tagguees
@ -485,9 +485,9 @@ class JuryPE(object):
) )
# La trajectoire de l'étudiant sur l'aggrégat # La trajectoire de l'étudiant sur l'aggrégat
trajectoire = self.trajectoires.suivi[etudid][aggregat] trajectoire = self.rcss.suivi[etudid][aggregat]
if trajectoire: if trajectoire:
trajectoire_tagguee = self.trajectoires_tagguees[ trajectoire_tagguee = self.rcss_tags[
trajectoire.rcs_id trajectoire.rcs_id
] ]
if tag in trajectoire_tagguee.moyennes_tags: if tag in trajectoire_tagguee.moyennes_tags:
@ -619,7 +619,7 @@ def compute_interclassements(
aggregats_interclasses_taggues = {} aggregats_interclasses_taggues = {}
for nom_aggregat in TOUS_LES_RCS: for nom_aggregat in TOUS_LES_RCS:
pe_affichage.pe_print(f" --> Interclassement {nom_aggregat}") pe_affichage.pe_print(f" --> Interclassement {nom_aggregat}")
interclass = AggregatInterclasseTag( interclass = RCSInterclasseTag(
nom_aggregat, etudiants, trajectoires_jury_pe, trajectoires_tagguees nom_aggregat, etudiants, trajectoires_jury_pe, trajectoires_tagguees
) )
aggregats_interclasses_taggues[nom_aggregat] = interclass aggregats_interclasses_taggues[nom_aggregat] = interclass
@ -669,7 +669,7 @@ def get_defaut_dict_synthese_aggregat(nom_rcs: str, diplome: int) -> dict:
def get_dict_synthese_aggregat( def get_dict_synthese_aggregat(
aggregat: str, aggregat: str,
trajectoire_tagguee: RCSTag, trajectoire_tagguee: RCSTag,
interclassement_taggue: AggregatInterclasseTag, interclassement_taggue: RCSInterclasseTag,
etudid: int, etudid: int,
tag: str, tag: str,
diplome: int, diplome: int,