Mon problème est le suivant :
Est - il possible de détecter lorsqu'une classe python a été modifiée, un peu de la même façon qu'il est possible de savoir si un fichier a été altéré via un hash md5 ?
Ayant besoin à la fois d'optimiser un calcul scientifique et de communiquer avec des afficionados Fortran, j'ai écrit un bout de code permettant de transformer une équation sympy (calcul formel) en code fortran, et d'ensuite le compiler via f2py, de l'importer et de l'utiliser pour effectuer mes calculs.
Cette étape de traduction / compilation est (relativement) longue. J'aimerai donc ne la faire que lorsque mon modèle mathématique change.
Celui ci est écrit sous une forme du genre
class Chris2DModel(Model):
name = 'Saint_Venant_vg_hydro2fields'
def set_model(self):
t = self.t
x = self.x
h = sp.Function('h')(x, t)
q = sp.Function('q')(x, t)
self.funcs = h, q
self.pars = Re, We, Ct = sp.symbols('Re We Ct', cls=sp.Symbol)
continuity = (h.diff(t) + q.diff(x)).expand()
inertial = (3. * Re * (q.diff(t) +
frac(17, 7) * q / h * q.diff(x) -
frac(9, 7) * q**2 / h ** 2 * h.diff(x)) - (
frac(5, 6) * (h -
3 * q / h**2 -
Ct * h * h.diff(x) +
We * h * h.diff(x, 3)) +
4. * q * (h.diff(x) / h) ** 2 -
frac(9, 2) * h.diff(x) * q.diff(x) / h -
6. * q * h.diff(x, x) / h +
frac(9, 2) * q.diff(x, x)
)
).expand()
return [continuity, inertial]
Ce modèle hérite d'une classe plus générale possédant toutes les méthodes permettant la résolution numérique de l'équation.
L'objectif est de ne lancer l'étape de trad/compile que si un changement a été détecté dans le modèle mathématique.