+
    ~j                         ^ RI t ^ RIt^ RIHtHt ^ RIt^RIHt  ! R R]4      tR R lt	 ! R R	]4      t
 ! R
 R]4      t ! R R]4      tR R ltR R ltR R ltR# )    N)ABCabstractmethod)loggerc                   \   a  ] tR t^
t o ]V 3R lR l4       t]RV 3R lR ll4       tRtV tR# )
CPUMonitorc                    < V ^8  d   QhRS[ /#    returnfloat)format__classdict__s   "p/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/utils/hw/cpu.py__annotate__CPUMonitor.__annotate__   s      5     c                    R# )z_Number of logical CPUs.

Returns a float to allow for fractional CPUs (in the case of cgroups).N selfs   &r   	cpu_countCPUMonitor.cpu_count   s    
 	r   c                &   < V ^8  d   QhRS[ RS[ /# r
   intervalr   r   )r   r   s   "r   r   r      s      E E r   c                    R# )z$CPU usage percentage between 0 and 1Nr   r   r   s   &&r   cpu_percentCPUMonitor.cpu_percent   s     	r   r   Ng      ?)	__name__
__module____qualname____firstlineno__r   r   r   __static_attributes____classdictcell__r   s   @r   r   r   
   s0         r   r   c                2    V ^8  d   QhR\         R,          /# r
   r   Nr   )r   s   "r   r   r      s      UT\ r   c                       R \         P                  9   d!   \        \         P                  R ,          4      #  R#   \         d    \        P
                  ! RRR7        R# i ; i)NUM_CPUSz)Failed to parse NUM_CPUS from environmentT)exc_infoN)osenvironr   
ValueErrorr   warningr   r   r   _cpu_count_from_envr2      sW    S#J/00 $   SBTRSs   4: #A! A!c                   H   a  ] tR t^!t o V 3R lR ltRV 3R lR lltRtV tR# )DefaultCPUMonitorc                    < V ^8  d   QhRS[ /# r	   r   )r   r   s   "r   r   DefaultCPUMonitor.__annotate__"   s     B B5 Br   c                d    \        4       ;'       g     \        P                  ! 4       ;'       g    R # )      ?)r2   psutilr   r   s   &r   r   DefaultCPUMonitor.cpu_count"   s$    "$AA(8(8(:AAcAr   c                &   < V ^8  d   QhRS[ RS[ /# r   r   )r   r   s   "r   r   r6   %   s     4 4E 4E 4r   c                <    \         P                  ! V4      R ,          # )g      Y@)r9   r   r   s   &&r   r   DefaultCPUMonitor.cpu_percent%   s    !!(+e33r   r   Nr!   )r"   r#   r$   r%   r   r   r&   r'   r(   s   @r   r4   r4   !   s      B B4 4 4r   r4   c                   l   a  ] tR t^)t o V 3R lR ltRV 3R lR lltV 3R lR ltV 3R lR ltR	tV t	R
# )CGroupV2CPUMonitorc                    < V ^8  d   QhRS[ /# r	   r   )r   r   s   "r   r   CGroupV2CPUMonitor.__annotate__*   s     ) )5 )r   c                    \        4       pVe   V# V P                  4       w  r#VR8X  d    \        P                  ! 4       ;'       g    R# R\	        V4      ,          V,          # )Nmaxr8   )r2   _read_cpu_maxr9   r   intr   env_cpusquotaperiods   &   r   r   CGroupV2CPUMonitor.cpu_count*   sY    
 '(O**,E>##%,,,SZ&((r   c                &   < V ^8  d   QhRS[ RS[ /# r   r   )r   r   s   "r   r   rA   7   s     ) )E )E )r   c                    V P                  4       p\        P                  ! V4       V P                  4       pW2,
          pVR ,          pV P                  4       pWQV,          ,          p\	        V^4      # )i@B )_read_cpu_usagetimesleepr   min)r   r   cpu_usage_startcpu_usage_endcpu_usage_diffcpu_usage_secondsnum_cpuscpu_usage_percents   &&      r   r   CGroupV2CPUMonitor.cpu_percent7   sg    ..0

8,,.&8 +Y6>>#-H1DE$a((r   c                6   < V ^8  d   QhRS[ S[S[3,          /# r	   )tuplestrrE   )r   r   s   "r   r   rA   E   s     	 	uS#X 	r   c                ^    \        R 4      ;_uu_ 4       pVP                  4       P                  4       P                  4       pRRR4       X^ ,          p\	        V4      ^8  d   \        V^,          4      MRpW43#   + '       g   i     L@; i  \        \        \        3 d
    RpRp Y43# i ; i)z/sys/fs/cgroup/cpu.maxNi rC   )	openreadstripsplitlenrE   FileNotFoundError
IndexErrorr0   )r   fdatarH   rI   s   &    r   rD    CGroupV2CPUMonitor._read_cpu_maxE   s    	.//1vvx~~'--/ 0GE%(Y]Sa\F } 0/ ":z: 	EF}	s(   B -A:5B :B
	B B,+B,c                    < V ^8  d   QhRS[ /# r	   rE   )r   r   s   "r   r   rA   P   s     7 7 7r   c                   \        R 4      ;_uu_ 4       pV FF  pVP                  R4      '       g   K  \        VP                  4       ^,          4      u uuRRR4       # 	  RRR4       \	        R4      h  + '       g   i     L; i)/sys/fs/cgroup/cpu.stat
usage_usecNzFailed to read CPU usage)r\   
startswithrE   r_   RuntimeError)r   rc   lines   &  r   rM   "CGroupV2CPUMonitor._read_cpu_usageP   s`    +,,??<00tzz|A// -, - 566	 -,s   A4!A4A44B	r   Nr!   )
r"   r#   r$   r%   r   r   rD   rM   r&   r'   r(   s   @r   r?   r?   )   s-     ) )) )	 	7 7r   r?   c                   ~   a  ] tR t^Xt o V 3R lR ltRV 3R lR lltV 3R lR ltV 3R lR ltV 3R	 lR
 ltRt	V t
R# )CGroupV1CPUMonitorc                    < V ^8  d   QhRS[ /# r	   r   )r   r   s   "r   r   CGroupV1CPUMonitor.__annotate__Y   s     . .5 .r   c                    \        4       pVe   V# V P                  4       w  r#Ve   V^ 8  g   Ve   V^ 8:  d   R# \        RV,          V,          R4      # )Ng       @r8   )r2   _read_cfs_quota_and_periodrC   rF   s   &   r   r   CGroupV1CPUMonitor.cpu_countY   sW     '(O779=EAI6Q; 3;'--r   c                &   < V ^8  d   QhRS[ RS[ /# r   r   )r   r   s   "r   r   rr   f   s     	+ 	+E 	+E 	+r   c                    V P                  4       p\        P                  ! V4       V P                  4       pW2,
          pVR ,          pV P                  4       pWQV,          ,          p\	        \        VR4      R4      # )i ʚ;r8   g        )_read_cpuacct_usagerN   rO   r   rC   rP   )r   r   usage_start	usage_endusage_diff_nsusage_secondsrU   percents   &&      r   r   CGroupV1CPUMonitor.cpu_percentf   si    ..0

8,,.	!/%5>>#h#673w$c**r   c                R   < V ^8  d   QhRS[ S[R,          S[R,          3,          /# r*   )rY   rE   )r   r   s   "r   r   rr   q   s&     	 	E#*cDj2H,I 	r   c                X    R .pR.pV P                  V4      pV P                  V4      pW43# )#/sys/fs/cgroup/cpu/cpu.cfs_quota_us$/sys/fs/cgroup/cpu/cpu.cfs_period_us)_read_first_int)r   quota_path_candidatesperiod_path_candidatesrH   rI   s   &    r   rt   -CGroupV1CPUMonitor._read_cfs_quota_and_periodq   sF    1!
 3"
 $$%:;%%&<=}r   c                    < V ^8  d   QhRS[ /# r	   rg   )r   r   s   "r   r   rr   |   s      S r   c                L    R .pV P                  V4      pVf   \        R4      hV# )$/sys/fs/cgroup/cpuacct/cpuacct.usagez*Failed to read cpuacct.usage for cgroup v1)r   rl   )r   
candidatesvalues   &  r   rx   &CGroupV1CPUMonitor._read_cpuacct_usage|   s4    2

 $$Z0=KLLr   c                D   < V ^8  d   QhRS[ S[,          RS[R,          /# )r
   pathsr   N)listrZ   rE   )r   r   s   "r   r   rr      s#     	 	T#Y 	3: 	r   c                
   V FI  p \        V4      ;_uu_ 4       p\        VP                  4       P                  4       4      uuR R R 4       u # 	  R #   + '       g   i     K`  ; i  \         d     Kq  \
         d     K~  i ; iN)r\   rE   r]   r^   ra   r0   )r   r   prc   s   &&  r   r   "CGroupV1CPUMonitor._read_first_int   sc    A!WWqvvx~~/0 W   WW$  s:   A&'A
A&A#A&#A&&B4B=BBr   Nr!   )r"   r#   r$   r%   r   r   rt   rx   r   r&   r'   r(   s   @r   rp   rp   X   s7     . .	+ 	+	 	 	 	r   rp   c                $    V ^8  d   QhR\         /# r	   )r   )r   s   "r   r   r      s       r   c                  ~    \        4       '       d   \        4       # \        4       '       d   \        4       # \	        4       # r   )_is_cgroup_v2r?   _is_cgroup_v1rp   r4   r   r   r   get_cpu_monitorr      s+    !##!##r   c                $    V ^8  d   QhR\         /# r	   bool)r   s   "r   r   r      s     5 5t 5r   c                  @    \         P                  P                  R 4      # )ri   r.   pathexistsr   r   r   r   r      s    77>>344r   c                $    V ^8  d   QhR\         /# r	   r   )r   s   "r   r   r      s     6 6t 6r   c                  r    . ROp \         ;QJ d    R V  4       F  '       g   K   R# 	  R# ! R V  4       4      # )r   c              3   `   "   T F$  p\         P                  P                  V4      x  K&  	  R # 5ir   r   ).0r   s   & r   	<genexpr> _is_cgroup_v1.<locals>.<genexpr>   s      5*Qrww~~a  *s   ,.TF)r   r   r   )any)r   s    r   r   r      s4    J
 35*53353535*555r   )r.   rN   abcr   r   r9   logr   r   r2   r4   r?   rp   r   r   r   r   r   r   <module>r      sZ    	  #   4
 4,7 ,7^6 6r56r   