Spaces:
Sleeping
Sleeping
| 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() | |