
    7 fA                    F   d Z ddlmZ ddlZddlmZmZmZ ddl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rddlmZ ddlmZ ddlmZ ddlmZ  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Anycast)nodes)ElementNode)addnodes)__)logging)get_node_line)Inliner)ObjectDescription)BuildEnvironment)TextlikeNode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                  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     K/var/www/equiseq/venv/lib/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.dZej        ddddfd/d Z	ej        ddddfd0d"Z
d1d&Z	 	 	 d2d3d,ZdS )4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  Tnamestrnamestuple[str, ...]labelhas_argr   rolenamebodyrolenamer   Nonec                Z    || _         || _        || _        || _        || _        || _        d S N)r$   r&   r(   r)   r*   r+   )selfr$   r&   r(   r)   r*   r+   s          r   __init__zField.__init__:   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)r/   r*   r1   r2   r3   r5   r7   r9   r;   rD   msgrefnodelinenonsmessagess                  r   	make_xrefzField.make_xrefJ   s   
 4X%5666(8K666 	98yy888 ~~f%%**844<7?| 3 Q R Rr#ww8LLL+B&e4<P P P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 r.   )rR   )	r/   r*   r1   r2   r3   r5   r7   r9   r;   s	            r   
make_xrefszField.make_xrefsg   s0    
 xH"GX7 7 8 	8r   fieldargcontenttuple[str, list[Node]]c                
    ||fS r.   r"   )r/   rV   rW   s      r   
make_entryzField.make_entryo   s    '""r   typesdict[str, list[Node]]itemtuple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#    r7   r9   r;   r   r   )r5   r7   r9   r;   )r   
field_namer(   TextextendrU   r*   r   r   rL   r+   astext
field_bodyr   field)r/   r[   r1   r]   r7   r9   r;   rV   rW   	fieldname	fieldbodys              r   
make_fieldzField.make_fieldr   sv    !'$R44	 	[C(IT__T]F-5uz14gPX - Z Z [ [ [ w<<171:uz22 GAJ55 :=gaj//Q:N:NGAJqM5:66 ;Oood&7&-aj&7&7&9&9GAJ*-w & S S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%   r+   r%   r   r,   )r*   r%   r1   r%   r2   r%   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   r	   )r*   r%   r1   r%   r2   r%   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r   rS   )rV   r%   rW   rS   r   rX   NNN)r[   r\   r1   r%   r]   r^   r7   r8   r9   r:   r;   r<   r   r_   )__name__
__module____qualname____doc__
is_groupedis_typedr0   r
   literal_emphasisrR   rU   rZ   rk   r"   r   r   r!   r!   *   s          JH
 "$) ) ) ) )" 3;2K*.t,0T- - - - -< 4<3L+/PT-1d8 8 8 8 8# # # # (,"&#'5 5 5 5 5 5 5r   r!   c                  L     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   r,   c                `    t                                          |||d|           || _        d S )NT)superr0   rv   )r/   r$   r&   r(   r*   rv   	__class__s         r   r0   zGroupedField.__init__   s1    ueT8<<<(r   Nr[   r\   r1   itemsr^   r7   r8   r9   r:   r;   r<   r_   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 )Nr#   rb    -- r   r   )r   rc   r(   	list_typer   re   rU   r*   r
   literal_strongrd   	list_itemr   rv   r   rg   rh   )r/   r[   r1   rz   r7   r9   r;   ri   listnoderV   rW   parr   rj   s                 r   rk   zGroupedField.make_field   s?    $R44	>>##!& 	1 	1Hg/##CJJtt}fh'/'>+.( ' T T U U U 5:f%%%C7NCC000HHu::??t0?U_hqk::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%   rv   r   r   r,   rl   r[   r\   r1   r%   rz   r^   r7   r8   r9   r:   r;   r<   r   r_   )rm   rn   ro   rp   rq   r   bullet_listr}   r0   rk   __classcell__ry   s   @r   ru   ru      s          J!ILN:?) ) ) ) ) ) ) (,"&#'5 5 5 5 5 5 5 5 5r   ru   c                  F     e Zd ZdZdZ	 	 	 	 	 	 d!d" fdZ	 	 	 d#d$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"   r#   Fr$   r%   r&   r'   	typenamesr(   r*   typerolenamerv   r   r   r,   c                n    t                                          |||||           || _        || _        d S r.   )rx   r0   r   r   )	r/   r$   r&   r   r(   r*   r   rv   ry   s	           r   r0   zTypedField.__init__   s:     	ueX|DDD"(r   Nr[   r\   r1   rz   r^   r7   r8   r9   r:   r;   r<   r_   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 )NrV   r%   rW   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          j        d          z  }||z  }|S )N)r7   z (r   r   rb   )r|   )r   r   re   rU   r*   r
   r~   rd   popr   r   rf   r   rs   )rV   rW   r   	fieldtypetypenamer1   r7   r9   r;   r/   r[   s        r   handle_itemz*TypedField.make_field.<locals>.handle_item   sI   /##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   r#   r   r   )rV   r%   rW   r%   r   r   )	r   rc   r(   r   rv   r}   r   rg   rh   )r/   r[   r1   rz   r7   r9   r;   r   ri   rV   rW   bodynoderj   s   ``` ```      r   rk   zTypedField.make_field   s    	 	 	 	 	 	 	 	 	 	 	, $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%   rv   r   r   r,   rl   r   )rm   rn   ro   rp   rr   r0   rk   r   r   s   @r   r   r      s         $ H
 "$%'") ) ) ) ) ) )& (,"&#'(5 (5 (5 (5 (5 (5 (5 (5 (5r   r   c                  6    e Zd ZU dZded<   ddZddZd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.
    zdict[str, tuple[Field, bool]]typemap	directiver   r   r,   c                F    || _         |                                | _        d S r.   )r   get_field_type_mapr   )r/   r   s     r   r0   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)r/   r   childs      r   transform_allz!DocFieldTransformer.transform_all  sE      	& 	&E%!122 &u%%%	& 	&r   nodes.field_listc           
     
   | j         }g }i }i }t          t          t          j                 |          D ]n}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<   |                    |           |r6|r3|r0t          |          dk    rt)          |d         t          j                  rt          t*          |          }|d                                         }|                    |j        | j        j        pd||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           pt          j.                    }|D ]}t)          |t          j                  r||z  }"|\  }}}|                    |j         i           }| j        j        j        j        j        }| j        j        j/        } | j        j        pd}!||0                    ||!||| |          z  }|1                    |           dS )z%Transform a single field list *node*.   r   r   Nr#   )NNra   )r5   r7   c                ^    g | ]*}t          |t          j        t          j        f          (|+S r"   )r   r   Inlinerd   ).0ns     r   
<listcomp>z1DocFieldTransformer.transform.<locals>.<listcomp>c  s0    [[[Aej?Y1Z1Z[1[[[r   T)translatablerb   )2r   r   listr   rh   r   rc   rg   rf   splitrK   getr   r   childrenr)   r   upperrd   appendr   r   rU   r   r   r1   statedocumentsettingsr7   clearre   r$   
setdefaultrr   rsplitrL   	rawsourceparentsourcelinerq   r^   r!   r	   rZ   r   r9   rk   replace_self)"r/   r   r   entriesgroupindicesr[   rh   rc   rg   fieldtype_namerV   typedescis_typefieldr   rW   new_fieldnametyped_fieldr2   xrefsr   argtypeargnametranslatable_contentgroup	new_entrynew_listentryr   rz   r;   
fieldtypesr7   r9   r1   s"                                     r   r   zDocFieldTransformer.transform!  s   ,BD')!# $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#E !/qs 3 9 9 ; ;nQRR>P P 4!S8^3M %
= 9 9
1u%%%  F F' FG))jUZ.P.P)"&z8"<"<K$QZ..00F'22#0-3!( 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.4"I00VU58'T\ 1 ^ ^ ^ 	(#####s$   +B88 CC"M**
M76M7N)r   r   r   r,   )r   r   r   r,   )r   r   r   r,   )rm   rn   ro   rp   __annotations__r0   r   r   r"   r   r   r   r     sp           +***6 6 6 6
& & & &w$ w$ w$ w$ w$ w$r   r   )r   r   r   r   )%rp   
__future__r   rI   typingr   r   r   docutilsr   docutils.nodesr   r	   sphinxr
   sphinx.localer   sphinx.utilr   sphinx.util.nodesr   docutils.parsers.rst.statesr   sphinx.directivesr   sphinx.environmentr   sphinx.util.typingr   	getLoggerrm   rE   r   r!   ru   r   r   r"   r   r   <module>r      s    
 # " " " " "     + + + + + + + + + +       ( ( ( ( ( ( ( (                   + + + + + + 0333333333333333333//////		8	$	$
 
 
 
a5 a5 a5 a5 a5 a5 a5 a5H/5 /5 /5 /5 /55 /5 /5 /5dK5 K5 K5 K5 K5 K5 K5 K5\J$ J$ J$ J$ J$ J$ J$ J$ J$ J$r   