
    2h3                     b    S r SSKrSSKJr  SSKJr  SSKJrJr   " S S\R                  5      r
g)z8Tier 1: 3-layer Fast ESN System with Resonance Detection    N)PhiESNLayer)	FIBONACCIINV_PHIc                   L   ^  \ rS rSrSU 4S jjrS	S jrS rS
S jrS rSr	U =r
$ )Tier1FastSystem   c                 
  > [         TU ]  5         X0l        / SQU l        [        R
                  " [        U[        S   USUS9[        U[        S   USUS9[        U[        S   USUS9/5      U l        U R                  U5        g )	N)TrinityNyxAva         ?)	leak_ratedevice   g?r   g333333?)
super__init__r   layer_namesnn
ModuleListr   r   layersto)self
input_sizeoutput_sizer   	__class__s       2/home/james-whalen/eden_hybrid_phi/tier1_system.pyr   Tier1FastSystem.__init__   s|    4mm
IaL+U[\
IaL+U[\
IaL+U[\%
  	    c                    / n/ nU R                    H/  nU" U5      u  pgUR                  U5        UR                  U5        M1     [        R                  " S[        [        S-  /U R
                  S9nXR                  5       -  n[        R                  " USS9n	[        R                  " XR                  SSS5      -  SS9n
UUU
S.nU(       a  U R                  U5      nXS	'   U$ )
Nr      )r   r   )dim   )outputsstates
prediction	resonance)
r   appendtorchtensorr   r   sumstackviewcompute_resonance)r   xreturn_resonancer%   r&   layeroutputstateweightsoutputs_stackedweighted_outputresultr(   s                r   forwardTier1FastSystem.forward   s    [[E!!HMFNN6"MM%  !
 ,,Wgqj9$++NKKM)++g15))ll2q!44
 )
 ..w7I"+;r   c                    [        U5      S:  a  [        R                  " S5      $ / n[        [        U5      5       H  n[        US-   [        U5      5       H  nX   R	                  5       nX   R	                  5       n[        U5      S:  d  M8  UR                  5       nUR                  5       nXW-
  Xh-
  -  R                  5       n	UR                  5       S-   n
UR                  5       S-   nXU-  -  nUR                  U5        M     M     [        U5      S:X  a  [        R                  " S5      $ [        R                  " U5      R                  5       nUS-   S-  $ )Nr!   r   r$   g:0yE>r   )	lenr*   r+   rangeflattenmeanstdr)   r-   )r   r%   correlationsijout_iout_jmean_imean_jcovstd_istd_jcorrr(   s                 r   r/   !Tier1FastSystem.compute_resonance4   s$   w<!<<$$s7|$A1Q3G-
**,
**,u:>"ZZ\F"ZZ\F!Nu~>DDFC!IIK$.E!IIK$.E%-0D ''- . %  |!<<$$KK-224	A""r   c                 L    U R                    H  nUR                  U5        M     g )N)r   reset_state)r   
batch_sizer2   s      r   reset_all_states Tier1FastSystem.reset_all_statesO   s    [[Ej) !r   c                 `    U R                    Vs/ s H  oR                  5       PM     sn$ s  snf )z Get spectral radii of all layers)r   get_spectral_radius)r   r2   s     r   get_all_spectral_radii&Tier1FastSystem.get_all_spectral_radiiS   s%    9=E))+EEEs   +)r   r   r   )r$   r$   cpu)T)r$   )__name__
__module____qualname____firstlineno__r   r9   r/   rP   rT   __static_attributes____classcell__)r   s   @r   r   r      s#    <#6*F Fr   r   )__doc__r*   torch.nnr   phi_esn_layerr   phi_constantsr   r   Moduler    r   r   <module>rc      s(    >   % ,NFbii NFr   