# -*- coding: utf-8 -*-
"""
Created on Mon Feb  2 14:56:05 2026

@author: pjaub
"""

from math import ceil, sqrt
import random as rd
import matplotlib.pyplot as plt

plt.close("all")


            

def moyenne(L):
    return # A compléter

def ecart_type(L):
    m = moyenne(L)

    return # A compléter

def frequences_cumulées(Serie):
    """
         A compléter
    """
    # A compléter
    return x, y



def proportion_intervalle(L):
    """
         A compléter
    """
    xbar = moyenne(L)
    s = ecart_type(L)
    a, b = xbar - 2*s, xbar + 2*s
    return sum(1 for x in L if a <= x <= b)/len(L)



def intervalle_min_95(Serie):
    """
         A compléter
    """
    L= sorted(Serie)
    n = len(L)
    N = ceil(0.95*(n))    # A commenter
    i = 0
    for k in range(1, n-N+1):
        if L[k+N-1] - L[k] < L[i+N-1] - L[i]:
            i = k
    return i, i+N-1, L[i], L[i+N-1], (L[i]+L[i+N-1])/2



def binomiale(n, p):
    """
         A compléter
    """
    x = 0
    # A compléter
    return x

def uniforme(a, b):
    """
         A compléter
    """
    return a + (b-a)*rd.random()

def normale(esperance, ecart_type):
    """
         A compléter
    """
    return rd.gauss(esperance, ecart_type)

def baroque():
    """
         Fonction aléatoire inconnue
    """
    if rd.random() < 0.9:
        return rd.gauss(0, 0.5)  
    return rd.gauss(10, 0.5)
    


n = 10000

S = [ normale(0, 1)  for _ in range(n) ]
S = [ uniforme(-1,1) for _ in range(n) ]
S = [ baroque() for _ in range(n) ]
S = [ binomiale(100,0.2) for _ in range(n) ]
S = [ baroque() for _ in range(n) ]



print(moyenne(S))
print(ecart_type(S))
print(proportion_intervalle(S))
print(intervalle_min_95(S))
print('')

x, y = frequences_cumulées(S)
plt.plot(x,y, label="Frequences cumulées")
t = intervalle_min_95(S)
plt.plot( [t[2],t[2]], [0, 1],'r',label = 'intervalle min')
plt.plot( [t[3],t[3]], [0, 1],'r')
m = moyenne(S)
s = ecart_type(S)
plt.plot( [m, m], [0, 1], 'c--',label = 'moyenne')
plt.plot( [m-2*s, m-2*s], [0, 1],'c',label = 'moyenne ± 2*sigma')
plt.plot( [m+2*s, m+2*s], [0, 1],'c')
plt.legend()
plt.show()

