
    Fe5                       d Z 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
mZmZ ddlmZ ddlmZmZ ddlZdd	l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  ddl!m"Z" e
rddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+  ejX                  e-      Z.dZ/ G d de      Z0d#dZ1d$dZ2d%dZ3	 	 	 	 d&dZ4d'dZ5 G d de      Z6d(dZ7d)d Z8d*d!Z9d+d"Z:y),z7Add links to module code in Python object descriptions.    )annotationsN)import_module)path)TYPE_CHECKINGAnycast)nodes)ElementNode)addnodes)StandaloneHTMLBuilder)___)ModuleAnalyzer)SphinxPostTransform)logging)status_iterator)make_refnode)	GeneratorIterable)Sphinx)Builder)BuildEnvironment_modulesc                      e Zd ZdZy)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__     5/usr/lib/python3/dist-packages/sphinx/ext/viewcode.pyr   r   %   s    r"   r   c                   	 | y t        |       }|}|j                  d      D ]  }|st        ||      } t        |dd       S # t        $ r t        j                  d||        Y y t        $ rV}t        j                  t        j                         j                                t        j                  d| |       Y d }~y d }~ww xY w)N.r   zDidn't find %s in %sz0viewcode can't import %s, failed with error "%s")
r   splitgetattrAttributeErrorloggerverbose	Exception	traceback
format_excrstrip)modname	attributemodulevalueattres         r#   _get_full_modnamer5   .   s    ? w' OOC( 	-Dt,	- ulD11  	-y'B 
 	y++-4467JGUVWs(   A #A A  C&C.AB??Cc                    | j                   dk7  ry| j                  dk(  ry| j                  j                  d      r| j                  j                  syy)NhtmlF
singlehtmlepubT)formatname
startswithconfigviewcode_enable_epub)builders    r#   is_supported_builderr@   M   sD    ~~|||#||v&w~~/R/Rr"   c           	          j                   j                  t        d      si _        d fd}t	        |j                  t        j                              D ](  }|j                  d      dk7  rt               }|D ]   }t        |t        j                        s|j                  d      }|j                  d      }|}j                  j                  r# j                  d||      }	|	st        ||      }	|	}|s|j                  d      } |||j                   |      s||v r|j#                  |       t%        j&                  t(        |j+                  dd	            }
|t-        |
|j                   
      z  } + y )N_viewcode_modulesfullnamec                   j                   j                  | d       }|du ryj                  d|       }|?	 t        j                  |       }|j                          |j                  }|j                  }n|\  }}||d   |k7  r||i |f}|j                   | <   |\  }	}}
}	||v r||
|<   yy# t        $ r dj                   | <   Y yw xY w)NFviewcode-find-sourcer   T)	rB   getemit_firstresultr   
for_module	find_tagsr+   codetags)r/   rC   docnamerefnameentry	code_tagsanalyzerrJ   rK   r   usedappenvs              r#   has_tagzdoctree_read.<locals>.has_tag\   s    %%))'48E>(()?I	)44W=""$
 ==D==D"JD$=E!H,$G+E-2C!!'* 4qt$DN#  16%%g.s   %B, ,CCdomainpyr1   viewcode-follow-importedr%   /)	reftargetrefidrefdoc)
r/   strrC   r\   rL   r\   rM   r\   returnbool)r?   rS   hasattrrB   listfindallr   descrF   set
isinstancedesc_signaturer=    viewcode_follow_imported_membersrG   r5   rL   add	posixpathjoinOUTPUT_DIRNAMEreplacer   )rR   doctreerT   objnodenamessignoder/   rC   rM   new_modnamepagenamerS   s   `          @r#   doctree_readrr   W   s\   
++//C3+, ": 67 _;;x D(% 	_Ggx'>'>?kk(+G{{:.HGzz::!22. #"3GX"FK%{{:.H7Hckk7C5 IIh ~~ngooc36OPHRUR]R]^^G/	_	_r"   c                R   t        |d      sy t        |d      si |_        |j                  j                         D ]j  \  }}||j                  vr||j                  |<   $|j                  |   s4|j                  |   d   }|d   j                         D ]  \  }}||vs|||<    l y )NrB      )r_   rB   items)	rR   rS   docnamesotherr/   rN   rQ   rC   rL   s	            r#   env_merge_inforx      s    5-.3+, "11779 1#///-2C!!'*$$W-,,W5a8).q)9 1%Hgt+)0X11r"   c                   t        |di       }t        |j                               D ][  \  }}|du r|\  }}}}	t        |      D ]  }
||
   |k(  s|j                  |
        t	        |      dk(  sK|j                  |       ] y )NrB   Fr   )r'   r`   ru   poplen)rR   rS   rL   modulesr/   rN   rJ   rK   rQ   rM   rC   s              r#   env_purge_docr}      s    c.3Gw}}/ 
!E>$)!dD'T
 	#HH~("	# t9>KK 
!r"   c                  ,    e Zd ZdZdZddZddZddZy)	ViewcodeAnchorTransformz;Convert or remove viewcode_anchor nodes depends on builder.d   c                    t        | j                  j                        r| j                          y | j	                          y N)r@   rR   r?   convert_viewcode_anchorsremove_viewcode_anchors)selfkwargss     r#   runzViewcodeAnchorTransform.run   s,     0 01))+((*r"   c                
   | j                   j                  t              D ]a  }t        j                  dt        d      dg      }t        | j                  j                  |d   |d   |d   |      }|j                  |       c y )N z[source]zviewcode-link)classesr[   rY   rZ   )
documentra   r   r	   inliner   r   rR   r?   replace_self)r   nodeanchorrefnodes       r#   r   z0ViewcodeAnchorTransform.convert_viewcode_anchors   ss    MM))/: 	'D\\"a
mo=NOF"488#3#3T(^T+EV#'=&:Gg&		'r"   c                    t        | j                  j                  t                    D ]  }|j                  j                  |        y r   )r`   r   ra   r   parentremove)r   r   s     r#   r   z/ViewcodeAnchorTransform.remove_viewcode_anchors   s7    ..?@ 	%DKKt$	%r"   N)r   r   r]   None)r]   r   )r   r   r   r    default_priorityr   r   r   r!   r"   r#   r   r      s    E+'%r"   r   c                    | j                  d|      }|ry	 t        j                  |      \  }}|S # t        $ r Y yw xY w)z"Get module filename for *modname*.rE   N)rG   r   get_module_sourcer+   )rR   r/   source_infofilenamesources        r#   get_module_filenamer      sL    &&'=wGK	-??HHfO 		s   1 	==c                P   t        | |      }|yt        t        | j                        }|j	                  dd      |j
                  z   }t        j                  | j                  d|      }	 t        j                  |      t        j                  |      k  ry	 y# t        $ r Y yw xY w)z*Check generation of module page is needed.Tr%   rX   z	_modules/F)r   r   r   r?   rk   
out_suffixr   ri   outdirgetmtimeOSError)rR   r/   module_filenamer?   basenamepage_filenames         r#   should_generate_module_pager      s    )#w7O(#++6GsC(7+=+==HIIcjj+x@M==)T]]=-II J   s   ++B 	B%$B%c              #  2	  K   | j                   j                  }t        |d      sy t        | j                         sy | j                   j                  }| j                   j
                  }t        |j                        }t        t        |j                  j                               t        d      dt        |j                        | j                  d       D ]1  \  }}|s
t        | |      s|\  }}}	}
t        j                   t"        |j%                  dd            }|j&                  j(                  dv r|j&                  j(                  }nd}d	|j&                  j*                  z  }|j-                  |||
      }|j/                         }|d   j1                  d      \  }}|dz   |g|dd t        |      dz
  }t3        d      }|	j                         D ]O  \  }}||   \  }}} |||      dz   |
z   dz   |z   }d| d| d| d||   z   ||<   |t5        ||      xx   dz  cc<   Q g }|}d|v ra|j7                  dd      d   }||v rC|j9                   ||t        j                   t"        |j%                  dd                  |d       d|v ra|j9                   ||t        j                   t"        d            t3        d      d       |j;                          ||t3        d      |z  dj!                  |      z   d}||df 4 |sy dg}dg}t        |      D ]  }|j=                  |d         r&|j9                  |dz          |j9                  d       nn|j?                          |j=                  |d         s6|j?                          |j9                  d       |j=                  |d         s6|j9                  |dz           |t        j                   t"        d      t        j                   t"        |j%                  dd                  }|j9                  d | d| d!        |j9                  dt        |      dz
  z         t3        d"      t3        d#      dj!                  |      z   d$}t        j                   t"        d      |df y w)%NrB   zhighlighting module code... bluec                    | d   S )Nr   r!   )xs    r#   <lambda>zcollect_pages.<locals>.<lambda>  s
    QqT r"   r%   rX   >   nonedefaultpythonr   )linenosr   z<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   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   ) r?   rS   r_   r@   highlighterget_relative_urirc   rB   r   sortedru   r   r{   	verbosityr   rh   ri   rj   rk   r=   highlight_languageviewcode_line_numbershighlight_block
splitlinesr&   r   minrsplitappendreverser<   rz   ) rR   rS   r   uritomodnamesr/   rN   rJ   rK   rQ   rM   rq   lexerr   highlightedlinesbeforeafter	max_index	link_textr;   rL   typestartendbacklinkr   r   contextr7   stackrelative_uris                                    r#   collect_pagesr      sk    
++//C3+,,++))KKK((E3(()H)3((..01-.%%&MM>	+ ;/
 *38$)!dD'>>.'//#s2KL::((,??JJ11EESZZ===!11$w1O&&(aw/w&.a

 JN	hK	!ZZ\ 	5MD'#DzD%Xw/#5?#ELH>tf E>>FZr)TZ\#El+E%L #c9%&*4&	5 Vm]]3*1-F!!("+..PSUXAY"Z\# % & Vm 	h	~w0W X!"=!13 	4 45?YYu%&
 +..w;/z 6DDE(# JeBi(LL3'KKIIK((r3		G$ ((r3 LL3'Y^^NGD&^^NGOOCQT<UVXmL>G9KHIJ 	KK3u:>*+*+EFG >>.'2G[
IIs   JRD%R6C!Rc                   | j                  dd d       | j                  ddd       | j                  ddd       | j                  dddt        f       | j                  dt               | j                  d	t               | j                  d
t
               | j                  dt               | j                  d       | j                  d       | j                  t               t        j                  dddS )Nviewcode_importFr>   rf   Tr   rS   zdoctree-readzenv-merge-infozenv-purge-doczhtml-collect-pagesrE   rW   r   )versionenv_versionparallel_read_safe)add_config_valuer^   connectrr   rx   r}   r   	add_eventadd_post_transformr   sphinx__display_version__)rR   s    r#   setupr   W  s    *D%8/>;T5I0%HKK-KK .1KK/KK$m4 MM()MM,-23--" r"   )r/   r\   r0   r\   r]   
str | None)r?   r   r]   r^   )rR   r   rl   r   r]   r   )
rR   r   rS   r   rv   zIterable[str]rw   r   r]   r   )rR   r   rS   r   rL   r\   r]   r   )rR   r   r/   r\   r]   r   )rR   r   r/   r\   r]   r^   )rR   r   r]   z6Generator[tuple[str, dict[str, Any], str], None, None])rR   r   r]   zdict[str, Any]);r    
__future__r   rh   r,   	importlibr   osr   typingr   r   r   docutilsr	   docutils.nodesr
   r   r   r   sphinx.builders.htmlr   sphinx.localer   r   sphinx.pycoder   !sphinx.transforms.post_transformsr   sphinx.utilr   sphinx.util.displayr   sphinx.util.nodesr   collections.abcr   r   sphinx.applicationr   sphinx.buildersr   sphinx.environmentr   	getLoggerr   r)   rj   r   r5   r@   rr   rx   r}   r   r   r   r   r   r!   r"   r#   <module>r      s    = "   #  + +  (   6  ( A  / *3)'3			8	$ g >=_@1*1/31&! %1 %,
*bJJr"   