
    }cI                     T   U d Z ddlZddlZddlZddlZddl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 ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z% dd	l&m'Z'm(Z(m)Z) dd
l*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZD erddlEmFZF  e-jG        eH          ZI ejJ        d          ZKeeLd<    ejJ        d          ZMeeLd<   deNdeNdeNfdZOdeNdeNfdZP	 d`deNdeeDdf         deeN         fd ZQd!eeNeNf         d"eNdeNfd#ZR G d$ d%eS          ZTdad'ZUdad(ZV G d) d*eS          ZWd+ZXd,d-deNfd.ZYd/eNd0eNdeNfd1ZZ ejJ        d2          Z[ G d3 d4          Z\ G d5 d6          Z]d7eNd8e^dee^         fd9Z_d:e^d;eNd<eNdeeN         fd=Z`d;eNd<eNdeeN         fd>Zadbd@e^deNfdAZbdcdBeNdCeNdefdDZcdEeNdeeeN         eNf         fdFZddGeNdeNfdHZedIeNdeffdJZgdKedeNfdLZh edM          ZidNehfdOeei         dPeNdQeNdReegeNf         deeiddf         f
dSZjdNddehfdOeei         dPeNdQeNdTe^dUe^dReegeNf         deeiddf         fdVZk G dW dXel          Zm G dY dZ          Znd[eodeNfd\Zpd]eNdeofd^Zqdefd_ZrdS )dzUtility functions for Sphinx.    N)datetime)import_module)pathmktimestrptime)IOTYPE_CHECKINGAnyCallableDict	GeneratorIterableListOptionalPatternSetTupleTypeTypeVar)	parse_qsl
quote_plus	urlencodeurlsplit
urlunsplit)ExtensionErrorFiletypeNotFoundErrorSphinxParallelError)__)logging)boldcolorizestrip_colorsterm_width_line)	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_uri)PathMatcher)Sphinxz\s+ws_rez(?P<schema>.+)://.*url_rebasedocnamedocnamereturnc                 h    t          j        t          j        d| z   d|                    dd          S )N/z..   )	posixpathnormpathjoin)r6   r7   s     4lib/python3.11/site-packages/sphinx/util/__init__.pydocname_joinr@   .   s9    s[($88: ::;""> >    filepathc                     |                      t          j        j        t                    }t          j        d|          S )z+Normalize path separator and unicode stringNFC)replaceosr   sepr*   unicodedata	normalize)rB   newpaths     r?   path_stabilizerK   3   s.    rw{C00G 000rA    dirnameexclude_matchers.c              #     	
K   t          j        t          j        |                     } t          j        | d          D ]\  }}t          j        ||           

dk    rd
t          
fdD                       }t          
fd|D                       }|D ]		fd|D             }	fd|D             }t          fd	|D                       d
d
<   t          |          D ]	\  }}|V  
d
S )z}Get all file names in a directory, recursively.

    Exclude files and dirs matching some matcher in *exclude_matchers*.
    T)followlinks. c              3   \   K   | ]&}t          t          j        |                    V  'd S NrK   r   r>   ).0dnrelativeroots     r?   	<genexpr>z%get_matching_files.<locals>.<genexpr>G   sK       * *  )<)D)DEE * * * * * *rA   c              3   \   K   | ]&}t          t          j        |                    V  'd S rT   rU   )rV   fnrX   s     r?   rY   z%get_matching_files.<locals>.<genexpr>I   sK       , ,! *$)L"*E*EFF , , , , , ,rA   c                 6    g | ]} |d                    |S r;   rL   rV   entrymatchers     r?   
<listcomp>z&get_matching_files.<locals>.<listcomp>L   s,    GGGuWWU1X5F5FGUGGGrA   c                 6    g | ]} |d                    |S r]   rL   r^   s     r?   ra   z&get_matching_files.<locals>.<listcomp>M   s,    IIIwwuQx7H7HIeIIIrA   c              3   .   K   | ]\  }}|         V  d S rT   rL   )rV   i_dirss      r?   rY   z%get_matching_files.<locals>.<genexpr>O   s+      55Vaa555555rA   N)r   r=   abspathrF   walkrelpath	enumeratesorted)rM   rN   rootfilesqdirsqfiles_ifilenamerf   r`   rX   s           @@@r?   get_matching_filesrr   9   sx      mDL1122GWW$???  dE|D'223 	L * * * *$(* * * * * , , , ,%*, , , , ,' 	J 	JGGGGGGGGEIIIIIIIFF5555u55555QQQ"6NN 	 	LBNNNN	 rA   source_suffixrq   c                 z    |                                  D ] \  }}|                    |          r|pdc S !t          )Nrestructuredtext)itemsendswithr   )rs   rq   suffixfiletypes       r?   get_filetyperz   U   sW    )//11 $ $V$$ 	211111	2 $#rA   c                       e Zd ZdZddZdededefdZdeddfdZd	ee         d
e	ee
ee         ef         f         ddfdZdee         fdZdee         ddf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.
    r8   Nc                 ,    t                      | _        d S rT   )set	_existingselfs    r?   __init__zFilenameUniqDict.__init__d   s    #&55rA   r7   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splitextr   )r   r7   r   
uniquenamebaseextrd   s          r?   add_filezFilenameUniqDict.add_fileg   s    d? 	$M!  )))=##]7++
M*--	cDN* 	3FA%)T11cc2J DN* 	3 "J/W:&&&rA   c                     t          |                                           D ]<\  }\  }}|                    |           |s| |= | j                            |           =d S rT   )listrv   discardr   )r   r7   rq   docsuniques        r?   	purge_doczFilenameUniqDict.purge_docu   sl    (,TZZ\\(:(: 	/ 	/$HntVLL!!! /N&&v...		/ 	/rA   docnamesotherc                     |                                 D ]3\  }\  }}|t          |          z  D ]}|                     ||           4d S rT   rv   r~   r   )r   r   r   rq   r   _uniquedocs          r?   merge_otherzFilenameUniqDict.merge_other|   sb    ). 	- 	-%HotWc(mm+ - -c8,,,,-	- 	-rA   c                     | j         S rT   r   r   s    r?   __getstate__zFilenameUniqDict.__getstate__   s
    ~rA   statec                     || _         d S rT   r   )r   r   s     r?   __setstate__zFilenameUniqDict.__setstate__   s    rA   r8   N)__name__
__module____qualname____doc__r   strr   r   r   r   r   r   r   r   r   rL   rA   r?   r|   r|   ^   s        
) ) ) ) c c    / / / / / /-CH -T#uSXs]?S:S5T -Y] - - - -
c#h    #c( t      rA   r|   rA   c                 t    	 t          j        | fi |S # t          $ r t          j        | fi |ddicY S w xY w)a3  Wrapper around hashlib.md5

    Attempt call with 'usedforsecurity=False' if we get a ValueError, which happens when
    OpenSSL FIPS mode is enabled:
    ValueError: error:060800A3:digital envelope routines:EVP_DigestInit_ex:disabled for fips

    See: https://github.com/sphinx-doc/sphinx/issues/7611
    usedforsecurityF)hashlibmd5
ValueErrordatakwargss     r?   r   r      sh    B{4**6*** B B B{4AA6AA5AAAAAAB     77c                 t    	 t          j        | fi |S # t          $ r t          j        | fi |ddicY S w xY w)zWrapper around hashlib.sha1

    Attempt call with 'usedforsecurity=False' if we get a ValueError

    See: https://github.com/sphinx-doc/sphinx/issues/7611
    r   F)r   sha1r   r   s     r?   r   r      sh    C|D++F+++ C C C|DBBFBBEBBBBBBCr   c                       e Zd ZdZdededefdZdeddfdZdee         d	eee	ee         e
f         f         ddf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.
    r7   rq   r8   c                 <   || vrjt          |                                                                          }|dt          j                            |          }t                      |f| |<   | |         d                             |           | |         d         S )Nr:   r   r;   )r   encode	hexdigestrF   r   r   r~   r   )r   r7   rq   digestdests        r?   r   zDownloadFiles.add_file   s    4 	+**++5577F$ffbg&6&6x&@&@&@AD!eeT]DNXqg&&&H~a  rA   Nc                     t          |                                           D ]"\  }\  }}|                    |           |s| |= #d S rT   )r   rv   r   )r   r7   rq   r   _dests        r?   r   zDownloadFiles.purge_doc   sV    '+DJJLL'9'9 	# 	##HmtULL!!! #N	# 	#rA   r   r   c                     |                                 D ]3\  }\  }}|t          |          z  D ]}|                     ||           4d S rT   r   )r   r   r   rq   r   r   r7   s          r?   r   zDownloadFiles.merge_other   sb    ',{{}} 	1 	1#HmtU#h--/ 1 1gx00001	1 	1rA   )r   r   r   r   r   r   r   r   r   r   r   r   rL   rA   r?   r   r      s         ! !s !s ! ! ! !# # # # # #1CH 1T#uSXs]?S:S5T 1Y] 1 1 1 1 1 1rA   r   z# Sphinx version: %s
# Python version: %s (%s)
# Docutils version: %s %s
# Jinja2 version: %s
# Last messages:
%s
# Loaded extensions:
appr3   c                    ddl }ddl}ddl}ddl}t	          j                    d         }t          |t                    rd|j        z   }nt          j	                    }t          j        dd          \  }}d}	| $d                    d	 | j        D                       }	t          j        |t           |j        |                                |                                |j        |j        |j        |	fz                                             | x| j                                        D ]^}
t3          |
j        d
d          }|
j        dk    r;t          j        |d|
j        d|
j        d|d                                           _t          j        ||                                           t          j        |           |S )z;Save the current exception's traceback in a temporary file.r   Nr;   z(Error in parallel process)
z.logzsphinx-err-rR   
c              3   ^   K   | ](}d t          |                                          z  V  )dS )z#   %sN)r#   strip)rV   ss     r?   rY   z!save_traceback.<locals>.<genexpr>   sM       % % |A,,...% % % % % %rA   __file__unknownbuiltinz#   z (z) from )platformdocutilsjinja2sphinxsysexc_info
isinstancer   	traceback
format_exctempfilemkstempr>   
messagelogrF   write_DEBUG_HEADER__display_version__python_versionpython_implementation__version____version_details__r   
extensionsvaluesgetattrmoduleversionnameclose)r   r   r   r   r   exc
exc_formatfdr   	last_msgsr   modfiles               r?   save_tracebackr      s   OOOOOOMMMMMM
,..
C#*++ ,4s}D

)++
66HBI
 %II % %^% % % % %	 HR--**,,1133')E%  &vxx) ) )  J>((** 	J 	JCcj*i@@G{i' J"xxxggg?@FJ J JHR""$$%%%HRLLLKrA   modname	attributec                     | d S t          |           }|}|                    d          D ]}|rt          ||          }t          |dd           S )NrQ   r   )r   splitr   )r   r   r   valueattrs        r?   get_full_modnamer      sj      t7##F E$$ ) ) 	)E4((E5,---rA   zcoding[:=]\s*([-\w.]+)c                   B    e Zd ZdZdeddfdZdedeeef         fdZ	dS )UnicodeDecodeErrorHandlerz8Custom error handler for open() that warns and replaces.r7   r8   Nc                     || _         d S rT   )r7   )r   r7   s     r?   r   z"UnicodeDecodeErrorHandler.__init__
      rA   errorc                    |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   endr7   )r   r   	linestartlineendlinenos        r?   __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rA   )
r   r   r   r   r   r   UnicodeDecodeErrorr   intr   rL   rA   r?   r   r     sg        BB      0  U38_            rA   r   c                   >    e Zd ZdZdededdfdZdeddfdZd
d	ZdS )Teez2
    File-like object writing to two streams.
    stream1stream2r8   Nc                 "    || _         || _        d S rT   )r  r  )r   r  r  s      r?   r   zTee.__init__!  s    rA   textc                 n    | j                             |           | j                            |           d S rT   )r  r   r  )r   r  s     r?   r   z	Tee.write%  s4    4   4     rA   c                     t          | j        d          r| j                                         t          | j        d          r| j                                         d S d S )Nflush)hasattrr  r  r  r   s    r?   r  z	Tee.flush)  sb    4<)) 	!L   4<)) 	!L     	! 	!rA   r   )	r   r   r   r   r	   r   r   r   r  rL   rA   r?   r  r    s}          R D    !# !$ ! ! ! !! ! ! ! ! !rA   r  spectotalc                    t                      }|                     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}t          d| z            |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.
    ,-rR   r;   r      zinvalid line number spec: %rN)r   r   r   r   r   appendr  maxextendrange	Exception)	r  r  rv   partspartbegendr   r   r   s	            r?   parselinenosr  0  s`    FFEJJsOOE M M	MZZ\\'',,FBx6! !  V! 	!S^^a/0000V! !F1IN++&)8s5%'8'8993; %$$U519c223333   	M 	M 	M;dBCCL	M Ls   C?D++
E5EEntyper   c                     d |                     d| dz
            D             }t          d |D                       | k     rt          d|d|          |S )z@Split an index entry into a given number of parts at semicolons.c                 6    g | ]}|                                 S rL   )r   )rV   xs     r?   ra   zsplit_into.<locals>.<listcomp>M  s     8881QWWYY888rA   ;r;   c              3      K   | ]}|d V  	dS )r;   NrL   )rV   r  s     r?   rY   zsplit_into.<locals>.<genexpr>N  s'      
'
'$
'1
'
'
'
'
'
'rA   invalid  index entry )r   sumr   )r  r  r   r  s       r?   
split_intor&  K  sl    88CQ 7 7888E

'
'
'
'
'''!+ FjeeDEEELrA   c                 d   | dk    r4	 t          dd|          }n# t          $ r t          dd|          }Y nyw xY w| dk    rt          dd|          }n]| dk    rt          dd|          }nE| dk    rt          dd|          }n-| dk    rt          dd|          }nt          d	| d
|          |S )Nsingler  r;   pairtriple   seeseealsor#  r$  )r&  r   )r  r   results      r?   split_index_msgr/  S  s    x F	48U33FF 	4 	4 	48U33FFF	4	 	FAvu--		 FAx//	 FAue,,		 FAue,,jeeDEEEMs    88r;   r   c                     t          j                    \  }}}g }t          j        |          }|||  d         z  }|t          j        ||          z  }d                    |          S )z?Format an exception with traceback, but only the last x frames.NrR   )r   r   r   	format_tbformat_exception_onlyr>   )r   typvaltbrestbress         r?   format_exception_cut_framesr8  h  sc    <>>LCbC##E5!:C9*3444C773<<rA   objnamesourcec                    	 |                      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.rQ   r   zCould not import z (needed for )zCould not import %sN)r   popr   r   AttributeErrorImportErrorr   )r9  r:  objpathr   objr   r   s          r?   import_objectrB  s  s   P--$$++a..G$$ 	- 	-DsTz!G-c4((! - - -#G,,- 
K( P P P 	P .")''666"3479 9>AB !!6!@#FFCOPs<   AA: AA: A52A: 4A55A: :B>.B99B>r   c                    |                      d          }t          |d          D ]\  }}	 d                    |d|                   }t          |           3# t          $ rm |d|dz
           rDd                    |d|dz
                     d                    ||dz
  d                   fcY c S dd                    |          fcY c S t
          $ r Y w xY w| dfS )a  Split full qualified name to a pair of modname and qualname.

    A qualname is an abbreviation for "Qualified name" introduced at PEP-3155
    (https://peps.python.org/pep-3155/).  It is a dotted path name
    from the module top-level.

    A "full" qualified name means a string containing both module name and
    qualified name.

    .. note:: This function actually imports the module to check its existence.
              Therefore you need to mock 3rd party modules if needed before
              calling this function.
    rQ   r;   NrR   )r   rj   r>   r   r?  
IndexError)r   r  rd   _partr   s        r?   split_full_qualified_namerF    s    JJsOOEeQ'' 
 
5		hhuRaRy))G'"""" 	- 	- 	-Va!eV} -xxfq1uf..q1uvv0G0GGGGGGGSXXe__,,,,,, 	 	 	D	 8Os   ,AAC4C	CCuric                    t          t          |                     }|d                             d                              d          |d<   t	          |d                                         d          |d<   t          d t          |d                   D                       }t          |          |d<   t          |          S )Nr;   idnaasciir  r:   c              3   H   K   | ]\  }}||                                 fV  d S rT   )r   )rV   qvs      r?   rY   zencode_uri.<locals>.<genexpr>  s2      CCVa!QXXZZCCCCCCrA   r+  )r   r   r   decoder   r   r   r   )rG  r   querys      r?   
encode_urirP    s    #EQxv&&--g66E!H%(//++S11E!HCCyq/B/BCCCCCEE!HerA   urlc                     | rd| v rdS dS )zCheck *url* is URL or not.z://TFrL   )rQ  s    r?   isurlrS    s    
 u| turA   chunkc                     t          | t          t          f          r;t          |           dk    rt	          | d                   S | d         d| d         S t	          |           S )Nr;   r   z .. r   )r   r   tupler   r   )rT  s    r?   display_chunkrW    s_    %$'' 2u::? 	!uQx== "1XXXuRyy11u::rA   T	darkgreeniterablesummarycolorstringify_funcc              #   J  K   d}| D ]y}|dk    r+t                               t          |          d           d}t                                ||          |d           t                               dd           |V  z|dk    rt                               d           d S d S )Nr   Tnonlr;   )r\  r`   rR   )r   infor!   )rZ  r[  r\  r]  litems         r?   old_status_iteratorre    s       	
A  6 	KKWDK111ANN4((DAAACd###



Av B rA   length	verbosityc           
   #   |  K   |dk    rt          | |||          E d {V  d S d}t          |          }| D ]c}|dz  }d|d|z  |z  t          | ||                    fz  }|r|dz  }nt          |          }t                              |d           |V  d|dk    rt                              d           d S d S )	Nr   r;   z%s[%3d%%] %sd   r   Tr_  rR   )re  r!   r"   r$   r   rb  )	rZ  r[  r\  rf  rg  r]  rc  rd  r   s	            r?   status_iteratorrj    s       { &x%PPPPPPPPP	A7mmG  	QgsQw'7%X\I]I]9^9^__ 	#IAA""AAD!!!



1u B rA   c                       e Zd ZdS )SkipProgressMessageN)r   r   r   rL   rA   r?   rl  rl    s        DrA   rl  c                   Z    e Zd ZdeddfdZddZdee         dedede	fd	Z
d
edefdZdS )progress_messagemessager8   Nc                     || _         d S rT   )ro  )r   ro  s     r?   r   zprogress_message.__init__  r   rA   c                 h    t                               t          | j        dz             d           d S )Nz... Tr_  )r   rb  r!   ro  r   s    r?   	__enter__zprogress_message.__enter__  s-    D.//d;;;;;rA   exc_type	exc_valuer   c                 X   t          |t                    rCt                              t	          d                     |j        rt          j        |j          dS |r(t                              t	          d                     n't                              t	          d                     dS )NskippedTfaileddoneF)r   rl  r   rb  r   args)r   rs  rt  r   s       r?   __exit__zprogress_message.__exit__  s    i!455 	$KK9&&&~ -Y^,,4 	$KK8%%%%KK6

###urA   fc                 v     t          j                  dt          dt          dt          f fd            }|S )Nry  r   r8   c                  L    5   | i |cd d d            S # 1 swxY w Y   d S rT   rL   )ry  r   r{  r   s     r?   wrapperz*progress_message.__call__.<locals>.wrapper  s     * *q$)&))* * * * * * * * * * * * * * * * * *s   )	functoolswrapsr   )r   r{  r~  s   `` r?   r   zprogress_message.__call__  sX    				*3 	*# 	*# 	* 	* 	* 	* 	* 	* 
		* rA   r   )r   r   r   r   r   rr  r   r  r   boolrz  r   r   rL   rA   r?   rn  rn    s             < < < <i Y SV [_    ( x      rA   rn  epochc                 \    ddl m} t          j        |           }d} |||d          dz   S )z)Convert datetime format epoch to RFC1123.r   )format_datetimezEEE, dd LLL yyyy hh:mm:ssen)localez GMT)babel.datesr  r   fromtimestamp)r  r  dtfmts       r?   epoch_to_rfc1123r  
  sE    ++++++			&	&B
%C?2s4000699rA   rfc1123c                 <    t          t          | d                    S )Nz%a, %d %b %Y %H:%M:%S %Zr   )r  s    r?   rfc1123_to_epochr    s    (7$>??@@@rA   c                     dddgdddgddgd	d
gddgddgddgddgddgddgddgddgddgddgg} dd d!d"gd#d$d%gd&d'gg}d0d)t           d*t          d+t          ffd, |           } |          }t          j        d-|d.|d(|d/          S )1N:AZre   az   À   Ö   Ø   ö   øu   ˿u   Ͱu   ͽu   Ϳu   ῿u   ‌u   ‍u   ⁰u   ↏u   Ⰰu   ⿯u   、u   ퟿u   豈u   ﷏u   ﷰu   �u   𐀀u   󯿿z\-z\.09   ·u   ̀u   ͯu   ‿u   ⁀|entriessplitterr8   c                     g }| D ]O}t          |t                    r#|                    d |d          z             :|                    |           P|                    |          S )Nz[%s]r  )r   r   r  r>   )r  r  resultsr_   converts       r?   r  z xmlname_checker.<locals>.convert%  sv     	& 	&E%&& &vs(;(;;<<<<u%%%%}}W%%%rA   (z)(z)*)r  )r   r   recompile)name_start_chars
name_charsstart_chars_regexname_chars_regexr  s       @r?   xmlname_checkerr    s0    	c3ZsCj8X*>	8x2Xx4H	8x2Xx4H	8x2Xx4H	8|\:< 	usCj(Xx,@	8J
& & & &c & & & & & &   011wz**::,,,.>.>.>@ A A ArA   )rL   )rA   r]   rT   )sr   r  r   rF   r<   r  r   r   r   rH   r   	importlibr   r   timer   r   typingr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   urllib.parser   r   r   r   r   sphinx.errorsr   r   r   sphinx.localer   sphinx.utilr    sphinx.util.consoler!   r"   r#   r$   sphinx.util.matchingr%   sphinx.util.nodesr&   r'   r(   r)   sphinx.util.osutilr*   r+   r,   r-   r.   r/   r0   r1   sphinx.util.typingr2   sphinx.applicationr3   	getLoggerr   r   r  r4   __annotations__r5   r   r@   rK   rr   rz   dictr|   r   r   r   r   r   r   
_coding_rer   r  r  r  r&  r/  r8  rB  rF  rP  r  rS  rW  rX  re  rj  r  rl  rn  floatr  r  r  rL   rA   r?   <module>r     s   # # #      				     				 



                # # # # # #       ! ! ! ! ! ! ! !B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B O O O O O O O O O O O O O O T T T T T T T T T T             M M M M M M M M M M M M * * * * * *O O O O O O O O O O O OH H H H H H H H H H H H H H H H H H H H * * * * * * *)))))) 
	8	$	$ F##w # # #"*344 4 4 4
>c >C >C > > > >
1S 1S 1 1 1 1 DF  ).{C/?)@JRSV-   8$S#X $# $# $ $ $ $' ' ' ' 't ' ' 'TB B B B C C C C1 1 1 1 1D 1 1 18" "S " " " "J.c .c .c . . . .$ RZ122
               ,! ! ! ! ! ! ! !&s 3 49    6# S  c    # c d3i    * 3 s    P P3 P Ps P P P P,C E(3-2D,E    <C C    s t          GCLL KV?L (1+  C (0#(<&q$}5     GR"#a;H hqk C  03$,cUCZ$8 #1dD=1   ,	 	 	 	 	) 	 	 	       ::E :c : : : :Ac Ae A A A AA A A A A A ArA   