
    O&i7              	       d   d 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 ddl	m
Z
mZmZmZmZ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  ej        e          Z dde
e!         de!de!ddfdZ"de!de!deee!                  fdZ# G d de          Z$dedee!ef         fdZ%dS )zCheck Python modules and C API for coverage.

Mostly written by Josip Dzolonga for the Google Highly Open Participation
contest.
    N)import_module)path)IOAnyDictListPatternSetTuple)Sphinx)Builder)__)logging)red)safe_getattr-ftextcharreturnc                     |                      |dz              |                      |t          |          z  dz              d S )N
)writelen)r   r   r   s      `/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/sphinx/ext/coverage.pywrite_headerr      s@    GGD4KGGD3t99t#$$$$$    nameexpsc                     g }|D ]c}	 |                     t          j        |                     +# t          $ r, t                              t          d          ||            Y `w xY w|S )Nzinvalid regex %r in %s)appendrecompile	Exceptionloggerwarningr   )r   r   lstexps       r   compile_regex_listr)       s    
C D D	DJJrz#'''' 	D 	D 	DNN2677dCCCCC	DJs   '03A&%A&c                       e Zd ZdZdZ edej        z   dz             ZddZ	de
fdZd	eddfd
ZddZddZde
defdZddZddZddZdS )CoverageBuilderz:
    Evaluates coverage of code in the documentation.
    coveragezNTesting of coverage in the sources finished, look at the results in %(outdir)szpython.txt.r   Nc                 `   g | _         | j        j        D ]H}t          j        | j        |          }| j                             t          j        |                     Ig | _        | j        j	        
                                D ]l\  }}	 | j                            |t          j        |          f           5# t          $ r+ t                              t#          d          |           Y iw xY wi | _        | j        j        
                                D ]\  }}t)          d|          | j        |<   t)          d| j        j                  | _        t)          d| j        j                  | _        t)          d| j        j                  | _        t)          d| j        j                  | _        d S )Nz&invalid regex %r in coverage_c_regexescoverage_ignore_c_itemscoverage_ignore_modulescoverage_ignore_classescoverage_ignore_functionscoverage_ignore_pyobjects)c_sourcefilesconfigcoverage_c_pathr   joinsrcdirextendglob	c_regexescoverage_c_regexesitemsr!   r"   r#   r$   r%   r&   r   c_ignorexpsr.   r)   r/   mod_ignorexpsr0   cls_ignorexpsr1   fun_ignorexpsr2   py_ignorexps)selfpatternr   r(   r   s        r   initzCoverageBuilder.init2   s   (*{2 	: 	:GiW55G%%di&8&899999;;9??AA 	R 	RKT3R%%tRZ__&=>>>> R R Rr"JKKSQQQQQR ;= K?EEGG 	> 	>LT4%78Q8<&> &>DT""/0I040SU U/0I040SU U/0K040UW W./J/3{/TV Vs   .B772C,+C,c                     dS )Nzcoverage overview )rB   s    r   get_outdated_docsz!CoverageBuilder.get_outdated_docsL   s    ""r   ignoredc                     i | _         |                                  |                                  i | _        |                                  |                                  d S )N)py_undocbuild_py_coveragewrite_py_coveragec_undocbuild_c_coveragewrite_c_coverage)rB   rH   s     r   r   zCoverageBuilder.writeO   s^    35      8:r   c                    | j         j        d         d         }| j        D ]}t                      }t	          |d          5 }|D ]}| j        D ]\  }}|                    |          }|rk|                                d         }	|	|vrL| j        	                    |g           D ]}
|
                    |	          r n|
                    ||	f           	 d d d            n# 1 swxY w Y   |r
|| j        |<   d S )Ncobjectsutf-8encodingr   )env
domaindatar3   setopenr:   matchgroupsr=   getaddrM   )rB   	c_objectsfilenameundocr   linekeyregexrZ   r   r(   s              r   rN   z CoverageBuilder.build_c_coverageX   sy   H',Y7	* 	/ 	/H*-%%Eh111 %Q % %D&*n 
% 
%
U %D 1 1  %#(<<>>!#4D#944+/+;+?+?R+H+H !; !;C'*yy %.(-%. %*IIsDk$:$:$:$%
%%% % % % % % % % % % % % % % %  /).X&!	/ 	/s   BC##C'	*C'	c           
         t          j        | j        d          }t          |dd          5 }| j        j        rt          |dd           |                    d           | j        	                                D ]\  }}t          ||           t          |          D ]\  }}|                    d|d	d
|dd           | j        j        r| j        j        s| j        j        r+t                              t#          d          |||           rt                              t'          d          dz   dz   d|d|z  z   z  z   t'          d          z   |z              |                    d           	 d d d            d S # 1 swxY w Y   d S )Nzc.txtwrS   rT   zUndocumented C API elements=r   z * 50z [z>9z]
z&undocumented c api: %s [%s] in file %sundocumented  zc   z
api       %-30sz [%9s]z - in file )r   r6   outdirrY   r4   coverage_write_headliner   r   rM   r<   sortedcoverage_show_missing_itemsappquietwarningiserrorr%   r&   r   infor   )rB   output_fileopr_   r`   typr   s          r   rO   z CoverageBuilder.write_c_coveragem   s   iW55+sW555 	{2 ER!>DDDHHTNNN#'<#5#5#7#7  %R***!' 	G 	GICHHH4444=>>>{> G8> GTX-D G"NN2.V+W+W+/h@ @ @ @ #KK,<(=(=(F(U(/4(S.3H(I)J(+M(:(:);=E)F G G G 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   EF  FF	full_namec                 J    | j         D ]}|                    |          r dS dS )NTF)rA   search)rB   ru   r(   s      r   ignore_pyobjzCoverageBuilder.ignore_pyobj   s9    $ 	 	Czz)$$ ttur   c                 f   | j         j        d         d         }| j         j        d         d         }| j        j        }|D ]p}d}| j        D ]}|                    |          rd} n|s|                     |          r@	 t          |          }nL# t          $ r?}t          
                    t          d          ||           d|i| j        |<   Y d }~d }~ww xY wg }	i }
t          j        |          D ]\  }}|d         d	k    rt          |d
          s$|j        |k    r0|d|}|                     |          rMt          j        |          rE||vr@| j        D ]}|                    |          r n |r|j        s|	                    |           t          j        |          r| j        D ]}|                    |          r nҌ||vr|r|j        sg |
|<   g }t/          |          D ]}||j        vr	 t3          ||          }n# t4          $ r Y *w xY wt          j        |          st          j        |          sW|d         d	k    rd|r|j        sn|d|}|                     |          r||vr|                    |           |r||
|<   |	|
d| j        |<   rd S )NpyrR   modulesFTz#module %s could not be imported: %serrorr   _
__module__.)funcsclasses)rV   rW   r4   coverage_skip_undoc_in_sourcer>   rZ   rx   r   ImportErrorr%   r&   r   rJ   inspect
getmembershasattrr~   
isfunctionr@   __doc__r!   isclassr?   dir__dict__r   AttributeErrorismethod)rB   rR   r{   
skip_undocmod_nameignorer(   moderrr   r   r   objru   attrs	attr_nameattrfull_attr_names                     r   rK   z!CoverageBuilder.build_py_coverage   s   (%d+I6(%d+I6[>
 S	K S	KHF)  99X&& !FE  **844 #H--   r"GHH(TWXXX+2C.h'
 E,.G$/44 >2 >2	c7c>>sL11 >X--'/xx6	$$Y// %c** .2 //#'#5 / /C"yy & %&  * )#+ ) (!LL..._S)) %2#1 $2 $299T?? "!E" %G33) )#+ ) (,.GDM$+-),S 8 8I(<< ()'3C'C'C#1 ) ) ) ()$+$4T$:$: )$+$6t$<$<) ((|s22 () )$, ) (8A		99-MN#00@@ ) (-W<< %Y 7 7 7  2,1GDM05'&J&JDM(##gS	K S	Ks*    B
C5CCH
H	H	c           
         t          j        | j        d          }g }t          |dd          5 }| j        j        rt          |dd           t          | j        	                                          }|D ]B}| j        |         }d|v r|
                    ||d         f           2|d         s	|d	         sCt          ||           |d	         r|                    d
           |                    d |d	         D                        | j        j        r| j        j        s| j        j        r5|d	         D ]+}t"                              t'          d          ||           ,nQ|d	         D ]H}t"                              t+          d          dz   dz   d|z  z   t+          d          z   |z              I|                    d           |d         r|                    d           t          |d                                                   D ]\  }}	|	s|                    d|z             | j        j        r| j        j        s| j        j        r*t"                              t'          d          ||           nt"                              t+          d          dz   dz   d|z  z   t+          d          z   |z              |                    d|z             |                    d |	D                        | j        j        r| j        j        s| j        j        r1|	D ],}
t"                              t'          d          |||
           -A|	D ]N}
t"                              t+          d          dz   dz   d|dz   |
z   z  z   t+          d          z   |z              O|                    d           D|r/t          |d           |                    d |D                        d d d            d S # 1 swxY w Y   d S )Nz
python.txtre   rS   rT   zUndocumented Python objectsrf   r|   r   r   zFunctions:
c              3       K   | ]	}d |z  V  
dS ) * %s
NrF   .0xs     r   	<genexpr>z4CoverageBuilder.write_py_coverage.<locals>.<genexpr>   s&      %L%Li!m%L%L%L%L%L%Lr   z&undocumented python function: %s :: %srh   zpy  z
function  ri   z - in module r   z	Classes:
r   z#undocumented python class: %s :: %sz
class     z * %s -- missing methods:

c              3       K   | ]	}d |z  V  
dS )z   - %s
NrF   r   s     r   r   z4CoverageBuilder.write_py_coverage.<locals>.<genexpr>  s&      -O-O!kAo-O-O-O-O-O-Or   z*undocumented python method: %s :: %s :: %sz
method    r   zModules that failed to importc              3       K   | ]	}d |z  V  
dS )z * %s -- %s
NrF   r   s     r   r   z4CoverageBuilder.write_py_coverage.<locals>.<genexpr>$  s'      BBao1BBBBBBr   )r   r6   rj   rY   r4   rk   r   rl   rJ   keysr!   r   
writelinesrm   rn   ro   rp   r%   r&   r   rq   r   r<   )rB   rr   failedrs   r   r   r`   func
class_namemethodsmeths              r   rL   z!CoverageBuilder.write_py_coverage   s/   i\::+sW555 >	C{2 ER!>DDD$-,,..//D 6' 6'd+e##MM4w"89999 + !E'N !  T***W~ '000%L%LU7^%L%L%LLLL;B 	^#x~ ^1H ^,1'N !4 !4D$*NN(*+S(T(T(,d%4 %4 %4 %4!4
 -2'N !^ !^D$*KK4D0E0E0NQ]0]07$1?AD_AUAU1VX\1] %^ %^ %^ %^Y' '...39 %i 0 6 6 8 84: 4: U U/J#* U "Z)? @ @ @#';#J !Q'+x~ %Q9P %Q(.,./T,U,U,0*)> )> )> )> )/C8H4I4IF4R4@5ACJZCW5X474H4H5IKO5P )Q )Q )Q !#)H:)U V V V "-O-Ow-O-O-O O O O#';#J !U'+x~ %U9P %U4; )H )HD,2NN02 4E 1F 1F04j$-H -H -H -H)H 5< )U )UD,2KK<L8M8MPV8V8D9EGN9Cc9ID9PHR9R 9<O8L8L9M PT9T -U -U -U -U  CR!@AAABB6BBBBBB}>	C >	C >	C >	C >	C >	C >	C >	C >	C >	C >	C >	C >	C >	C >	C >	C >	C >	Cs   N;O77O;>O;c                     t          j        | j        d          }t          |d          5 }t	          j        | j        | j        f|           d d d            d S # 1 swxY w Y   d S )Nzundoc.picklewb)r   r6   rj   rY   pickledumprJ   rM   )rB   
picklepathdumpfiles      r   finishzCoverageBuilder.finish&  s    Yt{N;;
*d## 	AxK5x@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   "AA!A)r   N)__name__r~   __qualname__r   r   r   r   sepepilogrD   strrG   r   r   rN   rO   boolrx   rK   rL   r   rF   r   r   r+   r+   *   sC         DR (*.(35BC D DFV V V V4#3 # # # # c  d        / / / /*   *c d    YK YK YK YKvAC AC AC ACFA A A A A Ar   r+   rn   c                     |                      t                     |                     dg d           |                     dg d           |                     dg d           |                     dg d           |                     dg d           |                     di d           |                     di d           |                     d	d
d           |                     ddd           |                     ddd           t          j        d
dS )Nr/   Fr1   r0   r2   r5   r;   r.   rk   Tr   rm   )versionparallel_read_safe)add_builderr+   add_config_valuesphinx__display_version__)rn   s    r   setupr   -  s   OOO$$$2B>>>4b%@@@2B>>>4b%@@@*B666-r59992B>>>2D%@@@8%GGG6uEEE1NNNr   )r   )&r   r9   r   r   r"   	importlibr   osr   typingr   r   r   r   r	   r
   r   r   sphinx.applicationr   sphinx.buildersr   sphinx.localer   sphinx.utilr   sphinx.util.consoler   sphinx.util.inspectr   	getLoggerr   r%   r   r   r)   r+   r   rF   r   r   <module>r      s       				 # # # # # #       ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;  % % % % % % # # # # # #             # # # # # # , , , , , ,		8	$	$% %BsG %3 %c %D % % % %
S  WS\0B    @A @A @A @A @Ag @A @A @AFOv O$sCx. O O O O O Or   