]>
Commit | Line | Data |
---|---|---|
5679dfd0 DL |
1 | #!/usr/bin/env python3 |
2 | # -*- coding: utf-8 -*- | |
3 | ||
d03279e7 | 4 | from configuration import CONFIG |
a680b2f7 | 5 | from gestion_erreurs import warning |
cf0d4c8c | 6 | from math import log |
5679dfd0 DL |
7 | |
8 | ##################### outils pour affichage et choix de l'unité | |
9 | ||
10 | def choix_unite(maxi): | |
685a5f75 | 11 | """ en fonction de l'âge maxi, on choisit une unité pertinente : jours, semaine, mois, année""" |
5679dfd0 DL |
12 | if maxi<40: |
13 | return "jours" | |
30158504 DL |
14 | elif maxi <100: |
15 | return "semaines" | |
d03279e7 | 16 | elif maxi<25*CONFIG["jours_dans_mois"]: |
5679dfd0 DL |
17 | return "mois" |
18 | else: | |
19 | return "années" | |
20 | ||
685a5f75 DL |
21 | def choix_echelle_data(typedonnees, donneemax): |
22 | """ en fonction du type de données et du maxi (on suppose qu'on part à 0), | |
23 | on choisit un intervalle raisonnable | |
24 | On renvoie le couple des pas (majeur, mineur) | |
25 | (0,0) en cas de problème avec le typedonnnes """ | |
26 | ||
27 | if typedonnees not in CONFIG["liste_typedonnees"]: | |
28 | print("Type de données non valide : "+typedonnees) | |
29 | return (0,0) | |
30 | ||
31 | if typedonnees == "poids": | |
32 | if donneemax>15: | |
33 | return (5,1) | |
34 | elif donneemax > 10: | |
a680b2f7 | 35 | return (1,0.5) |
685a5f75 DL |
36 | else: |
37 | return (1,0.2) | |
38 | if typedonnees == "taille": | |
39 | if donneemax>100: | |
40 | return (10,2) | |
41 | else: | |
42 | return (5,1) | |
43 | ||
44 | def choix_echelle_temps(unite, tempsmaxi): | |
45 | """ en fonction de l'unité voulue et du temps maximal (donné dans l'unité), | |
46 | on choisit un intervalle raisonnable entre les pas. | |
47 | On renvoie le couple des pas (majeur, mineur). | |
48 | (0,0) en cas de problème avec l'unité | |
49 | On met 0 en 2e arg si pas de grille secondaire""" | |
50 | if unite not in CONFIG["liste_unites"]: | |
51 | print("Unité non valide ! "+unite) | |
52 | return (0,0) | |
53 | ||
54 | if unite=="jours": | |
55 | if tempsmaxi > 60: # pourquoi mettre en jours ? | |
56 | return (30,1) | |
a680b2f7 | 57 | elif tempsmaxi >15: |
685a5f75 DL |
58 | return (7,1) |
59 | else: | |
60 | return (1,0) | |
61 | if unite=="semaines": | |
62 | if tempsmaxi >50: | |
63 | return (5,1) | |
a680b2f7 | 64 | elif tempsmaxi > 10: |
685a5f75 DL |
65 | return (2,1) |
66 | else: | |
67 | return (1,1/7) # On met en jours | |
68 | ||
69 | if unite=="mois": | |
a680b2f7 DL |
70 | if tempsmaxi > 24: |
71 | return (12,1) | |
685a5f75 DL |
72 | elif tempsmaxi > 10: |
73 | return (1,0) | |
74 | else: | |
a680b2f7 | 75 | return (1,0.25) # on met en semaines à peu près (quart de mois) |
685a5f75 DL |
76 | |
77 | if unite=="années": | |
78 | return (1,1/12) # années / mois | |
79 | ||
5679dfd0 DL |
80 | def convertitunite(jours,unite,liste_err): |
81 | """ convertit des jours à l'unité voulue | |
82 | renvoie des float""" | |
83 | if unite=="jours": | |
84 | return jours | |
85 | elif unite=="mois": | |
d03279e7 | 86 | return jours/CONFIG["jours_dans_mois"] |
5679dfd0 | 87 | elif unite=="années": |
d03279e7 | 88 | return jours/CONFIG["jours_dans_annee"] |
5679dfd0 | 89 | elif unite=="semaines": |
d03279e7 | 90 | return jours/CONFIG["jours_dans_semaine"] |
5679dfd0 DL |
91 | else: |
92 | warning("erreur sur l'unité : "+unite+" On laisse en jours",liste_err) | |
93 | return jours | |
94 | ||
95 | def convertit_tableau(tableau,unite,liste_err): | |
96 | """ convertit un tableau de jours en une autre unité. | |
97 | Renvoie le nouveau tableau""" | |
cf0d4c8c DL |
98 | return [convertitunite(elt,unite,liste_err) for elt in tableau] |
99 | ||
100 | def arrondit_donnee(donnee, typed, arrondi=0): | |
101 | """ on arrondit la donnée de type typed (à voir dans CONFIG) | |
102 | à arrondit près. SI y'a 0 on va voir dans la config. | |
103 | Pour l'arrondit on met par ex 1 pour arrondir à 1 pr_s, 0.1 pour arrondir | |
104 | au dixième etc""" | |
105 | if arrondi==0: | |
106 | arrondi = CONFIG["arrondis_typedonnees"][typed] | |
107 | if arrondi==0: | |
108 | print("Euuuh ça va merder, y'a une div par 0 dans arrondit_donnees !") | |
109 | ||
110 | d_arr = round(donnee/arrondi)*arrondi | |
111 | nbchiffresvoulus = int(log(1/arrondi, 10))+1 # max sur le nombre de chiffres après la virgule qu'on doit avoir | |
112 | return round(d_arr, nbchiffresvoulus) |