forked from ScoDoc/ScoDoc
Corrige les semestres pris en compte pour le calcul des moyennes d'aggrégat (bug QLIO UPHF)
This commit is contained in:
parent
787e514dca
commit
3550e4290a
@ -259,10 +259,17 @@ class EtudiantsJuryPE:
|
|||||||
} # les semestres de n°i de l'étudiant
|
} # les semestres de n°i de l'étudiant
|
||||||
self.cursus[etudid][nom_sem] = semestres_i
|
self.cursus[etudid][nom_sem] = semestres_i
|
||||||
|
|
||||||
def get_trajectoire(self, etudid: int, formsemestre_final: FormSemestre):
|
def get_trajectoire(self, etudid: int, formsemestre_final: FormSemestre, nom_aggregat: str):
|
||||||
"""Ensemble des semestres parcourus par
|
"""Ensemble des semestres parcourus par
|
||||||
un étudiant pour l'amener à un semestre terminal.
|
un étudiant pour l'amener à un semestre terminal.
|
||||||
|
|
||||||
|
Si nom_aggregat est de type "Si", limite les semestres à ceux de numéro i.
|
||||||
|
Par ex: si formsemestre_terminal est un S3 et nom_agrregat "S3", ne prend en compte que les
|
||||||
|
semestres 3.
|
||||||
|
|
||||||
|
Si nom_aggregat est de type "iA" ou "iS" (incluant plusieurs numéros de semestres), prend en
|
||||||
|
compte les dit numéros de semestres.
|
||||||
|
|
||||||
Par ex: si formsemestre_terminal est un S3, ensemble des S1,
|
Par ex: si formsemestre_terminal est un S3, ensemble des S1,
|
||||||
S2, S3 suivi pour l'amener au S3 (il peut y avoir plusieurs S1,
|
S2, S3 suivi pour l'amener au S3 (il peut y avoir plusieurs S1,
|
||||||
ou S2, ou S3 s'il a redoublé).
|
ou S2, ou S3 s'il a redoublé).
|
||||||
@ -277,12 +284,19 @@ class EtudiantsJuryPE:
|
|||||||
numero_semestre_terminal = formsemestre_final.semestre_id
|
numero_semestre_terminal = formsemestre_final.semestre_id
|
||||||
semestres_significatifs = self.get_semestres_significatifs(etudid)
|
semestres_significatifs = self.get_semestres_significatifs(etudid)
|
||||||
|
|
||||||
# Semestres de n° inférieur (pax ex: des S1, S2, S3 pour un S3 terminal)
|
if nom_aggregat.startswith("S"): # les semestres
|
||||||
# et qui lui sont antérieurs
|
numero_semestres_possibles =[numero_semestre_terminal]
|
||||||
|
elif nom_aggregat.endswith("A"): # les années
|
||||||
|
numero_semestres_possibles = [int(sem[-1]) for sem in pe_comp.PARCOURS[nom_aggregat]["aggregat"]]
|
||||||
|
assert numero_semestre_terminal in numero_semestres_possibles
|
||||||
|
else: # les xS = tous les semestres jusqu'à Sx (pax ex: des S1, S2, S3 pour un S3 terminal)
|
||||||
|
numero_semestres_possibles = list(range(1, numero_semestre_terminal+1))
|
||||||
|
|
||||||
semestres_aggreges = {}
|
semestres_aggreges = {}
|
||||||
for fid, semestre in semestres_significatifs.items():
|
for fid, semestre in semestres_significatifs.items():
|
||||||
|
# Semestres parmi ceux de n° possibles & qui lui sont antérieurs
|
||||||
if (
|
if (
|
||||||
semestre.semestre_id <= numero_semestre_terminal
|
semestre.semestre_id in numero_semestres_possibles
|
||||||
and semestre.date_fin <= formsemestre_final.date_fin
|
and semestre.date_fin <= formsemestre_final.date_fin
|
||||||
):
|
):
|
||||||
semestres_aggreges[fid] = semestre
|
semestres_aggreges[fid] = semestre
|
||||||
|
@ -318,29 +318,35 @@ class JuryPE(object):
|
|||||||
}
|
}
|
||||||
|
|
||||||
for aggregat in aggregats:
|
for aggregat in aggregats:
|
||||||
"""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.trajectoires.suivi[etudid][aggregat]
|
||||||
"""Les moyennes par tag de cette trajectoire"""
|
|
||||||
|
# Les moyennes par tag de cette trajectoire
|
||||||
|
donnees[etudid] |= {
|
||||||
|
f"{aggregat} notes ": "-",
|
||||||
|
f"{aggregat} class. (groupe)": "-",
|
||||||
|
f"{aggregat} min/moy/max (groupe)": "-",
|
||||||
|
}
|
||||||
if trajectoire:
|
if trajectoire:
|
||||||
trajectoire_tagguee = self.trajectoires_tagguees[
|
trajectoire_tagguee = self.trajectoires_tagguees[
|
||||||
trajectoire.trajectoire_id
|
trajectoire.trajectoire_id
|
||||||
]
|
]
|
||||||
bilan = trajectoire_tagguee.moyennes_tags[tag]
|
if tag in trajectoire_tagguee.moyennes_tags:
|
||||||
|
bilan = trajectoire_tagguee.moyennes_tags[tag]
|
||||||
|
|
||||||
|
donnees[etudid] |= {
|
||||||
|
f"{aggregat} notes ": round(bilan['notes'].loc[etudid], 2),
|
||||||
|
f"{aggregat} class. (groupe)": f"{bilan['classements'].loc[etudid]}/{bilan['nb_inscrits']}",
|
||||||
|
f"{aggregat} min/moy/max (groupe)": f"{bilan['min']:.1f}/{bilan['moy']:.1f}/{bilan['max']:.1f}",
|
||||||
|
}
|
||||||
|
|
||||||
donnees[etudid] |= {
|
|
||||||
f"{aggregat} notes ": f"{bilan['notes'].loc[etudid]:.1f}",
|
|
||||||
f"{aggregat} class. (groupe)": f"{bilan['classements'].loc[etudid]}/{bilan['nb_inscrits']}",
|
|
||||||
f"{aggregat} min/moy/max (groupe)": f"{bilan['min']:.1f}/{bilan['moy']:.1f}/{bilan['max']:.1f}",
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
donnees[etudid] |= {
|
|
||||||
f"{aggregat} notes ": "-",
|
|
||||||
f"{aggregat} class. (groupe)": "-",
|
|
||||||
f"{aggregat} min/moy/max (groupe)": "-",
|
|
||||||
}
|
|
||||||
|
|
||||||
"""L'interclassement"""
|
"""L'interclassement"""
|
||||||
interclass = self.interclassements_taggues[aggregat]
|
interclass = self.interclassements_taggues[aggregat]
|
||||||
|
donnees[etudid] |= {
|
||||||
|
f"{aggregat} class. (promo)": "-",
|
||||||
|
f"{aggregat} min/moy/max (promo)": "-",
|
||||||
|
}
|
||||||
if tag in interclass.moyennes_tags:
|
if tag in interclass.moyennes_tags:
|
||||||
bilan = interclass.moyennes_tags[tag]
|
bilan = interclass.moyennes_tags[tag]
|
||||||
|
|
||||||
@ -348,11 +354,6 @@ class JuryPE(object):
|
|||||||
f"{aggregat} class. (promo)": f"{bilan['classements'].loc[etudid]}/{bilan['nb_inscrits']}",
|
f"{aggregat} class. (promo)": f"{bilan['classements'].loc[etudid]}/{bilan['nb_inscrits']}",
|
||||||
f"{aggregat} min/moy/max (promo)": f"{bilan['min']:.1f}/{bilan['moy']:.1f}/{bilan['max']:.1f}",
|
f"{aggregat} min/moy/max (promo)": f"{bilan['min']:.1f}/{bilan['moy']:.1f}/{bilan['max']:.1f}",
|
||||||
}
|
}
|
||||||
else:
|
|
||||||
donnees[etudid] |= {
|
|
||||||
f"{aggregat} class. (promo)": "-",
|
|
||||||
f"{aggregat} min/moy/max (promo)": "-",
|
|
||||||
}
|
|
||||||
|
|
||||||
# Fin de l'aggrégat
|
# Fin de l'aggrégat
|
||||||
# Construction du dataFrame
|
# Construction du dataFrame
|
||||||
|
@ -36,8 +36,7 @@ class Trajectoire:
|
|||||||
"""Les semestres à aggréger"""
|
"""Les semestres à aggréger"""
|
||||||
self.semestres_aggreges = {}
|
self.semestres_aggreges = {}
|
||||||
|
|
||||||
|
def add_semestres_a_aggreger(self, semestres: dict[int:FormSemestre]):
|
||||||
def add_semestres_a_aggreger(self, semestres: dict[int: FormSemestre]):
|
|
||||||
"""Ajoute des semestres au semestre à aggréger
|
"""Ajoute des semestres au semestre à aggréger
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@ -45,8 +44,6 @@ class Trajectoire:
|
|||||||
"""
|
"""
|
||||||
self.semestres_aggreges = self.semestres_aggreges | semestres
|
self.semestres_aggreges = self.semestres_aggreges | semestres
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_repr(self):
|
def get_repr(self):
|
||||||
"""Représentation textuelle d'une trajectoire
|
"""Représentation textuelle d'une trajectoire
|
||||||
basée sur ses semestres aggrégés"""
|
basée sur ses semestres aggrégés"""
|
||||||
@ -72,11 +69,10 @@ class TrajectoiresJuryPE:
|
|||||||
|
|
||||||
self.annee_diplome = annee_diplome
|
self.annee_diplome = annee_diplome
|
||||||
"""Toutes les trajectoires possibles"""
|
"""Toutes les trajectoires possibles"""
|
||||||
self.trajectoires: dict[tuple: Trajectoire] = {}
|
self.trajectoires: dict[tuple:Trajectoire] = {}
|
||||||
"""Quelle trajectoires pour quel étudiant :
|
"""Quelle trajectoires pour quel étudiant :
|
||||||
dictionnaire {etudid: {nom_aggregat: Trajectoire}}"""
|
dictionnaire {etudid: {nom_aggregat: Trajectoire}}"""
|
||||||
self.suivi: dict[int: str] = {}
|
self.suivi: dict[int:str] = {}
|
||||||
|
|
||||||
|
|
||||||
def cree_trajectoires(self, etudiants: EtudiantsJuryPE):
|
def cree_trajectoires(self, etudiants: EtudiantsJuryPE):
|
||||||
"""Créé toutes les trajectoires, au regard du cursus des étudiants
|
"""Créé toutes les trajectoires, au regard du cursus des étudiants
|
||||||
@ -84,15 +80,17 @@ class TrajectoiresJuryPE:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
for nom_aggregat in pe_comp.TOUS_LES_SEMESTRES + pe_comp.TOUS_LES_AGGREGATS:
|
for nom_aggregat in pe_comp.TOUS_LES_SEMESTRES + pe_comp.TOUS_LES_AGGREGATS:
|
||||||
|
|
||||||
"""L'aggrégat considéré (par ex: 3S=S1+S2+S3), son nom de son semestre terminal (par ex: S3) et son numéro (par ex: 3)"""
|
"""L'aggrégat considéré (par ex: 3S=S1+S2+S3), son nom de son semestre terminal (par ex: S3) et son numéro (par ex: 3)"""
|
||||||
noms_semestre_de_aggregat = pe_comp.PARCOURS[nom_aggregat]["aggregat"]
|
noms_semestre_de_aggregat = pe_comp.PARCOURS[nom_aggregat]["aggregat"]
|
||||||
nom_semestre_terminal = noms_semestre_de_aggregat[-1]
|
nom_semestre_terminal = noms_semestre_de_aggregat[-1]
|
||||||
|
|
||||||
for etudid in etudiants.cursus:
|
for etudid in etudiants.cursus:
|
||||||
if etudid not in self.suivi:
|
if etudid not in self.suivi:
|
||||||
self.suivi[etudid] = {aggregat: None
|
self.suivi[etudid] = {
|
||||||
for aggregat in pe_comp.TOUS_LES_SEMESTRES + pe_comp.TOUS_LES_AGGREGATS}
|
aggregat: None
|
||||||
|
for aggregat in pe_comp.TOUS_LES_SEMESTRES
|
||||||
|
+ pe_comp.TOUS_LES_AGGREGATS
|
||||||
|
}
|
||||||
|
|
||||||
"""Le formsemestre terminal (dernier en date) associé au
|
"""Le formsemestre terminal (dernier en date) associé au
|
||||||
semestre marquant la fin de l'aggrégat
|
semestre marquant la fin de l'aggrégat
|
||||||
@ -111,7 +109,9 @@ class TrajectoiresJuryPE:
|
|||||||
|
|
||||||
"""La liste des semestres de l'étudiant à prendre en compte
|
"""La liste des semestres de l'étudiant à prendre en compte
|
||||||
pour cette trajectoire"""
|
pour cette trajectoire"""
|
||||||
semestres_a_aggreger = etudiants.get_trajectoire(etudid, formsemestre_final)
|
semestres_a_aggreger = etudiants.get_trajectoire(
|
||||||
|
etudid, formsemestre_final, nom_aggregat
|
||||||
|
)
|
||||||
|
|
||||||
"""Ajout des semestres à la trajectoire"""
|
"""Ajout des semestres à la trajectoire"""
|
||||||
trajectoire.add_semestres_a_aggreger(semestres_a_aggreger)
|
trajectoire.add_semestres_a_aggreger(semestres_a_aggreger)
|
||||||
@ -138,7 +138,7 @@ def get_trajectoires_etudid(trajectoires, etudid):
|
|||||||
liste.append(trajet.trajectoire_id)
|
liste.append(trajet.trajectoire_id)
|
||||||
return liste
|
return liste
|
||||||
|
|
||||||
|
|
||||||
def get_semestres_a_aggreger(self, aggregat: str, formsemestre_id_terminal: int):
|
def get_semestres_a_aggreger(self, aggregat: str, formsemestre_id_terminal: int):
|
||||||
"""Pour un nom d'aggrégat donné (par ex: 'S3') et un semestre terminal cible
|
"""Pour un nom d'aggrégat donné (par ex: 'S3') et un semestre terminal cible
|
||||||
identifié par son formsemestre_id (par ex: 'S3 2022-2023'),
|
identifié par son formsemestre_id (par ex: 'S3 2022-2023'),
|
||||||
@ -162,4 +162,3 @@ def get_semestres_a_aggreger(self, aggregat: str, formsemestre_id_terminal: int)
|
|||||||
formsemestres_etudiant = cursus_etudiant[formsemestre_id_terminal]
|
formsemestres_etudiant = cursus_etudiant[formsemestre_id_terminal]
|
||||||
formsemestres = formsemestres | formsemestres_etudiant
|
formsemestres = formsemestres | formsemestres_etudiant
|
||||||
return formsemestres
|
return formsemestres
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user