
    }c?                     H   d Z ddlmZmZmZ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 ddlmZ ddlmZ dd	lmZ dd
lmZ erddlmZ  ej        e          Zdej        de fdZ! G d d          Z" G d de"          Z# G d de#          Z$ G d d          Z%dS )zUtility code for "Doc fields".

"Doc fields" are reST field lists in object descriptions that will
be domain-specifically transformed to a more appealing presentation.
    )TYPE_CHECKINGAnyDictListTupleTypeUnioncast)nodes)Node)Inliner)addnodes)BuildEnvironment)__)logging)TextlikeNode)ObjectDescriptionnodereturnc                     t          |           dk    rdS t          |           dk    r*| dd         D ]}t          |t          j                  s dS  t          | d         t          j                  rdS dS )zCTrue if the node only contains one paragraph (and system messages).r   F   NT)len
isinstancer   system_message	paragraph)r   subnodes     5lib/python3.11/site-packages/sphinx/util/docfields.py_is_single_paragraphr      s    
4yyA~ u	TQ ABBx 	 	Ggu';<< uu$q'5?++ t5    c                      e Zd ZdZdZdZ	 	 ddedeedf         d	ed
edededdfdZ	e
j        ddddfdedededee         dededededefdZe
j        ddddfdedededee         dededededee         fdZdedee         deeee         f         fdZ	 	 ddeeee         f         dedededededej        fdZdS ) Fielda  A doc field that is never grouped.  It can have an argument or not, the
    argument can be linked using a specified *rolename*.  Field should be used
    for doc fields that usually don't occur more than once.

    The body can be linked using a specified *bodyrolename* if the content is
    just a single inline or text node.

    Example::

       :returns: description of the return value
       :rtype: description of the return type
    F NTnamenames.labelhas_argrolenamebodyrolenamer   c                 Z    || _         || _        || _        || _        || _        || _        d S N)r#   r$   r%   r&   r'   r(   )selfr#   r$   r%   r&   r'   r(   s          r   __init__zField.__init__5   s3    	

 (r   domaintarget	innernodecontnodeenvinlinerlocationc	           	      T   |J |d u |d u k    sJ ||f            |s|p |||          S |                     |                              |          }	|	||	<|:t          d          }
t                              t          |
          |||           t          j        d|d||          }||p |||          z  }|                     |                              |           |S t          j	        |          d         } |	|||||i g           \  }}t          j        |dg|R  S )Nz]Problem in %s domain: field is supposed to use role '%s', but that role is not in the domain.)r3    F)	refdomainrefexplicitreftype	reftargetr   )
get_domainroler   loggerwarningr   pending_xrefprocess_field_xrefr   get_source_liner   inline)r+   r'   r-   r.   r/   r0   r1   r2   r3   r;   msgrefnodelinenonsmessagess                  r   	make_xrefzField.make_xref>   s   
 4X%56KK(8KKKK 	98yy888 ~~f%%**844 		7 		 M M Q R Rr#ww8LLL+B&e4<P P PGx<99VV#<#<<GNN6""55g>>>N(2215tHfffgr2NNH|FB,,,,,r   c	           
      <    |                      ||||||||          gS r*   )rG   )	r+   r'   r-   r.   r/   r0   r1   r2   r3   s	            r   
make_xrefszField.make_xrefsX   s0     xH"GX7 7 8 	8r   fieldargcontentc                 
    ||fS r*   r"   )r+   rJ   rK   s      r   
make_entryzField.make_entry_   s    '""r   typesitemc                    |\  }}t          j        d| j                  }	|rU|	t          j        d          z  }	|	                    |                     | j        ||t           j        |||                     t          |          dk    rt          |d         t           j                  s_t          |d         t           j	                  r~t          |d                   dk    ret          |d         d         t           j                  r?|                     | j
        ||d                                         |d         |||          }t          j        dt          j        ddg|R            }
t          j        d|	|
          S )Nr5    r1   r2   r3   r   r   )r0   r1   r2   r3   )r   
field_namer%   TextextendrI   r'   r   r   rA   r(   astext
field_bodyr   field)r+   rN   r-   rO   r1   r2   r3   rJ   rK   	fieldname	fieldbodys              r   
make_fieldzField.make_fieldb   s    !'$R44	 	[C(IT__T]F-5uz14gPX - Z Z [ [ [ w<<1 	S71:uz22	SGAJ55	S:=gaj//Q:N	S GAJqM5:66	S ood&7&-aj&7&7&9&9GAJ*-w & S SG $RR)J')J)J)JKK	{2y)444r   )r"   NTNNNNN)__name__
__module____qualname____doc__
is_groupedis_typedstrr   boolr,   r   literal_emphasisr   r   r   r   r   rG   r   rI   rM   r   r   rX   r[   r"   r   r   r!   r!   %   s%         JHLPQU) )S )sCx )c ))14)KN)Z^) ) ) ) 3;2K#'%)D- -# -s -C -!,/- -.>- #- 6:- FJ- - - -6 4<3L$($&*T8 83 8 8S 8"<08!8/?8 $8 7;8 GK4j8 8 8 8#3 #d #c4PT:o@V # # # # 9==A5 5S$t*_ 5 5s 55%55#56:5FKk5 5 5 5 5 5r   r!   c                        e Zd ZdZdZej        Z	 	 ddede	edf         d	ed
ede
ddf fdZ	 	 ddeeee         f         dede	dedededej        fdZ xZS )GroupedFielda  
    A doc field that is grouped; i.e., all fields of that type will be
    transformed into one field with its body being a bulleted list.  It always
    has an argument.  The argument can be linked using the given *rolename*.
    GroupedField should be used for doc fields that can occur more than once.
    If *can_collapse* is true, this field will revert to a Field if only used
    once.

    Example::

       :raises ErrorClass: description when it is raised
    Tr"   NFr#   r$   .r%   r'   can_collapser   c                 `    t                                          |||d|           || _        d S )NT)superr,   rh   )r+   r#   r$   r%   r'   rh   	__class__s         r   r,   zGroupedField.__init__   s1    ueT8<<<(r   rN   r-   itemsr1   r2   r3   c                    t          j        d| j                  }|                                 }|D ]\  }	}
t          j                    }|                    |                     | j        ||	t          j	        |||                     |t          j
        d          z  }||
z  }|t          j        d|          z  }t          |          dk    rX| j        rQt          t           j        |d                   }t          j        d|d                   }t          j        d||          S t          j        d|          }t          j        d||          S )Nr5   rR    -- r   r   )r   rS   r%   	list_typer   rU   rI   r'   r   literal_strongrT   	list_itemr   rh   r
   rW   rX   )r+   rN   r-   rl   r1   r2   r3   rY   listnoderJ   rK   parrq   rZ   s                 r   r[   zGroupedField.make_field   sE    $R44	>>##!& 	1 	1Hg/##CJJtt}fh'/'>+.( ' T T U U U 5:f%%%C7NCC000HHu::? 	9t0 	9U_hqk::I(Yq\::I;r9i888$R22	{2y)444r   )r"   NNFr\   )r]   r^   r_   r`   ra   r   bullet_listro   rc   r   rd   r,   r   r   r   r   r   rX   r[   __classcell__rk   s   @r   rg   rg   x   s          J!ILP<A) )S )sCx )c ))59)FJ) ) ) ) ) ) :>=A5 5S$t*_ 5 5s 55&65#56:5FKk5 5 5 5 5 5 5 5r   rg   c                        e Zd ZdZdZ	 	 	 ddedeedf         d	eedf         d
ededededdf fdZ	 	 dde	ee
e         f         dedededededej        fdZ xZS )
TypedFieldaa  
    A doc field that is grouped and has type information for the arguments.  It
    always has an argument.  The argument can be linked using the given
    *rolename*, the type using the given *typerolename*.

    Two uses are possible: either parameter and type description are given
    separately, using a field from *names* and one from *typenames*,
    respectively, or both are given using a field from *names*, see the example.

    Example::

       :param foo: description of parameter foo
       :type foo:  SomeClass

       -- or --

       :param SomeClass foo: description of parameter foo
    Tr"   NFr#   r$   .	typenamesr%   r'   typerolenamerh   r   c                 n    t                                          |||||           || _        || _        d S r*   )rj   r,   ry   rz   )	r+   r#   r$   ry   r%   r'   rz   rh   rk   s	           r   r,   zTypedField.__init__   s:     	ueX|DDD"(r   rN   r-   rl   r1   r2   r3   c           	          dt           dt           dt          j        f fd}t          j        d j                  }t          |          dk    r j        r|d         \  }	}
 ||	|
          }n>                                 }|D ]'\  }	}
|t          j        d ||	|
                    z  }(t          j	        d|          }t          j
        d||          S )NrJ   rK   r   c                    t          j                    }|                    	                    	j        | t
          j                             | 
v r|t          j        d          z  }
                    |           }t          |          dk    ryt          |d         t           j                  rY|d                                         }|                    	                    	j        |t
          j                             n||z  }|t          j        d          z  }|t          j        d          z  }||z  }|S )N)r1   z (r   r   rR   )rn   )r   r   rU   rI   r'   r   rp   rT   popr   r   rV   rz   re   )rJ   rK   rs   	fieldtypetypenamer-   r1   r2   r3   r+   rN   s        r   handle_itemz*TypedField.make_field.<locals>.handle_item   sO   /##CJJtt}fh'/'>C ' I I J J J5  'uz$''' "IIh//	y>>Q& %:ilEJ+O+O %(|2244HJJtt/@&(/7/Hc7>  /  S  S T T T T 9$Cuz#&5:f%%%C7NCJr   r5   r   r   )rc   r   r   rS   r%   r   rh   ro   rq   rW   rX   )r+   rN   r-   rl   r1   r2   r3   r   rY   rJ   rK   bodynoderZ   s   ``` ```      r   r[   zTypedField.make_field   s   	# 	 	 	 	 	 	 	 	 	 	 	 	 	, $R44	u::? 	Pt0 	P %aHg([7;;HH~~''H%* P P!'EOBHg0N0NOOO$R22	{2y)444r   )r"   r"   NNNFr\   )r]   r^   r_   r`   rb   rc   r   rd   r,   r   r   r   r   r   r   rX   r[   ru   rv   s   @r   rx   rx      s        $ H\^NR&+) )S )sCx )%PSUXPX/ )).1)HK)#)04) ) ) ) ) ) :>=A"5 "5S$t*_ 5 "5s "5"5&6"5#"56:"5FKk"5 "5 "5 "5 "5 "5 "5 "5r   rx   c                   z    e Zd ZU dZeeeeef         f         e	d<   ddZ
dej        ddfd	Zdej        ddfd
ZdS )DocFieldTransformerz
    Transforms field lists in "doc field" syntax into better-looking
    equivalents, using the field type definitions given on a domain.
    typemap	directiver   r   Nc                 F    || _         |                                | _        d S r*   )r   get_field_type_mapr   )r+   r   s     r   r,   zDocFieldTransformer.__init__   s     " 3355r   r   c                 n    |D ]1}t          |t          j                  r|                     |           2dS )z,Transform all field list children of a node.N)r   r   
field_list	transform)r+   r   childs      r   transform_allz!DocFieldTransformer.transform_all   sE      	& 	&E%!122 &u%%%	& 	&r   c           
      
   | j         }g }i }i }t          t          t          j                 |          D ]l}t          |          dk    sJ t          t          j        |d                   }t          t          j        |d                   }	 |                                	                    dd          \  }	}
n&# t          $ r |                                d}
}	Y nw xY w|                    |	d          \  }}t          |          r(t          t          j        |d                   }|j        }n|j        }||j        t!          |
          k    r|	dd                                         |	dd         z   }|
r|d|
z   z  }t          j        |          |d<   |                    |           |r4|r1|r.t          |          dk    rt)          |d         t          j                  rt          t*          |          }|d                                         }|                    |j        | j        j        ||d         | j        j        j        j        j                  }t          |          rJt          t          j        |d                   }|                                 |                    |           n*|                                 |t          j        ddg|R  z  }|j         }|r)d	 |D             }|r||!                    |i           |
<   |j"        rY	 |
#                    dd          \  }}t          j        |          g|!                    |i           |<   |}
n# t          $ r Y nw xY wt          j$        |j%        d
          }|j&        j        |_        |j&        j'        |_'        |j&        j(        |_(        ||z  }|j)        r||v r:t          tT          tV          t          tX          f         |||                            }n,t          |          ||<   |g |f}|                    |           |-                    |
|g          }|d                             |           =|-                    |
|g          }|                    |||f           nt          j.                    }|D ]}t)          |t          j                  r||z  }"|\  }}}|                    |j         i           }| j        j        j        j        j        }| j        j        j/        } ||0                    || j        j        ||| |          z  }|1                    |           dS )z%Transform a single field list *node*.   r   r   Nr5   )NNrQ   )r0   r1   c                 ^    g | ]*}t          |t          j        t          j        f          (|+S r"   )r   r   InlinerT   ).0ns     r   
<listcomp>z1DocFieldTransformer.transform.<locals>.<listcomp>:  s0    [[[Aej?Y1Z1Z[1[[[r   T)translatablerR   )2r   r
   r   r   rX   r   rS   rW   rV   split
ValueErrorgetr   r   childrenr&   rd   upperrT   appendr   rx   rI   rz   r   r-   statedocumentsettingsr1   clearrU   r#   
setdefaultrb   rsplitrA   	rawsourceparentsourcelinera   r   r!   r   rM   r   r2   r[   replace_self)!r+   r   r   entriesgroupindicesrN   rX   rS   rW   fieldtype_namerJ   typedescis_typefieldr   rK   new_fieldnametyped_fieldr.   xrefsr   argtypeargnametranslatable_contentgroup	new_entrynew_listentryr   rl   r3   
fieldtypesr1   r2   s!                                    r   r   zDocFieldTransformer.transform   s   ,EG')!# $u{+T22 ]	= ]	=Eu::?"""e.a99Je.a99JC+5+<+<+>+>+D+DT1+M+M( C C C+5+<+<+>+>C &-[[%N%N"Hl $J// . *Q-@@	#,$-  8#3tH~~#E  !/qs 3 9 9 ; ;nQRR>P P 4!S8^3M %
= 9 9
1u%%%  F F' FG)F.8UZ.P.PF"&z8"<"<K$QZ..00F'22#0-!( N09BF 3  E ,J77 F$(*Q-$H$H	!)))!((////"((***"eob"&Eu&E&E&EE
}H   \[g[[[ G?FE$$Xr228<   '''/tQ'?'?$GW
 G,,- $$Xr227;&HH "   D $)<
0D=A$C $C $C ,6,=,F )*4*;*B '(2(9(> % G+  " =|+ * udD'8!97<PXCY;Z[[EE-0\\L*%r51ENN5)))$//;O:PQQ	a	****$//;O:PQQ	)U;<<<< #%% 
	^ 
	^E%-- 	^E!-2*	5("YYy~r::
n*3<@..6I00T^=RTY58'T\ 1 ^ ^ ^ 	(#####s$   +B88 CC M((
M54M5)r   r   r   N)r]   r^   r_   r`   r   rc   r   r!   rd   __annotations__r,   r   desc_contentr   r   r   r   r"   r   r   r   r      s           #uUD[))****6 6 6 6
&("7 &D & & & &v$e. v$4 v$ v$ v$ v$ v$ v$r   r   N)&r`   typingr   r   r   r   r   r   r	   r
   docutilsr   docutils.nodesr   docutils.parsers.rst.statesr   sphinxr   sphinx.environmentr   sphinx.localer   sphinx.utilr   sphinx.util.typingr   sphinx.directivesr   	getLoggerr]   r<   rW   rd   r   r!   rg   rx   r   r"   r   r   <module>r      s   
 L K K K K K K K K K K K K K K K K K K K             / / / / / /       / / / / / /             + + + + + + 4333333		8	$	$
u/ 
D 
 
 
 
P5 P5 P5 P5 P5 P5 P5 P5f)5 )5 )5 )5 )55 )5 )5 )5X>5 >5 >5 >5 >5 >5 >5 >5BI$ I$ I$ I$ I$ I$ I$ I$ I$ I$r   