
    Ri;                       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jd                  e3      Z4dZ5 G d de      Z6d'dZ7d(dZ8d)dZ9	 	 	 	 	 	 	 	 	 	 d*dZ:d+d Z; G d! d"e      Z<d,d#Z=d-d$Z>d.d%Z?d/d&Z@y)0z7Add 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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__     K/home/agent/.friday_env/lib/python3.12/site-packages/sphinx/ext/viewcode.pyr   r   ,   s    r$   r   c                   | y 	 | j                  d      }t        |      }t        |dd      D ]-  }dj                  |d |       }	 t	        j
                  |      } n y ||k7  r||d  D ]  }	t        ||	      } |}
|j                  d      D ]  }|st        |
|      }
 t        |
dd       S # t        $ r Y t        $ r}d| d}t        |      |d }~ww xY w# 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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)modname	attributemodule_path	num_partsimod_rootmoduleexcmsgmodvalueattres                r%   _get_full_modnamerH   5   sw    ,mmC($	y!R( 	AxxBQ0H
0"00:	 	>"12 . -.
 OOC( 	-Dt,	- ulD11+ '   0 4H:R@!#&C/	0(   	+Y@ 
 	y++-4467JGUVWs[   A C B.C 3C C .	C7C 9CCCC  E=EAEEc                    | j                   dk(  xr1 | j                  dk7  xr  | j                  j                  d       xs |S )Nhtml
singlehtmlepub)formatname
startswith)builderviewcode_enable_epubs     r%   is_supported_builderrR   j   sF    &  	JLLL(	J((00H4H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                   j"                  |      s||v r|j%                  |       t'        j(                  t*        |j-                  dd	            }
|t/        |
|j                   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)	rT   getemit_firstresultr   
for_module	find_tagsr6   codetags)r;   rU   docnamerefnameentry	code_tagsanalyzerr\   r]   r
   usedenveventss              r%   has_tagzdoctree_read.<locals>.has_tagx   s    %%))'48E>++,BGL	)44W=""$
 ==D==D"JD$=E!H,$G+E-2C!!'* 4qt$DN#  16%%g.s   %B, ,CCdomainpyrA   viewcode-follow-importedr'   /)	reftargetrefidrefdoc)
r;   strrU   rn   r^   rn   r_   rn   returnbool)rd   re   hasattrrT   listfindallr	   descrX   set
isinstancedesc_signatureconfig viewcode_follow_imported_membersrY   rH   current_documentr^   add	posixpathr,   OUTPUT_DIRNAMEreplacer   )appdoctreerf   objnodenamessignoder;   rU   r_   new_modnamepagenamerd   re   s              @@r%   doctree_readr   r   so   
''CZZF3+, ": 67 ;;x D(% 	Ggx'>'>?kk(+G{{:.HGzz::$55. #"3GX"FK%{{:.H7Hc.B.B.J.JGT5 IIh ~~ngooc36OPH"(3;O;O;W;W 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 )NrT      )rq   rT   items)	r   rd   docnamesotherr;   r`   rc   rU   r^   s	            r%   env_merge_infor      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 )NrT   Fr   )r2   rr   r   popr*   )r   rd   r^   modulesr;   r`   _code_tagsrc   _refnamerU   s              r%   env_purge_docr      s    c.3Gw}}/ 
!E>',$udH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                  | j                  j                        r| j                          y | j                          y N)rR   rd   _builder_clsrx   rQ   convert_viewcode_anchorsremove_viewcode_anchors)selfkwargss     r%   runzViewcodeAnchorTransform.run   s=    HH!!4;;#C#C
 ))+((*r$   c                   | j                   j                  t              D ]k  }t        j                  dt        d      dg      }t        | j                  j                  j                  |d   |d   |d   |      }|j                  |       m y )N z[source]zviewcode-link)classesrm   rk   rl   )documentrs   r   r   inliner
   r   rd   _apprP   replace_self)r   nodeanchorrefnodes       r%   r   z0ViewcodeAnchorTransform.convert_viewcode_anchors   s}    MM))/: 		'D\\"a
mo=NOF"%%X[!WG g&		'r$   c                    t        | j                  j                  t                    D ]  }|j                  j                  |        y r   )rr   r   rs   r   parentremove)r   r   s     r%   r   z/ViewcodeAnchorTransform.remove_viewcode_anchors   s7    ..?@ 	%DKKt$	%r$   N)r   r   ro   None)ro   r   )r   r    r!   r"   default_priorityr   r   r   r#   r$   r%   r   r      s    E+
'%r$   r   c                    | j                   }|j                  d|      }|ry	 t        j                  |      \  }}|S # t        $ r Y yw xY w)z"Get module filename for *modname*.rW   N)re   rY   r   get_module_sourcer6   )r   r;   re   source_infofilename_sources         r%   get_module_filenamer      sU    ZZF))*@'JK	 . @ @ IHgO 		s   = 	A	A	c                   t        | |      }|yt        d| j                        }|j                  dd      |j                  z   }| j
                  dz  |z  }	 t        |      t        |      k  ry	 y# t        $ r Y yw xY w)z*Check generation of module page is needed.Tr   r'   rj   r   F)r   r   rP   r~   
out_suffixoutdirr   OSError)r   r;   module_filenamerP   basenamepage_filenames         r%   should_generate_module_pager     s    )#w7O*CKK8GsC(7+=+==HJJ+h6M/3F}3UU V   s   A2 2	A>=A>c              #  	  K   | j                   }t        |d      sy t        |j                  |j                  j
                        sy | j                  j                  }| j                  j                  }t        |j                        }t        t        |j                  j                               t        d      dt        |j                        | j                  j                   t#        j$                  d            D ]1  \  }}|s
t'        | |      s|\  }}}	}
t)        j*                  t,        |j/                  dd            }|j                  j0                  dv r|j                  j0                  }nd}d	|j                  j2                  z  }|j5                  |||
      }|j7                         }|d   j9                  d      \  }}|dz   |g|dd t        |      dz
  }t;        d      }|	j                         D ]O  \  }}||   \  }}} |||      dz   |
z   dz   |z   }d| d| d| d||   z   ||<   |t=        ||      xx   dz  cc<   Q g }|}d|v ra|j?                  dd      d   }||v rC|jA                   ||t)        j*                  t,        |j/                  dd                  |d       d|v ra|jA                   ||t)        j*                  t,        d            t;        d      d       |jC                          ||t;        d      |z  dj+                  |      z   d}||df 4 |sy dg}dg}t        |      D ]  }|jE                  |d         r&|jA                  |dz          |jA                  d       nn|jG                          |jE                  |d         s6|jG                          |jA                  d       |jE                  |d         s6|jA                  |dz           |t)        j*                  t,        d      t)        j*                  t,        |j/                  dd                  }|jA                  d| d| d         |jA                  dt        |      dz
  z         t;        d!      t;        d"      dj+                  |      z   d#}t)        j*                  t,        d      |df y w)$NrT   zhighlighting module code... bluer   r'   rj   >   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   )$rd   rq   rR   r   rx   rQ   rP   highlighterget_relative_uriru   rT   r   sortedr   r   r*   	verbosityoperator
itemgetterr   r|   r,   r}   r~   highlight_languageviewcode_line_numbershighlight_block
splitlinesr)   r
   minrsplitappendreverserO   r   ) r   rd   r   uritomodnamesr;   r`   r\   r]   rc   r_   r   lexerr   highlightedlinesbeforeafter	max_index	link_textrN   r^   _typestartendbacklinkr   r   contextrJ   stackrelative_uris                                    r%   collect_pagesr     s    
''C3+, 0 0#**2Q2QR++))KKK((E3(()H)s$$**,-
)*C!!"

A D- *38$)!dD'>>.'//#s2KL::((,??JJ11EESZZ===!11$w1O&&(aw/w&.a

 JN	hK	!ZZ\ 	5MD' $T
E5#Xw/#5?#ELH24& 922:2i[P, %L
 #c9%&*4&	5 Vm]]3*1-F!! !~v~~c37OP $   Vm 	(INN>7$KL}%
 	 	 45?$))EBRR

 ,,ID-L 6DDE(# JeBi(LL3'KKIIK((r3		G$ ((r3 LL3'NN>73NN>7??3+DE
 	mL>G9KHIJ 	KK3u:>*+*+EFQUVG
 ..
17K
GGs   J4R>7D%R>C!R>c                `   | j                  dd dt        t        h             | j                  dddt        t        h             | j                  dddt        t        h             | j                  ddd	t        t        h             | 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_importr   )typesrQ   Fry   Tr   rd   zdoctree-readzenv-merge-infozenv-purge-doczhtml-collect-pagesrW   ri   r   )versionenv_versionparallel_read_safe)add_config_value	frozensetr   rp   connectr   r   r   r   	add_eventadd_post_transformr   sphinx__display_version__)r   s    r%   setupr     s   *D"Ixj<QR/)TFBST*D"Itf<M   0%iQUPVFWXKK-KK .1KK/KK$m4 MM()MM,-23--" r$   )r;   rn   r<   rn   ro   z
str | None)rP   ztype[Builder]rQ   rp   ro   rp   )r   r   r   r   ro   r   )
r   r   rd   r   r   zSet[str]r   r   ro   r   )r   r   rd   r   r^   rn   ro   r   )r   r   r;   rn   ro   z_StrPath | None)r   r   r;   rn   ro   rp   )r   r   ro   z)Iterator[tuple[str, dict[str, Any], str]])r   r   ro   r   )Ar"   
__future__r   r-   r   r|   r8   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   r4   r}   r   rH   rR   r   r   r   r   r   r   r   r   r#   r$   r%   <module>r
     s    = "      &  "    ( A  / * 2-#)':3-4			8	$ g 2j@F1	1&12:1CS1	1(! %1 %<*lH^r$   