
    [Fi                        d dl 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	 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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 j2                  deeee   f   fdZ	 	 ddedededee j2                     dee j2                  eef   f
dZy)    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y)SourcezvAn immutable object holding a source code fragment.

    When using Source(...), the source lines are deindented.
    Nobjreturnc                    |sg | _         y t        |t              r|j                   | _         y t        |t        t        f      rt        d |D              | _         y t        |t              r t        |j                  d            | _         y 	 t        |      }t        j                  |      }t        |j                  d            | _         y # t        $ r t        j                  |      }Y @w xY w)Nc              3   >   K   | ]  }|j                  d         yw
N)rstrip.0xs     f/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/_pytest/_code/source.py	<genexpr>z"Source.__init__.<locals>.<genexpr>   s     !>Q!((4.!>s   r   )lines
isinstancer   tuplelistdeindentstrsplit
getrawcodeinspect	getsource	TypeError)selfr   rawcodesrcs       r   __init__zSource.__init__   s    $&DJV$DJeT]+!!>#!>>DJS!!#))D/2DJ-$S/''0 "#))D/2DJ  -'',-s    C C-,C-otherc                 `    t        |t              st        S | j                  |j                  k(  S N)r   r   NotImplementedr   )r$   r(   s     r   __eq__zSource.__eq__)   s%    %(!!zzU[[((    keyc                      y r*    r$   r.   s     r   __getitem__zSource.__getitem__1   s    ,/r-   c                      y r*   r0   r1   s     r   r2   zSource.__getitem__4   s    36r-   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   r2   zSource.__getitem__7   sY    c3::c?"xxy( !DEEI"jjSXX>IOr-   c                 ,    t        | j                        S r*   )iterr   r$   s    r   __iter__zSource.__iter__A   s    DJJr-   c                 ,    t        | j                        S r*   )lenr   r>   s    r   __len__zSource.__len__D   s    4::r-   c                    dt        |       }}||k  rE| j                  |   j                         s(|dz  }||k  r| j                  |   j                         s(||kD  rK| j                  |dz
     j                         s+|dz  }||kD  r!| j                  |dz
     j                         s+t               }| j                  || |j                  dd |S )zGReturn new Source object with trailing and leading blank lines removed.r   r5   N)rA   r   stripr   )r$   r9   endsources       r   rD   zSource.stripG   s    D	sck$**U"3"9"9";QJE ck$**U"3"9"9";Ek$**S1W"5";";"=1HC Ek$**S1W"5";";"=**U3/Qr-   indentc                 h    t               }| j                  D cg c]  }||z   	 c}|_        |S c c}w )z^Return a copy of the source object with all lines indented by the
        given indent-string.)r   r   )r$   rG   r;   lines       r   rG   zSource.indentR   s1     H	7;zzBtFTMB	 Cs   /linenoc                 4    | j                  |      \  }}| || S )zUReturn Source statement which contains the given linenumber
        (counted from 0).)getstatementrange)r$   rJ   r9   rE   s       r   getstatementzSource.getstatementY   s$     ++F3
sE#r-   c                     d|cxk  rt        |       k  st        d       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)rA   r8   getstatementrange_ast)r$   rJ   astr9   rE   s        r   rL   zSource.getstatementrange_   sN     V'c$i'233 (2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.deindentg   s&    H	%djj1	r-   c                 8    dj                  | j                        S Nr   )joinr   r>   s    r   __str__zSource.__str__m   s    yy$$r-   r*   )r   r   )z    )__name__
__module____qualname____doc__objectr'   boolr,   __hash__r   r6   r   r2   slicer
   r   r?   rB   rD   rG   rM   r	   rL   r   rU   r0   r-   r   r   r      s    
3F 3d 3")F )t ) H/s/s/ /6u66 6uS%Z0 U3=5I  (3-   	S x 3 8  c3h % %r-   r   r   c                     	 t        j                  |       \  }}t               }|D cg c]  }|j	                          c}|_        ||fS # t        $ r Y yw xY wc c}w )N)N)r!   
findsource	Exceptionr   r   r   )r   sourcelinesrJ   rF   rI   s        r   r`   r`   v   s_    %005V XF.9:dDKKM:FL6>	   ;s   A A	AAr   trycallc                     	 | j                   S # t        $ r Y nw xY w|r,t        | dd      }|rt        | t              st        |d      S t        d|       )z&Return code object for given function.__call__NF)rc   zcould not get code object for )__code__AttributeErrorgetattrr   typer    r#   )r   rc   calls      r   r    r       s`    || sJ-
3-dE22
4SG<
==s    	r   c                 f    t        j                  dj                  |             j                         S rS   )textwrapdedentrT   
splitlines)r   s    r   r   r      s#    ??499U+,7799r-   rJ   nodec                    g }t        j                  |      D ]  }t        |t         j                  t         j                  f      s.t        |t         j
                  t         j                  t         j                  f      r/|j                  D ]   }|j                  |j                  dz
         " |j                  |j                  dz
         dD ]6  }t        ||d       }|s|j                  |d   j                  dz
  dz
         8  |j                          t        ||       }||dz
     }|t        |      k\  rd }	||	fS ||   }	||	fS )Nr5   )	finalbodyorelser   )rP   walkr   stmtExceptHandlerClassDefFunctionDefAsyncFunctionDefdecorator_listappendrJ   rh   sortr   rA   )
rJ   ro   valuesr   dnamevalinsert_indexr9   rE   s
             r   get_statement_startend2r      s,    FXXd^ 9a#((C$5$567!cllCOOS=Q=QRS)) 0AMM!((Q,/0MM!((Q,'/ 90740FMM#a&--!"3a"78	99 KKM/L<!#$Es6{" #: \"#:r-   rF   	assertionastnodec                 L  
 |Tt        |      }t        j                         5  t        j                  d       t	        j
                  |dd      }d d d        t        | |      \  }}|t        |j                        }||dz   kD  rt        j                         }t        |j                  |         xr  |j                  |   d   j                         |_        d |j                  || D        
	 t        j                  
fd      D ]  } |j                   |   	 |r=|j                  |dz
     j+                         }	|	j-                  d      s|	s|dz  }nn|r=|||fS # 1 sw Y   xY w# t        j"                  t$        f$ r |j&                  |z   }Y {t(        $ r Y w xY w)	NignorerF   execr5   r   c              3   &   K   | ]	  }|d z     ywr   r0   r   s     r   r   z(getstatementrange_ast.<locals>.<genexpr>   s     :Qq4x:s   c                      t               S r*   )next)its   r   <lambda>z'getstatementrange_ast.<locals>.<lambda>   s    R r-   #)r   warningscatch_warningssimplefilterrP   parser   rA   r   r!   BlockFinderr[   isspacestartedtokenizegenerate_tokens
tokeneater
EndOfBlockIndentationErrorlastra   lstrip
startswith)rJ   rF   r   r   contentr9   rE   block_findertokrI   r   s             @r   rO   rO      s    f+ $$& 	;!!(+ii6:G	; )9JE3
 {&,,
UQY **, e$%J&,,u*=a*@*H*H*J 	 ;&,,uS"9:	//0@A .'''-. ||C!G$++-??3t1HC  E3I	; 	;0 ""$45 	,##e+C 		s#   -E!0,E. !E+.(F#F#"F#)T)FN)rP   bisectr   r!   rl   r   typestypingr   r   r   r   r   r	   r
   r   r   r6   r`   rZ   r[   CodeTyper    r   r   ASTr   rO   r0   r-   r   <module>r      s   
             \% \%HuXf-s23 
>F 
>T 
>U^^ 
>:HSM :d3i :C sww 5hsmAS;T : !%	... . cgg	.
 377C.r-   