
    -Ph;                       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mZ ddl	m
Z
mZ ddlmZ ddlmZ ddl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 ddlmZ ddlm Z  e
r8d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+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1  ej2        e3          Z4dZ5 G d de          Z6d=d!Z7d>d%Z8d?d+Z9d@d1Z:dAd3Z; G d4 d5e          Z<dBd7Z=dCd8Z>dDd:Z?dEd<Z@dS )Fz7Add links to module code in Python object descriptions.    )annotationsN)NoneType)TYPE_CHECKINGcast)nodes)Element)addnodes)___)ModuleAnalyzer)SphinxPostTransform)logging)status_iterator)make_refnode)_last_modified_time)IteratorSet)Any)Node)Sphinx)Builder)StandaloneHTMLBuilder)BuildEnvironment)_StrPath)ExtensionMetadata_modulesc                      e Zd ZdZdS )viewcode_anchorzNode for viewcode anchors.

    This node will be processed in the resolving phase.
    For viewcode supported builders, they will be all converted to the anchors.
    For not supported builders, they will be removed.
    N)__name__
__module____qualname____doc__     S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/ext/viewcode.pyr   r   ,   s           r$   r   modnamestr	attributereturn
str | Nonec                >   | d S 	 |                      d          }t          |          }t          |dd          D ]h}d                    |d |                   }	 t	          j        |          } n5# t          $ r Y Bt          $ r}d| d}t          |          |d }~ww xY wd S ||k    r||d          D ]}	t          ||	          }|}
|                     d          D ]}|rt          |
|          }
t          |
dd           S # t          $ r  t                              d||            Y d S t          $ rd}t                              t          j                                                               t                              d| |           Y d }~d S d }~ww xY w)	N.r   zviewcode failed to import 'z'.r    zDidn't find %s in %sz0viewcode can't import %s, failed with error "%s")splitlenrangejoin	importlibimport_moduleModuleNotFoundErrorBaseExceptionImportErrorgetattrAttributeErrorloggerdebug	Exceptionverbose	traceback
format_excrstrip)r&   r(   module_path	num_partsimod_rootmoduleexcmsgmodvalueattres                r%   _get_full_modnamerK   5   s    t,mmC(($$	y!R(( 	 	AxxBQB00H
0"0::&     0 0 0 AH@@@!#&&C/	0 4	>>"122 . . -- OOC(( 	- 	-D -t,,ulD111    	+Y@@@tt   
 	y+--4466777JGUVWWWtttttsV   AD A1/D 1
B!;D =	B!BB!!D &AD &F/	F8AFFbuilderr   boolc                |    | j         dk    o1| j        dk    o&| j                            d           p| j        j        S )Nhtml
singlehtmlepub)formatname
startswithconfigviewcode_enable_epub)rL   s    r%   is_supported_builderrW   j   sG    &  	YLL(	Y((000WGN4Wr$   appr   doctreer   Nonec           	     :   | j         | j        t          d          si _        dfd	}t	          |                    t          j                            D ]>}|                    d
          dk    rt                      }|D ]}t          |t          j                  s|                    d          }|                    d          }|}j        j        r+                    d||          }	|	st          ||          }	|	}|s|                    d          } |||j        |          s||v r|                    |           t%          j        t(          |                    dd                    }
|t-          |
|j                  z  }@d S )N_viewcode_modulesr&   r'   fullnamedocnamerefnamer)   rM   c                   j                             | d           }|du rdS                     d|           }|T	 t          j        |           }|                                 n# t          $ r dj         | <   Y dS w xY w|j        }|j        }n|\  }}||d         |k    r||i |f}|j         | <   |\  }	}}
}	||v r||
|<   dS dS )NFviewcode-find-sourcer   T)	r\   getemit_firstresultr   
for_module	find_tagsr;   codetags)r&   r]   r^   r_   entry	code_tagsanalyzerrf   rg   r
   usedenveventss              r%   has_tagzdoctree_read.<locals>.has_tagx   s   %))'488E>>5++,BGLL	)4W==""$$$$   16%g.uu =D=DD"JD$=E!H,,$G+E-2C!'* 4qt$DN4us   (A% %A=<A=domainpyrD   viewcode-follow-importedr,   /)	reftargetrefidrefdoc)
r&   r'   r]   r'   r^   r'   r_   r'   r)   rM   )rl   rm   hasattrr\   listfindallr	   descrb   set
isinstancedesc_signaturerU    viewcode_follow_imported_membersrc   rK   r^   add	posixpathr1   OUTPUT_DIRNAMEreplacer   )rX   rY   rn   objnodenamessignoder&   r]   r_   new_modnamepagenamerl   rm   s              @@r%   doctree_readr   r   s   
'CZF3+,, # "      : 6677  ;;x  D((%% 	 	Ggx'>?? kk(++G{{:..HGz: &$55.  # G"3GX"F"FK% {{:..H77Hck7CC 5  IIh ~ngooc36O6OPPH"(3;   GG/		 r$   rl   r   docnamesSet[str]otherc                P   t          |d          sd S t          |d          si |_        |j                                        D ]b\  }}||j        vr||j        |<   |j        |         r<|j        |         d         }|d                                         D ]\  }}||vr|||<   cd S )Nr\      )rv   r\   items)	rX   rl   r   r   r&   rh   rk   r]   r^   s	            r%   env_merge_infor      s     5-.. 3+,, # "17799 1 1#///-2C!'**$W- 1,W5a8).q)9)9 1 1%Hgt++)0X1 1r$   r^   c                D   t          |di           }t          |                                          D ]l\  }}|du r
|\  }}}}	t          |          D ]#}
||
         |k    r|                    |
           $t	          |          dk    r|                    |           md S )Nr\   Fr   )r7   rw   r   popr/   )rX   rl   r^   modulesr&   rh   rf   rg   rk   r_   r]   s              r%   env_purge_docr      s    c.33Gw}}// 
! 
!E>>$)!dD'T

 	# 	#HH~(("""t99>>KK   
! 
!r$   c                  .    e Zd ZdZdZddZddZdd	Zd
S )ViewcodeAnchorTransformz;Convert or remove viewcode_anchor nodes depends on builder.d   kwargsr   r)   rZ   c                    t          | j        j                  r|                                  d S |                                  d S N)rW   rX   rL   convert_viewcode_anchorsremove_viewcode_anchors)selfr   s     r%   runzViewcodeAnchorTransform.run   sG     011 	+))+++++((*****r$   c                   | j                             t                    D ]k}t          j        dt          d          dg          }t          | j        j        |d         |d         |d         |          }|	                    |           ld S )N z[source]zviewcode-link)classesru   rs   rt   )
documentrx   r   r   inliner
   r   rX   rL   replace_self)r   nodeanchorrefnodes       r%   r   z0ViewcodeAnchorTransform.convert_viewcode_anchors   s    M))/:: 		' 		'D\"a
mmo=NOOOF" X[!W G g&&&&		' 		'r$   c                    t          | j                            t                              D ]}|j                            |           d S r   )rw   r   rx   r   parentremove)r   r   s     r%   r   z/ViewcodeAnchorTransform.remove_viewcode_anchors   sL    ..??@@ 	% 	%DKt$$$$	% 	%r$   N)r   r   r)   rZ   )r)   rZ   )r   r    r!   r"   default_priorityr   r   r   r#   r$   r%   r   r      s\        EE+ + + +
' 
' 
' 
'% % % % % %r$   r   _StrPath | Nonec                    | j         }|                    d|          }|rdS 	 t          j        |          \  }}|S # t          $ r Y dS w xY w)z"Get module filename for *modname*.ra   N)rm   rc   r   get_module_sourcer;   )rX   r&   rm   source_infofilenamesources         r%   get_module_filenamer      sm    ZF))*@'JJK t	-?HHHfO 	 	 	44	s   < 
A
	A
c                   t          | |          }|dS t          d| j                  }|                    dd          |j        z   }| j        dz  |z  }	 t          |          t          |          k    rdS n# t          $ r Y nw xY wdS )z*Check generation of module page is needed.NTr   r,   rr   r   F)r   r   rL   r   
out_suffixoutdirr   OSError)rX   r&   module_filenamerL   basenamepage_filenames         r%   should_generate_module_pager     s    )#w77Ot*CK88GsC((7+==HJ+h6M//3F}3U3UUU5 V     4s    A9 9
BB)Iterator[tuple[str, dict[str, Any], str]]c              #  0
  K   | j         }t          |d          sd S t          | j                  sd S | j        j        }| j        j        }t          |j                  }t          t          |j        
                                          t          d          dt          |j                  | j        t          j        d                    D ]n\  }}|s	t!          | |          s|\  }}}	}
t#          j        t&          |                    dd                    }|j        j        dv r|j        j        }nd}d	|j        j        z  }|                    |||
          }|                                }|d                             d          \  }}|dz   |g|dd<   t          |          dz
  }t7          d          }|	
                                D ]_\  }}||         \  }}} |||          dz   |
z   dz   |z   }d| d| d| d||         z   ||<   |t9          ||          xx         dz  cc<   `g }|}d|v rr|                    dd          d         }||v rN|                     ||t#          j        t&          |                    dd                              |d           d|v r|                     ||t#          j        t&          d                    t7          d          d           |                                 ||t7          d          |z  d                    |          z   d}||dfV  p|sd S dg}dg}t          |          D ]C}|                     |d                   r.|                    |dz              |                    d           n|!                                 |                     |d                   sD|!                                 |                    d           |                     |d                   D|                    |dz               |t#          j        t&          d          t#          j        t&          |                    dd                              }|                    d| d| d            E|                    dt          |          dz
  z             t7          d!          t7          d"          d                    |          z   d#}t#          j        t&          d          |dfV  d S )$Nr\   zhighlighting module code... bluer   r,   rr   >   nonedefaultpythonr   )linenosz<pre>   z[docs]#z <div class="viewcode-block" id="z"">
<a class="viewcode-back" href="z">z</a>
z</div>
)linktitleindexzModule codez<h1>Source code for %s</h1>
)parentsr   bodyz	page.htmlr   r-   z<ul>z</ul>z<li><a href="z
</a></li>
zOverview: module codez0<h1>All modules for which code is available</h1>)r   r   )"rl   rv   rW   rL   highlighterget_relative_urirz   r\   r   sortedr   r   r/   	verbosityoperator
itemgetterr   r   r1   r   r   rU   highlight_languageviewcode_line_numbershighlight_block
splitlinesr.   r
   minrsplitappendreverserT   r   ) rX   rl   r   uritomodnamesr&   rh   rf   rg   rk   r_   r   lexerr   highlightedlinesbeforeafter	max_index	link_textrS   r^   typestartendbacklinkr   r   contextrO   stackrelative_uris                                    r%   collect_pagesr     s     
'C3+,, ,, +)KK(E3())H)s$**,,--
)**C!""A  D- D-  	*388 	$)!dD'>.'//#s2K2KLL:(,???J1EEESZ==!11$w1OO&&((aw//w&.ac

 JJN	hKK	!ZZ\\ 	5 	5MD'#DzD%uXw//#5?#ELHP4 P P2:P P>GP P P, %L
 #c9%%&&&*4&&&& Vmm]]3**1-F!!!E !~v~~c37O7OPP  $       Vmm 	E(IN>7$K$KLL}%%
 
 	 	 	 	 455?$))EBRBRR
 

 ,,,,, 6DDE(## J JeBi(( 	(LL3'''KKIIKKK((r33 %		G$$$ ((r33 % LL3'''uN>733N>7??3+D+DEE
 
 	HLHHGHHHIIIIKK3u::>*+++*++EFFQUV G
 .
1
17K
GGGGGGr$   r   c                   |                      dd dt          t          h                     |                      dddt          t          h                     |                      dddt          t          h                     |                      ddd	t          t          h                     |                     d
t
                     |                     dt                     |                     dt                     |                     dt                     | 	                    d           | 	                    d           | 
                    t                     t          j        dddS )Nviewcode_importr   )typesrV   Fr}   Tr   rl   zdoctree-readzenv-merge-infozenv-purge-doczhtml-collect-pagesra   rq   r   )versionenv_versionparallel_read_safe)add_config_value	frozensetr   rM   connectr   r   r   r   	add_eventadd_post_transformr   sphinx__display_version__)rX   s    r%   setupr     sX   *D"Ixj<Q<QRRR/)TFBSBSTTT*D"Itf<M<M     0%iQUPVFWFWXXXKK---KK .111KK///KK$m444 MM()))MM,---2333-"  r$   )r&   r'   r(   r'   r)   r*   )rL   r   r)   rM   )rX   r   rY   r   r)   rZ   )
rX   r   rl   r   r   r   r   r   r)   rZ   )rX   r   rl   r   r^   r'   r)   rZ   )rX   r   r&   r'   r)   r   )rX   r   r&   r'   r)   rM   )rX   r   r)   r   )rX   r   r)   r   )Ar"   
__future__r   r2   r   r   r=   r   r   typingr   r   docutilsr   docutils.nodesr   r   r	   sphinx.localer
   r   sphinx.pycoder   !sphinx.transforms.post_transformsr   sphinx.utilr   sphinx.util.displayr   sphinx.util.nodesr   sphinx.util.osutilr   collections.abcr   r   r   r   sphinx.applicationr   sphinx.buildersr   sphinx.builders.htmlr   sphinx.environmentr   sphinx.util._pathlibr   sphinx.util.typingr   	getLoggerr   r9   r   r   rK   rW   r   r   r   r   r   r   r   r   r#   r$   r%   <module>r     s"   = = " " " " " "                    & & & & & & & &       " " " " " "                ( ( ( ( ( ( A A A A A A       / / / / / / * * * * * * 2 2 2 2 2 2 5--------######))))))''''''::::::333333------444444		8	$	$     g   2 2 2 2j   @ @ @ @F1 1 1 1(! ! ! ! % % % % %1 % % %8      *lH lH lH lH^     r$   