Files
graph_recognition_w_attn/sims/__pycache__/kuramoto.cpython-312.pyc

81 lines
10 KiB
Plaintext
Raw Normal View History

2025-07-31 01:12:53 -04:00
<EFBFBD>
T<><54>h<EFBFBD>!<00> <00>2<00>ddlZddlmZddlmZddlmZddlZddl m
Z Gd<04>d<05>Z eejd<06><07>dejd ejd
ejd e d ejf
d <0A><04>Zeejd<06><07>dejd ejd
ejd e d ejf
d<0E><04>Zeejd<06><07>dejdejd
ejd e d ejf
d<11><04>Zejdejd ejfd<13><04>Zeejd<06><07>dejdejd
ejd e d ejf
d<15><04>Zdejd e d ejfd<17>Z d+dejd e fd<18>Zdej,dej,d e fd<1A>Zedk(<00>r8e ddd<1C><1E>Zej4j7d<1F>Zej4j;ed <20>\ZZZeee<19>Z eee<19>\Z!Z"e#d!ejH<00>d"<22><03>ee!e"e e<19>Z%e%jM<00>e#d#<23>ee%<25>Z'ee%e"e e<19>Z(e#d$<24>e#d%e'dd&<26><04><02>e#d'e'd(d&<26><04><02>e#d)<29>e#ejRe"<22><00>e#d*<2A>e#ejRe(<28><00>eejRe%<25>ejRe'<27>e<19>yy),<2C>N)<01> dataclass)<01>partialc<00><><00>eZdZUdZdZeed<dZeed<dZ eed<dZ
eed <ee
e z <00>Z eed
<d Z e ed <d Ze ed <d Ze ed<y)<10>KuramotoConfigz0Configuration for the Kuramoto model simulation.<2E>
<00>
num_agents<EFBFBD><00>?<3F>couplingg{<14>G<EFBFBD>z<EFBFBD>?<3F>dtg$@<40>T<>
time_stepsF<EFBFBD>normalize_by_degree<65>directed<65>weightedN)<10>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r<00>int<6E>__annotations__r
<00>floatr r r r<00>boolrr<00><00><00>;/home/letpon/code/graph_recognition_w_attn/sims/kuramoto.pyrrs]<00><00>:<3A><18>J<EFBFBD><03><18><19>H<EFBFBD>e<EFBFBD><19><14>B<EFBFBD><05><14><13>A<EFBFBD>u<EFBFBD>O<EFBFBD><19>!<21>B<EFBFBD>$<24>i<EFBFBD>J<EFBFBD><03><1F> %<25><17><14>%<25><1A>H<EFBFBD>d<EFBFBD><1A><1A>H<EFBFBD>d<EFBFBD>rr)<01>config)<01>static_argnames<65>theta<74>omega<67>adj_matr<00>returnc<00>L<00>|tjdd<01>f|dd<01>tjfz
}|jtj|<04>z}tj|d<02><03>}|j
rtj|d<04><03>}||dzz }||j |zzS)u<>
Computes the derivative of the phase for each oscillator.
dθ_i/dt = ω_i + (K / deg_in_i) * Σ_j A_ji * sin(θ_j - θ_i)
N<><00><01>axisrg:<3A>0<EFBFBD><30>yE>)<07>jnp<6E>newaxisr <00>sin<69>sumrr
)rrr r<00>delta<74>coupling_effects<74> coupling_sum<75> in_degrees r<00>kuramoto_derivativer.s<><00><00> <12>#<23>+<2B>+<2B>q<EFBFBD>.<2E> !<21>E<EFBFBD>!<21>S<EFBFBD>[<5B>[<5B>.<2E>$9<> 9<>E<EFBFBD><1F>y<EFBFBD>y<EFBFBD>3<EFBFBD>7<EFBFBD>7<EFBFBD>5<EFBFBD>><3E>1<><14><17>7<EFBFBD>7<EFBFBD>+<2B>!<21>4<>L<EFBFBD> <0A>!<21>!<21><18>G<EFBFBD>G<EFBFBD>G<EFBFBD>!<21>,<2C> <09>#<23>y<EFBFBD>4<EFBFBD>'7<>8<> <0C> <10>6<EFBFBD>?<3F>?<3F>\<5C>1<> 1<>1rc<00><><00>t||||<03>}||j|zz}|tjzdtjzztjz
S)z?Performs a single Euler integration step of the Kuramoto model.<2E>)r.r r&<00>pi)rrr r<00> theta_dot<6F>
theta_nexts r<00> kuramoto_stepr40sN<00><00> $<24>E<EFBFBD>5<EFBFBD>'<27>6<EFBFBD>B<>I<EFBFBD><16><16><19><19>Y<EFBFBD>.<2E>.<2E>J<EFBFBD> <17><13><16><16> <1F>A<EFBFBD><03><06><06>J<EFBFBD> /<2F>#<23>&<26>&<26> 8<>8r<00>thetas0<73>omegasc<00>z<00><01><02><03><00><02><03>fd<01>}tjj||d<02>j<00><03>\}}|S)z<>
Runs a full Kuramoto simulation for a given initial state.
Returns:
trajectory: (T, N) array of phase angles over time.
c<00>(<00><03>t|<00><05><03><04>}||fS)N)r4)r<00>_r3r rr6s <20><><EFBFBD>r<00>scan_fnz(run_kuramoto_simulation.<locals>.scan_fnJs<00><><00>"<22>5<EFBFBD>&<26>'<27>6<EFBFBD>B<>
<EFBFBD><19>:<3A>%<25>%rN)<01>length)<04>jax<61>lax<61>scanr )r5r6r rr:r9<00>
trajectorys ``` r<00>run_kuramoto_simulationr@=s?<00><><00>&<26>
<18>G<EFBFBD>G<EFBFBD>L<EFBFBD>L<EFBFBD><0F><0F> <0C><15> <20> <20> !<21><06>M<EFBFBD>A<EFBFBD>z<EFBFBD> <16>r<00>thetasc<00><><00>tjd|z<00>}tjtj|d<02><03><00>S)u-
Computes the global order parameter R, a measure of phase coherence.
R = |(1/N) * Σ_j exp(i * θ_j)|
Args:
thetas: An array of phases, e.g., (T, N) for a trajectory.
Returns:
The order parameter R. If input is a trajectory, returns R at each time step.
y<00>?<3F><><EFBFBD><EFBFBD><EFBFBD>r$)r&<00>exp<78>abs<62>mean)rA<00>complex_phasess r<00>phase_coherencerHXs0<00><00><19>W<EFBFBD>W<EFBFBD>R<EFBFBD>&<26>[<5B>)<29>N<EFBFBD> <0E>7<EFBFBD>7<EFBFBD>3<EFBFBD>8<EFBFBD>8<EFBFBD>N<EFBFBD><12>4<> 5<>5rr?c<00>|<00>tjtd<01><02>}|||||<03>}tj|d<03><04>S)z<>
Computes the mean frequency of each oscillator over the simulation.
Returns:
mean_freqs: (N,) array of mean frequencies.
)rNNN)<01>in_axesrr$)r<<00>vmapr.r&rF)r?r6r r<00>vmapped_derivative<76>all_derivativess r<00>mean_frequencyrNhs<<00><00><1D><18><18><1B>%<25><06><16>)<29><1A>V<EFBFBD>W<EFBFBD>f<EFBFBD>M<>O<EFBFBD> <0E>8<EFBFBD>8<EFBFBD>O<EFBFBD>!<21> ,<2C>,r<00>keyc<00><><00>|j}||f}|jr!tjj ||<03>}n@tjj ||<03>dkDj t j<00>}|js6t j|<04>t j|jd<02>z}t j|dd<03><04>}|S)z2Generates a single random adjacency matrix (N, N).g<00>?r#F)<01>inplace) rrr<<00>random<6F>uniform<72>astyper&<00>float32r<00>tril<69>triur <00> fill_diagonal)rOr<00>N<>shape<70>matrixs r<00> generate_random_adjacency_matrixr\~s<><00><00><0E><19><19>A<EFBFBD> <0E><01>F<EFBFBD>E<EFBFBD> <0A><EFBFBD><EFBFBD><14><1A><1A>#<23>#<23>C<EFBFBD><15>/<2F><06><16>*<2A>*<2A>$<24>$<24>S<EFBFBD>%<25>0<>3<EFBFBD>6<>><3E>><3E>s<EFBFBD>{<7B>{<7B>K<><06> <11>?<3F>?<3F><14><18><18>&<26>!<21>C<EFBFBD>H<EFBFBD>H<EFBFBD>V<EFBFBD>X<EFBFBD>X<EFBFBD>q<EFBFBD>$9<>9<><06><11> <1E> <1E>v<EFBFBD>q<EFBFBD>%<25> 8<>F<EFBFBD> <11>Mrc<00><00>tjj|<00>\}}|j}tjj ||fddt
j z<00><03>}||tjj||f<01>zz}||fS)z1Generates initial phases and natural frequencies.rr0)<02>minval<61>maxval)r<rR<00>splitrrSr&r1<00>normal) rOr<00>
omega_mean<EFBFBD> omega_std<74> key_theta<74> key_omegarYr5r6s r<00>generate_initial_staterf<00>s<00><00><1F>:<3A>:<3A>+<2B>+<2B>C<EFBFBD>0<><18>I<EFBFBD>y<EFBFBD><0E><19><19>A<EFBFBD><12>j<EFBFBD>j<EFBFBD> <20> <20><19>Q<EFBFBD>D<EFBFBD><11>1<EFBFBD>s<EFBFBD>v<EFBFBD>v<EFBFBD>:<3A> <20>N<>G<EFBFBD><18>)<29>c<EFBFBD>j<EFBFBD>j<EFBFBD>&7<>&7<> <09>A<EFBFBD>4<EFBFBD>&H<>H<> H<>F<EFBFBD> <12>F<EFBFBD>?<3F>r<00>R_tc <00>
<00>|j\}}tjd|j|j<00>}t j dddd<05><06>\}\}}t|<04>D]7} |j|tj|dd<07>| f<00>dd | dz<00><00><02>
<EFBFBD><00>9|jd <0B>|jd <0C>|jdd d<0E><0F>|dkr|jdd<12><13>|j||dd<02><15>|jd<16>|jd<17>|jd<18>|jddg<02>|jdd d<0E><0F>t j <00>t j"<00>y)z8Plots phase trajectories and the global order parameter.rr0r#)<02> <00>T)<02>figsize<7A>sharexNg<00>?zAgent )<02>lw<6C>labelz&Kuramoto Oscillator Phase Trajectoriesz$\sin(\theta_i)$z--g333333<33>?)<02> linestyle<6C>alpharz upper right<68>small)<02>loc<6F>fontsize<7A>k)<02>colorrmz(Global Order Parameter (Phase Coherence)zTime (s)zR(t)g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)rZ<00>np<6E>linspacer <00>num_time_steps<70>plt<6C>subplots<74>range<67>plotr(<00> set_title<6C>
set_ylabel<EFBFBD>grid<69>legend<6E>
set_xlabel<EFBFBD>set_ylim<69> tight_layout<75>show)
r?rgrr rY<00>time<6D>fig<69>ax1<78>ax2<78> agent_idxs
r<00>plot_kuramoto_resultsr<73><00>sK<00><00> <16> <1B> <1B>D<EFBFBD>A<EFBFBD>q<EFBFBD> <0A>;<3B>;<3B>q<EFBFBD>&<26>(<28>(<28>F<EFBFBD>$9<>$9<> :<3A>D<EFBFBD><19>l<EFBFBD>l<EFBFBD>1<EFBFBD>a<EFBFBD><17><14>F<>O<EFBFBD>C<EFBFBD><1A>#<23>s<EFBFBD><1B>1<EFBFBD>X<EFBFBD>_<01> <09> <0B><08><08><14>r<EFBFBD>v<EFBFBD>v<EFBFBD>j<EFBFBD><11>I<EFBFBD><1C>6<>7<>C<EFBFBD><16>PY<50>Z[<5B>P[<5B>}<7D>G]<5D><08>^<5E>_<01><07>M<EFBFBD>M<EFBFBD>:<3A>;<3B><07>N<EFBFBD>N<EFBFBD>&<26>'<27><07>H<EFBFBD>H<EFBFBD>T<EFBFBD>T<EFBFBD><13>H<EFBFBD>-<2D><08>B<EFBFBD>w<EFBFBD> <0B>
<EFBFBD>
<EFBFBD>}<7D>w<EFBFBD>
<EFBFBD>7<><08>H<EFBFBD>H<EFBFBD>T<EFBFBD>3<EFBFBD>c<EFBFBD>a<EFBFBD>H<EFBFBD>(<28><07>M<EFBFBD>M<EFBFBD><<3C>=<3D><07>N<EFBFBD>N<EFBFBD>:<3A><1E><07>N<EFBFBD>N<EFBFBD>6<EFBFBD><1A><07>L<EFBFBD>L<EFBFBD>!<21>T<EFBFBD><19><1B><07>H<EFBFBD>H<EFBFBD>T<EFBFBD>T<EFBFBD><13>H<EFBFBD>-<2D><07><14><14><16><07>H<EFBFBD>H<EFBFBD>Jr<00>__main__<5F>g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)rr
r <00>*<00>z Running Kuramoto simulation for z steps...zSimulation complete.z
--- Analysis Results ---zInitial Coherence R(0): z.4fzFinal Coherence R(T): rCu
Natural Frequencies (ω):z"
Mean Frequencies over Simulation:)gr )*r<<00> jax.numpy<70>numpyr&<00> dataclassesr<00> functoolsrrv<00>matplotlib.pyplot<6F>pyplotryr<00>jit<69>Arrayr.r4r@rHrNr\rf<00>ndarrayr<79>rrrR<00>PRNGKeyrOr`<00>adj_key<65> state_key<65>
adj_matrixr5r6<00>printrxr?<00>block_until_ready<64> R_over_time<6D>avg_frequencies<65>asarrayrrr<00><module>r<>sx<00><01>
<EFBFBD><17>!<21><1D><12><1F> <1B> <1B> <09><13><17><17>+<2B>.<2E>2<>s<EFBFBD>y<EFBFBD>y<EFBFBD>2<>"<22>y<EFBFBD>y<EFBFBD>2<>!$<24><19><19>2<>!/<2F>2<>47<34>9<EFBFBD>9<EFBFBD>2<>/<2F>2<>6 <09><13><17><17>+<2B>.<2E> 9<><13><19><19> 9<><1C><19><19> 9<><1E>9<EFBFBD>9<EFBFBD> 9<>)<29> 9<>.1<EFBFBD>Y<EFBFBD>Y<EFBFBD> 9<>/<2F> 9<> <09><13><17><17>+<2B>.<2E><16> <10>Y<EFBFBD>Y<EFBFBD><16> <0F>I<EFBFBD>I<EFBFBD><16><11>Y<EFBFBD>Y<EFBFBD><16> <1B> <16>
 <09>Y<EFBFBD>Y<EFBFBD> <16>/<2F><16>4<05><17><17> 6<>C<EFBFBD>I<EFBFBD>I<EFBFBD> 6<>#<23>)<29>)<29> 6<> <09> 6<> <09><13><17><17>+<2B>.<2E>-<2D>s<EFBFBD>y<EFBFBD>y<EFBFBD>-<2D><1E>9<EFBFBD>9<EFBFBD>-<2D><1F>I<EFBFBD>I<EFBFBD>-<2D>*<2A>-<2D>/2<>i<EFBFBD>i<EFBFBD>-<2D>/<2F>-<2D>*<12>#<23>)<29>)<29><12>^<5E><12>PS<50>PY<50>PY<50><12>,69<36> <1B><03> <09> <09> <1B>><3E> <1B><0F>b<EFBFBD>j<EFBFBD>j<EFBFBD><0F>r<EFBFBD>z<EFBFBD>z<EFBFBD><0F>><3E><0F>: <0C>z<EFBFBD><19> <1B>r<EFBFBD>C<EFBFBD>2<EFBFBD> ><3E>F<EFBFBD>
<0A>*<2A>*<2A>
<1C>
<1C>R<EFBFBD>
<20>C<EFBFBD>!<21>j<EFBFBD>j<EFBFBD>.<2E>.<2E>s<EFBFBD>A<EFBFBD>6<><1B>C<EFBFBD><17>)<29>2<>'<27>6<EFBFBD>B<>J<EFBFBD>,<2C>Y<EFBFBD><06>?<3F>O<EFBFBD>G<EFBFBD>V<EFBFBD>
<EFBFBD> ,<2C>V<EFBFBD>-B<>-B<>,C<>9<EFBFBD>
M<EFBFBD>N<>(<28><17>&<26>*<2A>f<EFBFBD>M<>J<EFBFBD><0E> <20> <20>"<22> <09>
<20>!<21>"<22>*<2A>-<2D>K<EFBFBD>$<24>Z<EFBFBD><16><1A>V<EFBFBD>L<>O<EFBFBD> <09>
&<26>'<27> <09> $<24>[<5B><11>^<5E>C<EFBFBD>$8<>
9<EFBFBD>:<3A> <09> $<24>[<5B><12>_<EFBFBD>S<EFBFBD>$9<>
:<3A>;<3B> <09>
'<27>(<28> <09>*<2A>"<22>*<2A>*<2A>V<EFBFBD>
<1C><1D> <09>
/<2F>0<> <09>*<2A>"<22>*<2A>*<2A>_<EFBFBD>
%<25>&<26><1A>*<2A>"<22>*<2A>*<2A>Z<EFBFBD>0<>*<2A>"<22>*<2A>*<2A>[<5B>2I<32>6<EFBFBD>R<>=r