Bonjour à tous

Je cherche à résoudre 2 systèmes d'équations couplées. Appelons les système A et système B.
L'un de ces 2 systèmes (disons système A) est un système EDO. Pour éviter de dupliquer l'information commune au 2 systèmes, je souhaite procéder avec des numpy.view

Je m'explique via le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import scipy
 
t0,t1,dt = 0.0,5.0, 1.0
 
data = np.ones((5,2))
data[:,1]*=2
 
y=np.array([0.0,0.0])     ### no matter default value
 
r = scipy.integrate.ode(f)
r.set_integrator('dopri5', rtol=1e-3, atol=1e-6 )
r.set_f_params(0.05)
 
#r.set_initial_value(y, t0); r._y = data[2]   ### Apparently equivalent
r.set_initial_value(data[2], t0)                   ### Apparently equivalent
 
print(np.shares_memory(r.y,y))
print(np.shares_memory(r.y,data))
Ici, à l'état initial, j'ai donc une synchronisation entre r.y (le système A) et data[2] (data contenant les informations du système B). Si je modifie l'un, l'autre se modifie aussi et vis versa. D'ailleurs, la commande r.y.base nous montre bien que r.y n'est qu'une view de data.
Ce comportement m'arrange bien car si le système B auquel le système A est couplé, vient modifier une valeur, elle est directement mis à jour.

Jusque là tout va bien. Maintenant, je fais avancer mon EDO dans le temps
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
while r.successful() and r.t < t1:
    r.integrate(r.t+dt, step=True)
    print(r.t+dt,r.y)
 
print(np.shares_memory(r.y,data))     
print(data)
et là drame, data et r.y ne sont plus synchro. r.y n'est plus une view de data.
Il semblerait que la fonction integrate créée une nouvelle instance de son attribut r.y plutot que de simplement le mettre à jour. J'ai été voir un peu le code de cette fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
https://github.com/scipy/scipy/blob/v0.19.1/scipy/integrate/_ode.py#L396
mais en remontant un peu ça renvoie a du code fortran et là j'y comprends plus rien.

Comment puis-je résoudre (ou contourner) ce problème autrement qu'en me tapant une copie de l'information entre r.y et data, dont je devrais gérer la synchronisation à la main ?

Merci