import numpy as np
import matplotlib.pyplot as plt
from math import log10

# Compléter les lignes 7, 8 et 52
pKA = int("AC1DEACE7106E",16)/636115944292272 # CH3COOH Merci de ne pas regarder la valeur de la variable pKa pour ne pas être influence
Ca =    # En mol/L
Va0 =   # En mL

Cb = 0.1
Vbe = Va0 * Ca / Cb
epsilon = 1e-2

# Avant équivalence
x = np.linspace(epsilon, 1-epsilon, 10000)
Vb1 = x * Vbe
pH1 = pKA + np.log10 (x / (1 - x))


# Équivalence
pHe = 7 + 0.5 * (pKA + log10(Ca * Va0 / (Va0 + Vbe)))

# Après équivalence
x = np.linspace(1+epsilon, 2, 10000)
Vb2 = x * Vbe
pH2 = 14 + log10(Cb)  + np.log10 (x - 1)

# Affichage
pH = np.zeros(pH1.size + 1 + pH2.size)
for i in range(pH1.size):
    pH[i] = pH1[i]
pH[pH1.size] = pHe
for i in range(pH2.size):
    pH[i + 1 + pH1.size ] = pH2[i]


Vb = np.zeros(Vb1.size + 1 + Vb2.size)
for i in range(Vb1.size):
    Vb[i] = Vb1[i]
Vb[pH1.size] = Vbe
for i in range(Vb2.size):
    Vb[i + 1 + Vb1.size ] = Vb2[i]


plt.figure()
plt.plot(Vb, pH, 'g')
# Par coquetterie on rajoute la demi-équivalence et l'équivalence
plt.plot(Vbe /2, pKA, '+b')
plt.plot(Vbe, pHe, '+r')

# Tracé de la bande de virage d'un indicateur coloré
pKic =   #
plt.plot([0, 2 * Vbe], 2 * [pKic - 1], '-r')
plt.plot([0, 2 * Vbe], 2 * [pKic + 1], '-r')

plt.show()