forked from ScoDoc/ScoDoc
Bonus Annecy
This commit is contained in:
parent
9a57f362dc
commit
7f164b1e1f
@ -13,6 +13,7 @@ Les classes de Bonus fournissent deux méthodes:
|
||||
|
||||
"""
|
||||
import datetime
|
||||
import math
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
@ -106,6 +107,8 @@ class BonusSport:
|
||||
# sem_modimpl_moys_spo est (nb_etuds, nb_mod_sport)
|
||||
# ou (nb_etuds, nb_mod_sport, nb_ues_non_bonus)
|
||||
nb_etuds, nb_mod_sport = sem_modimpl_moys_spo.shape[:2]
|
||||
if nb_etuds == 0 or nb_mod_sport == 0:
|
||||
return # no bonus at all
|
||||
# Enlève les NaN du numérateur:
|
||||
sem_modimpl_moys_no_nan = np.nan_to_num(sem_modimpl_moys_spo, nan=0.0)
|
||||
|
||||
@ -157,7 +160,8 @@ class BonusSport:
|
||||
"""Calcul des bonus: méthode virtuelle à écraser.
|
||||
Arguments:
|
||||
- sem_modimpl_moys_inscrits:
|
||||
ndarray (nb_etuds, mod_sport) ou en APC (nb_etuds, mods_sport, nb_ue_non_bonus)
|
||||
ndarray (nb_etuds, mod_sport)
|
||||
ou en APC (nb_etuds, mods_sport, nb_ue_non_bonus)
|
||||
les notes aux modules sports auxquel l'étudiant est inscrit, 0 sinon. Pas de nans.
|
||||
- modimpl_coefs_etuds_no_nan:
|
||||
les coefficients: float ndarray
|
||||
@ -236,10 +240,6 @@ class BonusSportAdditif(BonusSport):
|
||||
bonus_moy_arr, index=self.etuds_idx, dtype=float
|
||||
)
|
||||
|
||||
# if len(bonus_moy_arr.shape) > 1:
|
||||
# bonus_moy_arr = bonus_moy_arr.sum(axis=1)
|
||||
# Laisse bonus_moy_gen à None, en APC le bonus moy. gen. sera réparti sur les UEs.
|
||||
|
||||
|
||||
class BonusSportMultiplicatif(BonusSport):
|
||||
"""Bonus sport qui multiplie les moyennes d'UE par un facteur"""
|
||||
@ -294,6 +294,49 @@ class BonusDirect(BonusSportAdditif):
|
||||
proportion_point = 1.0
|
||||
|
||||
|
||||
class BonusAnnecy(BonusSport):
|
||||
"""Calcul bonus modules optionnels (sport), règle IUT d'Annecy.
|
||||
Il peut y avoir plusieurs modules de bonus.
|
||||
Prend pour chaque étudiant la meilleure de ses notes bonus et
|
||||
ajoute à chaque UE :
|
||||
0.05 point si >=10,
|
||||
0.1 point si >=12,
|
||||
0.15 point si >=14,
|
||||
0.2 point si >=16,
|
||||
0.25 point si >=18.
|
||||
"""
|
||||
|
||||
name = "bonus_iut_annecy"
|
||||
displayed_name = "IUT d'Annecy"
|
||||
|
||||
def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan):
|
||||
"""calcul du bonus"""
|
||||
# if math.prod(sem_modimpl_moys_inscrits.shape) == 0:
|
||||
# return # no etuds or no mod sport
|
||||
# Prend la note de chaque modimpl, sans considération d'UE
|
||||
if len(sem_modimpl_moys_inscrits.shape) > 2: # apc
|
||||
sem_modimpl_moys_inscrits = sem_modimpl_moys_inscrits[:, :, 0]
|
||||
# ici sem_modimpl_moys_inscrits est nb_etuds x nb_mods_bonus, en APC et en classic
|
||||
note_bonus_max = np.max(sem_modimpl_moys_inscrits, axis=1) # 1d, nb_etuds
|
||||
bonus = np.zeros(note_bonus_max.shape)
|
||||
bonus[note_bonus_max >= 18.0] = 0.25
|
||||
bonus[note_bonus_max >= 16.0] = 0.20
|
||||
bonus[note_bonus_max >= 14.0] = 0.15
|
||||
bonus[note_bonus_max >= 12.0] = 0.10
|
||||
bonus[note_bonus_max >= 10.0] = 0.05
|
||||
|
||||
# Bonus moyenne générale et sur les UE
|
||||
self.bonus_moy_gen = pd.Series(bonus, index=self.etuds_idx, dtype=float)
|
||||
ues_idx = [ue.id for ue in self.formsemestre.query_ues(with_sport=False)]
|
||||
nb_ues_no_bonus = len(ues_idx)
|
||||
self.bonus_ues = pd.DataFrame(
|
||||
np.stack([bonus] * nb_ues_no_bonus, axis=1),
|
||||
columns=ues_idx,
|
||||
index=self.etuds_idx,
|
||||
dtype=float,
|
||||
)
|
||||
|
||||
|
||||
class BonusBethune(BonusSportMultiplicatif):
|
||||
"""Calcul bonus modules optionnels (sport), règle IUT de Béthune.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user