1
0
forked from ScoDoc/ScoDoc

Amélioration nomenclature : interclass => RCSInterclasseTag + ménage et refonte codes (état intermédiaire n°2)

This commit is contained in:
Cléo Baras 2024-02-05 19:46:16 +01:00
parent 9c4e2627ba
commit 196dbab298
3 changed files with 46 additions and 46 deletions

View File

@ -2,25 +2,25 @@ from app.comp import moy_sem
from app.pe.pe_tabletags import TableTag, MoyenneTag
from app.pe.pe_etudiant import EtudiantsJuryPE
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 numpy as np
class AggregatInterclasseTag(TableTag):
class RCSInterclasseTag(TableTag):
# -------------------------------------------------------------------------------------------------------------------
def __init__(
self,
nom_aggregat: str,
nom_rcs: str,
etudiants: EtudiantsJuryPE,
trajectoires_jury_pe: RCSsJuryPE,
trajectoires_taggues: dict[tuple, RCSTag],
rcss_jury_pe: RCSsJuryPE,
rcss_tags: dict[tuple, RCSTag],
):
"""
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 :
* 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)
self.aggregat = nom_aggregat
"""Aggrégat de l'interclassement"""
self.nom_rcs = nom_rcs
"""Le nom du RCS interclassé"""
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.etudiants_diplomes = {etudid for etudid in self.diplomes_ids}
# 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
self.trajectoires: dict[int, RCS] = {}
self.rcss: dict[int, RCS] = {}
"""Ensemble des trajectoires associées à l'aggrégat"""
for trajectoire_id in trajectoires_jury_pe.rcss:
trajectoire = trajectoires_jury_pe.rcss[trajectoire_id]
if trajectoire_id[0] == nom_aggregat:
self.trajectoires[trajectoire_id] = trajectoire
for trajectoire_id in rcss_jury_pe.rcss:
trajectoire = rcss_jury_pe.rcss[trajectoire_id]
if trajectoire_id[0] == nom_rcs:
self.rcss[trajectoire_id] = trajectoire
self.trajectoires_taggues: dict[int, RCS] = {}
"""Ensemble des trajectoires tagguées associées à l'aggrégat"""
for trajectoire_id in self.trajectoires:
self.trajectoires_taggues[trajectoire_id] = trajectoires_taggues[
for trajectoire_id in self.rcss:
self.trajectoires_taggues[trajectoire_id] = rcss_tags[
trajectoire_id
]
@ -64,7 +64,7 @@ class AggregatInterclasseTag(TableTag):
"""Association entre chaque étudiant et la trajectoire tagguée à prendre en
compte pour l'aggrégat"""
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()
"""Liste des tags (triés par ordre alphabétique)"""
@ -84,7 +84,7 @@ class AggregatInterclasseTag(TableTag):
def get_repr(self) -> str:
"""Une représentation textuelle"""
return f"Aggrégat {self.aggregat}"
return f"Aggrégat {self.nom_rcs}"
def do_taglist(self):
"""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 *
import app.pe.pe_comp as pe_comp
from app.pe.pe_semtag import SemestreTag
from app.pe.pe_interclasstag import AggregatInterclasseTag
from app.pe.pe_trajectoiretag import RCSTag
from app.pe.pe_interclasstag import RCSInterclasseTag
from app.pe.pe_rcstag import RCSTag
import app.pe.pe_affichage as pe_affichage
import pandas as pd
@ -94,8 +94,8 @@ class JuryPE(object):
else:
self._gen_xls_diplomes(zipfile)
self._gen_xls_semestre_taggues(zipfile)
self._gen_xls_trajectoires(zipfile)
self._gen_xls_aggregats(zipfile)
self._gen_xls_rcss_tags(zipfile)
self._gen_xls_interclassements_rcss(zipfile)
self._gen_xls_synthese_jury_par_tag(zipfile)
self._gen_xls_synthese_par_etudiant(zipfile)
@ -129,14 +129,14 @@ class JuryPE(object):
def _gen_xls_semestre_taggues(self, zipfile: ZipFile):
"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")
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
output = io.BytesIO()
with pd.ExcelWriter( # pylint: disable=abstract-class-instantiated
output, engine="openpyxl"
) as writer:
for formsemestretag in self.semestres_taggues.values():
for formsemestretag in self.sems_tags.values():
onglet = formsemestretag.nom
df = formsemestretag.df_moyennes_et_classements()
# écriture dans l'onglet
@ -150,22 +150,22 @@ class JuryPE(object):
path="details",
)
def _gen_xls_trajectoires(self, zipfile: ZipFile):
"""Génère les trajectoires (combinaison de semestres suivis
par un étudiant pour atteindre le semestre final d'un aggrégat)
def _gen_xls_rcss_tags(self, zipfile: ZipFile):
"""Génère les RCS (combinaisons de semestres suivis
par un étudiant)
"""
pe_affichage.pe_print(
"*** Génère les trajectoires (différentes combinaisons de semestres) des étudiants"
)
self.trajectoires = RCSsJuryPE(self.diplome)
self.trajectoires.cree_rcss(self.etudiants)
self.rcss = RCSsJuryPE(self.diplome)
self.rcss.cree_rcss(self.etudiants)
# Génère les moyennes par tags des trajectoires
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.trajectoires, self.etudiants, self.semestres_taggues
self.rcss_tags = compute_trajectoires_tag(
self.rcss, self.etudiants, self.sems_tags
)
# 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
output, engine="openpyxl"
) as writer:
for trajectoire_tagguee in self.trajectoires_tagguees.values():
onglet = trajectoire_tagguee.get_repr()
df = trajectoire_tagguee.df_moyennes_et_classements()
for rcs_tag in self.rcss_tags.values():
onglet = rcs_tag.get_repr()
df = rcs_tag.df_moyennes_et_classements()
# écriture dans l'onglet
df.to_excel(writer, onglet, index=True, header=True)
output.seek(0)
self.add_file_to_zip(
zipfile,
f"trajectoires_taggues_{self.diplome}.xlsx",
f"RCS_taggues_{self.diplome}.xlsx",
output.read(),
path="details",
)
def _gen_xls_aggregats(self, zipfile: ZipFile):
"""Intègre le bilan des aggrégats (interclassé par promo) au zip"""
def _gen_xls_interclassements_rcss(self, zipfile: ZipFile):
"""Intègre le bilan des RCS (interclassé par promo) au zip"""
# 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")
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
@ -276,7 +276,7 @@ class JuryPE(object):
self.zipdata.seek(0)
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"""
tags = []
for aggregat in interclassements:
@ -338,10 +338,10 @@ class JuryPE(object):
# considéré
trajectoires_tagguees = []
for etudid in etudids:
trajectoire = self.trajectoires.suivi[etudid][aggregat]
trajectoire = self.rcss.suivi[etudid][aggregat]
if trajectoire:
tid = trajectoire.rcs_id
trajectoire_tagguee = self.trajectoires_tagguees[tid]
trajectoire_tagguee = self.rcss_tags[tid]
if (
tag in trajectoire_tagguee.moyennes_tags
and trajectoire_tagguee not in trajectoires_tagguees
@ -485,9 +485,9 @@ class JuryPE(object):
)
# La trajectoire de l'étudiant sur l'aggrégat
trajectoire = self.trajectoires.suivi[etudid][aggregat]
trajectoire = self.rcss.suivi[etudid][aggregat]
if trajectoire:
trajectoire_tagguee = self.trajectoires_tagguees[
trajectoire_tagguee = self.rcss_tags[
trajectoire.rcs_id
]
if tag in trajectoire_tagguee.moyennes_tags:
@ -619,7 +619,7 @@ def compute_interclassements(
aggregats_interclasses_taggues = {}
for nom_aggregat in TOUS_LES_RCS:
pe_affichage.pe_print(f" --> Interclassement {nom_aggregat}")
interclass = AggregatInterclasseTag(
interclass = RCSInterclasseTag(
nom_aggregat, etudiants, trajectoires_jury_pe, trajectoires_tagguees
)
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(
aggregat: str,
trajectoire_tagguee: RCSTag,
interclassement_taggue: AggregatInterclasseTag,
interclassement_taggue: RCSInterclasseTag,
etudid: int,
tag: str,
diplome: int,