
    	h                        d dl Z d dl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
 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  G d
 d          Zdeee         ef         fdZddededej        fdZde	e         dee         fdZdede j        deeee         f         fdZ	 	 ddedededee j                 dee j        eef         f
dZdS )    N)bisect_right)Iterable)Iterator)List)Optional)overload)Tuple)Unionc                   *   e Zd ZdZddeddfdZdedefdZdZe	de
defd	            Ze	dedd fd
            Zdee
ef         deed f         fdZdee         fdZde
fdZddZddedd fdZde
dd fdZde
dee
e
f         fdZddZdefdZdS )SourcezvAn immutable object holding a source code fragment.

    When using Source(...), the source lines are deindented.
    Nobjreturnc                 6   |s	g | _         d S t          |t                    r|j         | _         d S t          |t          t          f          r t          d |D                       | _         d S t          |t                    r)t          |                    d                    | _         d S 	 t          |          }t          j
        |          }n$# t          $ r t          j
        |          }Y nw xY wt          |                    d                    | _         d S )Nc              3   @   K   | ]}|                     d           V  dS 
Nrstrip.0xs     a/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/_pytest/_code/source.py	<genexpr>z"Source.__init__.<locals>.<genexpr>   s,      !>!>Q!((4..!>!>!>!>!>!>    r   )lines
isinstancer   tuplelistdeindentstrsplit
getrawcodeinspect	getsource	TypeError)selfr   rawcodesrcs       r   __init__zSource.__init__   s	    	3$&DJJJV$$ 	3DJJJeT]++ 
	3!!>!>#!>!>!>>>DJJJS!! 	3!#))D//22DJJJ-$S//'00 - - -',,-!#))D//22DJJJs   *#C C/.C/otherc                 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   keyc                     d S r,    r&   r/   s     r   __getitem__zSource.__getitem__0       r   c                     d S r,   r1   r2   s     r   r3   zSource.__getitem__4   r4   r   c                     t          |t                    r| j        |         S |j        dvrt	          d          t                      }| j        |j        |j                 |_        |S )N)N   z!cannot slice a Source with a step)r   intr   step
IndexErrorr   startstop)r&   r/   	newsources      r   r3   zSource.__getitem__8   sb    c3 	:c?"xy(( !DEEEI"jSX)=>IOr   c                 *    t          | j                  S r,   )iterr   r&   s    r   __iter__zSource.__iter__B   s    DJr   c                 *    t          | j                  S r,   )lenr   r@   s    r   __len__zSource.__len__E   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        dd<   |S )zGReturn new Source object with trailing and leading blank lines removed.r   r7   N)rC   r   stripr   )r&   r;   endsources       r   rF   zSource.stripH   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                 T    t                      }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 r1   r1   )r   linerJ   s     r   
<listcomp>z!Source.indent.<locals>.<listcomp>W   s    BBBtFTMBBBr   )r   r   )r&   rJ   r=   s    ` r   rJ   zSource.indentS   s1     HH	BBBBtzBBB	r   linenoc                 F    |                      |          \  }}| ||         S )zUReturn Source statement which contains the given linenumber
        (counted from 0).)getstatementrange)r&   rO   r;   rG   s       r   getstatementzSource.getstatementZ   s)     ++F33
sE#Ir   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)rC   r:   getstatementrange_ast)r&   rO   astr;   rG   s        r   rQ   zSource.getstatementrange`   sW     V''''c$ii''''2333/==UCczr   c                 ^    t                      }t          | j                  |j        dd<   |S )z&Return a new Source object deindented.N)r   r   r   )r&   r=   s     r   r   zSource.deindenth   s+    HH	%dj11	r   c                 6    d                     | j                  S Nr   )joinr   r@   s    r   __str__zSource.__str__n   s    yy$$$r   r,   )r   r   )rI   )__name__
__module____qualname____doc__objectr)   boolr.   __hash__r   r8   r    r3   slicer
   r   rA   rD   rF   rJ   rR   r	   rQ   r   rZ   r1   r   r   r   r      s        
3 3F 3d 3 3 3 3")F )t ) ) ) ) Hs s    X u     XuS%Z0 U3=5I     (3-            	 	 	 	 S x    3 8     c3h       % % % % % % %r   r   r   c                     	 t          j        |           \  }}n# t          $ r Y dS w xY wt                      }d |D             |_        ||fS )N)Nc                 6    g | ]}|                                 S r1   r   )r   rM   s     r   rN   zfindsource.<locals>.<listcomp>}   s     :::dDKKMM:::r   )r#   
findsource	Exceptionr   r   )r   sourcelinesrO   rH   s       r   rf   rf   w   sh    %055VV   xxXXF::k:::FL6>s    
((Tr   trycallc                     	 | 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)ri   zcould not get code object for )__code__AttributeErrorgetattrr   typer"   r%   )r   ri   calls      r   r"   r"      s    |    3sJ-- 	3
3-- 	3dE2222
<S<<
=
==s   	 
r   c                 t    t          j        d                    |                                                     S rX   )textwrapdedentrY   
splitlines)r   s    r   r   r      s*    ?499U++,,77999r   rO   nodec                    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 )Nr7   )	finalbodyorelser   )rU   walkr   stmtExceptHandlerClassDefFunctionDefAsyncFunctionDefdecorator_listappendrO   rn   sortr   rC   )
rO   ru   valuesr   dnamevalinsert_indexr;   rG   s
             r   get_statement_startend2r      sF    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0740F0F 9MM#a&-!"3a"7888
KKMMM//L<!#$Es6{{""\"#:r   FrH   	assertionastnodec                    
 |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
                    }|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ignorerH   execr7   r   c              3       K   | ]	}|d z   V  
dS r   r1   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simplefilterrU   parser   rC   r   r#   BlockFinderisspacestartedtokenizegenerate_tokens
tokeneater
EndOfBlockIndentationErrorlastrg   lstrip
startswith)rO   rH   r   r   contentr;   rG   block_findertokrM   r   s             @r   rT   rT      s    f++ $&& 	; 	;!(+++i6::G	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; )99JE3
 {&,
UQY *,,%|E215==??::&,uSy"9:::	/0@0@0@0@AA . .''---."$45 	, 	, 	,#e+CCC 	 	 	D	  |C!G$++--??3 	t 	1HCC   E3s)   +AA!$A!1$D  E8	EE)T)FN)rU   r#   rr   r   typesr   bisectr   typingr   r   r   r   r   r	   r
   r   r8   rf   r_   r`   CodeTyper"   r    r   ASTr   rT   r1   r   r   <module>r      s'   



                                                     ^% ^% ^% ^% ^% ^% ^% ^%LuXf-s23    
> 
>F 
>T 
>U^ 
> 
> 
> 
>:HSM :d3i : : : :C sw 5hsmAS;T    < !%	, ,,, , cg	,
 37C, , , , , ,r   