
    O&i2              
       r   d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
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 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%m&Z&m'Z' ddl(m)Z)  e&j*        e+          Z,dZ- G d de          Z.dede/de/de
e/         fdZ0dede1fdZ2dededdfdZ3dedede	e/         deddf
d Z4deded!e/ddfd"Z5 G d# d$e#          Z6dede/de
e/         fd%Z7dede/de1fd&Z8dedeee/ee/ef         e/f         ddf         fd'Z9dedee/ef         fd(Z:dS ))z7Add links to module code in Python object descriptions.    N)path)AnyDict	GeneratorIterableOptionalSetTuplecast)nodes)ElementNode)addnodes)Sphinx)Builder)StandaloneHTMLBuilder)BuildEnvironment)___)ModuleAnalyzer)SphinxPostTransform)get_full_modnameloggingstatus_iterator)make_refnode_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__     `/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/sphinx/ext/viewcode.pyr   r      s           r$   r   appmodname	attributereturnc                 V   	 t          ||          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)NzDidn't find %s in %sz0viewcode can't import %s, failed with error "%s")r   AttributeErrorloggerverbose	Exception	traceback
format_excrstrip)r&   r'   r(   es       r%   _get_full_modnamer3   &   s    333    	.	7CCCtt   
 	y+--4466777JGUVWWWttttts    &B(	B(AB##B(builderc                     | j         dk    rdS | j        dk    rdS | j                            d          r| j        j        sdS dS )NhtmlF
singlehtmlepubT)formatname
startswithconfigviewcode_enable_epub)r4   s    r%   is_supported_builderr>   8   sT    ~u		%	%u		 	 	(	( 1T utr$   doctreec           
      ~     j         j        t          d          si _        dt          dt          dt          dt          dt
          f
 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                    }
|t1          |
|j                  z  }Ad S )N_viewcode_modulesr'   fullnamedocnamerefnamer)   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)	rA   getemit_firstresultr   
for_module	find_tagsr.   codetags)r'   rB   rC   rD   entry	code_tagsanalyzerrK   rL   r   usedr&   envs              r%   has_tagzdoctree_read.<locals>.has_tagH   s   %))'488E>>5(()?II	)4W==""$$$$   16%g.uu =D=DD"JD$=E!H,,$G+E-2C!'* 4qt$DN4us   (A% %A=<A=domainpymoduleviewcode-follow-imported./)	reftargetrefidrefdoc)r4   rQ   hasattrrA   strboollistfindallr   descrG   set
isinstancedesc_signaturer<    viewcode_follow_imported_membersrH   r3   rC   add	posixpathjoinOUTPUT_DIRNAMEreplacer   )r&   r?   rR   objnodenamessignoder'   rB   rD   new_modnamepagenamerQ   s   `          @r%   doctree_readrp   C   s   
+/C3+,, # "  c C D       : 6677 _ _;;x  D((%% 	_ 	_Ggx'>?? kk(++G{{:..HGz: &!22.  # L"3C("K"KK% {{:..H77Hck7CC 5  IIh ~ngooc36O6OPPHRUR]^^^^GG/	_	_ _r$   rQ   docnames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 )NrA      )r\   rA   items)	r&   rQ   rq   rr   r'   rM   rP   rB   rC   s	            r%   env_merge_inforv      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$   rC   c                 D   t          |di           }t          |                                          D ]l\  }}|du r
|\  }}}}	t          |          D ]#}
||
         |k    r|                    |
           $t	          |          dk    r|                    |           md S )NrA   Fr   )getattrr_   ru   poplen)r&   rQ   rC   modulesr'   rM   rK   rL   rP   rD   rB   s              r%   env_purge_docr|      s    c.33Gw}}// 
! 
!E>>$)!dD'T

 	# 	#HH~(("""t99>>KK   
! 
!r$   c                   6    e Zd ZdZdZdeddfdZd	dZd	dZdS )
ViewcodeAnchorTransformz;Convert or remove viewcode_anchor nodes depends on builder.d   kwargsr)   Nc                     t          | j        j                  r|                                  d S |                                  d S N)r>   r&   r4   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)classesr[   rY   rZ   )
documentr`   r   r   inliner   r   r&   r4   replace_self)r   nodeanchorrefnodes       r%   r   z0ViewcodeAnchorTransform.convert_viewcode_anchors   s    M))/:: 	' 	'D\"a
mmo=NOOOF"48#3T(^T+EV#'=&: :Gg&&&&		' 	'r$   c                     t          | j                            t                              D ]}|j                            |           d S r   )r_   r   r`   r   parentremove)r   r   s     r%   r   z/ViewcodeAnchorTransform.remove_viewcode_anchors   sL    ..??@@ 	% 	%DKt$$$$	% 	%r$   )r)   N)	r   r    r!   r"   default_priorityr   r   r   r   r#   r$   r%   r~   r~      sj        EE+C +D + + + +' ' ' '% % % % % %r$   r~   c                     |                      d|          }|rdS 	 t          j        |          \  }}|S # t          $ r Y dS w xY w)z"Get module filename for *modname*.rF   N)rH   r   get_module_sourcer.   )r&   r'   source_infofilenamesources        r%   get_module_filenamer      sf    &&'=wGGK t	-?HHHfO 	 	 	44	s   5 
AAc                 P   t          | |          }|dS t          t          | j                  }|                    dd          |j        z   }t          j        | j        d|          }	 t          j	        |          t          j	        |          k    rdS n# t          $ r Y nw xY wdS )z*Check generation of module page is needed.NTrW   rX   z	_modules/F)r   r   r   r4   rj   
out_suffixr   rh   outdirgetmtimeIOError)r&   r'   module_filenamer4   basenamepage_filenames         r%   should_generate_module_pager      s    )#w77Ot(#+66GsC((7+==HIcj+x@@M=))T]=-I-III5 J     4s   )*B 
B#"B#c              #   	  K   | j         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        d           D ]]\  }}|s	t          | |          s|\  }}}	}
t          j        t"          |                    dd                    }|j        j        dv r|j        j        }nd}|                    ||d	
          }|                                }|d                             d          \  }}|dz   |g|dd<   t          |          dz
  }|	
                                D ]l\  }}||         \  }}} |||          dz   |
z   dz   |z   }d|d|dt1          d          d||         z   ||<   |t3          ||          xx         dz  cc<   mg }|}d|v rr|                    dd          d         }||v rN|                     ||t          j        t"          |                    dd                              |d           d|v r|                     ||t          j        t"          d                    t1          d          d           |                                 ||t1          d          |z  d                    |          z   d}||dfV  _|sd S dg}dg}t          |          D ]A}|                    |d                   r.|                    |dz              |                    d           n|                                 |                    |d                   sD|                                 |                    d           |                    |d                   D|                    |dz              |                    d  |t          j        t"          d          t          j        t"          |                    dd                              d|d!           C|                    dt          |          dz
  z             t1          d"          t1          d#          d                    |          z   d$}t          j        t"          d          |dfV  d S )%NrA   zhighlighting module code... bluec                     | d         S )Nr   r#   )xs    r%   <lambda>zcollect_pages.<locals>.<lambda>   s
    QqT r$   rW   rX   >   nonedefaultpythonF)linenosr   z<pre>   #z <div class="viewcode-block" id="z!"><a class="viewcode-back" href="z">z[docs]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   )r4   rQ   r\   r>   highlighterget_relative_urirb   rA   r   sortedru   r   rz   	verbosityr   rg   rh   ri   rj   r<   highlight_languagehighlight_block
splitlinessplitr   minrsplitappendreverser;   ry   )r&   rQ   r   uritomodnamesr'   rM   rK   rL   rP   rD   ro   lexerhighlightedlinesbeforeaftermaxindexr:   rC   typestartendbacklinkr   r   contextr6   stacks                                r%   collect_pagesr      sn     
+/C3+,, ,, +)KK(E3())H)3(..0011-..%&&M>>	+ + 9/ 9/
  	*388 	$)!dD'>.'//#s2K2KLL:(,???J1EEE!11$u1MM&&((aw//w&.ac

 u::>!ZZ\\ 	2 	2MD'#DzD%uXw//#5?#ELHH '+ddHHHakkkkCe %L #c8$$%%%1%%%%Vmm]]3**1-F!!!E("+.PSUXAYAY"Z"Z\ \# %  % & & & Vmm 	h	~w0W0W X X!"=!1!13 3 	4 	4 	4 455?YYu%%&
 
 +..... 6DDE(##  eBi(( 	(LL3'''KKIIKKK((r33 %		G$$$ ((r33 % LL3'''E).99.c1J1JKKM M M MGG 	 	 	 	 	KK3u::>*+++*++EFF G >.'22G[
IIIIIIr$   c                    |                      dd d           |                      ddd           |                      ddd           |                     dt                     |                     dt                     |                     dt                     |                     d	t
                     |                     d
           |                     d           |                     t                     t          j
        dddS )Nviewcode_importFr=   re   Tzdoctree-readzenv-merge-infozenv-purge-doczhtml-collect-pagesrF   rV   r   )versionenv_versionparallel_read_safe)add_config_valueconnectrp   rv   r|   r   	add_eventadd_post_transformr~   sphinx__display_version__)r&   s    r%   setupr   B  s    *D%888/>>>;T5IIIKK---KK .111KK///KK$m444 MM()))MM,---2333-"  r$   );r"   rg   r/   osr   typingr   r   r   r   r   r	   r
   r   docutilsr   docutils.nodesr   r   r   r   sphinx.applicationr   sphinx.buildersr   sphinx.builders.htmlr   sphinx.environmentr   sphinx.localer   r   sphinx.pycoder   !sphinx.transforms.post_transformsr   sphinx.utilr   r   r   sphinx.util.nodesr   	getLoggerr   r,   ri   r   r]   r3   r^   r>   rp   rv   r|   r~   r   r   r   r   r#   r$   r%   <module>r      s   = =               M M M M M M M M M M M M M M M M M M M M       ( ( ( ( ( ( ( (        % % % % % % # # # # # # 6 6 6 6 6 6 / / / / / /         ( ( ( ( ( ( A A A A A A B B B B B B B B B B * * * * * *		8	$	$     g   6 C C HSM    $' d    =_f =_t =_ =_ =_ =_ =_@1 1%5 1# 1*1/31 1 1 1&!v !$4 !s !t ! ! ! ! % % % % %1 % % %,
V 
c 
hsm 
 
 
 
V c d    *aJv aJ)E#tCH~s2J,KTSW,W"X aJ aJ aJ aJHv $sCx.      r$   