forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -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
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user