
    FeL                        d 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	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 ddlm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y)z#Measure document reading durations.    )annotationsN)islice)
itemgetter)TYPE_CHECKINGcast)Domain)__)logging)nodes)Sphinxc                  F    e Zd ZdZdZe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 )Nreading_durations)data
setdefaultselfs    5/usr/lib/python3/dist-packages/sphinx/ext/duration.pyr   z DurationDomain.reading_durations   s    yy##$7<<    c                J    || j                   | j                  j                  <   y N)r   envdocname)r   r   s     r   note_reading_durationz$DurationDomain.note_reading_duration   s    3;txx//0r   c                8    | j                   j                          y r   )r   clearr   s    r   r   zDurationDomain.clear"   s    $$&r   c                <    | j                   j                  |d        y r   )r   pop)r   r   s     r   	clear_doczDurationDomain.clear_doc%   s    ""7D1r   c                \    |j                         D ]  \  }}||v s|| j                  |<    y r   )itemsr   )r   docnames	otherdatar   r   s        r   merge_domaindatazDurationDomain.merge_domaindata(   s5    !*!2 	;GX("2:&&w/	;r   N)returndict[str, float])r   floatr'   None)r'   r*   )r   strr'   r*   )r$   	list[str]r%   r(   r'   r*   )__name__
__module____qualname____doc__namepropertyr   r   r   r!   r&    r   r   r   r      s0    6D= =<'2;r   r   c                v    t        t        | j                  j                  d            }|j	                          y)z\Initialize DurationDomain on bootstrap.

    This clears the results of the last build.
    r   N)r   r   r   
get_domainr   )appdomains     r   on_builder_initedr8   .   s(    
 .#''"4"4Z"@AF
LLNr   c                Z    t        j                         | j                  j                  d<   y)z"Start to measure reading duration.
started_atN)time	monotonicr   	temp_data)r6   r   contents      r   on_source_readr?   7   s    &*nn&6CGGl#r   c                    | j                   j                  d   }t        j                         |z
  }t	        t
        | j                   j                  d            }|j                  |       y)zRecord a reading duration.r:   r   N)r   r=   r;   r<   r   r   r5   r   )r6   doctreer:   r   r7   s        r   on_doctree_readrB   <   sP    ""<0J~~*,H.#''"4"4Z"@AF
  *r   c                   t        t        | j                  j                  d            }|j                  syt        |j                  j                         t        d      d      }t        j                  d       t        j                  t        d             t        |d      D ]   \  }}t        j                  |d	d
|        " y)z.Display duration ranking on the current build.r   N   T)keyreverse zH====================== slowest reading durations =======================   z.3f )r   r   r   r5   r   sortedr#   r   loggerinfor	   r   )r6   errorr7   	durationsr   ds         r   on_build_finishedrP   D   s    .#''"4"4Z"@AF##v//557Z]TXYI
KKO
KK]^_Y* *
qgQwi()*r   c                   | j                  t               | j                  dt               | j                  dt               | j                  dt
               | j                  dt               t        j                  dddS )Nzbuilder-initedzsource-readzdoctree-readzbuild-finishedT)versionparallel_read_safeparallel_write_safe)	
add_domainr   connectr8   r?   rB   rP   sphinx__display_version__)r6   s    r   setuprY   Q   se    NN>"KK "34KK~.KK0KK "34 --"# r   )r6   r   r'   r*   )r6   r   r   r+   r>   r,   r'   r*   )r6   r   rA   znodes.documentr'   r*   )r6   r   rM   	Exceptionr'   r*   )r6   r   r'   zdict[str, bool | str])r0   
__future__r   r;   	itertoolsr   operatorr   typingr   r   rW   sphinx.domainsr   sphinx.localer	   sphinx.utilr
   docutilsr   sphinx.applicationr   	getLoggerr-   rK   r   r8   r?   rB   rP   rY   r3   r   r   <module>re      sc    ) "    &  !  )			8	$;V ;.7
+
*r   