From 7ca3290357bfbaefa48b63e3399997bf5ce2676a Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Mon, 31 Oct 2022 16:26:36 +0100 Subject: [PATCH] =?UTF-8?q?BUT:=20calcul=20moy.=20gen.=20indicative=20ne?= =?UTF-8?q?=20consid=C3=A9rant=20que=20les=20UE=20du=20parcours?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/comp/moy_sem.py | 15 +++++++++------ app/comp/res_but.py | 6 +++++- app/comp/res_common.py | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/comp/moy_sem.py b/app/comp/moy_sem.py index 6fa3cbac..195c5dc8 100644 --- a/app/comp/moy_sem.py +++ b/app/comp/moy_sem.py @@ -52,13 +52,16 @@ def compute_sem_moys_apc_using_coefs( def compute_sem_moys_apc_using_ects( - etud_moy_ue_df: pd.DataFrame, ects: list, formation_id=None, skip_empty_ues=False + etud_moy_ue_df: pd.DataFrame, + ects_df: pd.DataFrame, + formation_id=None, + skip_empty_ues=False, ) -> pd.Series: """Calcule les moyennes générales indicatives de tous les étudiants = moyenne des moyennes d'UE, pondérée par leurs ECTS. etud_moy_ue_df: DataFrame, colonnes ue_id, lignes etudid - ects: liste de floats ou None, 1 par UE + ects: DataFrame, col. ue_id, lignes etudid, valeur float ou None Si skip_empty_ues: ne compte pas les UE non notées. Sinon (par défaut), une UE non notée compte comme zéro. @@ -68,11 +71,11 @@ def compute_sem_moys_apc_using_ects( try: if skip_empty_ues: # annule les coefs des UE sans notes (NaN) - ects = np.where(etud_moy_ue_df.isna(), 0.0, np.array(ects, dtype=float)) - # ects est devenu nb_etuds x nb_ues - moy_gen = (etud_moy_ue_df * ects).sum(axis=1) / ects.sum(axis=1) + ects = np.where(etud_moy_ue_df.isna(), 0.0, ects_df.to_numpy()) else: - moy_gen = (etud_moy_ue_df * ects).sum(axis=1) / sum(ects) + ects = ects_df.to_numpy() + # ects est maintenant un array nb_etuds x nb_ues + moy_gen = (etud_moy_ue_df * ects).sum(axis=1) / ects.sum(axis=1) except TypeError: if None in ects: formation = Formation.query.get(formation_id) diff --git a/app/comp/res_but.py b/app/comp/res_but.py index 4115f9af..0ee8b066 100644 --- a/app/comp/res_but.py +++ b/app/comp/res_but.py @@ -114,6 +114,10 @@ class ResultatsSemestreBUT(NotesTableCompat): # Nanifie les moyennes d'UE hors parcours pour chaque étudiant self.etud_moy_ue *= self.ues_inscr_parcours_df + # Les ects (utilisés comme coefs) sont nuls pour les UE hors parcours: + ects = self.ues_inscr_parcours_df.fillna(0.0) * [ + ue.ects for ue in self.ues if ue.type != UE_SPORT + ] # Moyenne générale indicative: # (note: le bonus sport a déjà été appliqué aux moyennes d'UE, et impacte @@ -123,7 +127,7 @@ class ResultatsSemestreBUT(NotesTableCompat): # ) self.etud_moy_gen = moy_sem.compute_sem_moys_apc_using_ects( self.etud_moy_ue, - [ue.ects for ue in self.ues if ue.type != UE_SPORT], + ects, formation_id=self.formsemestre.formation_id, skip_empty_ues=sco_preferences.get_preference( "but_moy_skip_empty_ues", self.formsemestre.id diff --git a/app/comp/res_common.py b/app/comp/res_common.py index 2298842f..f03230aa 100644 --- a/app/comp/res_common.py +++ b/app/comp/res_common.py @@ -439,7 +439,7 @@ class ResultatsSemestre(ResultatsCache): allow_html=True, ): """Table récap. des résultats. - allow_html: si vri, peut-mettre du HTML dans les valeurs + allow_html: si vrai, peut mettre du HTML dans les valeurs Result: tuple avec - rows: liste de dicts { column_id : value }