
    :Lii)              
           S SK r S SKrS SKrS SKrS SKrS\S\4S jrS\	4S jr
SS\	S\\	\\\\	4      4   4S jjrSS\S	\S
\SS4S jjrg)    Nnreturnc                 J    S H  nU S:  a
  U S SU 3s  $ U S-  n M     U S S3$ )N)BKBMBGBTB   z.1f z PB )r   units     aC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\Proyectos\Cabanna\modules\diagnostics.py
_bytes_fmtr   	   s?    -t8WAdV$$	T	 . WC=    c                      SS K n U R                  U R                  5      R                  n[        R
                  R                  S5      (       a  [        US-  5      $ [        U5      $ ! [         a     Of = f SS K	n[        UR                  [        R                  " 5       5      R                  5       R                  5      $ ! [         a     gf = f)Nr   linuxr   )resource	getrusageRUSAGE_SELF	ru_maxrsssysplatform
startswithint	ExceptionpsutilProcessosgetpidmemory_inforss)r   rr   s      r   _get_rss_bytesr%      s    	x334>><<""7++q4x= 1v 6>>"))+.::<@@AA s+   AA( 
A( (
A54A59AC 
CClimit_itemsc                     SSK Jn  Sn/ n[        [        R                  R                  5       5       H^  n[        R                  R                  U5      n U" U5      nUR                  [        U5      [        U5      45        U[        U5      -  nM`     UR                  S SS9  X#SU  4$ ! [         a    Sn N\f = f! [         a    S/ 4s $ f = f)uK   
Estima tamaño de objetos en session_state (no perfecto, pero muy útil).
r   )	getsizeofc                     U S   $ )N   r   )xs    r   <lambda>+_session_state_size_bytes.<locals>.<lambda>4   s    1r   T)keyreverseN)r   r(   liststsession_statekeysgetr   appendstrr   sort)r&   r(   totalitemskvszs          r   _session_state_size_bytesr=   $   s    !b&&++-.A  $$Q'Aq\ LL#a&#b'*+SWE / 	

~t
4L[)))    "us7   AB> B,AB> ,B;8B> :B;;B> >CCscopecompactpositionc                 l   SU  SU 3n[        5       n[        5       u  pV[        R                  " SU (       a  SU -   OS 3U(       + S9   [        R                  " S5      u  pxn	U   [        R
                  " SUS	:  a  [        U5      OS
5        SSS5        U   [        R
                  " S[        U5      5        SSS5        U	   [        R
                  " S[        [        R                  " 5       5      5        SSS5        [        R                  " S5        U(       aM  [        R                  " S5        [        R                  " U V
Vs/ s H  u  pU
[        U5      S.PM     snn
SSS9  [        R                  " SS/5      u  pU   [        R                  " SU S3SS9(       a   [        R                  R                  5         [#        [        R$                  R'                  5       5       HW  n
U
R)                  S5      (       d  U
R+                  S5      (       d  SU
;   d  M7  [        R$                  R-                  U
S5        MY     [        R.                  " 5         [        R0                  " S5        [        R2                  " 5         SSS5        U   [        R4                  " S5        SSS5        SSS5        g! , (       d  f       GN0= f! , (       d  f       GN= f! , (       d  f       GN= fs  snn
f ! [          a     GN=f = f! , (       d  f       N= f! , (       d  f       Nu= f! , (       d  f       g= f)u`   
Llamar al INICIO de cada sección.
Muestra RAM, tamaño session_state y un botón de limpieza.
zhealth||u   🩺 Health Monitor u   —  )expanded   zRAM proceso (RSS)r   NANzSession state aproxz	GC countsux   Esto es diagnóstico. RSS es la RAM real del proceso. Session state es aproximado pero útil para detectar acumulación.z)**Top objetos en session_state (aprox):**)r.   sizeT)
hide_indexuse_container_widthr*      u   🧹 Limpiar cachesz
|btn_clearstretch)r.   widthrec__dfdf_u   Caches limpiados. Re-run…u[   Tip: si RSS sube con cada navegación/filtro, estás acumulando objetos (caches o figuras).)r%   r=   r1   expandercolumnsmetricr   r6   gc	get_countcaptionmarkdown	dataframebutton
cache_dataclearr   r0   r2   r3   r   endswithpopcollectsuccessrerunwrite)r>   r?   r@   key_baser#   ss_totalss_topco1co2co3r:   r<   colAcolBs                 r   show_health_panelri   ;   s>   
 q
+H

C02H	+Ve^2+NO^eZe	f

1#II)cAg:c?4P II+Z-AB IIk3r||~#67  	

  N  	OKKCDLLAGHJrN3H$( ZZA'
yy.xj
4KS\]MM'') b..3356A||F++qzz%/@/@EQJ((,,Q5 7 



89
  HHrs G 
g	fSSS I !  T TG 
g	fs   L%$)J6
L%!K8
L%4K6AL%K, $L%L$K2AL A$L
L%L%L%6
K	 L%
K	L%
K)	$L%2
L <L?L  L
L	L%
L"	L%%
L3)2   )globalTtop)r    r   rS   time	streamlitr1   floatr6   r   r   r%   tupler0   r=   boolri   r   r   r   <module>rr      s    	 
 	  % C  (3 c4cSVhCX>X8Y .-tS -td -tS -t]a -tr   