
    -i                         d dl Zd dlmZ d dlmZ d dlmZ  e       Z	dZ
dZ ee
      ZddZddZd Zd	 Zed
k(  r e        yy)    N)KMeans)MLPClassifierd   )
n_clustersc           	      $   d|z  }|t        |d      z   }t        j                  t        j                  d||z  z
  dd            }| |z  }d}t        j                  ||z  dt        j                  d|z        z  z         }d	t        j                  d
|z        z  }	dt        j                  d|z  dt        j                  d|z        z  z         z  }
t        j
                  j                  t        |dz        dz         dt        j
                  j                         z  ddt        j                  d|z        z  z   z  }dt        j                  d|z        z  t        j                  d|z        z  }d|z  d|	z  z   d|
z  z   d|z  z   |z   }||fS )a^  
    Black hole simulation with independent time dynamics.
    
    Parameters:
    - t: External time (prediction space)
    - r: Distance from event horizon (normalized)
    - M: Black hole mass (normalized)
    
    Returns:
    - signal: Complex oscillation independent of external time
    - internal_t: Warped internal time (time dilation)
       g&.>   g              ?g333333?g      ?ffffff?g?g      @g?g?g333333?  l        皙?gg333333?g333333?)
maxnpsqrtclipsinrandomseedintrandnexp)trMrsradiusgamma
internal_taccretion_freq	accretionqpo_highqpo_lowhawkingringdownsignals                 bh_minimax.pyblack_hole_functionr'      s    
QB #a,F GGBGGAVOS#67E UJ N~
2S266#
BR;S5SSTI RVVC*,--HBFF3+cBFF3;K4L.LLMMG IINN3zD()E12BIIOO%%S266#
:J3K-K)KLG RVVEJ.//"&&z9I2JJH 	ih	g	 	x	 			  :    c                    g }g }d}d}t        |       D ]:  }t        |||      \  }}	|j                  |       |j                  |	       ||z  }< t        j                  |t
              dddf   }t        j                  |      }dt        j                  j                  | d      z  }
t        j                  ||
g      }||fS )zp
    Generate time series from black hole function.
    External time steps don't align with internal time.
    r   r   r   r   )dtypeN	   )
ranger'   appendr   asarrayfloatarrayr   r   hstack)NNr   r   seriesinternal_times
t_externaldt_r%   
t_internalnoises              r&   generate_black_hole_seriesr;   P   s    
 FNJ	B2Y 0qAF
fj) 	b
 ZZe,QW5FXXn-N "))//"a((EYY'F>!!r(   c           
         g }|d   dddf   }d}d}	t        |       D ]  }
t        |dd      \  }}
|j                  |       ||	z  }t        j                  |gt        d      D 
cg c]#  }
dt        j
                  j                         z  % c}
z         dddf   } t        j                  |      j                         S c c}
w )	zx
    ODE-CCT Prediction: System oscillates independently.
    Prediction must track warped time, not external time.
    Ng      $@r         ?r
   r*   r,   )r-   r'   r.   r   r1   r   r   squeeze)stepsgfr   r4   r3   outxt_pred_externalr7   r8   r%   s               r&   predictrF   n   s    
 Cr
47A O	B5\ 	V (3#F	

62 HHfX%( KQryy'8!8 KKLTSTWU	V 88C=  "" !Ls   &(Cc                  <   t        t        dd      \  } }t        dt        dz          t        d|d   dd	|d
   d       t        d|d
   t        dz  z  dd       t        j	                  |        t        j
                  }d}	 g }g }t        j                  dt              D ]3  }|j                  | |dz
  |        |j                  | |dz
  |dz
          5 t        j                  |      j                  d      }t        j                  |      j                  d      }t        j                  |      }	t        j                  ||	t        t                     ||t        j                  |         z
  }
t        j                   |
dz        }t        d| d|d       |dk\  rn|dz  }(t        j"                  ddd      }|D cg c]  }t%        |dd      d    }}t        dt        t        || t              }t'        j(                  ddd      \  }}|d   j+                  t        j                  t              dz  |dd       |d   j+                  t        j                  t              dz  t        j                  t              dz  ddd        |d   j-                  d!       |d   j/                  d"       |d   j1                  d#       |d   j3                          |d   j+                  | d d df   d$d%       |d   j-                  d&       |d   j/                  d'       |d   j1                  d(       |d   j+                  ||d)d*d+,       |d   j+                  |t5        |j6                        dkD  r|j9                  d-      n|d.d/d        |d   j-                  d0       |d   j/                  d"       |d   j1                  d(       |d   j3                          t'        j:                          t'        j<                          y c c}w )1Nr>   r
   r*   zExternal time range: 0 to r   zInternal time range: r   z.4fz to r=   zTime dilation factor: z (warped by gravity)r   r	   )classeszEpoch z: MSE = z.6fr   
   2   i     )      )figsizezInternal Time (Warped)red)labelcolorzExternal Time (Linear)bluez--)rP   rQ   	linestylez(Time Dilation: External vs Internal TimezExternal Timez
Time ValuezBlack Hole Signalpurplez&Black Hole Oscillation (Training Data)zSample IndexzSignal ValuezTrue (Internal Oscillation)greenr   )rP   rQ   alpha)axiszODE-CCT Predictionorangez=Prediction: External Time vs Independent Internal Oscillation)r;   r3   printrA   fitcluster_centers_r   aranger.   r1   r?   rF   rB   partial_fitr-   Nsumlinspacer'   pltsubplotsplot	set_title
set_xlabel
set_ylabellegendlenshapemeantight_layoutshow)r4   r   	M_centersiXytidxyt_X_perrmsefuture_externalr   true_signal
predictionfigaxess                     r&   mainr|      s   3B#EFJ	&rCxj
12	!*Q-!4DB8L
MN	":b>R#X#>s"CCW
XY EE&M""I 	
A
99Q# 	.CIIfS1WS)*HHVC!GC!G,-	. hhrl""1%XXa[  #IIcN	b!U1X.Iaiim,,ffS!Vnqc#c+,9	Q) 6 kk"b#.ODSTq&qC37:TKT aIvr:J Q73IC 	GLL2$j8PX]L^GLL2$biimc&9AYagswLxG@AG'G|$GNN 	GLL1%8LIG>?G~&G~& 	GLL+5RZailLmGLL#&z'7'7#81#<
Q*"   	GUVG'G~&GNNHHJK Us   P__main__)r
   r
   )r>   r
   )numpyr   sklearn.clusterr   sklearn.neural_networkr   matplotlib.pyplotpyplotra   rB   r^   r3   rA   r'   r;   rF   r|   __name__ r(   r&   <module>r      sW     " 0 O
a9x"<#<Nb zF r(   