o
    Ni;                     @  s   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	 ddl
Z
ddlmZ ddlmZ dd	lmZ e	rVdd
lmZ ddlmZ ddlmZ ddlmZ G dd deZeeZG dd deZd)ddZd*ddZd+d d!Zd,d$d%Z d-d'd(Z!dS ).z#Measure document reading durations.    )annotationsN)islice)
itemgetter)TYPE_CHECKING)Domain)__)logging)Set)	TypedDict)nodes)Sphinxc                   @  s   e Zd ZU ded< dS )_DurationDomainDatadict[str, float]reading_durationsN)__name__
__module____qualname____annotations__ r   r   G/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/ext/duration.pyr      s   
 r   c                   @  sJ   e Zd ZdZdZedddZdd	d
ZdddZdddZ	dddZ
dS )DurationDomainz,A domain for durations of Sphinx processing.durationreturnr   c                 C  s   | j di S Nr   )data
setdefaultselfr   r   r   r   "   s   z DurationDomain.reading_durationsfloatNonec                 C  s   || j | jj< d S N)r   envdocname)r   r   r   r   r   note_reading_duration&      z$DurationDomain.note_reading_durationc                 C  s   | j   d S r    )r   clearr   r   r   r   r%   )   s   zDurationDomain.clearr"   strc                 C  s   | j |d  d S r    )r   pop)r   r"   r   r   r   	clear_doc,   r$   zDurationDomain.clear_docdocnamesSet[str]	otherdatar   c                 C  s<   | di }t|}| D ]\}}||v r|| j|< qd S r   )get	frozensetitemsr   )r   r)   r+   other_reading_durationsdocnames_setr"   r   r   r   r   merge_domaindata/   s   
zDurationDomain.merge_domaindataN)r   r   )r   r   r   r   )r   r   )r"   r&   r   r   )r)   r*   r+   r   r   r   )r   r   r   __doc__namepropertyr   r#   r%   r(   r1   r   r   r   r   r      s    


r   appr   r   r   c                 C  s   | j jd }|  dS )z\Initialize DurationDomain on bootstrap.

    This clears the results of the last build.
    r   N)r!   domainsr%   )r5   domainr   r   r   on_builder_inited7   s   r8   r"   r&   content	list[str]c                 C  s   t  | jjd< dS )z"Start to measure reading duration.
started_atN)time	monotonicr!   	temp_data)r5   r"   r9   r   r   r   on_source_read@   s   r?   doctreenodes.documentc                 C  s2   | j jd }t | }| j jd }|| dS )zRecord a reading duration.r;   r   N)r!   r>   r<   r=   r6   r#   )r5   r@   r;   r   r7   r   r   r   on_doctree_readE   s   rB   error	Exceptionc                 C  st   | j jd }|jsdS t|j tddd}td ttd t	|dD ]\}}t|d	d
|  q(dS )z.Display duration ranking on the current build.r   N   T)keyreverse zH====================== slowest reading durations =======================   z.3f )
r!   r6   r   sortedr.   r   loggerinfor   r   )r5   rC   r7   	durationsr"   dr   r   r   on_build_finishedM   s   
rP   dict[str, bool | str]c                 C  sH   |  t | dt | dt | dt | 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__)r5   r   r   r   setupZ   s   
rY   )r5   r   r   r   )r5   r   r"   r&   r9   r:   r   r   )r5   r   r@   rA   r   r   )r5   r   rC   rD   r   r   )r5   r   r   rQ   )"r2   
__future__r   r<   	itertoolsr   operatorr   typingr   rW   sphinx.domainsr   sphinx.localer   sphinx.utilr   collections.abcr	   r
   docutilsr   sphinx.applicationr   r   	getLoggerr   rL   r   r8   r?   rB   rP   rY   r   r   r   r   <module>   s.    


	

