Spaces:
Sleeping
Sleeping
File size: 3,993 Bytes
38b60e5 30222ce 38b60e5 30222ce 38b60e5 30222ce 38b60e5 30222ce 38b60e5 30222ce 38b60e5 30222ce 38b60e5 30222ce 38b60e5 30222ce 38b60e5 30222ce 38b60e5 30222ce 38b60e5 30222ce 38b60e5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | import gradio as gr
# === Conversion pour Acontista mexicana ===
def age_humain_acontista(mois: float) -> float:
"""Conversion Acontista mexicana."""
if mois <= 1:
return 3 * mois
elif mois <= 2:
return 3 + (mois - 1) * 7
elif mois <= 3.5:
return 10 + (mois - 2) * 6.67
elif mois <= 4:
return 20 + (mois - 3.5) * 14
elif mois <= 6:
return 27 + (mois - 4) * 16.5
elif mois <= 10:
return 60 + (mois - 6) * 10
else:
return 100
# === Conversion pour Hierodula spp. ===
def age_humain_hierodula(stade: str = None, mois: float = None, sexe: str = "Femelle") -> float:
"""Conversion Hierodula spp. selon les données de Ruben."""
stades_mois = {
"L1": 0,
"L2": 0.5,
"L3": 1.25,
"L4": 2.125,
"L5": 3.125,
"L6": 4.625,
"L7": 6.825,
"L8": 9.325,
}
# Si on a donné un stade
if stade:
mois = stades_mois.get(stade, 0)
# Durée adulte selon le sexe
if sexe == "Mâle":
max_vie = 17 # ~L8 + 7.5 mois
elif sexe == "Femelle":
max_vie = 19.5 # ~L8 + 10 mois
else:
max_vie = 18.5
# Conversion en âge humain
if mois <= 9.325:
age_humain = (mois / 9.325) * 27
else:
age_humain = 27 + ((mois - 9.325) / (max_vie - 9.325)) * (100 - 27)
return min(age_humain, 100)
# === Gestion générale ===
def convertir_age(age_input, unite, espece, sexe):
espece = espece.lower()
if espece.startswith("acontista"):
if unite == "Stade":
return "Pour Acontista, indique l'âge en mois."
try:
mois = float(age_input)
except:
return "Entrée invalide pour l'âge."
age_humain = age_humain_acontista(mois)
return f"Âge humain approximatif : {age_humain:.1f} ans"
elif espece.startswith("hierodula"):
if unite == "Stade":
age_humain = age_humain_hierodula(stade=age_input, sexe=sexe)
else:
try:
mois = float(age_input)
except:
return "Entrée invalide pour l'âge."
age_humain = age_humain_hierodula(mois=mois, sexe=sexe)
return f"Âge humain approximatif : {age_humain:.1f} ans"
else:
return "Espèce non reconnue."
# === Interface Gradio ===
def main():
with gr.Blocks() as demo:
gr.Markdown("# 🦗 Convertisseur d’âge de mante religieuse en âge humain")
gr.Markdown("## Projet de Ruben — modèle expérimental basé sur *Acontista mexicana* et *Hierodula spp.*")
espece = gr.Radio(["Acontista mexicana", "Hierodula spp."], label="Espèce", value="Acontista mexicana")
unite = gr.Radio(["Mois", "Stade"], label="Type d’entrée", value="Mois")
age_input = gr.Dropdown(
["L1", "L2", "L3", "L4", "L5", "L6", "L7", "L8"],
label="Stade (si applicable)",
value="L1"
)
mois_input = gr.Number(label="Âge en mois (si applicable)", value=1.0)
sexe = gr.Radio(["Femelle", "Mâle", "Indéterminé"], label="Sexe", value="Femelle")
bouton = gr.Button("Convertir")
resultat = gr.Textbox(label="Résultat")
# Fonction liée au bouton
def process(espece, unite, stade, mois, sexe):
if unite == "Mois":
return convertir_age(mois, unite, espece, sexe)
else:
return convertir_age(stade, unite, espece, sexe)
bouton.click(process, [espece, unite, age_input, mois_input, sexe], resultat)
gr.Markdown(
"### ℹ️ Notes :\n"
"- Les équivalences sont basées sur des observations empiriques.\n"
"- Les *Acontista mexicana* se développent plus rapidement.\n"
"- Les *Hierodula spp.* ont un cycle de vie plus long et progressif.\n"
)
demo.launch()
if __name__ == "__main__":
main()
|