
    7 f'                    N   U d Z ddlmZ ddlZddlZddl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mZmZmZmZmZ 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 ddlmZ  ddlm!Z! ddlm"Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5  e!j6        e7          Z8 ej9        d          Z:de;d<    ej9        d          Z<de;d<   dMdZ=dNd!Z> G d" d#e?          Z@dOd%ZAdOd&ZB G d' d(e?          ZC ej9        d)          ZD G d* d+          ZE G d, d-          ZFdPd2ZGdQdRd7ZHdSd9ZIdTd<ZJd= ZKe#jL        d>fejM        d?fejN        d@fejO        dAfejP        dBfejQ        dCfejR        dDfejS        dEfejT        dFfeKdGfe jU        dHfe jU        dIfeAdJfeBdJfdKZVdL ZWdS )UzUtility functions for Sphinx.    )annotationsN)import_module)path)IOAny)	parse_qsl
quote_plus	urlencodeurlsplit
urlunsplit)ExtensionErrorFiletypeNotFoundError)__)display)
exceptions)	http_date)index_entries)logging)osutil)strip_colors)	patfilter)caption_ref_reexplicit_title_renested_parse_with_titlessplit_explicit_title)SEPcopyfile	copytimes	ensuredirmake_filenamemtimes_of_filesos_pathrelative_uriz\s+zre.Pattern[str]ws_rez(?P<schema>.+)://.*url_rebasedocnamestrdocnamereturnc                h    t          j        t          j        d| z   d|                    dd          S )N/z..   )	posixpathnormpathjoin)r&   r(   s     J/var/www/equiseq/venv/lib/python3.11/site-packages/sphinx/util/__init__.pydocname_joinr1   5   s2    inS;->gNNOOPQPRPRSS    source_suffixdict[str, str]filenamec                z    |                                  D ] \  }}|                    |          r|pdc S !t          )Nrestructuredtext)itemsendswithr   )r3   r5   suffixfiletypes       r0   get_filetyper<   9   sW    )//11 2 2V$$ 	211111	2  r2   c                  B    e Zd ZdZddZddZdd	ZddZddZddZ	dS )FilenameUniqDictz
    A dictionary that automatically generates unique names for its keys,
    interpreted as filenames, and keeps track of a set of docnames they
    appear in.  Used for images and downloadable files in the environment.
    r)   Nonec                ,    t                      | _        d S N)set	_existingselfs    r0   __init__zFilenameUniqDict.__init__G   s    #&55r2   r(   r'   newfilec                H   || v r/| |         d                              |           | |         d         S t          j        |          }t          j        |          \  }}d}|| j        v r|dz  }| | | }|| j        v |h|f| |<   | j                             |           |S )Nr   r,   )addr   basenamesplitextrC   )rE   r(   rG   
uniquenamebaseextis          r0   add_filezFilenameUniqDict.add_fileJ   s    d??M!  )))=##]7++
M*--	cDN**FA *!*S**J DN** "J/W:&&&r2   c                    t          |                                           D ]<\  }\  }}|                    |           |s| |= | j                            |           =d S rA   )listr8   discardrC   )rE   r(   r5   docsuniques        r0   	purge_doczFilenameUniqDict.purge_docX   sl    (,TZZ\\(:(: 	/ 	/$HntVLL!!! /N&&v...		/ 	/r2   docnamesset[str]otherdict[str, tuple[set[str], Any]]c                    |                                 D ]3\  }\  }}|t          |          z  D ]}|                     ||           4d S rA   r8   rB   rP   )rE   rW   rY   r5   rT   _uniquedocs          r0   merge_otherzFilenameUniqDict.merge_other_   sb    ). 	- 	-%HotWc(mm+ - -c8,,,,-	- 	-r2   c                    | j         S rA   rC   rD   s    r0   __getstate__zFilenameUniqDict.__getstate__d   s
    ~r2   statec                    || _         d S rA   ra   )rE   rc   s     r0   __setstate__zFilenameUniqDict.__setstate__g   s    r2   Nr)   r?   )r(   r'   rG   r'   r)   r'   r(   r'   r)   r?   rW   rX   rY   rZ   r)   r?   )r)   rX   )rc   rX   r)   r?   )
__name__
__module____qualname____doc__rF   rP   rV   r_   rb   re    r2   r0   r>   r>   A   s         
) ) ) )   / / / /- - - -
        r2   r>   r2   c                .    t          j        | d          S )zKDeprecated wrapper around hashlib.md5

    To be removed in Sphinx 9.0
    Fusedforsecurity)hashlibmd5data_kws     r0   _md5rv   k   s    
 ;tU3333r2   c                .    t          j        | d          S )zLDeprecated wrapper around hashlib.sha1

    To be removed in Sphinx 9.0
    Fro   )rq   sha1rs   s     r0   _sha1ry   s   s    
 <e4444r2   c                  *    e Zd ZdZddZddZddZdS )DownloadFileszA special dictionary for download files.

    .. important:: This class would be refactored in nearly future.
                   Hence don't hack this directly.
    r(   r'   r5   r)   c                J   || vrqt          j        |                                d                                          }| dt          j                            |           }t                      |f| |<   | |         d                             |           | |         d         S )NFro   r+   r   r,   )	rq   rr   encode	hexdigestosr   rJ   rB   rI   )rE   r(   r5   digestdests        r0   rP   zDownloadFiles.add_file   s    4[!2!2EJJJTTVVF;;rw//99;;D!eeT]DNXqg&&&H~a  r2   r?   c                    t          |                                           D ]"\  }\  }}|                    |           |s| |= #d S rA   )rR   r8   rS   )rE   r(   r5   rT   _dests        r0   rV   zDownloadFiles.purge_doc   sV    '+DJJLL'9'9 	# 	##HmtULL!!! #N	# 	#r2   rW   rX   rY   rZ   c                    |                                 D ]3\  }\  }}|t          |          z  D ]}|                     ||           4d S rA   r\   )rE   rW   rY   r5   rT   r   r(   s          r0   r_   zDownloadFiles.merge_other   sb    ',{{}} 	1 	1#HmtU#h--/ 1 1gx00001	1 	1r2   N)r(   r'   r5   r'   r)   r'   rg   rh   )ri   rj   rk   rl   rP   rV   r_   rm   r2   r0   r{   r{   {   sZ         ! ! ! !# # # #1 1 1 1 1 1r2   r{   zcoding[:=]\s*([-\w.]+)c                  "    e Zd ZdZddZdd
ZdS )UnicodeDecodeErrorHandlerz8Custom error handler for open() that warns and replaces.r(   r'   r)   r?   c                    || _         d S rA   )r(   )rE   r(   s     r0   rF   z"UnicodeDecodeErrorHandler.__init__   s    r2   errorUnicodeDecodeErrortuple[str, int]c                   |j                             dd|j                  }|j                             d|j                  }|dk    rt	          |j                   }|j                             dd|j                  dz   }t                              t          d          |j         |dz   |j                 dz   |j         |j        |j	                 z   dz   |j         |j	        |         z   | j
        |f           d	|j	        fS )
N   
r   r,   z5undecodable source characters, replacing with "?": %rs   >>>s   <<<)location?)objectrfindstartfindlencountloggerwarningr   endr(   )rE   r   	linestartlineendlinenos        r0   __call__z"UnicodeDecodeErrorHandler.__call__   s    L&&ua==	,##E5;77b==%,''G##E1ek::Q>rQRRY]5;%>?&HU[%:;<>DEUYw%678 "&v 6	 	 	8 	8 	8
 UYr2   Nrg   )r   r   r)   r   )ri   rj   rk   rl   rF   r   rm   r2   r0   r   r      sB        BB              r2   r   c                  *    e Zd ZdZddZdd
ZddZdS )Teez2
    File-like object writing to two streams.
    stream1r   stream2r)   r?   c                "    || _         || _        d S rA   )r   r   )rE   r   r   s      r0   rF   zTee.__init__   s    r2   textr'   c                n    | j                             |           | j                            |           d S rA   )r   writer   )rE   r   s     r0   r   z	Tee.write   s4    4   4     r2   c                    t          | j        d          r| j                                         t          | j        d          r| j                                         d S d S )Nflush)hasattrr   r   r   rD   s    r0   r   z	Tee.flush   sb    4<)) 	!L   4<)) 	!L     	! 	!r2   N)r   r   r   r   r)   r?   )r   r'   r)   r?   rf   )ri   rj   rk   rl   rF   r   r   rm   r2   r0   r   r      sZ            ! ! ! !! ! ! ! ! !r2   r   spectotalint	list[int]c                   g }|                      d          }|D ]*}	 |                                                     d          }ddg|k    rt          t          |          dk    r,|                    t          |d                   dz
             nt          |          dk    rpt          |d         pd          }t          |d         pt          ||                    }||k    rt          |                    t          |dz
  |                     nt          # t          $ r}d| }	t          |	          |d}~ww xY w|S )	z_Parse a line number spec (such as "1,2,4-6") and return a list of
    wanted line numbers.
    ,- r,   r      zinvalid line number spec: N)	splitstrip
ValueErrorr   appendr   maxextendrange)
r   r   r8   partspartbegendr   r   excmsgs
             r0   parselinenosr      sQ    EJJsOOE + +	+ZZ\\'',,FBx6!!  6{{aS^^a/0000V!!F1IN++&)8s5%'8'8993;;$$U519c223333   	+ 	+ 	+7t77CS//s*	+ Ls   C?D
E)D>>Eobjnamesource
str | Noner   c                   	 |                      d          }|                    d          }t          |          }|D ]:}|d|z   z  }	 t          ||          }# t          $ r t          |          }Y 7w xY w|S # t          t
          f$ r3}|rt          d| d|d|          |t          d| z  |          |d}~ww xY w)z!Import python object by qualname..r   zCould not import z (needed for )zCould not import %sN)r   popr   getattrAttributeErrorImportErrorr   )r   r   objpathmodnameobjnamer   s          r0   import_objectr      s   L--$$++a..G$$ 	- 	-DsTz!G-c4((! - - -#G,,- 
K( L L L 	B .")''666"3479 9>AB2W<cBBK	Ls<   AA: AA: A52A: 4A55A: :B>.B99B>uric                r   t          t          |                     }|d                             d                              d          |d<   t	          |d                                         d          |d<   d t          |d                   D             }t          |          |d<   t          |          S )Nr,   idnaasciir   r+   c                @    g | ]\  }}||                                 fS rm   )r}   ).0qvs      r0   
<listcomp>zencode_uri.<locals>.<listcomp>   s(    ???!Qa_???r2      )rR   r   r}   decoder	   r   r
   r   )r   r   querys      r0   
encode_urir      s    #EQxv&&--g66E!H%(//++S11E!H??9U1X+>+>???EE!Her2   urlboolc                (    t          |           od| v S )zCheck *url* is URL or not.z://)r   )r   s    r0   isurlr      s    99%#%r2   c                     ddl m}  | S )Nr   _XML_NAME_PATTERN)sphinx.builders.epub3r   r   s    r0   _xml_name_checkerr     s    777777r2   z!sphinx.util.osutil.path_stabilizez!sphinx.util.display.display_chunkz#sphinx.util.display.status_iteratorz'sphinx.util.display.SkipProgressMessagez$sphinx.util.display.progress_messagez!sphinx.http_date.epoch_to_rfc1123z!sphinx.http_date.rfc1123_to_epochz sphinx.exceptions.save_tracebackz-sphinx.exceptions.format_exception_cut_framesz'sphinx.builders.epub3._XML_NAME_PATTERNz)sphinx.util.index_entries.split_index_msgz$sphinx.util.index_entries.split_intor   )path_stabilizedisplay_chunkstatus_iteratorSkipProgressMessageprogress_messageepoch_to_rfc1123rfc1123_to_epochsave_tracebackformat_exception_cut_framesxmlname_checkersplit_index_msg
split_intorr   rx   c                    | t           vrdt          d| }t          |          ddlm} t           |          \  }} |t          | |d           |S )Nzmodule z has no attribute r   )_deprecation_warning)   r   )remove)_DEPRECATED_OBJECTSri   r   sphinx.deprecationr   )r   r   r   deprecated_objectcanonical_names        r0   __getattr__r      ss    &&&>>>d>>S!!!777777(;D(A%~4GGGGr2   )r&   r'   r(   r'   r)   r'   )r3   r4   r5   r'   r)   r'   )r2   )r   r'   r   r   r)   r   rA   )r   r'   r   r   r)   r   )r   r'   r)   r'   )r   r'   r)   r   )Xrl   
__future__r   rq   r   r-   re	importlibr   r   typingr   r   urllib.parser   r	   r
   r   r   sphinx.errorsr   r   sphinx.localer   sphinx.utilr   _displayr   _exceptionsr   
_http_dater   _index_entriesr   r   _osutilsphinx.util.consoler   sphinx.util.matchingr   sphinx.util.nodesr   r   r   r   sphinx.util.osutilr   r   r   r   r    r!   r"   r#   	getLoggerri   r   compiler$   __annotations__r%   r1   r<   dictr>   rv   ry   r{   
_coding_rer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rm   r2   r0   <module>r     s   # # # " " " " " "  				     				 # # # # # #               O O O O O O O O O O O O O O ? ? ? ? ? ? ? ?       + + + + + + 1 1 1 1 1 1 / / / / / / 7 7 7 7 7 7       ) ) ) ) ) ) , , , , , , * * * * * *           	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 
	8	$	$ $F++ + + + +$"*%;<< < < < <
T T T T       ' ' ' ' 't ' ' 'T4 4 4 45 5 5 51 1 1 1 1D 1 1 1: RZ122
               ,! ! ! ! ! ! ! !&   8L L L L L*   & & & &
   -/RS,.QR 02WX$8EG!24Z[#46YZ#46YZ"13UV$/$K$S$U)+TU&6CE!13YZ":BK#  *	 	 	 	 	r2   