
    -PhI                       d dl m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 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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'        e(          Z) G d de          Z*	 d/d0dZ+d1d$Z, G d% d&e          Z- G d' d(          Z. G d) d*e          Z/d2d.Z0dS )3    )annotationsN)unified_diff)TYPE_CHECKING)nodes)
directives)addnodes)optional_int)__)logging)parse_line_num_spec)_StrPath)SphinxDirective)AnyClassVar)ElementNode)Sphinx)Config)ExtensionMetadata
OptionSpecc                  T    e Zd ZU dZdZdZdZdZej	        ej
        dZded<   dd
ZdS )	HighlightzoDirective to set the highlighting language for code blocks, as well
    as the threshold for line numbers.
    F   r   )forcelinenothresholdClassVar[OptionSpec]option_specreturn
list[Node]c                    | j         d                                         }| j                            dt          j                  }d| j        v }|| j        j        _        t          j
        |||          gS )Nr   r   r   )langr   r   )	argumentsstripoptionsgetsysmaxsizeenvcurrent_documenthighlight_languager   highlightlang)selflanguager   r   s       V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/directives/code.pyrunzHighlight.run.   ss    >!$**,,,**+<ckJJ4<'7?!4"UO  
 	
    Nr   r   )__name__
__module____qualname____doc__has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer   flagpositive_intr   __annotations__r/    r0   r.   r   r       sx           K %%2) )K    


 

 

 

 

 

r0   r   lines	list[str]dedent
int | Nonelocationtuple[str, int] | Noner   c                   :t          j        d                    |                                         d          S t	          fd| D                       r)t
                              t          d          |           g }| D ]:}|d          }|                    d          r|sd}|	                    |           ;|S )N Tc              3  P   K   | ] }|d                                           V  !d S N)r#   ).0sr@   s     r.   	<genexpr>zdedent_lines.<locals>.<genexpr>A   s7      
-
-!1WfW:
-
-
-
-
-
-r0   z!non-whitespace stripped by dedentrB   
)
textwrapr@   join
splitlinesanyloggerwarningr
   endswithappend)r>   r@   rB   	new_lineslinenew_lines    `    r.   dedent_linesrX   ;   s     ~rwwu~~..99$???

-
-
-
-u
-
-
--- Sr=>>RRRI # #=== 	x 	H""""r0   	directiver   literal_noder   captionstrnodes.containerc                   t          j        dddg          }|                     || j                  }|d         }t	          |t           j                  r3t          d          |                                z  }t          |          t	          |t           j	                  rAt          j
        |j        dg|j        R  }|j        |_        |j        |_        ||z  }||z  }|S t          )NrE   Tzliteral-block-wrapper)literal_blockclasses)offsetr   zInvalid caption: %s)r   	containerparse_text_to_nodescontent_offset
isinstancesystem_messager
   astext
ValueErrorr   r[   	rawsourcechildrensourcerV   RuntimeError)rY   rZ   r[   container_nodeparsednodemsgcaption_nodes           r.   container_wrapperrr   N   s     _
$)@(A  N **79;S*TTF!9D$,-- &''$++--7oo$&& }T^RH$-HHH*1(-,&,&
r0   c            	          e Zd ZU dZdZdZdZdZej	        ej	        e
eej        ej        ej        ej        dZded<   ddZdS )	CodeBlockzYDirective for a code block with special highlighting or line numbering
    settings.
    Tr   r   F)r   linenosr@   lineno-startemphasize-linesr[   classnamer   r   r   r   c                   | j         j        }d                    | j                  }| j                            | j                  }| j                            d          }|r	 t          | j                  t          |          }t          fd|D                       r6t                              t          d          | j        d         |           fd|D             }n;# t          $ r,}|j                            || j                  gcY d }~S d }~ww xY wd }d| j        v rf| j                            | j                  }|                    d	          }t%          || j        d         |          }d
                    |          }t'          j        ||          }d| j        v s	d| j        v rd	|d<   |dxx         | j                            dg           z  cc<   d| j        v |d<   | j        r| j        d         |d<   n | j        j        j        p| j        j        |d<   i x}	|d<   |||	d<   d| j        v r| j        d         |	d<   |                     |           | j                            d          }
|
rL	 t7          | ||
          }n9# t          $ r,}|j                            || j                  gcY d }~S d }~ww xY w|                     |           |gS )NrL   rw   c              3  $   K   | ]
}|k    V  d S rG   r=   )rH   inliness     r.   rJ   z CodeBlock.run.<locals>.<genexpr>   s'      55qqF{555555r0   *line number spec is out of range(1-%d): %rrK   c                &    g | ]}|k     |d z   S r   r=   )rH   xr}   s     r.   
<listcomp>z!CodeBlock.run.<locals>.<listcomp>   s"    BBBaq6zzAEzzzr0   rV   r@   TrE   ru   rv   r`   rx   r   r   r-   highlight_argshl_lineslinenostartr[   )statedocumentrN   contentstate_machineget_source_and_linelinenor$   r%   lenr   rP   rQ   rR   r
   rh   reporterrO   rX   r   r_   r"   r(   r)   r*   configset_source_inforr   add_name)r,   r   coderB   linespecr   errr>   literal
extra_argsr[   excr}   s               @r.   r/   zCodeBlock.runw   s_   :&yy&&%99$+FF<##$566 	JT\**.x@@5555H55555 NNGHH%67!)	 #    CBBB8BBB J J J )11#DK1HHIIIIIIIJ Ht|##)==dkJJHOOD))E X(>RRRE775>>D .tT::$$$,(F(F!%GI	dl..w;;;"dl2> 
	"&."3GJ )< 2;1 J 243
W-.%-Jz"T\))(,^(DJ}%W%%%,""9-- 	JJ+D'7CC J J J )11#DK1HHIIIIIIIJ
 	gys=   $BC( (
D2!DDDJ 
K !KKKNr1   )r2   r3   r4   r5   r6   r7   r8   r9   r   r:   r	   intunchanged_requiredclass_option	unchangedr   r<   r/   r=   r0   r.   rt   rt   c   s           K %?%80($	) 	)K 	 	 	 	@ @ @ @ @ @r0   rt   c                      e Zd Zg dZdd
ZddZ	 dddZdd dZdd!dZ	 dd"dZ		 dd"dZ
	 dd"dZ	 dd"dZ	 dd"dZ	 dd"dZ	 dd"dZdS )#LiteralIncludeReader))lineno-matchrv   )r   rT   )r   prepend)start-afterstart-at)
end-beforeend-at)diffpyobject)r   rv   )r   r   )r   r>   )r   r   )r   r   )r   r   )r   r   filenamestr | os.PathLike[str]r$   dict[str, Any]r   r   r   Nonec                    t          |          | _        || _        |                    d|j                  | _        | j                            dd          | _        |                                  d S )Nencodingrv   r   )r   r   r$   r%   source_encodingr   lineno_startparse_options)r,   r   r$   r   s       r.   __init__zLiteralIncludeReader.__init__   sd     !**J0FGG L,,^Q??r0   c                    | j         D ]:\  }}|| j        v r,|| j        v r#t          d          ||fz  }t          |          ;d S )Nz%Cannot use both "%s" and "%s" options)INVALID_OPTIONS_PAIRr$   r
   rh   )r,   option1option2rp   s       r.   r   z"LiteralIncludeReader.parse_options   sa     $ 9 	& 	&GW$,&&7dl+B+B@AAWgDVV oo%	& 	&r0   NrB   rC   r?   c                   t          |          }	 t          || j        d          5 }|                                }d d d            n# 1 swxY w Y   d| j        v r |                    | j        d                   }|                    d          S # t          $ r'}t          d          |z  }t          |          |d }~wt          $ r.}t          d          | j        |fz  }t          |          |d }~ww xY w)Nstrict)r   errors	tab-widthTz0Include file '%s' not found or reading it failedzbEncoding %r used for reading included file '%s' seems to be wrong, try giving an :encoding: option)
r   openr   readr$   
expandtabsrO   OSErrorr
   UnicodeError)r,   r   rB   ftextr   rp   s          r.   	read_filezLiteralIncludeReader.read_file   sP    H%%	-hxHHH  Avvxx                             dl**t|K'@AA??4((( 	( 	( 	(GHH8SC#,,C' 	- 	- 	-<  )*C s##,	-sF   B A	B 	AB AA B 
C9"B>>C9)C44C9tuple[str, int]c                :   d| j         v r|                                 }nZ| j        | j        | j        | j        | j        | j        | j        g}| 	                    | j
        |          }|D ]} |||          }d                    |          t          |          fS )Nr   rK   rE   )r$   	show_diffpyobject_filterstart_filter
end_filterlines_filterdedent_filterprepend_filterappend_filterr   r   rN   r   )r,   rB   r>   filtersfuncs        r.   r   zLiteralIncludeReader.read   s    T\!!NN$$EE $!!"#"G NN4=8NDDE 7 7UX666wwu~~s5zz))r0   c                    |                      | j                  }| j        d         }|                      |          }t          ||t	          |          t	          | j                            }t          |          S )Nr   )r   r   r$   r   r\   list)r,   rB   rU   old_filename	old_linesr   s         r.   r   zLiteralIncludeReader.show_diff  sc    NN4=11	|F+NN<00	Iy#l2C2CSEWEWXXDzzr0   r>   c                r   | j                             d          }|rddlm} |                    | j        d          }|                                }||vr(t          d          || j        fz  }t          |          ||         d         }||         d         }	||dz
  |	         }d| j         v r|| _	        |S )	Nr   r   )ModuleAnalyzerrE   z,Object named %r not found in include file %rr      r   )
r$   r%   sphinx.pycoder   for_filer   	find_tagsr
   rh   r   )
r,   r>   rB   r   r   analyzertagsrp   startends
             r.   r   z$LiteralIncludeReader.pyobject_filter
  s     <##J// 	*444444%..t}bAAH%%''Dt##GHHML  !oo%N1%Ex.#C%!)c/*E--$)!r0   c                p   | j                             d          }|rt          |t                              }t	          fd|D                       r8t
                              t          d          t                    ||           d| j         v re|d         t          fdt          |          D                       r| xj
        |d         z  c_
        nt          d          }t          |          fd	|D             s(t          d
          || j        fz  }t          |          S )Nr>   c              3  >   K   | ]}|t                    k    V  d S rG   r   rH   r|   r>   s     r.   rJ   z4LiteralIncludeReader.lines_filter.<locals>.<genexpr>'  s-      55q1E

?555555r0   r~   rK   r   r   c              3  0   K   | ]\  }}|z   |k    V  d S rG   r=   )rH   r|   nfirsts      r.   rJ   z4LiteralIncludeReader.lines_filter.<locals>.<genexpr>2  s/      FF$!QuqyA~FFFFFFr0   z8Cannot use "lineno-match" with a disjoint set of "lines"c                F    g | ]}|t                    k     |         S r=   r   )rH   r   r>   s     r.   r   z5LiteralIncludeReader.lines_filter.<locals>.<listcomp>8  s(    BBB!1s5zz>>U1X>>>r0   z2Line spec %r: no lines pulled from include file %r)r$   r%   r   r   rP   rQ   rR   r
   all	enumerater   rh   r   )r,   r>   rB   r   linelistrp   r   s    `    @r.   r   z!LiteralIncludeReader.lines_filter!  sb    <##G,, 	&*8SZZ@@H5555H55555 CDDJJ%	     -- FFFF)H2E2EFFFFF *%%!4%%%WXXC$S//)BBBBxBBBE &MNNMR  !oo%r0   c                   d| j         v r| j                             d          }d}n(d| j         v r| j                             d          }d}nd }|rt          |          D ][\  }}||v rR|r+d| j         v r| xj        |dz   z  c_        ||dz   d          c S d| j         v r| xj        |z  c_        ||d          c S \|du rt	          d|z            t	          d|z            |S )	Nr   Fr   Tr   r   z!start-after pattern not found: %szstart-at pattern not found: %s)r$   r%   r   r   rh   )r,   r>   rB   r   	inclusiver   rV   s          r.   r   z!LiteralIncludeReader.start_filterB  sB    %%L$$Z00EIIdl**L$$]33EIIE 	K )% 0 0 . .D==  	.)T\99 --!;--$VaZ\\2222)T\99 --7--$VWW~--- ! D   !Du!LMMM !AE!IJJJr0   c                p   d| j         v r| j                             d          }d}n(d| j         v r| j                             d          }d}nd }|ret          |          D ]-\  }}||v r$|r|d |dz            c S |dk    r!|d |         c S .|du rt          d|z            t          d|z            |S )	Nr   Tr   Fr   r   zend-at pattern not found: %sz end-before pattern not found: %s)r$   r%   r   rh   )r,   r>   rB   r   r   r   rV   s          r.   r   zLiteralIncludeReader.end_filterc  s    t|##,""8,,CIIT\)),""<00CIIC 	K )% 0 0 2 2$;;  2$\vz\2222!Q;; #(&>111  D   !?#!EFFF !Cc!IJJJr0   c                p    | j                             d          }|r|                    d|dz              |S )Nr   r   rL   )r$   r%   insert)r,   r>   rB   r   s       r.   r   z#LiteralIncludeReader.prepend_filter  s>     ,""9-- 	,LLGdN+++r0   c                n    | j                             d          }|r|                    |dz              |S )NrT   rL   )r$   r%   rT   )r,   r>   rB   rT   s       r.   r   z"LiteralIncludeReader.append_filter  s<     !!(++ 	(LL$'''r0   c                l    d| j         v r*t          || j                             d          |          S |S )Nr@   rK   )r$   rX   r%   )r,   r>   rB   s      r.   r   z"LiteralIncludeReader.dedent_filter  s;     t|##t|'7'7'A'AHUUUULr0   )r   r   r$   r   r   r   r   r   )r   r   rG   )r   r   rB   rC   r   r?   )rB   rC   r   r   )rB   rC   r   r?   )r>   r?   rB   rC   r   r?   )r2   r3   r4   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   r0   r.   r   r      s             & & & & TX- - - - -** * * * *&     DH    0 DH    D DH    D DH    < DH     DH     DH      r0   r   c                  b   e Zd ZU dZdZdZdZdZi dede	j
        ded	e	j
        d
ede	j        de	j
        de	j        de	j        de	j        de	j        de	j        de	j        de	j        de	j        de	j        de	j        e	j        e	j        e	j        e	j        dZded<   ddZdS )LiteralIncludezLike ``.. include:: :literal:``, but only warns if the include file is
    not found, and does not raise errors.  Also has several options for
    selecting what to include.
    Fr   r   Tr@   ru   rv   r   r   r-   r   r   r   r>   r   r   r   r   r   rT   rw   )r[   rx   ry   r   r   r   r   r   c                   | j         j        }|j        j        s"|j                            d| j                  gS d| j        v r2| j        	                    | j        d                   \  }}|| j        d<   	 | j
                            | j                  }| j        	                    | j        d                   \  }}| j                            |           t          || j        | j                  }|                    |          \  }t#          j        |||          }	d| j        v |	d<   |                     |	           | j                            d          rd|	d	<   nd	| j        v r| j        d	         |	d	<   d
| j        v sd| j        v s	d| j        v rd|	d
<   |	dxx         | j                            dg           z  cc<   i x}
|	d<   d| j        v r}t+          | j        d                   }t-          fd|D                       r6t.                              t1          d          | j        d         |           fd|D             |
d<   |j        |
d<   d| j        v r+| j        d         p| j        d         }t5          | |	|          }	|                     |	           |	gS # t8          $ r,}|j                            || j                  gcY d }~S d }~ww xY w)NzFile insertion disabledr   r   r   rK   )rk   r   udiffr-   ru   rv   r   Tr`   rx   r   rw   c              3  $   K   | ]
}|k    V  d S rG   r=   r   s     r.   rJ   z%LiteralInclude.run.<locals>.<genexpr>  s'      44aqEz444444r0   r~   c                &    g | ]}|k     |d z   S r   r=   )rH   r   r>   s     r.   r   z&LiteralInclude.run.<locals>.<listcomp>  s"    )O)O)OAQYY!a%YYYr0   r   r   r[   )r   r   settingsfile_insertion_enabledr   rR   r   r$   r(   
relfn2pathr   r   r"   note_dependencyr   r   r   r   r_   r   r%   r   rP   rQ   r
   r   rr   r   	Exception)r,   r   _pathrB   rel_filenamer   readerr   retnoder   r   r[   r   r>   s                 @r.   r/   zLiteralInclude.run  s@   :& 7 	!))*C$+)VV  T\!!h))$,v*>??GAt#'DL -	F)==dkJJH%)X%8%89J%K%K"L(H$$\222)(DL$+NNF ++x+88KD%$24hOOOG&$,6GG  )))|'' ?&-
##t|++&*l:&>
#T\))!T\11!T\11%)	"I$,"2"27B"?"??577J!12 DL00.t|<M/NPUVV4444844444 NNGHH%67!)	 #    *P)O)O)O)O)O)O
:&(.(;J}%DL((,y1FT^A5F+D'7CC MM'"""9 	F 	F 	F%--c-DDEEEEEEE	Fs   8H1J* *
K 4!KK K Nr1   )r2   r3   r4   r5   r6   r7   r8   r9   r	   r   r:   r   r   r   r   r   r   r<   r/   r=   r0   r.   r   r     s         
 K $),):?) 	) 	
	)
 	S) 	J1) 	) 	J') 	J1) 	.) 	z4) 	j3) 	J1) 	*/) 	:0)  	*/!)" 	:8#)$ '($-+) ) )K    08F 8F 8F 8F 8F 8Fr0   r   appr   r   c                    t          j        dt                     t          j        dt                     t          j        dt                     t          j        dt                     ddddS )N	highlightz
code-block
sourcecodeliteralincludebuiltinT)versionparallel_read_safeparallel_write_safe)r   register_directiver   rt   r   )r   s    r.   setupr    si    !+y999!,	:::!,	:::!"2NCCC "#  r0   rG   )r>   r?   r@   rA   rB   rC   r   r?   )rY   r   rZ   r   r[   r\   r   r]   )r   r   r   r   )1
__future__r   r&   rM   difflibr   typingr   docutilsr   docutils.parsers.rstr   sphinxr   sphinx.directivesr	   sphinx.localer
   sphinx.utilr   sphinx.util._linesr   sphinx.util._pathlibr   sphinx.util.docutilsr   osr   r   docutils.nodesr   r   sphinx.applicationr   sphinx.configr   sphinx.util.typingr   r   	getLoggerr2   rQ   r   rX   rr   rt   r   r   r  r=   r0   r.   <module>r     s   " " " " " " 



                                + + + + + +       * * * * * *             2 2 2 2 2 2 ) ) ) ) ) ) 0 0 0 0 0 0 AIII$$$$$$$$,,,,,,,,))))))$$$$$$@@@@@@@@		8	$	$
 
 
 
 
 
 
 
8 NR    &   *T T T T T T T Tn^ ^ ^ ^ ^ ^ ^ ^BZF ZF ZF ZF ZF_ ZF ZF ZFz
 
 
 
 
 
r0   