
    QjfWu                       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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 ddl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mZ ej@                  dk\  rddl!m"Z" nddlm#Z" er(ddlZddl$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/  ej`                  e1      Z2ed   Z3dZ4e5ejl                  ejn                  fZ8 G d de      Z9 e:       dd-dZ; G d d      Z<ee=d   e=e5df   e:e5   e<f   Z> G d d      Z? G d  d!      Z@d.d"ZA	 	 	 	 d/d#ZBd0d$ZCd0d%ZDd0d&ZEd1d'ZFd2d(ZGd3d)ZHd0d*ZI	 	 	 	 	 	 d4d+ZJd5d,ZKy)6z"Build configuration file handling.    )annotationsN)getenvpath)TYPE_CHECKINGAnyLiteral
NamedTupleUnion)RemovedInSphinx90Warning)ConfigErrorExtensionError)___)logging)fs_encoding)ExtensionMetadataNoneType)      )chdir)_chdir)
CollectionIteratorSequenceSet)Sphinx)BuildEnvironment)Tags)_ExtensionSetupFunc) envepubgettexthtml	applehelpdevhelpzconf.pyc                  ,    e Zd ZU ded<   ded<   ded<   y)ConfigValuestrnamer   value_ConfigRebuildrebuildN)__name__
__module____qualname____annotations__     -lib/python3.12/site-packages/sphinx/config.pyr(   r(   0   s    
IJr3   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r5   Nis_serializable).0keyr+   seens      r4   	<genexpr>z"is_serializable.<locals>.<genexpr>A   s3      
U Ct,Sd1SS
s   ),c              3  8   K   | ]  }t        |         ywr9   r:   )r<   itemr>   s     r4   r?   z"is_serializable.<locals>.<genexpr>G   s     E?4t44Es   )

isinstanceUNSERIALIZABLE_TYPESiddictallitemslisttupleset	frozenset)objr6   r>   s     @r4   r;   r;   6   s    #+, 
#w%#t3y  
!iik
 
 	
 
C$sI6	73y EEEE
 r3   c                       e Zd Z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                    || _         y N
candidates)selfrR   s     r4   __init__zENUM.__init__V   s	    $r3   c                t     t        |t        t        f      rt         fd|D              S | j                  v S )Nc              3  :   K   | ]  }|j                   v   y wrP   rQ   )r<   rA   rS   s     r4   r?   zENUM.match.<locals>.<genexpr>[   s     A4tt.As   )rB   rH   rI   rF   rR   )rS   r+   s   ` r4   matchz
ENUM.matchY   s1    edE]+A5AAADOO++r3   N)rR   zstr | bool | NonereturnNone)r+   zstr | list | tuplerX   bool)r.   r/   r0   __doc__rT   rW   r2   r3   r4   rN   rN   O   s    %,r3   rN   r2   .c                       e Zd ZU dZded<   ded<   de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ddZ xZS )_Optdefaultr-   valid_typesr   r_   r,   r-   _OptValidTypesr`   c                f    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.
        r_   r-   r`   Nsuper__setattr__)rS   r_   r-   r`   	__class__s       r4   rT   z_Opt.__init__j   s2     	Iw/Iw/M;7r3   c                    | j                   j                   d| j                  d| j                  d| j                  dS )Nz	(default=z
, rebuild=z, valid_types=))rf   r0   r_   r-   r`   rS   s    r4   __repr__z_Opt.__repr__|   sM    ~~**+ ,||& '||& '++.a1	
r3   c                    t        |t              rK| j                  | j                  | j                  f}|j                  |j                  |j                  f}||k(  S t
        S rP   )rB   r]   r_   r-   r`   NotImplementedrS   otherself_tpl	other_tpls       r4   __eq__z_Opt.__eq__   sQ    eT"dllD4D4DEHu7H7HIIy((r3   c                    | j                   |j                   u rK| j                  | j                  | j                  f}|j                  |j                  |j                  f}||kD  S t        S rP   )rf   r_   r-   r`   rl   rm   s       r4   __lt__z_Opt.__lt__   sW    >>U__,dllD4D4DEHu7H7HIIi''r3   c                Z    t        | j                  | j                  | j                  f      S rP   )hashr_   r-   r`   ri   s    r4   __hash__z_Opt.__hash__   s"    T\\4<<1A1ABCCr3   c                z    |dv r&| j                   j                  d|}t        |      t        |   ||       y )N>   r_   r-   r`   z' object does not support assignment to )rf   r.   	TypeErrorrd   re   )rS   r=   r+   msgrf   s       r4   re   z_Opt.__setattr__   sC    77^^,,//VWZV]^CC. C'r3   c                x    |dv r&| j                   j                  d|}t        |      t        |   |       y )N>   r_   r-   r`   z% object does not support deletion of )rf   r.   rx   rd   __delattr__)rS   r=   ry   rf   s      r4   r{   z_Opt.__delattr__   sA    77^^,,//TUXT[\CC. C r3   c                H    | j                   | j                  | j                  fS rP   r^   ri   s    r4   __getstate__z_Opt.__getstate__   s    ||T\\4+;+;;;r3   c                r    |\  }}}t         |   d|       t         |   d|       t         |   d|       y )Nr_   r-   r`   rc   )rS   stater_   r-   r`   rf   s        r4   __setstate__z_Opt.__setstate__   s<    (-%+Iw/Iw/M;7r3   c                    t        j                  d| j                  j                  dt        d       | j
                  | j                  | j                  f|   S )NzThe zp object tuple interface is deprecated, use attribute access instead for 'default', 'rebuild', and 'valid_types'.   )
stacklevel)warningswarnrf   r.   r   r_   r-   r`   )rS   rA   s     r4   __getitem__z_Opt.__getitem__   sS    4>>**- .X X$	4 dllD,<,<=dCCr3   )r_   r   r-   r,   r`   ra   rX   rY   rX   r)   )rn   objectrX   rZ   )rn   r]   rX   rZ   )rX   int)r=   r)   r+   r   rX   rY   )r=   r)   rX   rY   )rX   *tuple[Any, _ConfigRebuild, _OptValidTypes])r   r   rX   rY   )rA   zint | slicerX   r   )r.   r/   r0   	__slots__r1   rT   rj   rq   rs   rv   re   r{   r}   r   r   __classcell__)rf   s   @r4   r]   r]   c   ss    3IL88  8 $	8
 
8$
D(!<8Dr3   r]   c                  r   e Zd ZU dZi d eddd      d eddd      d ed	d
 eeeef            d ed d
 eeeef            d ed	dd      d ed	dd      d ed	dd      d edd eef            d edd eef            d edgdd      d edd eef            d eddd      d edd e	dddd            d ed dd      d! ed" dd      d# ed$d%ide
      d& ed'dd      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d      d- eddd      d. edd eef            d/ ed0d e	d0d1d2            d3 eddd      d4 eddd      d5 edd
 eef            d6 ed7dd      d8 ei dd      d9 eg d
d      d: edd
 eef            d; eddd      d< eg dd      d= edd eef            i d> eg d
d      d? edd eef            d@ edd eef            dA eddd      dB edCd eef            dD edd	 eef            dE ei d	d      dF eddd      dG edd	d      dH eg d	 eeeef            dI eg d	 eeeef            dJ eddd      dK edLdd      dM ei dd      dN edd eeef            dO eddd      dP edd eef             eddd       eddd       eddd       edd eef             eddd       edQdd       edRgdSdTgdUdd       eddd      dVZdWedX<   	 	 dl	 	 	 dmdYZedndZ       Zedod[       Ze	 	 dl	 	 	 dpd\       Zdqd]Zedrd^       Zdrd_Zdrd`ZdsdaZdtdbZdtdcZduddZdvdeZ dwdfZ!dxdgZ"	 	 	 	 dydhZ#dzdiZ$d{djZ%d|dkZ&y)}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``.
    projectPythonr!   r2   authorunknownproject_copyrightr    r$   	copyrightc                    | j                   S rP   )r   )cs    r4   <lambda>zConfig.<lambda>   s    a)) r3   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 rP   )r   )configs    r4   r   zConfig.<lambda>   s    (9(9 r3   source_suffixz.rstrestructuredtextsource_encodingz	utf-8-sigexclude_patternsinclude_patternsz**default_roleadd_function_parenthesesadd_module_namestoc_object_entriestoc_object_entries_show_parentsdomainrF   hidetrim_footnote_reference_spaceshow_authorspygments_stylehighlight_languager_   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mantext)	languagesbuilders)math_numfig
tls_verifytls_cacerts
user_agentsmartquotessmartquotes_actionsmartquotes_excludesoption_emphasise_placeholdersdict[str, _Opt]config_valuesc                l   |xs i }|t        |      ni | _        t        j                  j	                         | _        || _        t        | j                  j                               D ]J  }d|v s|j                  d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       | _        y )N.r   setup
extensions,)rE   
_overridesr   r   copy_options_raw_configrH   keyssplitpop
setdefaultgetr   rB   r)   r   )rS   r   	overrides
raw_configr*   	real_namer=   r   s           r4   rT   zConfig.__init__  s   %+\r
-6-B$y/,,113%--/0 	VDd{!%C!3	3<@OO<O<OPT<U
%%i4S9	V
 2<1H
4??*,,\:J*c*+5+;+;C+@
<(+5
<(%/^^L"%Er3   c                    | j                   S rP   r   ri   s    r4   valueszConfig.values%  s    }}r3   c                    | j                   S rP   )r   ri   s    r4   r   zConfig.overrides)  s    r3   c                "   t        j                  |t              }t        j                  |      st	        t        d      |z        t        ||      }|j                  dd      #t        j                  t        d             d|d<    | ||      S )z/Create a Config object from configuration file.z4config directory doesn't contain a conf.py file (%s)r   .zInvalid configuration value found: 'language = None'. Update your configuration to a valid language code. Falling back to 'en' (English).r   )
r   joinCONFIG_FILENAMEisfiler   r   eval_config_filer   loggerwarning)clsconfdirr   tagsfilename	namespaces         r4   readzConfig.read-  s     99Wo6{{8$b!WX%& ' '$Xt4	 ==S)1NN2 @ A B %)Ij!9i((r3   c                   | j                   |   }|j                  }|j                  }|t        k(  r|S t	        |      t
        u s&t        |t              s:t        |      dk(  r,t
        |v r$t        |t              st        |      dkD  r|S |dvS 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t        t        d      |z        |S # t        $ r}t        t        d      ||fz        |d }~ww xY w)Nr   >   r    0zZcannot 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   r_   r`   r   typerZ   rB   rN   lenrE   
ValueErrorr   rH   r   r   callabler)   )rS   r*   r+   optr_   r`   excs          r4   convert_overrideszConfig.convert_overridesC  sj   mmD!++oo#L7mt# d3+&!+0C+t,K0@10D 	))&R !O P"tfJ$789 : : &;;s##%95z! gL GS)AR !1 2489 : : L  9 $U!V"'"/ 05899s   ,
D/ /	E8EEc                      y rP   r2   r2   r3   r4   pre_init_valueszConfig.pre_init_valuesf  s     	r3   c                $    | j                          y rP   )_report_override_warningsri   s    r4   init_valueszConfig.init_valuesn  s    &&(r3   c                    | j                   D ]0  }|| j                  vst        j                  t	        d      |       2 y )Nz-unknown config value %r in override, ignoring)r   r   r   r   r   rS   r*   s     r4   r  z Config._report_override_warningsu  s8    OO 	ZD4==(r"QRTXY	Zr3   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!>=(, rh   )r   getattr	Exceptionappendrf   r0   r   )rS   r   opt_name	opt_values       r4   rj   zConfig.__repr__z  s     	7H'#D(3	 MMXJa	}56	7 ~~**S0499V3DDsJJ  '&	's   A%%A32A3c                   || j                   v r|| j                  v rT| j                  |   }t        |t              s|| j                  |<   |S 	 | j                  ||      }|| j                  |<   |S || j                  v r | j                  |   x| 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   rB   r)   __dict__r  r	  r   r   r   r_   r
  
startswithrf   r.   AttributeErrorr   )rS   r*   r+   r  r_   ry   s         r4   __getattr__zConfig.__getattr__  sL   4== t&-!%-*/DMM$' L! 224?E +0DMM$' Lt'''.2.>.>t.DDd#emmD)11G t}$")DMM$N??3^^,,//HQC %%+,t3S!!' " .NN4--.s   D, ,	E5EEc                    t        | |      S rP   )r  r  s     r4   r   zConfig.__getitem__  s    tT""r3   c                    t        | ||       y rP   )setattr)rS   r*   r+   s      r4   __setitem__zConfig.__setitem__  s    dE"r3   c                    t        | |       y rP   )delattrr  s     r4   __delitem__zConfig.__delitem__  s    dr3   c                    || j                   v S rP   r   r  s     r4   __contains__zConfig.__contains__  s    t}}$$r3   c              #     K   | j                   j                         D ](  \  }}t        |t        | |      |j                         * y wrP   )r   rG   r(   r  r-   )rS   r*   r  s      r4   __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   rB   rZ   _validate_valid_typesr]   )rS   r*   r_   r-   typesr`   s         r4   addz
Config.add  s\    4==  $E!F!MNN gt$&eBG ,E2"7G[Adr3   c                P    t        t              rfd| D        S fd| D        S )Nc              3  B   K   | ]  }|j                   k(  s|  y wrP   r-   r<   r+   r-   s     r4   r?   z Config.filter.<locals>.<genexpr>  s     Heu}}/GEHs   c              3  @   K   | ]  }|j                   v s|  y wrP   r4  r5  s     r4   r?   z Config.filter.<locals>.<genexpr>  s     D%5==G+CDs   )rB   r)   )rS   r-   s    `r4   filterzConfig.filter  s#    gs#HtHHD4DDr3   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   r   zicannot cache unpickable configuration value: %r (because it contains a function, class, or module object)r   cacheT)r  subtypeonceN)r  rG   r   r;   r   rB   r]   rI   r  r  r-   r   r   r   )rS   r=   r+   r  r   r*   r  
real_values           r4   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 W X% '! #  "
'4HTN+	5. =
s   )Dc                    i | _         |j                  d      j                         D ci c]  \  }\  }}|t        ||d       c}}}| _        i | _        | j                  j                  |       y c c}}}w )Nr   r2   )r   r   rG   r]   r   r   r  update)rS   r   r*   r<  r-   s        r4   r   zConfig.__setstate__  st     05yy/D/J/J/L
 
++z7 $z7B//
 U#
s   A3)NN)r   dict[str, Any] | Noner   r?  rX   rY   )rX   r   )rX   dict[str, Any])
r   ztype[Config]r   zstr | os.PathLike[str]r   zdict | Noner  Tags | NonerX   r   )r*   r)   r+   r)   rX   r   )rX   rY   r   )r*   r)   rX   r   )r*   r)   r+   r   rX   rY   )r*   r)   rX   rY   )r*   r)   rX   rZ   )rX   Iterator[ConfigValue])
r*   r)   r_   r   r-   r,   r0  type | Collection[type] | ENUMrX   rY   )r-   zSet[_ConfigRebuild]rX   rB  )rX   rE   )r   rE   rX   rY   )'r.   r/   r0   r[   r]   rK   r)   rI   rH   rN   r   rZ   r   rJ   r   r   r1   rT   propertyr   r   classmethodr  r  staticmethodr  r  r  rj   r"  r   r&  r)  r+  r-  r1  r7  r}   r   r2   r3   r4   r   r      s   	$H&4%,H& 	$y%,H& 	T"fieT8J.KL	H&
 	T)69c5$=O3PRH& 	4E2&H& 	4E2&H& 	b%$H& 	T$y#'89H& 	Dui&78H& 	tYK3H& 	#D)A5)UXTZJ[$\H&  	+D	2,F!H&" 	'5$tUL.I)K#H&( 	d7E2.)H&* 	D95"E+H&0 	'(%61H&4 	4UB75H&6 	DUIsf,=>7H&8 	D$	3&0AB9H&: 	T5)SF*;<;H&< 	#Dub$9=H&> 	Dub1?H&@ 	d4	4'0BCAH&B 	*4eT(E6:,<CH&F 	(eUB)?GH&H 	UE2.IH&J 	$tVYv->?KH&L 	d9eR8MH&N 	T"eR0OH&P 	$r62.QH&R 	4fi.?@SH&T 	eUB/UH&V 	T"eR0WH&X 	d5%D71CDYH&Z 	!$r62"6[H&\ 	d4	3&(9:]H&^ 	d4	3&(9:_H&` 	d43aH&b 	$tUIxk,BCcH&d 	T2y#'89eH&f 	DR,gH&h 	T5"-iH&j 	DB'kH&l 	$r2y#tU1C'DEmH&n 	RYT57I-J KoH&p 	$ueR(qH&r 	tAub1sH&t 	b%,uH&v 	(%C?3*5wH&z 	4ub1{H&| 	T$y#/@A}H&~ D%,4+D%,4	3&(9:D%,"5%4 $&ufo>r!K)-eUB)?OH&M? HT 8<48F1F=AF,     Z^!%))*0) )*!F  )Z
K">##%FB1B6:BE
!F$r3   r   c                \   i }| |d<   ||d<   t        t        j                  |             5  	 t        | d      5 }t	        |j                         | j                  t              d      }t        ||       ddd       ddd       |S # 1 sw Y   xY w# 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  rbexecNz7There is a syntax error in your configuration file: %s
zKThe 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   dirnameopencompiler  encoder   rJ  SyntaxErrorr   r   
SystemExitr  	traceback
format_exc)r  r  r  fcodeerrry   r  s           r4   r   r     s+    "I$IjIf	t||H%	& E	Eh% &qvvx)EvNT9%&E( #& &  	2OPCcCi(c1 	, ) *Cc"+ 	 	EVWCcI$8$8$::;D	E!E( sW   D!B;B4BB	B	DB55DCD-,DDD!!D+c                  | sy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        | t              s	 t        |       } 	 t        |       S # t        $ r$ t        j                  t        d      |        | cY S w xY w# t        $ r | cY S w xY w)Nr2   z&Failed to convert %r to a set or tuple)rB   rK   rN   r  r   rJ   rI   rx   r   r   r   )r`   s    r4   r/  r/    s     +	401+t$+((c#+s#%%k5)	,K%%	  	NN2FGU	
  s$   <B 
C *C ?C CCc                   |j                   }t        |t              r
|di|_         yt        |t        t        f      rt
        j                  |d      |_         yt        |t
              s"t        j                  t        d|z               y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
    NzeThe config value `source_suffix' expects a string, list of strings, or dictionary. But `%r' is given.)
r   rB   r)   rH   rI   rE   fromkeysr   r   r   )appr   r   s      r4   convert_source_suffixrZ  (  sz     ((M-%
 !.t4	MD%=	1#}}]DAt,r /1>? @ 	A -r3   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rP   )rB   rE   )r<   vs     r4   r?   z,convert_highlight_options.<locals>.<genexpr>E  s     I1:a.I   N)r   rF   r   r   )rY  r   optionss      r4   convert_highlight_optionsr`  >  sD     &&GsI8HII$*$=$=$+$-  Jwr3   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   r>  r   )rY  r   r   s      r4   init_numfig_formatre  K  sC     !, |
m#$\?4M --.(Fr3   c                $   t        d      x}yt        t        j                  t	        |            j
                        dD ]K  }||v s||   }t        |t              rt        |      ||<   -fd|D        } t        |      |      ||<   M 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_EPOCHN)r   epub_copyrightc              3  6   K   | ]  }t        |        y wrP   )_substitute_copyright_year)r<   xsource_date_epoch_years     r4   r?   z)correct_copyright_year.<locals>.<genexpr>h  s     ^ST3A7MN^s   )	r   r)   timegmtimer   tm_yearrB   rj  r  )_appr   source_date_epochkr+   rG   rl  s         @r4   correct_copyright_yearrs  W  s     $$788A S1B-C!D!L!LM, /;)/E%%6u>TUq	^X]^'DK.q	/r3   c                    t        |       dk  s| dd j                         s| S | dd dv r|| dd z   S | d   dk7  r| S | dd j                         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 ``

    The final year in the string is replaced with ``replace_year``.
       N   >   r     r   -	   
   )r  isdigit)copyright_linereplace_years     r4   rj  rj  l  s     >QnRa&8&@&@&Ban,nQR000aCa""$")=)Obq!L0>!"3EEEr3   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 rh |j"                  |t%        |	j"                        z  }
|
j'                  t(               |
r|rt        d      }t+        d |D              }t-        |      dkD  rd	j/                  |dd
       d|d
    z   }ndj/                  |      }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*   currentrR   T)r;  zNThe config value `{name}' has type `{current.__name__}'; expected {permitted}.c              3  <   K   | ]  }d |j                    d  yw)`'N)r.   )r<   r   s     r4   r?   z&check_confval_types.<locals>.<genexpr>  s     (Pq1QZZL):(Pr^  r   r  z, or z or )r*   r  	permittedzZThe config value `{name}' has type `{current.__name__}', defaults to `{default.__name__}'.)r*   r  r_   )r   rG   r_   r`   r  r
  rK   r   rB   rN   rW   r   r   r   formatrR   r  	__bases__rJ   discardr   sortedr  r   )rY  r   r*   r  r_   r`   r+   ry   
type_valuetype_defaultcommon_baseswrapped_valid_typesr  s                r4   check_confval_typesr    s    __**, 9	c++oo%GfoG?;)SE**k4($$U+ 5 6JJD%KDZDZJ[   %[
G}%$;*..;
;l4456V$ - .C"((PK(P"P&'!+!YY':3B'?@!&':2'>&?@A	 #KK(;<	NN

jI
N  
  9 :CNN

j,
O  m9r3   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   )rY  r   r   s      r4   check_primary_domainr    sE    **Ncll55nErABNS $ F~r3   c                    | j                   j                  dk(  r_d| j                  j                  vrGd| j                  j                  v r/t        j                  t        d             d| j                   _        |S )zjAdjust root_doc to 'contents' to support an old project which does not have
    any root_doc setting.
    r   contentszkSince v2.0, Sphinx uses "index" as root_doc by default. Please add "root_doc = 'contents'" to your conf.py.)r   r   r   docnamesr   r   r   )rY  r!   addedchangedremoveds        r4   check_root_docr    sf    
 	

w&3;;///#++...r R S 	T(

Nr3   c                Z   | 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   )priorityzenv-get-outdatedbuiltinT)r   parallel_read_safeparallel_write_safe)connectrZ  r`  re  rs  r  r  r  )rY  s    r4   r   r     s    KK!6KEKK!:SKIKK!3cKBKK!7#KFKK!4sKCKK!5KDKK"N3 "# r3   )rL   r   r6   zfrozenset[int]rX   rZ   )r  r)   r  rA  rX   r@  )r`   rC  rX   z5tuple[()] | tuple[type, ...] | frozenset[type] | ENUM)rY  r   r   r   rX   rY   )rp  r   r   r   rX   rY   )r|  r)   r}  r)   rX   r)   )rY  zSphinx | Noner   r   rX   rY   )rY  r   r!   r   r  set[str]r  r  r  r  rX   r  )rY  r   rX   r   )Lr[   
__future__r   sysrm  rQ  r0  r   osr   r   typingr   r   r   r	   r
   sphinx.deprecationr   sphinx.errorsr   r   sphinx.localer   r   sphinx.utilr   sphinx.util.osutilr   sphinx.util.typingr   r   version_info
contextlibr   r   collections.abcr   r   r   r   sphinx.applicationr   sphinx.environmentr   sphinx.util.tagsr   r   	getLoggerr.   r   r,   r   r  
ModuleTypeFunctionTyperC   r(   rK   r;   rN   rI   ra   r]   r   r   r/  rZ  r`  re  rs  rj  r  r  r  r   r2   r3   r4   <module>r     sh   ( " 
      A A 7 5   * :w 2CC)3%6			8	$ e..0B0BC *  =FK 2, ," uRy%c	"2IdOTIJLD LD^}$ }$@
:/:2A,
-	)/*8=@%$/7<Dr3   