
    Rio                    T   d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlZddlmZ dd	lmZ dd
lmZ er+ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ  G d de      Z ej>                  e       Z! G d de      Z"ddZ#ddZ$ddZ%ddZ&d dZ'd!dZ(d"dZ)d#dZ*y)$z#Measure document reading durations.    )annotationsN)islice)
itemgetter)NoneType)TYPE_CHECKING)Domain)__)logging)
CollectionSet)Path)	TypedDict)nodes)Sphinxc                      e Zd ZU ded<   y)_DurationDomainDatadict[str, float]reading_durationsN)__name__
__module____qualname____annotations__     K/home/agent/.friday_env/lib/python3.12/site-packages/sphinx/ext/duration.pyr   r      s    ++r   r   c                  Z    e Zd ZdZdZed
d       ZddZddZddZ	ddZ
	 	 	 	 	 	 ddZy	)DurationDomainz,A domain for durations of Sphinx processing.durationc                :    | j                   j                  di       S Nr   )data
setdefaultselfs    r   r   z DurationDomain.reading_durations&   s    yy##$7<<r   c                ^    || j                   | j                  j                  j                  <   y N)r   envcurrent_documentdocname)r$   r   s     r   note_reading_durationz$DurationDomain.note_reading_duration*   s"    DLtxx88@@Ar   c                r    t         j                  t        d      ||d| j                  j                         y )Nz8Reading duration %.3fs exceeded the duration limit %.3fsr   )typelocation)loggerwarningr	   r'   r)   )r$   r   duration_limits      r   warn_reading_durationz$DurationDomain.warn_reading_duration-   s2    IJXX%% 	 	
r   c                8    | j                   j                          y r&   )r   clearr#   s    r   r3   zDurationDomain.clear6   s    $$&r   c                <    | j                   j                  |d        y r&   )r   pop)r$   r)   s     r   	clear_doczDurationDomain.clear_doc9   s    ""7D1r   c                    |j                  di       }t        |      }|j                         D ]  \  }}||v s|| j                  |<    y r    )get	frozensetitemsr   )r$   docnames	otherdataother_reading_durationsdocnames_setr)   r   s          r   merge_domaindatazDurationDomain.merge_domaindata<   sU     #,--0CR"H *!8!>!>!@ 	;GX,&2:&&w/	;r   N)returnr   )r   floatr@   None)r   rA   r0   rA   r@   rB   )r@   rB   )r)   strr@   rB   )r;   zSet[str]r<   r   r@   rB   )r   r   r   __doc__namepropertyr   r*   r1   r3   r6   r?   r   r   r   r   r   !   sN    6D= =M
'2; ;-@;	;r   r   c                V    | j                   j                  d   }|j                          y)z\Initialize DurationDomain on bootstrap.

    This clears the results of the last build.
    r   N)r'   domainsr3   )appdomains     r   on_builder_initedrK   F   s    
 WW__Z(F
LLNr   c                ^    t        j                         | j                  j                  _        y)z"Start to measure reading duration.N)time	monotonicr'   r(   reading_started_at)rI   r)   contents      r   on_source_readrQ   O   s    26..2BCGG/r   c                $   t        j                         | j                  j                  j                  z
  }| j                  j
                  d   }|j                  |       | j                  j                  }|||kD  r|j                  ||       yyy)zRecord a reading duration.r   N)
rM   rN   r'   r(   rO   rH   r*   configr0   r1   )rI   doctreer   rJ   r0   s        r   on_doctree_readrU   T   sx    ~~#''":":"M"MMHWW__Z(F
  *#&::#<#<N!h&?$$X~> '@!r   c                   | j                   j                  d   }|j                  sy| j                  j                  r#t        |j                  j                                | j                  j                  r*t        |j                  | j                  j                         | j                  j                  x}r$t        |j                  | j                  |z         yy)z.Display duration ranking on the current build.r   N)r'   rH   r   rS   duration_print_total_print_total_durationvaluesduration_print_slowest_print_slowest_durationsduration_n_slowestduration_write_json_write_json_durationsoutdir)rI   errorrJ   
write_jsons       r   on_build_finishedrb   _   s    WW__Z(F## zz&&f66==?@
zz(( $$cjj&C&C	
 ZZ333z3f66

Z8OP 4r   c                   t         j                  d       t         j                  t        d             t        |       }|dk7  rdnd}t	        t        |       d      \  }}t         j                  t        d      ||||       y )N zH====================== total reading duration ==========================   s<   z'Total time reading %d file%s: %dm %.3fs)r.   infor	   lendivmodsum)	durationsn_filesrf   minutessecondss        r   rX   rX   r   sl    
KKO
KK
UV )nG!|Ac)nb1GW
KK
45w7Gr   c                   t        | j                         t        d      d      }|xs t        |      }t	        |t        |            }t
        j                  d       t
        j                  d       t
        j                  t        d             t        ||      D ]%  \  }}t
        j                  t        d      ||       ' t
        j                  d       y )Nre   T)keyreverserd   zH====================== slowest reading durations =======================z%.3fs %s)	sortedr:   r   ri   minr.   rh   r	   r   )rl   	n_slowestsorted_durationsr)   r   s        r   r[   r[      s    ioo/Z]DQ2S!12IIs#345I
KKO
KKO
KK
UV $$4i@ 7BzNHg67 KKOr   c           	         | j                         D ci c]  \  }}|t        |d       } }}|j                  j                  dd       t	        j
                  | ddd      }|j                  |d       y c c}}w )	N   T)parentsexist_okF   )ensure_asciiindent	sort_keyszutf-8)encoding)r:   roundparentmkdirjsondumps
write_text)rl   out_filekvdurations_jsons        r   r^   r^      sn    ,5OO,=>DAqE!QK>I>OO$6ZZ	aSWXN9 ?s   A8c           
        | j                  t               | j                  dt               | j                  dt               | j                  dt
               | j                  dt               | j                  dddt        t        h             | j                  d	ddt        t        h             | j                  d
ddt        t        h             | j                  dddt        t        t        h             | j                  dd dt        t        t        t        h             t        j                  dddS )Nzbuilder-initedzsource-readzdoctree-readzbuild-finishedrW   Trd   )typesrZ   r\      r]   zsphinx-reading-durations.jsonr0   )versionparallel_read_safeparallel_write_safe)
add_domainr   connectrK   rQ   rU   rb   add_config_valuer9   boolintrC   r   rA   sphinx__display_version__)rI   s    r   setupr      s   NN>"KK "34KK~.KK0KK "34/rD6ARS149dVCTU-q"Ise<LM'
h(	   $)UC4J*K  
 --"# r   )rI   r   r@   rB   )rI   r   r)   rC   rP   z	list[str]r@   rB   )rI   r   rT   znodes.documentr@   rB   )rI   r   r`   	Exceptionr@   rB   )rl   zCollection[float]r@   rB   )rl   r   ru   r   r@   rB   )rl   r   r   r   r@   rB   )rI   r   r@   zdict[str, bool | str])+rD   
__future__r   r   rM   	itertoolsr   operatorr   r   r   typingr   r   sphinx.domainsr   sphinx.localer	   sphinx.utilr
   collections.abcr   r   pathlibr   r   docutilsr   sphinx.applicationr   r   	getLoggerr   r.   r   rK   rQ   rU   rb   rX   r[   r^   r   r   r   r   <module>r      s    ) "         !  / ),i , 
		8	$";V ";JC
?Q& :r   