
    i
                         d Z ddlZddlmZ ddlmc mZ ddlmZ ddl	m
Z
mZ ddlmZmZ ddlZddlmZ ddlmZ ddlmZ ddlZ ej2                  d        ej4                  d       ej6                  j9                  d        ed	        ed
        ed	        G d d      Z G d dej>                        Z  G d dej>                        Z! G d d      Z" G d d      Z# G d d      Z$ G d dej>                        Z%d:dZ&d Z'e(dk(  r e&ddd      Z) ed         ed!        ed	        ed"        ed#e)d$   d%   d&   d'        ed(e)d$   d)   d'        ed*e)d$   d+   d&   d'        ed,        ed#e)d-   d%   d&   d'        ed(e)d-   d)   d'        ed*e)d-   d+   d&   d'       e)d$   d)   e)d-   d)   z
  d.z  Z* ed/e*dk\  rd0nd1 d2e*d3d4        ed5        ed6        ed7        ed8        ed9       yy);a  
Resonant Training Framework (RTF) - MNIST Prototype
====================================================
A PyTorch implementation of CCT-ODE-Resonance training

Key Features:
1. Internal layer oscillators with phase/frequency/amplitude
2. Cross-AI resonance during distributed training
3. FFT spectrum analysis of training dynamics
4. Comparison with standard training

Author: CC-SI Framework
    N)
DataLoaderSubset)datasets
transforms)FuncAnimation)HTMLignore*   F======================================================================z-RESONANT TRAINING FRAMEWORK - MNIST PROTOTYPEc                   4    e Zd ZdZddZd Zd Zd	dZd
dZy)HarmonicOscillatorzHEach parameter is a harmonic oscillator with phase, frequency, amplitudec                 b   || _         |j                         j                         j                  |      | _        t        j                  d|      dz  t        j                  z  | _	        t        j                  d|      | _        t        j                  d|      | _        g | _        g | _        y )N device         ?)r   clonedetachtovaluetorchrandnppiphasetensor	frequency	amplitudegradient_historyphase_history)selfinitial_valuer   s      ex01.py__init__zHarmonicOscillator.__init__+   s     #((*11366v>
 ZZ62Q6>
c&9c&9 !#    c                     | j                   t        j                  | j                  |z  | j                  z         z  }|j                  | j                        S )u-   Oscillator state at time t: A * sin(ωt + φ))r   r   sinr   r   
reshape_asr   )r"   tstates      r$   r+   zHarmonicOscillator.state:   s@    4>>A+=

+J!KK

++r&   c                 F    d| j                   dz  z  | j                  dz  z  S )zPotential energy of oscillator      ?r   )r   r   r"   s    r$   energyzHarmonicOscillator.energy?   s$    T^^Q&&):::r&   c                     || j                   z
  }| j                   |t        j                  t        j                  |      t        j                  |            z  z   | _         y)zPull phase toward targetN)r   r   atan2r(   cos)r"   target_phasestrengthdiffs       r$   align_phasezHarmonicOscillator.align_phaseC   sA    djj(ZZ(U[[4%))TX/-Z"ZZ
r&   c                 ~    | j                   ||z  z   | _         t        j                  | j                   dd      | _         y)z+Adapt frequency based on gradient magnitude皙?g      $@N)r   r   clamp)r"   gradient_magnitudelrs      r$   update_frequencyz#HarmonicOscillator.update_frequencyH   s0    "/A*AAT^^S$?r&   Ncpu)r8   ){Gz?)	__name__
__module____qualname____doc__r%   r+   r/   r6   r<   r   r&   r$   r   r   (   s     R ,
;[
@r&   r   c                   H     e Zd ZdZd fd	Zd Zd	dZd Zd
dZddZ	 xZ
S )ResonantLinearz5A linear layer where weights are harmonic oscillatorsc                 v   t         |           || _        || _        || _        t        j                  t        j                  |||      dz        | _	        t        j                  t        j                  ||            | _        g | _        g | _        | j                          d| _        d| _        d| _        y )Nr   r8   r-           F)superr%   r   in_featuresout_featuresnn	Parameterr   randnweightzerosbiasweight_oscillatorsbias_oscillators_init_oscillatorscoupling_strengthphase_coherencephase_locked)r"   rI   rJ   r   	__class__s       r$   r%   zResonantLinear.__init__Q   s    &( ll5;;|[QW#X[^#^_LL\&!IJ	 #% "  "%  #!r&   c                    t        | j                        D ]y  }g }t        | j                        D ]B  }t        | j                  j
                  ||f   | j                        }|j                  |       D | j                  j                  |       { t        | j                        D ]H  }| j                  j                  t        | j                  j
                  |   | j                               J y)z2Initialize harmonic oscillators for each parameterN)rangerJ   rI   r   rN   datar   appendrQ   rR   rP   )r"   irow_oscillatorsjoscs        r$   rS   z ResonantLinear._init_oscillatorsh   s     t(() 	<A O4++, ,()9)9!Q$)?M&&s+, ##**?;	< t(() 	]A!!(();DIINN1<Mt{{)[\	]r&   c                 v   g }t        | j                        D ]  }g }t        | j                        D ]F  }| j                  |   |   j	                  |      }|j                  | j                  ||f   |z          H |j                  t        j                  |              t        j                  |      }g }	t        | j                        D ]?  }|	j                  | j                  |   | j                  |   j	                  |      z          A t        j                  |	      }
t        j                  |||
      S )z$Forward pass using oscillator states)rY   rJ   rI   rQ   r+   r[   rN   r   stackrP   rR   Flinear)r"   xr*   weight_rowsr\   rowr^   	osc_stateeffective_weight
bias_termseffective_biass              r$   forwardzResonantLinear.forwardv   s    t(() 	1AC4++, : 33A6q9??B	

4;;q!t,y89: u{{3/0	1 !;;{3
t(() 	PAdiilT-B-B1-E-K-KA-NNO	PZ0xx+^<<r&   c                    g }| j                   D ]2  }|D ]+  }|j                  |j                  j                                - 4 t	        j
                  |D cg c]  }t	        j                  |       c}      }t	        j
                  |D cg c]  }t	        j                  |       c}      }t	        j                  |dz  |dz  z         }|| _	        |dkD  | _
        |S c c}w c c}w )z.Compute phase coherence across all oscillatorsr   g?)rQ   r[   r   itemr   meanr2   r(   sqrtrU   rV   )r"   
all_phasesrf   r_   pmean_xmean_y	coherences           r$   compute_coherencez ResonantLinear.compute_coherence   s    
** 	4C 4!!#)).."234	4
 Z8"&&)89Z8"&&)89GGFAI	12	(%O 98s   C!C&c           	         t        j                         5  |d   | j                  _        | j                  xj                  ||d   z  z  c_        |d   | j
                  _        | j
                  xj                  ||d   z  z  c_        t        | j                        D ]   }t        | j                        D ]  }| j                  |   |   }|d   ||f   j                         }t        j                  t        j                  |      t        j                  d            }|j                  ||       |j                  t        |      d       |j                   j#                  |j$                  j                                |j&                  j#                  |         t        | j                        D ]  }| j(                  |   }|d   |   j                         }t        j                  t        j                  |      t        j                  d            }|j                  ||       |j                   j#                  |j$                  j                                 	 ddd       y# 1 sw Y   yxY w)z
        Update weights via RESONANCE mechanism
        Instead of: weight = weight - lr * gradient
        We do: oscillator alignment + coupling
        rN   rP   r   )r4   r?   r;   N)r   no_gradrN   gradrZ   rP   rY   rJ   rI   rQ   rm   r1   r   r6   r<   absr!   r[   r   r    rR   )	r"   	gradientsr;   coupling_lrr\   r^   r_   ry   r3   s	            r$   resonant_updatezResonantLinear.resonant_update   s    ]]_ !	;(2DKKKKYx%8 88&v.DIINIINNb9V#444N 4,,- 6t//0 6A11!4Q7C$X.q!t499;D $);;u||D/A5<<PSCT#UL OOL;OG ((Tt(< %%,,SYY^^-=>((//566& 4,,- ;++A. (+002${{5<<+=u||C?PQ{C!!(()9:;9!	; !	; !	;s   II,,I5c                 P   | j                   syd}t        t        | j                  |j                              D ]  }t        t        | j                  |j                              D ]  }| j
                  |   |   j                  j                         }|j
                  |   |   j                  j                         }t        ||z
        }|t        j                  |      z  }	|j
                  |   |   j                  xj                  |	dz  z  c_        |t        |	      z  }  |S )z
        Inter-layer resonance: this layer couples with another layer
        Phase-locked layers transfer energy to unlock neighbors
        rG   r8   )rV   rY   minrJ   rI   rQ   r   rm   rz   r   r2   r   rZ   )
r"   other_layerKenergy_transferr\   r^   my_phaseother_phase
phase_diff	resonances
             r$   couple_with_layerz ResonantLinear.couple_with_layer   s   
    s4,,k.F.FGH 	2A3t//1H1HIJ 
22215a8>>CCE)<<Q?BHHMMO K!78
z 22	 ..q1!4>>CCySVVC3y>1
2	2 r&   r=   )rG   r?   r8   )333333?)r@   rA   rB   rC   r%   rS   rk   ru   r}   r   __classcell__rW   s   @r$   rE   rE   N   s&    ?".]=("(;Tr&   rE   c                   D     e Zd ZdZdddgddf fd	Zd Zdd	Zd
 Z xZS )ResonantMLPz+Multi-layer perceptron with resonant layers        
   r>   c           	      n   t         |           || _        t        j                         | _        d| _        |g|z   |gz   }t        t        |      dz
        D ]1  }| j
                  j                  t        ||   ||dz      |             3 t        j                  gt        |      dz
  z  d gz   | _        y )NrG      r   c                     | S Nr   rd   s    r$   <lambda>z&ResonantMLP.__init__.<locals>.<lambda>       A r&   )rH   r%   r   rK   
ModuleListlayersr*   rY   lenr[   rE   rb   reluactivations)r"   
input_sizehidden_sizesoutput_sizer   sizesr\   rW   s          r$   r%   zResonantMLP.__init__   s    mmo |+{m;s5zA~& 	MAKK~eAhac
FKL	M FF8s5zA~6+Fr&   c                     |j                  |j                  d      d      }t        | j                        D ]C  \  }} ||| j                        } | j
                  |   |      }| xj                  dz  c_        E |S )Nr   )r*   r8   )viewsize	enumerater   r*   r   r"   rd   r\   layers       r$   rk   zResonantMLP.forward   sq    FF166!9b!!$++. 	HAua466"A#  #A&AFFcMF	
 r&   c                     t        | j                        D ]R  \  }}|d|    |d|    d}|j                  |||       |dkD  s0|j                  | j                  |dz
     d       T y)	z Update all layers with resonanceweight_bias_)rN   rP   r   r   r   r   N)r   r   r}   r   )r"   r{   r;   r|   r\   r   layer_gradss          r$   resonant_backwardzResonantMLP.resonant_backward   s    !$++. 		AHAu#gaSM2!E!+.K !!+r;? 1u''AaC(8C'@		Ar&   c                 \    | j                   D cg c]  }|j                          c}S c c}w )zGet coherence of all layers)r   ru   )r"   r   s     r$   compute_all_coherencez!ResonantMLP.compute_all_coherence  s#    7;{{Ce'')CCCs   )r   )	r@   rA   rB   rC   r%   rk   r   r   r   r   s   @r$   r   r      s+    5"%S#JBW\ GADr&   r   c                   (    e Zd ZdZddZddZddZy)	AIAgentz8An AI agent with its own model and oscillator parametersc                    || _         || _        t        |      j                  |      | _        t        j                  | j                  j                         d      | _        t        j                  j                  ddt        j                  z        | _        d| _        d| _        g | _        g | _        g | _        g | _        d| _        y )Nr   r?   rw   r   r   r   r-   )idr   r   r   modeloptimSGD
parameters	optimizerr   randomuniformr   r   r   r   loss_historyaccuracy_historyr!   r    r   )r"   agent_idr   s      r$   r%   zAIAgent.__init__  s     !/226:
4::#8#8#:tD YY&&q!BEE'2
  " " r&   Nc                    | j                   j                          |xs | j                  }|j                          | j                  |      } |||      }|j	                          i }| j                   j                         D ]/  \  }}	|	j                  |	j                  j                         ||<   1 t        d |j                         D              }
| xj                  dt        j                  |
      z  z  c_
        | j                  j                  | j                         | j                  j                  |
       |j!                         |fS )z One training step for this agentc              3   X   K   | ]"  }|j                         j                          $ y wr   )sumrm   ).0rq   s     r$   	<genexpr>z%AIAgent.train_step.<locals>.<genexpr>>  s     B!quuw||~Bs   (*r8   )r   trainr   	zero_gradbackwardnamed_parametersry   r   r   valuesr   r   r(   r!   r[   r    rm   )r"   rd   y	criterionr   outputlossr{   nameparamgrad_mags              r$   
train_stepzAIAgent.train_step*  s   

/	 A# 	 	::668 	5KD%zz%"'**"2"2"4	$	5
 By/?/?/ABB 	

cBFF8,,,
!!$**-$$X.yy{I%%r&   c           	         t        j                         5  | j                  j                         D ]  \  }}|j                  |rX||v rT|t        j                  | j                        z  }|xj                  dd|z
  |j                  z  |||   z  z   z  z  c_        m|xj                  d|j                  z  z  c_         	 ddd       | j                  rdt        j                  | j                  dd       }| xj                  dd|z  z   z  c_        t        j                  | j                  dd      | _        yy# 1 sw Y   zxY w)zo
        Update model with resonance
        If shared_gradients provided, apply cross-agent resonance
        Nr?   r   ir-   g      @)r   rx   r   r   ry   r   r2   r   rZ   r    rn   r   clip)r"   shared_gradientsr   r   r   blendrecent_grads          r$   r}   zAIAgent.resonant_updateG  s   
 ]]_ 
	8#zz::< 	8e::)'D4D,D !BFF4::$6 6

dq5yEJJ.F.36Ft6L.L/M 'N N
 

dUZZ&77
	8
	8   ''$"7"7"=>KNNq4+#556NWWT^^S#>DN !
	8 
	8s   -D;A>D;;Er=   r   )Nr-   )r@   rA   rB   rC   r%   r   r}   r   r&   r$   r   r     s    B,&:?r&   r   c                   8    e Zd ZdZd	dZd Zd
dZd Zd Zd Z	y)ResonantTrainingSystemz)Multi-agent training with cross-resonancec                 6   || _         t        |      D cg c]  }t        ||       c}| _        t        j
                  j                  dd||f      | _        t	        j                  | j                  d       t               | _
        g | _        g | _        y c c}w )Nr   ffffff?r   )r   rY   r   agentsr   r   r   coupling_matrixfill_diagonalFFTAnalyzerfft_analyzerepoch_historyresonance_events)r"   n_agentsr   r\   s       r$   r%   zResonantTrainingSystem.__init__b  s    38?Cawq&)C  "yy00cHh;OP
--q1 (M   " Ds   Bc                 V   t        | j                        }t        j                  ||f      }t	        |      D ]n  }t	        |      D ]^  }||k7  s	t        | j                  |   j                  | j                  |   j                  z
        }t        j                  |      |||f<   ` p |S )z/Compute phase coherence between all agent pairs)r   r   r   rO   rY   rz   r   r2   )r"   nrt   r\   r^   r   s         r$   compute_coherence_matrixz/ResonantTrainingSystem.compute_coherence_matrixq  s    HHaV$	q 	9A1X 96!$T[[^%9%9DKKN<P<P%P!QJ&(ffZ&8IadO9	9 r&   c           	          | j                         }g }t        t        | j                              D ]M  }t        |dz   t        | j                              D ]&  }|||f   |kD  s|j	                  |||||f   f       ( O t        |d d      S )z&Find agent pairs with strong resonancer   c                     | d   S )Nr   r   r   s    r$   r   z=ResonantTrainingSystem.find_resonance_pairs.<locals>.<lambda>  s
    1Q4 r&   T)keyreverse)r   rY   r   r   r[   sorted)r"   	thresholdrt   pairsr\   r^   s         r$   find_resonance_pairsz+ResonantTrainingSystem.find_resonance_pairs~  s    113	s4;;'( 	:A1Q3DKK 01 :QT?Y.LL!Q	!Q$!89:	:
 e>>r&   c                 2   |D ]  \  }}}| j                   |   }| j                   |   }|j                  |j                  z
  }|xj                  dt        j                  |      z  |z  z  c_        |xj                  dt        j                  |      z  |z  z  c_        t        j                  |j
                        t        j                  |j
                        z   dz  }|dz  |_        |dz  |_        | j                  j                  ||f|dd        y)z%Apply resonance between paired agentsr8   r   g333333?cross_resonance)pairr4   typeN)r   r   r   r(   ro   r   r   r[   )	r"   r   r\   r^   r4   agent_iagent_jr   combined_amps	            r$   apply_cross_resonancez,ResonantTrainingSystem.apply_cross_resonance  s    # 	NAq(kk!nGkk!nG !6JMMS266*#55@@MMMS266*#55@@M GGG$5$56ARAR9SSVWWL ,s 2G ,s 2G!!((A$)* 	r&   c           	      &   d}d}d}| j                  d      }| j                  |       t        |      D ]  \  }\  }}	|j                  | j                        |	j                  | j                        }	}i }
i }| j
                  D ]6  }|j                  ||	|      \  }}||
|j                  <   |||j                  <   8 | j
                  D ]8  }i }|D ]  \  }}}|j                  |k(  r;||   }|j                         D ]"  \  }}||vr	||z  ||<   ||xx   ||z  z  cc<   $ Q|j                  |k(  sa||   }|j                         D ]"  \  }}||vr	||z  ||<   ||xx   ||z  z  cc<   $  |j                  |r|ndd       ||
|j                     |j                  d      z  z  }|j                  |      j                  d      }|||	k(  j                         j                         z  }||j                  d      z  };  ||z  ||z  fS )	zTrain one epoch with all agentsr   r   )r   Nr-   r   r   dim)r   r   r   r   r   r   r   r   itemsr}   r   r   argmaxr   rm   )r"   train_loaderr   
epoch_loss	epoch_acctotal_samplesresonance_pairs	batch_idxrZ   targetbatch_lossesbatch_gradientsagentr   r{   shared_gradsr\   r^   r4   partner_gradsr   ry   preds                          r$   train_epochz"ResonantTrainingSystem.train_epoch  sZ   
	 33c3B 	""?3)2<)@ (	.%I~f774;;/4;;1G&DL O  6"'"2"24"Ki)-UXX&,5)6  .!&5 FNAq(xx1}(7(:*7*=*=*? FJD$#<759H_T 2 ,T 2dXo E 2	F
 Q(7(:*7*=*=*? FJD$#<759H_T 2 ,T 2dXo E 2	FF" %%llPS%T l5884tyy|CC
 {{4(//A/6dfn11388::	1-7.(	.T M)9}+DDDr&   c                 4   g }| j                   D ]  }|j                  j                          d}d}t        j                         5  |D ]  \  }}|j                  | j                        |j                  | j                        }}|j                  |      }|j                  d      }	||	|k(  j                         j                         z  }||j                  d      z  } 	 ddd       |j                  |j                  ||z  d        |S # 1 sw Y   .xY w)zEvaluate all agentsr   r   r   N)r   accuracy)r   r   evalr   rx   r   r   r   r   rm   r   r[   r   )
r"   test_loaderresultsr  correcttotalrZ   r   r   r  s
             r$   evaluatezResonantTrainingSystem.evaluate  s    [[ 	EKKGE *$/ *LD&#'774;;#74;;9O&D"[[.F!==Q=/D335::<<GTYYq\)E** NN!HH#eO 	$ * *s   BDD	Nr=   )r-   )
r@   rA   rB   rC   r%   r   r   r   r  r  r   r&   r$   r   r   _  s%    3#
?,6Epr&   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)r   z!Analyze training dynamics via FFTc                     g | _         y r   )spectra_historyr.   s    r$   r%   zFFTAnalyzer.__init__  s
    !r&   c                 r   t        |      dk  r,t        j                  dg      t        j                  dg      fS t        j                  j                  |      }t        j                  j	                  t        |            }t        j
                  |      }|dt        |      dz   |dt        |      dz   fS )zCompute FFT spectrum of signalr   r   N)r   r   arrayfftfftfreqrz   )r"   signalspectrumfreqs	magnitudes        r$   compute_spectrumzFFTAnalyzer.compute_spectrum  s    v;?88QC="((A3-//66::f%s6{+FF8$	^c%j!m$i0BY1B&CCCr&   c                    t        |      t        |      k7  r(t        t        |      t        |            }|d| }|d| }t        j                  |      t        j                  j                  |      dz   z  }t        j                  |      t        j                  j                  |      dz   z  }t        j                  t        j                  ||            S )z%Compute coherence between two signalsNg|=)r   r   r   r  linalgnormrz   vdot)r"   signal_asignal_bmin_lena_normb_norms         r$   cross_coherencezFFTAnalyzer.cross_coherence  s    x=CM)#h-X7G)H)H (#ryy~~h'?%'GH(#ryy~~h'?%'GHvvbggff-..r&   c                     | j                  |      \  }}t        |      dk(  ry|t        j                  |dd       dz      S )z!Find dominant frequency in signalr   r   N)r  r   r   r   )r"   r  r  mags       r$   dominant_frequencyzFFTAnalyzer.dominant_frequency  sC    **62
ss8q=RYYs12w'!+,,r&   N)r@   rA   rB   rC   r%   r  r%  r(  r   r&   r$   r   r     s    +"	D/-r&   r   c                   4     e Zd ZdZdddgdf fd	Zd Z xZS )StandardMLPzStandard MLP for comparisonr   r   r   r   c           	      d   t         |           t        j                         | _        |g|z   |gz   }t        t        |      dz
        D ]:  }| j                  j                  t        j                  ||   ||dz                   < t        j                  gt        |      dz
  z  d gz   | _        y )Nr   r   c                     | S r   r   r   s    r$   r   z&StandardMLP.__init__.<locals>.<lambda>(  r   r&   )rH   r%   rK   r   r   rY   r   r[   Linearrb   r   r   )r"   r   r   r   r   r\   rW   s         r$   r%   zStandardMLP.__init__"  s    mmo|+{m;s5zA~& 	@AKKryyq51:>?	@FF8s5zA~6+Fr&   c                     |j                  |j                  d      d      }t        | j                        D ]"  \  }} ||      } | j                  |   |      }$ |S )Nr   r   )r   r   r   r   r   r   s       r$   rk   zStandardMLP.forward*  s]    FF166!9b!!$++. 	'HAuaA#  #A&A	' r&   )r@   rA   rB   rC   r%   rk   r   r   s   @r$   r*  r*    s    %"%S#JB Gr&   r*  r      r   c                 	   t        j                  t         j                  j                         rdnd      }t	        d|        t        j                  t        j                         t        j                  dd      g      }t        j                  ddd|      }t        j                  dd	|
      }t        ||d      }t        ||      }t        j                         }	t	        d       t	        d       t	        d       t	        d       t	        d       t        ||      }
g }g }g }g }t        |       D ]  }|
j!                  ||	      \  }}|j#                  |       |j#                  |       |
j%                         }|j#                  |j'                                t)        |
j*                        }|j#                  |       t	        d|dz   dd|dd|ddt-        j.                  |      dd| 
        |
j1                  |      }t	        dt-        j.                  |D cg c]  }|d   	 c}      d       t	        d       t	        d       t3               j5                  |      }t7        j8                  |j;                         d       }g }g }t        |       D ]+  }d!}d!}d!}|D ]  \  }}|j5                  |      |j5                  |      }}|j=                           ||      } |	||      }|j?                          |jA                          ||jC                         |jE                  d!      z  z  }|jG                  d"      } || |k(  jI                         jC                         z  }||jE                  d!      z  } ||z  }!||z  }"|j#                  |!       |j#                  |"       t	        d|dz   dd|!dd|"d       . |jK                          d!}#d!}$t        jL                         5  |D ]y  \  }}|j5                  |      |j5                  |      }} ||      }|jG                  d"      } |#| |k(  jI                         jC                         z  }#|$|jE                  d!      z  }${ 	 d#d#d#       |#|$z  }%t	        d$|%d       tO        ||||||
||%       ||t-        j.                  |D cg c]  }|d   	 c}      |d%|||%d&d'S c c}w # 1 sw Y   fxY wc c}w )(z)Run the full resonant training experimentcudar>   z
Using device: )g_)Ǻ?)gGr?rZ   T)r   download	transformF)r   r3  )
batch_sizeshuffle)r4  G
======================================================================z)EXPERIMENT: RESONANT vs STANDARD TRAININGr   u,   
🧠 TRAINING RESONANT SYSTEM (3 AI Agents)z2--------------------------------------------------)r   r   zEpoch r   2dz: Loss=.4fz, Acc=z, Coherence=z.3fz, Resonance Events=u%   
📊 Resonant System Test Accuracy: r	  u)   
⚡ TRAINING STANDARD NETWORK (Baseline)r?   rw   r   r   Nu&   
📊 Standard Network Test Accuracy: )losses
accuraciestest_accuracycoherence_history)r9  r:  r;  )resonantstandard)(r   r   r1  is_availableprintr   ComposeToTensor	Normalizer   MNISTr   rK   CrossEntropyLossr   rY   r  r[   r   copyr   r   r   rn   r  r*  r   r   r   r   r   r   steprm   r   r   r   r
  rx   visualize_results)&n_epochsr   r4  r   r3  train_datasettest_datasetr   r  r   resonant_systemresonant_lossesresonant_accuraciesr<  resonance_count_historyepochr   accrt   n_resonanceresonant_resultsrstandard_modelr   standard_lossesstandard_accuraciesr   r   r   rZ   r   r   r  avg_lossavg_accr  r  standard_accuracys&                                         r$   run_experimentr[  6  s    \\EJJ$;$;$=&5IF	VH
%& ""Y	2$ I
 NN6PYZM>>&KLm
DQL\jAK##%I	/	
56	(O 

9:	(O,hvNOO x U#//iH	ct$""3' $<<>	  !12 /::;&&{3uQwrl'$s6#c C779-c22Ek]T 	UU" '//<	2277Sc;daAjM;d3efi2j
kl 

67	(O ]%%f-N		.335$?IOx M
	( 	*LD&776?FIIf,=&D!#D)FVV,DMMONN$))+		!44J==Q='D$&.--/4466ITYYq\)M	* -m+x(""7+uQwrl'(3vgc]KL1M6 GE	 "' 	"LD&776?FIIf,=&D#D)F==Q='D++-2244GTYYq\!E	""  %	34Ec3J
KL ,,?+	 &-WW=M%Na
m%NO!2	
 &-.
 { <eT" ". &Os   'S;A?S >S, S)c                 L   t        j                  d      }|j                  ddd      }	|	j                  | dddd	       |	j                  |d
ddd	       |	j	                  d       |	j                  d       |	j                  d       |	j                          |	j                  dd       |j                  ddd      }
|
j                  |dddd	       |
j                  |d
ddd	       |
j	                  d       |
j                  d       |
j                  d       |
j                          |
j                  dd       |j                  ddd      }|D cg c]  }|d   	 }}t        j                  t        |      dz         }|j                  |||gz   dgt        |      z  dgz         }|j                  t        j                  |      ddd       |j                  |       |j!                  t#        t        |            D cg c]  }d| 	 c}dgz          |j                  d       |j                  d       |j%                  dd g       |j                  ddd!      }t        |j&                        }t#        |      D ]%  }|j&                  D cg c]  }|j(                   }}' t        j*                  |      }|j-                  |j.                  d"d#d$d%      }|j	                  d       |j                  d&       |j                  d'       |j1                  t#        t        |d(                      |j3                  t#        |      D cg c]  }t#        |dz   |      D ]  }d)| d*| d+ ! c}}       t        j4                  ||,       |j                  ddd-      }g d.}t7        |j&                        D ]<  \  }}|j(                  }t        |      d(kD  s!|j                  |||   d| d/d0       > |j	                  d1       |j                  d2       |j                  d3       |j                          |j                  dd       |j                  ddd4      }t        |j&                  d(   j(                        d5kD  rt        j*                  |j&                  d(   j(                        }t        j8                  j9                  ||j                         z
        }t        j8                  j;                  t        |            }t        j<                  |      }|j                  |d6t        |      dz   |d6t        |      dz   dd7       |j	                  d8       |j                  d9       |j                  d:       |j                  dd       |j                  ddd;      }g } |j&                  D ]-  }|j>                  jA                         }!| jC                  |!       / t        j*                  |       } t#        | jD                  d         D ]$  }|j                  | d6d6|f   dd<|dz    d=       & |j	                  d>       |j                  d?       |j                  d@       |j                          |j                  dd       |j                  dddA      }"t7        |j&                        D ]x  \  }}|jF                  }#t        |#      d(kD  s!t        |#      d5kD  s0t        jH                  |#t        jJ                  d5      d5z  dBC      }$|"j                  |$||   d| d/D       z |"j	                  d1       |"j                  dE       |"j                  dF       |"j                          |"j                  dd       |j                  dddG      }%dHgt        |jL                        z  }&|&r1|%jO                  |jL                  D 'cg c]  }'|'dI   	 c}'dJdKd/dLM       |%j	                  dN       |%j                  dO       |%j                  dP       |%j                  dd       t        jP                          t        jR                  dQdRdST       t        jT                          tW        dU       y6c c}w c c}w c c}w c c}}w c c}'w )Vz/Generate comprehensive visualization of results)      )figsizer/  r   zb-zResonant (3 AIs)r   o)label	linewidthmarkerzr--StandardsEpochLosszTraining Loss ComparisonTr   )alphaAccuracyzTraining Accuracy Comparisonr	  bluered)colorz--r-   )r   rl  	linestylerh  zAI-zTest AccuracyzFinal Test Accuracyg?r      autoRdYlGnr   )aspectcmapvminvmaxz
Agent PairzPhase Coherence Evolutionr   (,))ax   )rj  rk  greenorangepurpler   )rl  ra  rh  rb  zTraining Stepu   Phase φzAgent Phase Evolution   r   N)rb  	Frequency	MagnitudezFFT of Agent Phase Signal   zLayer )rc  ra  rb  AgentzPhase CoherencezLayer Phase Coherence per Agent   valid)mode)rl  ra  rh  zGradient MagnitudezGradient Evolution (Smoothed)	   r   r4      r|  black)binsrl  rh  	edgecolorzResonance StrengthCountzResonance Events Distributionzresonant_mnist_results.png   tight)dpibbox_inchesu8   
✅ Visualization saved as 'resonant_mnist_results.png'),pltfigureadd_subplotplot
set_xlabel
set_ylabel	set_titlelegendgridr   aranger   baraxhlinern   
set_xticksset_xticklabelsrY   set_ylimr   r!   r  imshowT
set_yticksset_yticklabelscolorbarr   r  r  rz   r   r   r[   shaper    convolveonesr   histtight_layoutsavefigshowr@  )(rM  resonant_accsrV  standard_accsr<  rL  rS  rZ  figax1ax2ax3rT  resonant_test_accsrd   barsr\   ax4r   aphasescoherence_arrayimr^   ax5colorsr  ax6r  r  r  ax7layer_coherences
coherencesax8gradsgrads_smoothax9resonance_typeses(                                           r$   rH  rH    s|    **X
&C //!Q
"CHH_d*<RUHVHH_e:3HONN7NN6MM,-JJLHHTH //!Q
"CHH]D(:aPSHTHH]EqHMNN7NN:MM01JJLHHTH //!Q
"C1ABA!J-BB
		#()A-.A771(,=+>> #&8"99UGC  EDKK"'',-VtSVKWNN1E#6H2I,JKq3qcKzlZ[NN?#MM'(LL#s //!Q
"C?))*H8_ C+:+A+ABa!//BBC hh01O	O%%f8"ST	UBNN7NN< MM-.NN5_Q/012uX]!aPQcS[H\]11QCq1]]^LL //!Q
"C9Fo445 W5$$v;?HHV6!9c!ISTUHVW NN?#NN:MM)*JJLHHTH //!Q
"C
?!!!$223b8/003AAB66::fv{{}45s6{+FF8$	~E
A&	2D3y>13D(EtWXY{#{#12S! //!Q
"C '' ,[[668

+, xx 01#))!,- X!!Q$'VAaC5>UVWXNN7NN$%MM34JJLHHTH //!Q
"Co445 T5&&u:>5zB!{{5"''"+b.wOVAYA3isST NN?#NN'(MM12JJLHHTH //!Q
"C()C0P0P,QQO)I)IJA!J-Jw 	 	HNN'(NN7MM12HHTHKK,#7KHHJ	
EFG C L C ^@ Ks   b
bb$b
"b!__main__)rI  r   r4  r6  zEXPERIMENT SUMMARYu   
📊 RESONANT SYSTEM (3 AIs):z   Final Training Accuracy: r=  r:  r   r8  z   Final Test Accuracy: r;  z   Final Loss: r9  u   
📊 STANDARD NETWORK:r>  d   
u   ✅u   ⚠️z Test Accuracy Difference: z+.2f%u   
🧠 KEY OBSERVATIONS:zL   - Resonant training uses PHASE ALIGNMENT instead of pure gradient descentzC   - Multiple AIs share gradient information via RESONANCE COUPLINGz-   - Phase coherence tracked via FFT analysisz2   - Supergain effect may emerge when phases align)r   r/  r   )+rC   r   torch.nnrK   torch.nn.functional
functionalrb   torch.optimr   torch.utils.datar   r   torchvisionr   r   numpyr   matplotlib.pyplotpyplotr  matplotlib.animationr   IPython.displayr   warningsfilterwarningsmanual_seedr   seedr@  r   ModulerE   r   r   r   r   r*  r[  rH  r@   r  improvementr   r&   r$   <module>r     sp        / ,   .       !   "  		r  h 5 6 h#@ #@LORYY Od*D")) *DbK? K?\O Ol#- #-T")) .~JGL zb1EG	/	
	(O	+-	()<\)J2)Ns(S
TU	$WZ%8%I#$N
OP	OGJ/9"=cB
CD	$&	()<\)J2)Ns(S
TU	$WZ%8%I#$N
OP	OGJ/9"=cB
CD:&7'*:Mo:^^beeK	Bq(uh77RS^_cRdde
fg	
$%	
XY	
OP	
9:	
>?1 r&   