
    -Ph_G                       U d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZ ervd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 ddlmZ  ed          Zee e!e         f         Z"de#d<   e$e e!e         f         Z%de#d<   ede"e!e"         z  ef         Z&de#d<    ej'        e(          Z)d"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.
    )annotationsN)TYPE_CHECKINGcast)nodes)addnodes)__)logging)get_node_line)	TypeAliasTypeVar)ElementNode)Inliner)ObjectDescription)BuildEnvironment)TextlikeNodeObjDescTr   _FieldEntry_FieldTypesField_EntriesTriplenodenodes.field_bodyreturnboolc                    t          |           dk    rdS t          |           dk    r*| dd         D ]}t          |t          j                  s dS  t          | d         t          j                  S )zCTrue if the node only contains one paragraph (and system messages).r   F   N)len
isinstancer   system_message	paragraph)r   subnodes     U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/util/docfields.py_is_single_paragraphr$   %   ss    
4yyA~~u	TQABBx 	 	Ggu';<< uud1gu///    c                      e Zd ZdZdZdZ	 	 	 	 	 d,d-dZej        ddddfd.d Z	ej        ddddfd/d"Z
d0d&Z	 	 	 d1d2d+ZdS )3r   a  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  Tnamestrnamestuple[str, ...]labelhas_argr   rolenamebodyrolenamer   Nonec                Z    || _         || _        || _        || _        || _        || _        d S N)r)   r+   r-   r.   r/   r0   )selfr)   r+   r-   r.   r/   r0   s          r#   __init__zField.__init__A   s5     	

 (r%   Ndomaintarget	innernodetype[TextlikeNode]contnodeNode | NoneenvBuildEnvironment | NoneinlinerInliner | NonelocationElement | Noner   c	           	        |J |d u |d u k    sJ ||f            |s|p |||          S |                     |                              |          }	|	||	<|:t          d          }
t                              t          |
          |||           t          j        d|d||          }||p |||          z  }|                     |                              |           |S d}|@t          j	        t                    5  t          |          }d d d            n# 1 swxY w Y    |	|||||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.)r@   r(   F)	refdomainrefexplicitreftype	reftarget)
get_domainroler   loggerwarningr   pending_xrefprocess_field_xref
contextlibsuppress
ValueErrorr
   r   inline)r4   r/   r6   r7   r8   r:   r<   r>   r@   rI   msgrefnodelinenonsmessagess                  r#   	make_xrefzField.make_xrefQ   s    4X%5666(8K666 	98yy888 ~~f%%**844<7?| 3L  r#ww8LLL+ !    G x<99VV#<#<<GNN6""55g>>>N$Z00 1 1&x001 1 1 1 1 1 1 1 1 1 1 1 1 1 1tHfffgr2NNH|FB,,,,,s   D""D&)D&
list[Node]c	           
     <    |                      ||||||||          gS r3   )rW   )	r4   r/   r6   r7   r8   r:   r<   r>   r@   s	            r#   
make_xrefszField.make_xrefs|   s0     NN&&)XsGX 
 	
r%   fieldargcontentr   c                
    ||fS r3   r'   )r4   r[   r\   s      r#   
make_entryzField.make_entry   s      r%   typesr   itemnodes.fieldc                   |\  }}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 )Nr(    r<   r>   r@   r   r   )r:   r<   r>   r@   )r   
field_namer-   TextextendrZ   r/   r   r   rQ   r0   astext
field_bodyr!   field)r4   r_   r6   r`   r<   r>   r@   r[   r\   	fieldname	fieldbodys              r#   
make_fieldzField.make_field   s}    !'$R44	 	C(IMJ#%    
 
 
 w<<1wqz5:..  71:u|44  
OOq((wqz!}ej99 ) oo!
!!## ! &  G $RR)J')J)J)JKK	{2y)444r%   )r'   r(   Tr(   r(   )r)   r*   r+   r,   r-   r*   r.   r   r/   r*   r0   r*   r   r1   )r/   r*   r6   r*   r7   r*   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   r   r   )r/   r*   r6   r*   r7   r*   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   r   rX   )r[   r*   r\   rX   r   r   NNN)r_   r   r6   r*   r`   r   r<   r=   r>   r?   r@   rA   r   ra   )__name__
__module____qualname____doc__
is_groupedis_typedr5   r   literal_emphasisrW   rZ   r^   rm   r'   r%   r#   r   r   0   s          JH
 "$) ) ) ) )* )1(A $'+"&#')- )- )- )- )-` )1(A $'+"&#'
 
 
 
 
"! ! ! ! (,"&#'+5 +5 +5 +5 +5 +5 +5r%   c                  P     e Zd ZdZdZej        Z	 	 	 	 dd  fdZ	 	 	 d!d"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'   r(   Fr)   r*   r+   r,   r-   r/   can_collapser   r   r1   c                `    t                                          |||d|           || _        d S )NT)superr5   rx   )r4   r)   r+   r-   r/   rx   	__class__s         r#   r5   zGroupedField.__init__   s3     	ueT8<<<(r%   Nr_   r   r6   itemslist[_FieldEntry]r<   r=   r>   r?   r@   rA   ra   c                   t          j        d| j                  }|                                 }|D ]\  }	}
t          j                    }|                    |                     | j        ||	t          j	        |||                     |t          j
        d          z  }||
z  }|t          j        d|          z  }t          |          dk    rN| j        rGt          d|d                   }t          j        d|d                   }t          j        d||          S t          j        d|          }t          j        d||          S )Nr(   rd    -- r   znodes.list_itemr   )r   re   r-   	list_typer!   rg   rZ   r/   r   literal_strongrf   	list_itemr   rx   r   ri   rj   )r4   r_   r6   r|   r<   r>   r@   rk   listnoder[   r\   parr   rl   s                 r#   rm   zGroupedField.make_field   s?    $R44	>>##!& 	1 	1Hg/##CJJM+#%    
 
 
 5:f%%%C7NCC000HHu::??t0?.<<I(Yq\::I;r9i888$R22	{2y)444r%   )r'   r(   r(   F)r)   r*   r+   r,   r-   r*   r/   r*   rx   r   r   r1   rn   r_   r   r6   r*   r|   r}   r<   r=   r>   r?   r@   rA   r   ra   )ro   rp   rq   rr   rs   r   bullet_listr   r5   rm   __classcell__r{   s   @r#   rw   rw      s        
 
 J!I
 "$"	) 	) 	) 	) 	) 	) 	)  (,"&#'"5 "5 "5 "5 "5 "5 "5 "5 "5r%   rw   c                  F     e Zd ZdZdZ	 	 	 	 	 	 d!d" fdZ	 	 	 d#d$d Z xZS )%
TypedFielda\  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'   r(   Fr)   r*   r+   r,   	typenamesr-   r/   typerolenamerx   r   r   r1   c                n    t                                          |||||           || _        || _        d S r3   )rz   r5   r   r   )	r4   r)   r+   r   r-   r/   r   rx   r{   s	           r#   r5   zTypedField.__init__  s:     	ueX|DDD"(r%   Nr_   r   r6   r|   r}   r<   r=   r>   r?   r@   rA   ra   c           	         d 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 )Nr[   r*   r\   rX   r   nodes.paragraphc                   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          d |D                       }|r|t          j        d          z  }||z  }|S )	N)r<   z (r   r   rd   )c              3  b   K   | ]*}|                                                                 V  +d S r3   )rh   strip).0cs     r#   	<genexpr>z=TypedField.make_field.<locals>.handle_item.<locals>.<genexpr>G  s6      BBQahhjj..00BBBBBBr%   r   )r   r!   rg   rZ   r/   r   r   rf   popr   r   rh   r   ru   any)r[   r\   r   	fieldtypetypenamehas_contentr6   r<   r>   r@   r4   r_   s         r#   handle_itemz*TypedField.make_field.<locals>.handle_item*  sl   /##CJJM68X5LRU      
 5  uz$''' "IIh//	y>>Q&&:ilEJ+O+O&(|2244HJJ -"$$5 #$+%- (  
 
 
 
 9$Cuz#&BB'BBBBBK uz&)))wJr%   r(   r   r   )r[   r*   r\   rX   r   r   )	r   re   r-   r   rx   r   r   ri   rj   )r4   r_   r6   r|   r<   r>   r@   r   rk   r[   r\   bodynoderl   s   ``` ```      r#   rm   zTypedField.make_field!  s    !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	F $R44	u::??t0? %aHg([7;;HH~~''H%* P P!'EOBHg0N0NOOO$R22	{2y)444r%   )r'   r'   r(   r(   r(   F)r)   r*   r+   r,   r   r,   r-   r*   r/   r*   r   r*   rx   r   r   r1   rn   r   )ro   rp   rq   rr   rt   r5   rm   r   r   s   @r#   r   r      s         $ H
 "$%'") ) ) ) ) ) )& (,"&#'55 55 55 55 55 55 55 55 55r%   r   c                  F    e Zd ZU dZded<   ddZddZddZddZddZ	dS )DocFieldTransformerzTransforms field lists in "doc field" syntax into better-looking
    equivalents, using the field type definitions given on a domain.
    zdict[str, tuple[Field, bool]]typemap	directiveObjectDescription[ObjDescT]r   r1   c                F    || _         |                                | _        d S r3   )r   get_field_type_mapr   )r4   r   s     r#   r5   zDocFieldTransformer.__init__`  s     " 3355r%   r   addnodes.desc_contentc                n    |D ]1}t          |t          j                  r|                     |           2dS )z,Transform all field list children of a node.N)r   r   
field_list	transform)r4   r   childs      r#   transform_allz!DocFieldTransformer.transform_alle  sE      	& 	&E%!122 &u%%%	& 	&r%   nodes.field_listc                    g }i }i }t          d|          D ]}|                     ||||           |                     ||          }|                    |           dS )z%Transform a single field list *node*.zlist[nodes.field]N)r   _transform_step_1_transform_step_2replace_self)r4   r   entriesgroupindicesr_   rj   new_lists          r#   r   zDocFieldTransformer.transforml  s{    68')(* -t44 	H 	HE""5'5,GGGG))'599(#####r%   rj   ra   r   "list[nodes.field | _EntriesTriple]r_   dict[str, _FieldTypes]group_indicesdict[str, int]c                2   t          |          dk    sJ t          d|d                   }t          d|d                   }	 |                                                    d d          \  }}n&# t          $ r |                                d}}Y nw xY w| j                            |d          \  }	}
t          |          rt          d|d                   }|j        }n|j        }|	|	j	        t          |          k    ry|dd                                         |dd          z   }|r|d	|z   z  }t          j        |          |d<   |                    |           |	r|
r|rt          |          dk    rt          |d         t          j                  rt          d
|	          }|d                                         }|                    |j        | j        j        pd||d         | j        j                  }t          |          r@t          d|d                   }|                                 |                    |           n*|                                 |t          j        ddg|R  z  }d S |	j        }|
r)d |D             }|r||                    |i           |<   d S |	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          d|||                            }n,t          |          ||<   |	g |f}|                    |           |	#                    ||g          }|d                             |           d S |	#                    ||g          }|                    |	||f           d S )N   znodes.field_namer   r   r   r(   )NNr   rc   r   )r:   r<   c                `    g | ]+}t          |t          j        t          j        z            )|,S r'   )r   r   Inlinerf   )r   ns     r#   
<listcomp>z9DocFieldTransformer._transform_step_1.<locals>.<listcomp>  s0    VVVQZ5<%*;T-U-UVqVVVr%   T)translatablez%tuple[Field, list[_FieldEntry], Node])$r   r   rh   splitrP   r   getr$   childrenr.   r   upperr   rf   appendr   rZ   r   r   r6   r<   clearrg   r!   r)   
setdefaultrt   rsplitrQ   	rawsourceparentdocumentsourceliners   r^   )r4   rj   r   r_   r   re   ri   fieldtype_namer[   typedescis_typefieldr!   r\   new_fieldnametyped_fieldr7   xrefsr   argtypeargnametranslatable_contentgroup	new_entrys                          r#   r   z%DocFieldTransformer._transform_step_1y  s    5zzQ,eAh77
,eAh77
	?'1'8'8':':'@'@q'I'I$NHH 	? 	? 	?'1'8'8':':BHNNN	? "&!1!1.,!O!O,  
++ 	*.
1>>I(GG )G x/4>>AA +1Q3/5577.:LLM 0x/!J}55JqMNN5!!! B B B LLA%%wqz5:66 & #<:: **,,#..,N)/R$QZ* /   (
33 B $%6
1 F FIOO%%%$$U++++$$&&&%/"b"A5"A"A"AAJF=  	 WV'VVVG C;B  2..x8F  	###+??4#;#;  <A:g;N;N:O  2..w7"	      %|J,@tTTT(2(9(B%&0&7&>#$.$5$:!'  	9=((;M(34 
 +.g,,h'!2u-u%%% ++H7K6LMMI!HOOI&&&&& ++H7K6LMMINNHi788888s$   +A/ / BB5K= =
L
	L
c           
     J   t          j                    }|D ]}t          |t           j                  r||z  }"|\  }}}|                    |j        i           }| j        j        }	| j        j        j	        }
| j        j
        pd}||                    ||||	|
|          z  }|S )Nr(   rd   )r   r   r   rj   r   r)   r   r<   stater>   r6   rm   )r4   r   r_   r   entryr   r|   r@   
fieldtypesr<   r>   r6   s               r#   r   z%DocFieldTransformer._transform_step_2  s     #%% 	 	E%-- E!-2*	5("YYy~r::
n(..6.4"I00#% 1    r%   N)r   r   r   r1   )r   r   r   r1   )r   r   r   r1   )
rj   ra   r   r   r_   r   r   r   r   r1   )r   r   r_   r   r   r   )
ro   rp   rq   rr   __annotations__r5   r   r   r   r   r'   r%   r#   r   r   Y  s           +***6 6 6 6
& & & &$ $ $ $i9 i9 i9 i9V     r%   r   )r   r   r   r   )/rr   
__future__r   rN   typingr   r   docutilsr   sphinxr   sphinx.localer   sphinx.utilr	   sphinx.util.nodesr
   r   r   docutils.nodesr   r   docutils.parsers.rst.statesr   sphinx.directivesr   sphinx.environmentr   sphinx.util.typingr   r   tupler*   listr   r   dictr   r   	getLoggerro   rJ   r$   r   rw   r   r   r'   r%   r#   <module>r      s     # " " " " "     & & & & & & & &                         + + + + + + Y)))))))),,,,,,,,333333333333333333//////wz""H"3T
?3K3333!#tDz/2K2222 %g{T+=N/NPW&W XNXXXX		8	$	$0 0 0 0K5 K5 K5 K5 K5 K5 K5 K5\=5 =5 =5 =5 =55 =5 =5 =5@X5 X5 X5 X5 X5 X5 X5 X5ve e e e e e e e e er%   