# -*- coding: utf-8 -*-
# Created on Fri Nov 22 16:18:00 2024
# @author: mhebding
# DM4py - Lapins

# Bibliothèques
import numpy as np
import matplotlib.pyplot as plt

def euler(ED, t0, tf, y0, n):
    h = (tf - t0) / n  # le pas ∆t noté h
    y, t = y0, t0 # initialisation des conditions initiales
    liste_y = [y0]  # liste des y(t)
    liste_t = [t0]  # liste des t
    for k in range(n):  # n iterations
        y = y + h * ED(y, t) # COEUR DE LA METHODE
        t = t + h  # instant suivant
        liste_t.append(t)  # on ajoute la valeur de t dans la liste
        liste_y.append(y)  # on ajoute la valeur de y dans la liste
    return liste_t, liste_y  # on renvoie les deux listes

def ED_lapins(P, t):
    lapins, renards = P
    dP = np.array([
    b1*lapins - k1*renards*lapins,
    b2*renards*lapins - k2*renards
    ])
    return dP # equations differentielles lapins renards. b1, b2, k1, k2 definies en variables globales plus bas

def resolution(ED, t0, tf, L0, R0, n):
    P0 = np.array([L0, R0])  # conditions initiales
    solution = euler(ED, t0, tf, P0, n)  # calcul des solutions par euler
    t, P = solution[0], solution[1]
    P = np.array(P) # pour assurer le type np.array
    lapins, renards = P[:, 0], P[:, 1]
    return t, lapins, renards # renvoie des listes

def graphes(ED, t0, tf):
    t, lapins, renards = resolution(ED, t0, tf, L0, R0, n) # calcul des solutions
    # plt.close() #referme la fenetre
    plt.clf()  # efface la figure courante.
    plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.5, hspace=0.5)
    plt.subplot(211) # tableaux de plots 2 lignes, 1 colonne, 1er graphe
    plt.plot(t, lapins, label="lapins")
    plt.plot(t, renards, label="renards")
    plt.ylabel("populations")
    plt.xlabel("t")
    plt.legend()
    plt.subplot(212) # tableaux de plots 2 lignes, 1 colonne, 2eme graphe
    plt.plot(lapins, renards, label="portrait de phase")
    plt.ylabel("renards")
    plt.xlabel("lapins")
    plt.legend(loc='best')
    plt.savefig('NOM_Prenom.pdf')

b1, b2, k1, k2 = 0.1, 0.00004, 0.0005, 0.04
L0, R0 = 2000, 600  # populations initiales
t0, tf, n = 0, 500, 100000

#graphes(ED_lapins,t0,tf) # appel de la fonction dans le shell



## Cette partie du travail n'est pas à rendre, mais vous permettra de conclure et d'utiliser votre code.
# Après avoir tracer les graphes, observer et analyser : 

#Commenter l'evolution periodique des populations.

#A quoi reconnait-on que le systeme evolue de maniere periodique sur le portrait de phase ?

#Ou se situe l'instant $t_0=0$ sur le portrait de phase ?

#Analysez les points particuliers et faire le lien avec les points particuliers sur le portrait de phase 
#(population de lapins minimale, maximale, idem pour la population de renards).

#Dans quel sens suit-on le portrait de phase ?