
    ig                         d Z ddlZddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZmZ ddlZddlZe G d d             Z G d d	      Zy)
z
CorvOS - Bio-Link Mass Synchronization Module v1.0
Sincronizacao de batimentos cardiacos com pulso de 40Hz
Synapse-k | Arkhe(n) | Rio de Janeiro
    N)	dataclassfield)ListDictTupleOptional)datetime	timedeltac                   T    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   y)	ResidentBioStateresident_idbaseline_hr
current_hrhrv	coherencesync_status
last_pulseN)__name__
__module____qualname__str__annotations__floatr	        &/home/workspace/corvos_sys/bio_link.pyr   r      s+    	Jr   r   c                   V    e Zd ZdZdZdZd ZdedefdZ	ded	efd
Z
d	efdZd	efdZy)BioLinkPulseEngine      D@g333333?2   c                 J    i | _         g | _        i | _        d| _        d| _        y )N        r   )	residentspulse_historysync_coherence_mapglobal_coherencepulse_count)selfs    r   __init__zBioLinkPulseEngine.__init__   s)    68-/46'*r   r   r   c           
      f    t        |||dddt        j                               | j                  |<   y )Nr   r"   DRIFTING)r   r   r   r   r   r   r   )r   r	   nowr#   )r(   r   r   s      r   register_residentz$BioLinkPulseEngine.register_resident"   s0    &6##""||~'
{#r   hrreturnc                     d|z  }t        j                         j                         |z  |z  }dt        j                  z  |z  S )Ng      N@   )r	   r,   	timestampnppi)r(   r.   beat_intervalphases       r   compute_phase_alignmentz*BioLinkPulseEngine.compute_phase_alignment-   s<    r	))+m;}L255y5  r   c                   K   | xj                   dz  c_         t        j                         }| j                  j	                  |       t        | j                        dkD  r| j                  dd  | _        d\  }}}| j                  j                         D ]V  \  }}| j                  |j                        }dt        j                  z  | j                   d| j                  z  z  z  d| j                  z  z  }t        ||z
        }	|	| j                  dz  dz  t        j                  z  k  r+d|_        t!        d|j"                  dz         |_        |dz  }nZ|	d	k  r+d
|_        t%        d|j"                  dz
        |_        |dz  }n*d|_        t%        d|j"                  dz
        |_        |dz  }t!        dt%        d|j                  t'        j(                  dd	      z               |_	        Y t        | j                        xs d}
||
z  | _        | j                   | j                  |||| j*                  |j-                         dS w)N   i  i)r   r   r   r1   SYNCHRONIZEDg      ?g?g      ?r+   r"   g{Gz?LOSTg?x   r    g      )r'   frequency_hzaligneddriftinglostr&   r2   )r'   r	   r,   r$   appendlenr#   itemsr7   r   r3   r4   FREQUENCY_HZabsSYNC_WINDOW_MSr   minr   maxrandomuniformr&   	isoformat)r(   r,   r>   r?   r@   ridstater6   pulse_phase
phase_difftotals              r   
emit_pulsezBioLinkPulseEngine.emit_pulse2   s    Alln!!#&t!!"T)!%!3!3EF!;D")4....0 	_JC001A1ABEbee)t'7'74$BSBS;S'TUY]`d`q`qYqrKU[01JD//$6:RUUBB$2!"%c5??T+A"B1c!$.!"%c5??T+A"BA$*!"%c5??S+@"A	"3B0@0@6>>RVX[C\0\(]^E!	_" DNN#(q '%++ --  $ 5 5
 	
s   IIc                    | j                   sdddS dddd}g }| j                   j                         D ]I  }|j                  |j                  d      dz   ||j                  <   |j	                  |j
                         K t        | j                         ||rt        t        j                  |            nd| j                  | j                  dS )Nr   r"   )total_residentsr&   )r:   r+   r;   r9   )rS   by_sync_statusr&   pulses_emittedtarget_frequency_hz)r#   valuesgetr   rA   r   rB   r   r3   meanr'   rD   )r(   	by_status
coherencesss       r   get_sync_reportz"BioLinkPulseEngine.get_sync_reportV   s    ~~'(cBB%&AqA	
&&( 	+A'0}}Q]]A'F'JIamm$akk*	+  #4>>2'>Hbggj&9 :c"..#'#4#4
 	
r   N)r   r   r   rD   COHERENCE_TARGETrF   r)   r   r   r-   r7   r   rQ   r]   r   r   r   r   r      sV    LN	
S 	
u 	
!% !E !
"
$ "
H
 
r   r   )__doc__numpyr3   dataclassesr   r   typingr   r   r   r   r	   r
   asynciorI   r   r   r   r   r   <module>rd      sA   
  ( . . ( 
  N
 N
r   