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_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
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user