
    F-Ph]                        d dl mZ d dlZd dlmZ d dlm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Z G d d          Zd$dZd%d&dZd'dZd(dZ	 	 d)d*d#ZdS )+    )annotationsN)bisect_right)Iterable)Iterator)overloadc                      e Zd ZdZd!d"dZd#d
ZdZed$d            Zed%d            Zd&dZd'dZ	d(dZ
d)dZd*d+dZd,dZd-dZd)dZd.d ZdS )/SourcezvAn immutable object holding a source code fragment.

    When using Source(...), the source lines are deindented.
    NobjobjectreturnNonec                    |sg | _         g | _        d S t          |t                    r|j         | _         |j        | _        d S t          |t          t
          f          r>t          d |D                       | _         t          d |D                       | _        d S t          |t                    rCt          |                    d                    | _         |                    d          | _        d S 	 t          |          }t          j        |          }n$# t          $ r t          j        |          }Y nw xY wt          |                    d                    | _         |                    d          | _        d S )Nc              3  @   K   | ]}|                     d           V  dS 
Nrstrip.0xs     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/_pytest/_code/source.py	<genexpr>z"Source.__init__.<locals>.<genexpr>   ,      !>!>Q!((4..!>!>!>!>!>!>    c              3  @   K   | ]}|                     d           V  dS r   r   r   s     r   r   z"Source.__init__.<locals>.<genexpr>   r   r   r   )lines	raw_lines
isinstancer	   tuplelistdeindentstrsplit
getrawcodeinspect	getsource	TypeError)selfr
   rawcodesrcs       r   __init__zSource.__init__   sY    	-$&DJ(*DNNNV$$ 	-DJ ]DNNNeT]++ 	-!!>!>#!>!>!>>>DJ!!>!>#!>!>!>>>DNNNS!! 
	-!#))D//22DJ YYt__DNNN-$S//'00 - - -',,-!#))D//22DJ YYt__DNNNs   5#D D:9D:otherboolc                Z    t          |t                    st          S | j        |j        k    S N)r   r	   NotImplementedr   )r(   r,   s     r   __eq__zSource.__eq__,   s)    %(( 	"!!zU[((r   keyintr"   c                    d S r/    r(   r2   s     r   __getitem__zSource.__getitem__4   s    ,/Cr   slicec                    d S r/   r5   r6   s     r   r7   zSource.__getitem__7   s    14r   int | slicestr | Sourcec                   t          |t                    r| j        |         S |j        dvrt	          d          t                      }| j        |j        |j                 |_        | j        |j        |j                 |_        |S )N)N   z!cannot slice a Source with a step)	r   r3   r   step
IndexErrorr	   startstopr   )r(   r2   	newsources      r   r7   zSource.__getitem__:   sz    c3 	:c?"xy(( !DEEEI"jSX)=>IO"&.SX1E"FIr   Iterator[str]c                *    t          | j                  S r/   )iterr   r(   s    r   __iter__zSource.__iter__E   s    DJr   c                *    t          | j                  S r/   )lenr   rF   s    r   __len__zSource.__len__H   s    4:r   c                   dt          |           }}||k     rI| j        |                                         s*|dz  }||k     r| j        |                                         *||k    rO| j        |dz
                                           s-|dz  }||k    r"| j        |dz
                                           -t                      }| j        |_        | j        ||         |j        dd<   |S )zGReturn new Source object with trailing and leading blank lines removed.r   r=   N)rI   r   stripr	   r   )r(   r@   endsources       r   rL   zSource.stripK   s    D		sckk$*U"3"9"9";";kQJE ckk$*U"3"9"9";";kEkk$*S1W"5";";"="=k1HC Ekk$*S1W"5";";"="=k>*U3Y/QQQr       indentc                l    t                      }| j        |_        fd| j        D             |_        |S )z^Return a copy of the source object with all lines indented by the
        given indent-string.c                    g | ]}|z   S r5   r5   )r   linerP   s     r   
<listcomp>z!Source.indent.<locals>.<listcomp>\   s    BBBtFTMBBBr   )r	   r   r   )r(   rP   rB   s    ` r   rP   zSource.indentW   s;     HH	"n	BBBBtzBBB	r   linenoc                F    |                      |          \  }}| ||         S )zUReturn Source statement which contains the given linenumber
        (counted from 0).)getstatementrange)r(   rU   r@   rM   s       r   getstatementzSource.getstatement_   s)     ++F33
sE#Ir   tuple[int, int]c                    d|cxk    rt          |           k     sn t          d          t          ||           \  }}}||fS )zmReturn (start, end) tuple which spans the minimal statement region
        which containing the given lineno.r   zlineno out of range)rI   r?   getstatementrange_ast)r(   rU   astr@   rM   s        r   rW   zSource.getstatementrangee   sW     V''''c$ii''''2333/==UCczr   c                v    t                      }t          | j                  |j        dd<   | j        |_        |S )z&Return a new Source object deindented.N)r	   r!   r   r   )r(   rB   s     r   r!   zSource.deindentm   s5    HH	%dj11	"n	r   c                6    d                     | j                  S Nr   )joinr   rF   s    r   __str__zSource.__str__t   s    yy$$$r   r/   )r
   r   r   r   )r,   r   r   r-   )r2   r3   r   r"   )r2   r8   r   r	   )r2   r:   r   r;   )r   rC   )r   r3   )r   r	   )rO   )rP   r"   r   r	   )rU   r3   r   r	   )rU   r3   r   rY   )r   r"   )__name__
__module____qualname____doc__r+   r1   __hash__r   r7   rG   rJ   rL   rP   rX   rW   r!   ra   r5   r   r   r	   r	      s7        
- - - - -,) ) ) ) H/// X/444 X4	 	 	 	          
 
 
 
             % % % % % %r   r	   r   tuple[Source | None, int]c                    	 t          j        |           \  }}n# t          $ r Y dS w xY wt                      }d |D             |_        ||_        ||fS )N)Nc                6    g | ]}|                                 S r5   r   )r   rS   s     r   rT   zfindsource.<locals>.<listcomp>   s     :::dDKKMM:::r   )r%   
findsource	Exceptionr	   r   r   )r
   sourcelinesrU   rN   s       r   rk   rk   }   sp    %055VV   xxXXF::k:::FL"F6>s    
((Tr
   r   trycallr-   types.CodeTypec                    	 | j         S # t          $ r Y nw xY w|r9t          | dd          }|r&t          | t                    st          |d          S t          d|           )z&Return code object for given function.__call__NF)rn   zcould not get code object for )__code__AttributeErrorgetattrr   typer$   r'   )r
   rn   calls      r   r$   r$      s    |    3sJ-- 	3
3-- 	3dE2222
<S<<
=
==s   	 
r   Iterable[str]	list[str]c                t    t          j        d                    |                                                     S r_   )textwrapdedentr`   
splitlines)r   s    r   r!   r!      s*    ?499U++,,77999r   rU   r3   nodeast.ASTtuple[int, int | None]c                   g }t          j        |          D ]}t          |t           j        t           j        f          rt          |t           j        t           j        t           j        f          r'|j        D ]}|	                    |j
        dz
              |	                    |j
        dz
             dD ];}t          ||d           }|r&|	                    |d         j
        dz
  dz
             <|                                 t          ||           }||dz
           }|t          |          k    rd }	n||         }	||	fS )Nr=   )	finalbodyorelser   )r\   walkr   stmtExceptHandlerClassDefFunctionDefAsyncFunctionDefdecorator_listappendrU   rt   sortr   rI   )
rU   r}   valuesr   dnamevalinsert_indexr@   rM   s
             r   get_statement_startend2r      sD    FXd^^ 9 9a#(C$5677 
	9!clCOS=QRSS 0) 0 0AMM!(Q,////MM!(Q,'''/ 9 9-4Qd-C-C 9MM#a&-!"3a"7888
KKMMM//L<!#$Es6{{""\"#:r   FrN   	assertionastnodeast.AST | Nonetuple[ast.AST, int, int]c                T  
 |dt          |          }t          j                    5  t          j        d           t	          j        |dd          }d d d            n# 1 swxY w Y   t          | |          \  }}|t          |j                  }||dz   k    rt          j
                    }t          |j        |                   o$|j        |         d                                         |_        d |j        ||         D             
	 t          j        
fd          D ]} |j        |  n1# t          j        t$          f$ r |j        |z   }Y nt(          $ r Y nw xY w|rB|j        |dz
                                           }	|	                    d          s|	s|dz  }nn|B|||fS )	NignorerN   execr=   r   c              3      K   | ]	}|d z   V  
dS r   r5   r   s     r   r   z(getstatementrange_ast.<locals>.<genexpr>   s&      ::Qq4x::::::r   c                 "    t                     S r/   )next)its   r   <lambda>z'getstatementrange_ast.<locals>.<lambda>   s    R r   #)r"   warningscatch_warningssimplefilterr\   parser   rI   r   r%   BlockFinderr-   isspacestartedtokenizegenerate_tokens
tokeneater
EndOfBlockIndentationErrorlastrl   lstrip
startswith)rU   rN   r   r   contentr@   rM   block_findertokrS   r   s             @r   r[   r[      s5    f++ $&& 	; 	;!(+++i6::G	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; )99JE3
 {&,
UQY *,, e$%%J&,u*=a*@*H*H*J*J 	 ;:&,uSy"9:::	/0@0@0@0@AA . .''---."$45 	, 	, 	,#e+CCC 	 	 	D	  |C!G$++--??3 	t 	1HCC   E3s)   +AA!$A!$D0 0 E	EE)r   rg   )T)r
   r   rn   r-   r   ro   )r   rw   r   rx   )rU   r3   r}   r~   r   r   )FN)
rU   r3   rN   r	   r   r-   r   r   r   r   )
__future__r   r\   bisectr   collections.abcr   r   r%   rz   r   typestypingr   r   r	   rk   r$   r!   r   r[   r5   r   r   <module>r      sF   " " " " " " 



       $ $ $ $ $ $ $ $ $ $ $ $           e% e% e% e% e% e% e% e%Z   
> 
> 
> 
> 
>: : : :   : "	. . . . . . .r   