
    Rim                    p   d Z ddlm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mZmZ ddlmZmZ dd	lmZmZ dd
lmZ er,ddlZddlmZmZmZmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'  ejP                  e)      Z*ddd fZ+dZ,e-ej\                  ej^                  fZ0 G d de      Z1 e2       dd-dZ3 G d d      Z4ddd fZ5 G d d      Z6 G d d      Z7d.dZ8d/d Z9	 	 	 	 d0d!Z:d1d"Z;d1d#Z<d1d$Z=d2d%Z>d2d&Z?	 	 	 	 	 	 	 	 d3d'Z@d4d(ZAd1d)ZB	 	 	 	 	 	 	 	 	 	 	 	 d5d*ZCd2d+ZDd6d,ZEy)7z"Build configuration file handling.    )annotationsN)chdir)getenv)Path)TYPE_CHECKINGAnyLiteral
NamedTuple)ConfigErrorExtensionError)___)logging)
CollectionIterableIteratorSequenceSet)Sphinx)BuildEnvironment)Tags)ExtensionMetadata_ExtensionSetupFunc_ConfigRebuildc                     t         d   S )N) envepubgettexthtml	applehelpdevhelp)r	        E/home/agent/.friday_env/lib/python3.12/site-packages/sphinx/config.pyr   r      s    g
 
r$   zconf.pyc                  ,    e Zd ZU ded<   ded<   ded<   y)ConfigValuestrnamer   valuer   rebuildN)__name__
__module____qualname____annotations__r#   r$   r%   r'   r'   ,   s    
IJr$   r'   _seenc               L   t        | t              ryt        |       |v ryt        | t              r1|t        |       hz  t	        fd| j                         D              S t        | t        t        t        t        f      r#|t        |       hz  t	        fd| D              S y)z*Check if an object is serializable or not.FTc              3  \   K   | ]#  \  }}t        |       xr t        |        % ywr0   Nis_serializable).0keyr*   seens      r%   	<genexpr>z"is_serializable.<locals>.<genexpr>=   s3      
U Ct,Sd1SS
s   ),c              3  8   K   | ]  }t        |         ywr4   r5   )r7   itemr9   s     r%   r:   z"is_serializable.<locals>.<genexpr>C   s     E?4t44E   )

isinstanceUNSERIALIZABLE_TYPESiddictallitemslisttupleset	frozenset)objr1   r9   s     @r%   r6   r6   2   s    #+, 
#w%#t3y  
!iik
 
 	
 
C$sI6	73y EEEE
 r$   c                  (    e Zd ZdZddZddZddZy)	ENUMzRepresents the candidates which a config value should be one of.

    Example:
        app.add_config_value('latex_show_urls', 'no', None, ENUM('no', 'footnote', 'inline'))
    c                $    t        |      | _        y N)rG   _candidates)self
candidatess     r%   __init__zENUM.__init__R   s    $Z0r$   c           	     n    ddj                  t        t        t        | j                                     dS )NzENUM(, ))joinsortedmapreprrM   rN   s    r%   __repr__zENUM.__repr__U   s-    tyyD$2B2B(C!DEFaHHr$   c                     t        |t        t        t        j                  f      r| j
                  v S t         fd|D              S )Nc              3  :   K   | ]  }|j                   v   y wrL   )rM   )r7   r<   rN   s     r%   r:   zENUM.match.<locals>.<genexpr>[   s     >44+++>s   )r>   r(   booltypesNoneTyperM   rB   )rN   r*   s   ` r%   matchz
ENUM.matchX   s:    ec489D,,,,>>>>r$   N)rO   zstr | bool | NonereturnNoner`   r(   )r*   z/str | bool | None | Sequence[str | bool | None]r`   r\   )r,   r-   r.   __doc__rP   rY   r_   r#   r$   r%   rJ   rJ   K   s    1I?r$   rJ   _OptValidTypesc                 *    t         t           t        z  S rL   )rG   typerJ   r#   r$   r%   rd   rd   ^   s    io, ,r$   c                       e Zd ZU dZded<   ded<   ded<   ded	<   	 d	 	 	 	 	 	 	 	 	 d fd
ZddZddZddZddZ	d fdZ
d fdZddZ	 	 	 	 d fdZ xZS )_Optdefaultr+   valid_typesdescriptionr   rj   r   r+   rd   rk   r(   rl   c                    t         |   d|       t         |   d|       t         |   d|       t         |   d|       y)a^  Configuration option type for Sphinx.

        The type is intended to be immutable; changing the field values
        is an unsupported action.
        No validation is performed on the values, though consumers will
        likely expect them to be of the types advertised.
        The old tuple-based interface will be removed in Sphinx 9.
        rj   r+   rk   rl   Nsuper__setattr__)rN   rj   r+   rk   rl   	__class__s        r%   rP   z_Opt.__init__i   sA     	Iw/Iw/M;7M;7r$   c           
         | j                   j                   d| j                  d| j                  d| j                  d| j                  d
S )Nz	(default=z
, rebuild=z, valid_types=z, description=rS   )rq   r.   rj   r+   rl   rX   s    r%   rY   z_Opt.__repr__}   s\    ~~**+ ,||& '||& '<<* +++.a	1	
r$   c                    t        |t              ra| j                  | j                  | j                  | j
                  f}|j                  |j                  |j                  |j
                  f}||k(  S t        S rL   )r>   rh   rj   r+   rk   rl   NotImplementedrN   otherself_tpl	other_tpls       r%   __eq__z_Opt.__eq__   so    eT"    	H !!!!	I y((r$   c                    | j                   |j                   u ra| j                  | j                  | j                  | j                  f}|j                  |j                  |j                  |j                  f}||kD  S t
        S rL   )rq   rj   r+   rk   rl   rt   ru   s       r%   __lt__z_Opt.__lt__   su    >>U__,    	H !!!!	I i''r$   c                p    t        | j                  | j                  | j                  | j                  f      S rL   )hashrj   r+   rk   rl   rX   s    r%   __hash__z_Opt.__hash__   s*    T\\4<<1A1A4CSCSTUUr$   c                z    |dv r&| j                   j                  d|}t        |      t        |   ||       y )N>   rj   r+   rl   rk   z' object does not support assignment to )rq   r,   	TypeErrorro   rp   )rN   r8   r*   msgrq   s       r%   rp   z_Opt.__setattr__   sC    FF^^,,//VWZV]^CC. C'r$   c                x    |dv r&| j                   j                  d|}t        |      t        |   |       y )N>   rj   r+   rl   rk   z% object does not support deletion of )rq   r,   r   ro   __delattr__)rN   r8   r   rq   s      r%   r   z_Opt.__delattr__   sA    FF^^,,//TUXT[\CC. C r$   c                ^    | j                   | j                  | j                  | j                  fS rL   ri   rX   s    r%   __getstate__z_Opt.__getstate__   s%    ||T\\4+;+;T=M=MMMr$   c                    |\  }}}}t         |   d|       t         |   d|       t         |   d|       t         |   d|       y )Nrj   r+   rk   rl   rn   )rN   staterj   r+   rk   rl   rq   s         r%   __setstate__z_Opt.__setstate__   sO     6;2+{Iw/Iw/M;7M;7r$   r   )
rj   r   r+   r   rk   rd   rl   r(   r`   ra   rb   )rv   objectr`   r\   )rv   rh   r`   r\   r`   int)r8   r(   r*   r   r`   ra   )r8   r(   r`   ra   )r`   /tuple[Any, _ConfigRebuild, _OptValidTypes, str])r   r   r`   ra   )r,   r-   r.   	__slots__r/   rP   rY   ry   r{   r~   rp   r   r   r   __classcell__rq   s   @r%   rh   rh   a   s    BIL 88  8 $	8
 8 
8(
""V(!N8D8	8 8r$   rh   c                  4
    e Zd ZU dZi d edd eef            d edd eef            d edd	 eeeef            d
 ed d	 eeeef            d edd eef            d edd eef            d edd eef            d edd eef            d edd eef            d edgd eeef            d edd eef            d edd ee	f            d edd e
dddd            d edd eef            d  ed! d eef            d" ed#d$ide      d% ed&d eef            i d' eg d eef            d( ed)gd eef            d* edd eef            d+ edd ee	f            d, edd ee	f            d- edd ee	f            d. ed/d e
d/d0d1            d2 edd ee	f            d3 edd ee	f            d4 edd	 eef            d5 ed6d eef            d7 ei d eef            d8 eg d	 eef            d9 edd	 eef            d: edd ee	f            d; eg d eeef            d< edd ee	f            i d= eg d	 eeef            d> edd eef            d? edd eef            d@ edd ee	f            dA edBd eej                  f            dC edd eef            dD ei d eef            dE edd eeej                  f            dF edd ee	f            dG eg d eeeef            dH eg d eeeef            dI edd ee	f            dJ edKd eeej                  f            dL ei d eef            dM edd eeej                  f            dN edd ee	f            dO edd eef             edd ee	f             edPd eef             edd ee	f             edd eeeej                  f             edd eef             edd ee	f             edQd eef             eg dRdSdTgdUd eef             edd ee	f            dV	ZdWedX<   	 	 dn	 	 	 	 	 dodYZedpdZ       Zedqd[       Zedrd\       Ze	 	 	 	 	 	 	 	 	 	 dsd]       Zdtd^Zedud_       Zdud`ZdudaZdvdbZdw fdcZ dxddZ!dxdeZ"dydfZ#dzdgZ$d{dhZ%d|diZ&	 d}	 	 	 	 	 	 	 	 	 	 	 d~djZ'ddkZ(dqdlZ)ddmZ* xZ+S )Configa  Configuration file abstraction.

    The Config object makes the values of all config options available as
    attributes.

    It is exposed via the :py:class:`~sphinx.application.Sphinx`\ ``.config``
    and :py:class:`sphinx.environment.BuildEnvironment`\ ``.config`` attributes.
    For example, to get the value of :confval:`language`, use either
    ``app.config.language`` or ``env.config.language``.
    projectzProject name not setr   authorzAuthor name not setproject_copyrightr   r    	copyrightc                    | j                   S rL   )r   configs    r%   <lambda>zConfig.<lambda>   s    633 r$   versionreleasetoday	today_fmtNlanguageenlocale_dirslocalesfigure_language_filenamez{root}.{language}{ext} gettext_allow_fuzzy_translationsFr   translation_progress_classesT
translateduntranslated
master_docindexroot_docc                    | j                   S rL   )r   r   s    r%   r   zConfig.<lambda>   s    (9(9 r$   source_suffixz.rstrestructuredtextsource_encoding	utf-8-sigexclude_patternsinclude_patternsz**default_roleadd_function_parenthesesadd_module_namestoc_object_entriestoc_object_entries_show_parentsdomainrB   hidetrim_footnote_reference_spaceshow_authorspygments_stylehighlight_languagerj   highlight_optionstemplates_pathtemplate_bridgekeep_warningssuppress_warningsshow_warning_typesmodindex_common_prefix
rst_epilog
rst_prologtrim_doctest_flagsprimary_domainpyneeds_sphinxneeds_extensionsmanpages_urlnitpickynitpick_ignorenitpick_ignore_regexnumfignumfig_secnum_depth   numfig_formatmaximum_signature_line_lengthmath_number_allmath_eqref_format.qDe)jazh_CNzh_TWmantext)	languagesbuilders)	math_numfigmath_numsep
tls_verifytls_cacerts
user_agentsmartquotessmartquotes_actionsmartquotes_excludesoption_emphasise_placeholdersdict[str, _Opt]config_valuesc                z   |xs i }|t        |      ni | _        t        j                  j	                         | _        || _        t        | j                  j                               D ]J  }d|v s|j                  d      \  }}}| j                  j                  |      |j                  |i       |<   L |j                  d      | _        d| j                  v rE| j                  j                  d      }t        |t              r|j!                  d      |d<   n||d<   |j                  dg       | _        d| _        y )Nr   setup
extensions,r   )rA   
_overridesr   r   copy_options_raw_configrD   keys	partitionpop
setdefaultgetr   r>   r(   splitr   
_verbosity)	rN   r   	overrides
raw_configr)   	real_namer   r8   r   s	            r%   rP   zConfig.__init__+  s   
 &,\r
-6-B$y/,,113%--/0 	VDd{$(NN3$7!	1c<@OO<O<OPT<U
%%i4S9	V
 2<1H
4??*,,\:J*c*+5+;+;C+@
<(+5
<(%/^^L"%E r$   c                    | j                   S rL   r   rX   s    r%   valueszConfig.valuesF  s    }}r$   c                    | j                   S rL   )r   rX   s    r%   r   zConfig.overridesJ      r$   c                    | j                   S rL   )r   rX   s    r%   	verbosityzConfig.verbosityN  r   r$   c                   t        |t              }|j                         st        t	        d      |z        t        |||      S )z/Create a Config object from configuration file.z4config directory doesn't contain a conf.py file (%s))r   tags)r   CONFIG_FILENAMEis_filer   r   _read_conf_py)clsconfdirr   r  filenames        r%   readzConfig.readR  sH     1!IJWT  XFFr$   c                   | j                   |   }|j                  }|j                  }|t        k(  r|S t	        |t
              r*d|j                  v r|dk(  ryd|j                  v r|dk(  ry|S t        |      t        u st        |v r7|dk(  ry|dk(  ryt        |      dkD  r|S t        d      ||fz  }t        |      t	        |t              rt        t        d      || dfz        t	        |t              r|j                  d	      S t	        |t               r	 t!        |      S t#        |      r|S t	        |t$              s||S t        t        d      |z        # t        $ r}t        t        d
      ||fz        |d }~ww xY w)NF0T1r   z!'%s' must be '0' or '1', got '%s'zZcannot override dictionary config setting %r, ignoring (use %r to set individual elements)z
.key=valuer   z/invalid number %r for config value %r, ignoringzAcannot override config setting %r with unsupported type, ignoring)r   rj   rk   r   r>   rJ   rM   rf   r\   lenr   r   rA   
ValueErrorrD   r   r   callabler(   )rN   r)   r*   optrj   rk   r   excs           r%   convert_overrideszConfig.convert_overridesb  s   mmD!++oo#Lk4(///ESL{...5C<L']d"t{':||;!#89T5MICc""gt$C D6,-	.  gt$;;s##gs#5z! GLgs#wLRS
 	
   HIdm$ s   
E 	F'FFc                      y rL   r#   r#   r$   r%   pre_init_valueszConfig.pre_init_values  s     	r$   c                $    | j                          y rL   )_report_override_warningsrX   s    r%   init_valueszConfig.init_values  s    &&(r$   c                    | j                   D ]0  }|| j                  vst        j                  t	        d      |       2 y )Nz-unknown config value %r in override, ignoring)r   r   loggerwarningr   rN   r)   s     r%   r  z Config._report_override_warnings  s8    OO 	D4==(FG	r$   c                    g }| j                   D ]%  }	 t        | |      }|j                  | d|       ' | j                  j
                  dz   dj                  |      z   dz   S # t        $ r d}Y Sw xY w)Nz<error!>=(rR   rS   )r   getattr	Exceptionappendrq   r.   rT   )rN   r   opt_name	opt_values       r%   rY   zConfig.__repr__  s     	7H'#D(3	 MMXJa	}56	7 ~~**S0499V3DDsJJ  '&	's   A%%A32A3c                    |dk(  rt         |   d|       nA|dk(  rt         |   d|       n+|dk(  rt         |   d|       n|dk(  rt         |   d|       t         |   ||       y )Nr   r   r   r   rn   )rN   r8   r*   rq   s      r%   rp   zConfig.__setattr__  sp    ,G
E2JGe4KG 3U;''GU3C'r$   c                   || j                   v r|| j                  v rW| j                  |   }t        |t              s|| j                  |<   |S 	 | j                  ||      }| j                  ||       |S || j                  v r#| j                  |   }| j                  ||       |S | j                   |   j                  }t        |      r ||       S || j                  |<   |S |j                  d      r&| j                  j                  d|}t!        |      t#        d      |z  }t!        |      # t        $ r }t        j                  d|       Y d }~d }~ww xY w)Nz%sr   z object has no attribute zNo such config value: %r)r   r   r>   r(   __dict__r  rp   r  r  r  r   rj   r  
startswithrq   r,   AttributeErrorr   )rN   r)   r*   r  rj   r   s         r%   __getattr__zConfig.__getattr__  sP   4== t&-!%-*/DMM$' L! 224?E $$T51 Lt'''((.  u-mmD)11G t}$")DMM$N??3^^,,//HQC %%+,t3S!!) " .NN4--.s   D2 2	E;EEc                    t        | |      S rL   )r!  r  s     r%   __getitem__zConfig.__getitem__  s    tT""r$   c                    t        | ||       y rL   )setattr)rN   r)   r*   s      r%   __setitem__zConfig.__setitem__  s    dE"r$   c                    t        | |       y rL   )delattrr  s     r%   __delitem__zConfig.__delitem__  s    dr$   c                    || j                   v S rL   r   r  s     r%   __contains__zConfig.__contains__  s    t}}$$r$   c              #     K   | j                   j                         D ](  \  }}t        |t        | |      |j                         * y wrL   )r   rC   r'   r!  r+   )rN   r)   r  s      r%   __iter__zConfig.__iter__  sB     ,,. 	FID#dGD$$7EE	Fs   AA	c                    || j                   v rt        t        d      |z        t        |t              r|rdnd}t        |      }t        ||||      | j                   |<   y )NzConfig value %r already presentr   r   )r   r   r   r>   r\   _validate_valid_typesrh   )rN   r)   rj   r+   r]   rl   rk   s          r%   addz
Config.add  s`     4==  $E!F!MNN gt$&eBG ,E2"7G[+Ndr$   c                P    t        t              rfd| D        S fd| D        S )Nc              3  B   K   | ]  }|j                   k(  s|  y wrL   r+   r7   r*   r+   s     r%   r:   z Config.filter.<locals>.<genexpr>  s     Heu}}/GEHs   c              3  @   K   | ]  }|j                   v s|  y wrL   r=  r>  s     r%   r:   z Config.filter.<locals>.<genexpr>  s     D%5==G+CDs   )r>   r(   )rN   r+   s    `r%   filterzConfig.filter  s#    gs#HtHHD4DDr$   c                2   | j                   j                         D ci c]$  \  }}|j                  d      st        |      r||& }}}i x|d<   }| j                  j                         D ]  \  }}t        |t              s5t        |t              r%t        |      dk  rt        | x| j                  |<   }t        | |      }t        |      s1|j                  r#t        j                  t        d      |ddd       d	}||j                  f||<    |S c c}}w )
z'Obtains serializable data for pickling.r   r      zkcannot cache unpickleable configuration value: %r (because it contains a function, class, or module object)r   cacheT)rf   subtypeonceN)r(  rC   r)  r6   r   r>   rh   rE   r  r!  r+   r  r  r   )rN   r8   r*   r(  r   r)   r  
real_values           r%   r   zConfig.__getstate__  s   
 #mm113
U>>#&?5+A J
 
 +-,x,,. 	5ID#c4(ZU-CCTU,0#J6d#c t,J":.;; NNX % '! # 	 "
'4HTN/	52 A
s   )Dc                   i | _         |j                  d      j                         D ci c]  \  }\  }}|t        ||t	                       c}}}| _        i | _        | j                  j                  |       y c c}}}w )Nr   )	r   r   rC   rh   rG   r   r   r(  update)rN   r   r)   rF  r+   s        r%   r   zConfig.__setstate__+  sv     05yy/D/J/J/L
 
++z7 $z7IK88
 U#
s   #A;)NN)r   dict[str, Any] | Noner   rI  r`   ra   )r`   r   )r`   dict[str, Any]r   )
r  ztype[Config]r	  zstr | os.PathLike[str]r   rJ  r  r   r`   r   )r)   r(   r*   r(   r`   r   )r`   ra   rb   )r8   r(   r*   r   r`   ra   )r)   r(   r`   r   )r)   r(   r*   r   r`   ra   )r)   r(   r`   ra   )r)   r(   r`   r\   )r`   Iterator[ConfigValue]r   )r)   r(   rj   r   r+   r   r]   type | Collection[type] | ENUMrl   r(   r`   ra   )r+   zSet[_ConfigRebuild]r`   rK  )r   rJ  r`   ra   ),r,   r-   r.   rc   rh   rG   r(   rE   rD   r\   rJ   r   rA   r]   r^   rF   r   r   r/   rP   propertyr   r   r  classmethodr  r  staticmethodr  r  r  rY   rp   r+  r-  r0  r3  r5  r7  r:  r@  r   r   r   r   s   @r%   r   r      s   	$R&4.y#7HIR& 	$,eYv5FGR& 	T"fieT8J.KL	R&
 	T3sE4()
R& 	4E9cV#45R& 	4E9cV#45R& 	b%C6!23R& 	T$y#'89R& 	Dui&78R&  	tYK	4-0HI!R&" 	#D$eYv->%
#R&( 	+D	9dWCU,V)R&* 	'5$tUL.I)
+R&0 	d7E9cV+<=1R&2 	D95)SFBST3R&8 	v'9:E3G9R&: 	4UIsf4EF;R&< 	DUIsf,=>=R&> 	D$	3&0AB?R&@ 	T5)SF*;<AR&B 	#Dui6H$ICR&D 	Dui.@AER&F 	d4	4'0BCGR&H 	*4eT(E6:,
IR&N 	(eUItg<N)OOR&P 	UE9dW+=>QR&R 	$tVYv->?SR&T 	d9eYv5FGUR&V 	T"eYw-?@WR&X 	$r69dW+=>YR&Z 	4fi.?@[R&\ 	eUItg,>?]R&^ 	T"eYe}-EF_R&` 	d4	4'0BCaR&b 	!$r69dE]3K"LcR&d 	d4	3&(9:eR&f 	d4	3&(9:gR&h 	d4	4'0BCiR&j 	$tUIu~~6G,HIkR&l 	T2y#'89mR&n 	DRD7);<oR&p 	T5)S%..4I*JKqR&r 	DItg$67sR&t 	$r2y#tU1C'DEuR&v 	RYT57I-J KwR&x 	$ueYw%78yR&z 	tAuienn8M.NO{R&~ 	b%D7);<R&@ 	(%C#89*
AR&F 	4ui.@AGR&H 	T$y#/@AIR&J D%D7);<C	3&(9:4	4'(:;D%Cu~~3N)OP4	3&(9:D%D7);<"5%C61BC $2Ptg!

 *.eUItg<N)OcR&M? Rl )-+/!%! )! 
	!6       GG'G "	G
 G 
G G.
`  )K
("@##%F OO O  	O
 .O O 
O&E
#J$r$   r   c                   t        | |      }|j                  dd      #t        j                  t	        d             d|d<   t        ||      S )z+Create a Config object from a conf.py file.r   .zInvalid configuration value found: 'language = None'. Update your configuration to a valid language code. Falling back to 'en' (English).r   )eval_config_filer   r  r  r   r   )	conf_pathr   r  	namespaces       r%   r  r  5  sS     D1I }}Z%-2	
 !%	*)Y''r$   c                   t        |       |d}t        | j                        5  	 t        | j	                         | d      }t        ||       	 ddd       |S # t        $ r}t        d      }t        ||z        |d}~wt        $ r}t        d      }t        |      |d}~wt        $ r  t        $ r1}t        d      }t        |t        j                         z        |d}~ww xY w# 1 sw Y   |S xY w)zEvaluate a config file.)__file__r  execz7There is a syntax error in your configuration file: %s
NzKThe configuration file (or one of the modules it imports) called sys.exit()z=There is a programmable error in your configuration file:

%s)r(   r   parentcompile
read_bytesrV  SyntaxErrorr   r   
SystemExitr"  	traceback
format_exc)r
  r  rS  codeerrr   r  s          r%   rQ  rQ  I  s     M!I
 
x	 E	E8..0(FCDy!	E* !  	2OPCcCi(c1 	,$C c"+ 	 	EVWCcI$8$8$::;D	E#E* s@   C''A	C$!A;;C$BC$3,CC$$C''C1c               p   | s
t               S t        | t         t        f      r| S t        | t              rt        | f      S | t        u rt        t        h      S t        | t
              rt        |       S 	 t        |       S # t        $ r, t        j                  t        d      |        t               cY S w xY w)Nz#Failed to convert %r to a frozenset)
rG   r>   rJ   rf   r   rF   r   r  r  r   )rk   s    r%   r9  r9  h  s     {+	401+t$+((c#+s#%%%% r?@+N{s   5
B   2B54B5c                   |j                   }t        |t              r4|di|_         t        j	                  t        d      ||j                          yt        |t        t        f      rFt        j                  |d      |_         t        j	                  t        d      ||j                          yt        |t              s$t        d      }t        ||t        |      fz        y)zConvert old styled source_suffix to new styled one.

    * old style: str or list
    * new style: a dict which maps from fileext to filetype
    r   z8Converting `source_suffix = %r` to `source_suffix = %r`.zrThe config value `source_suffix' expects a dictionary, a string, or a list of strings. Got `%r' instead (type %s).N)r   r>   r(   r  infor   rD   rE   rA   fromkeysr   rf   )appr   r   r   s       r%   convert_source_suffixre  |  s     ((M-%
 !./ABIJ  	

 
MD%=	1#}}]<NOIJ  	

 t,J
 #]0C DDEE -r$   c                    |j                   }|r5t        d |j                         D              s|j                  |i|_         yyy)zConvert old styled highlight_options to new styled one.

    * old style: options
    * new style: a dict which maps from language name to options
    c              3  <   K   | ]  }t        |t                y wrL   )r>   rA   )r7   vs     r%   r:   z,convert_highlight_options.<locals>.<genexpr>  s     I1:a.I   N)r   rB   r   r   )rd  r   optionss      r%   convert_highlight_optionsrk    sA     &&GsI8HII$*$=$=w#G  Jwr$   c                    t        d      t        d      t        d      t        d      d}|j                  |j                         ||_        y)z$Initialize :confval:`numfig_format`.z
Section %szFig. %szTable %sz
Listing %s)sectionfiguretablez
code-blockN)r   rH  r   )rd  r   r   s      r%   init_numfig_formatrp    sE     \?I,:o	M --.(Fr$   c                0   t        t        j                         j                        dD ]i  }||v s||   }t	        |t               rd|v s"|j                  d      ||<   8t        d |D              sKfd|D        } t        |      |      ||<   k y)z?Replace copyright year placeholders (%Y) with the current year.r   epub_copyright%Yc              3  $   K   | ]  }d |v  
 ywrt  Nr#   )r7   lines     r%   r:   z2evaluate_copyright_placeholders.<locals>.<genexpr>  s     6tt|6s   c              3  B   K   | ]  }|j                  d         ywrv  )replace)r7   rw  
replace_yrs     r%   r:   z2evaluate_copyright_placeholders.<locals>.<genexpr>  s     NT\\$
;Ns   N)r(   time	localtimetm_yearr>   ry  anyrf   )_appr   kr*   rC   rz  s        @r%   evaluate_copyright_placeholdersr    s    T^^%--.J, 	3;)/E%%5= %dJ ?F1I666NNE +UE 2F1I	3r$   c                  	 t        t        dd            x}r t        j                  |      j                  }nyt        j
                         j                  }||k  ryt        |      t        |      	dD ]M  }||v s||   }t        |t              rt        |	      ||<   .	fd|D        } t        |      |      ||<   O y)zCorrect values of copyright year that are not coherent with
    the SOURCE_DATE_EPOCH environment variable (if set)

    See https://reproducible-builds.org/specs/source-date-epoch/
    SOURCE_DATE_EPOCHr  Nrr  c              3  8   K   | ]  }t        |        y wrL   )_substitute_copyright_year)r7   x
current_yrrz  s     r%   r:   z)correct_copyright_year.<locals>.<genexpr>  s       NO.q*jIr=   )
r   r   r{  gmtimer}  r|  r(   r>   r  rf   )
r  r   source_date_epochsource_date_epoch_yearcurrent_yearr  r*   rC   r  rz  s
           @@r%   correct_copyright_yearr    s      ':C @AAA!%->!?!G!G >>#++L--\"J+,J, 	/;)/E%%6uj*Uq	SX (DK.q		/r$   c                    t        |       dk  s| dd j                         s| S | dd |k(  r| dd dv r|| dd z   S | dd dk7  r| S | dd j                         r| dd |k(  r| dd dv r| dd |z   | dd z   S | S )zReplace the year in a single copyright line.

    Legal formats are:

    * ``YYYY``
    * ``YYYY,``
    * ``YYYY ``
    * ``YYYY-YYYY``
    * ``YYYY-YYYY,``
    * ``YYYY-YYYY ``

    The final year in the string is replaced with ``replace_year``.
       N   >   r    r   -	   
   )r  isdigit)copyright_liner  replace_years      r%   r  r    s      >QnRa&8&@&@&Bbq\)nQq.A^.SnQR000ac! 	q##%1Q</1R N2bq!L0>!"3EEEr$   c                   |j                   j                         D ])  \  }}|j                  }|j                  }t	        ||      }t        |      r ||      }||sC|t        t        h      k(  rWt        |t              rP|j                  |      s>t        d      }t        j                  |j                  |||j                        d       t!        |      }t!        |      }	||	u r||v rZt        |v r*|t"        t$        t&        hv rt)        ||t        |             n&t$        |v r|t"        u rt)        ||t%        |             0h |j*                  |t'        |	j*                        z  }
|
j-                  t.               |
ro|rt        d      }t1        d |D              }t3        |      dkD  rd	j5                  |dd
       d|d
    z   }ndj5                  |      }t        j                  |j                  |||      d       t        d      }t        j                  |j                  |||	      d       , y)zCheck all values for deviation from the default value's type, since
    that can result in TypeErrors all over the place NB.
    NzTThe config value `{name}` has to be a one of {candidates}, but `{current}` is given.)r)   currentrO   T)rE  zNThe config value `{name}' has type `{current.__name__}'; expected {permitted}.c              3  <   K   | ]  }d |j                    d  yw)`'N)r,   )r7   cs     r%   r:   z&check_confval_types.<locals>.<genexpr>?  s     (Pq1QZZL):(Pri     rR   z, or z or )r)   r  	permittedzZThe config value `{name}' has type `{current.__name__}', defaults to `{default.__name__}'.)r)   r  rj   )r   rC   rj   rk   r!  r  rG   r   r>   rJ   r_   r   r  r  formatrM   rf   rD   rE   rF   r/  	__bases__discardr   rU   r  rT   )rd  r   r)   r  rj   rk   r*   r   
type_valuetype_defaultcommon_baseswrapped_valid_typesr  s                r%   check_confval_typesr  	  sM    __**, F	c++oo%GfoG?;)SE**k4($$U+0 JJ!5[=T=T   	   %[
G}%$K'J4:L,Li&67+%**<eEl3:--:z:SAWAW=XXV$(C #)(PK(P"P&'!+II1#2671"5678 
 #KK(;<	NN

jI
N  
 4C NN

j,
O  GFr$   c                    |j                   }|rC| j                  j                  |      s't        j	                  t        d      |       d |_         y y y )Nz%primary_domain %r not found, ignored.)r   registry
has_domainr  r  r   )rd  r   r   s      r%   check_primary_domainr  V  sE    **Ncll55nErABNS $ F~r$   c                    | j                   j                  }| j                  j                  dk(  r7d|vr3d|v r/t        j                  t        d             d| j                  _        |S )z:Sphinx 2.0 changed the default from 'contents' to 'index'.r   contentsztSphinx now uses "index" as the master document by default. To keep pre-2.0 behaviour, set "master_doc = 'contents'".)r   docnamesr   r   r  r  r   )rd  r   addedchangedremovedr  s         r%   check_master_docr  ]  sb     {{##H

(8#("N	
 !+

Nr$   c                ~    |j                   j                         dvr!t        d      }t        j	                  |       yy)z"Warn on non-UTF 8 source_encoding.>   utf-8utf8r   zSupport for source encodings other than UTF-8 is deprecated and will be removed in Sphinx 10. Please comment at https://github.com/sphinx-doc/sphinx/issues/13665 if this causes a problem.N)r   lowerr   r  r  )r  r   r   s      r%   deprecate_source_encodingr  v  s?     ##%-KK(
 	s Lr$   c                   | j                  dt        d       | j                  dt        d       | j                  dt        d       | j                  dt        d       | j                  dt
        d       | j                  dt        d       | j                  dt        d       | j                  dt        d       | j                  dt               dddd	S )
Nzconfig-initedi  )priorityi   i  zenv-get-outdatedbuiltinT)r   parallel_read_safeparallel_write_safe)
connectr  re  rk  rp  r  r  r  r  r  )rd  s    r%   r   r     s    KK!:SKIKK!6KEKK!:SKIKK!3cKBKK!@3KOKK!7#KFKK!4sKCKK!5KDKK"$45 "# r$   )rH   r   r1   zfrozenset[int]r`   r\   )rR  r   r   rJ  r  r   r`   r   )r
  r   r  r   r`   rJ  )rk   rL  r`   zfrozenset[type] | ENUM)rd  r   r   r   r`   ra   )r  r   r   r   r`   ra   )r  r(   r  r(   r  r(   r`   r(   )rd  zSphinx | Noner   r   r`   ra   )rd  r   r   r   r  Set[str]r  r  r  r  r`   zIterable[str])rd  r   r`   r   )Frc   
__future__r   r{  r\  r]   
contextlibr   osr   pathlibr   typingr   r   r	   r
   sphinx.errorsr   r   sphinx.localer   r   sphinx.utilr   collections.abcr   r   r   r   r   sphinx.applicationr   sphinx.environmentr   sphinx.util.tagsr   sphinx.util.typingr   r   	getLoggerr,   r  r   r  rf   
ModuleTypeFunctionTyper?   r'   rG   r6   rJ   rd   rh   r   r  rQ  r9  re  rk  rp  r  r  r  r  r  r  r  r   r#   r$   r%   <module>r     sq   ( "       : : 5  MM)3%I			8	$
 e..0B0BC *  =FK 2? ?& -`8 `8Fn$ n$b((>/(FD	H)3/>  '* :=  FJZ%		  	
  2
r$   