
    i]                        S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SKrS SK	r	S SK
r
S SKrS SKJr  S SKr " S S5      rSS	 jrSSS
 jjrSS jrSS jr  S         SS jjrg)    )annotationsN)bisect_right)Iterable)Iterator)overloadc                      \ rS rSrSrSSS jjrSS jrSr\SS j5       r	\SS j5       r	SS jr	SS	 jr
SS
 jrSS jrSSS jjrSS jrSS jrSS jrSS jrSrg) Source   znAn immutable object holding a source code fragment.

When using Source(...), the source lines are deindented.
Nc                   U(       d  / U l         / U l        g [        U[        5      (       a#  UR                   U l         UR                  U l        g [        U[        [
        45      (       a/  [        S U 5       5      U l         [        S U 5       5      U l        g [        U[        5      (       a6  [        UR                  S5      5      U l         UR                  S5      U l        g  [        U5      n[        R                  " U5      n[        UR                  S5      5      U l         UR                  S5      U l        g ! [         a    [        R                  " U5      n NXf = f)Nc              3  B   #    U  H  oR                  S 5      v   M     g7f
Nrstrip.0xs     S/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/_pytest/_code/source.py	<genexpr>"Source.__init__.<locals>.<genexpr>        !>#Q((4..#   c              3  B   #    U  H  oR                  S 5      v   M     g7fr   r   r   s     r   r   r      r   r   r   )lines	raw_lines
isinstancer	   tuplelistdeindentstrsplit
getrawcodeinspect	getsource	TypeError)selfobjrawcodesrcs       r   __init__Source.__init__   s    $&DJ(*DNV$$DJ ]]DNeT]++!!>#!>>DJ!!>#!>>DNS!!!#))D/2DJ YYt_DN-$S/''0 "#))D/2DJ YYt_DN  -'',-s   %!D< < EEc                j    [        U[        5      (       d  [        $ U R                  UR                  :H  $ N)r   r	   NotImplementedr   )r&   others     r   __eq__Source.__eq__,   s(    %((!!zzU[[((    c                    g r-    r&   keys     r   __getitem__Source.__getitem__4   s    ,/r2   c                    g r-   r4   r5   s     r   r7   r8   7   s    14r2   c                8   [        U[        5      (       a  U R                  U   $ UR                  S;  a  [	        S5      e[        5       nU R                  UR                  UR                   Ul        U R                  UR                  UR                   Ul        U$ )N)N   z!cannot slice a Source with a step)	r   intr   step
IndexErrorr	   startstopr   )r&   r6   	newsources      r   r7   r8   :   sw    c3::c?"xxy( !DEEI"jjSXX>IO"&..SXX"FIr2   c                ,    [        U R                  5      $ r-   )iterr   r&   s    r   __iter__Source.__iter__E   s    DJJr2   c                ,    [        U R                  5      $ r-   )lenr   rD   s    r   __len__Source.__len__H   s    4::r2   c                   S[        U 5      p!X:  aP  U R                  U   R                  5       (       d.  US-  nX:  a$  U R                  U   R                  5       (       d  M.  X!:  aV  U R                  US-
     R                  5       (       d1  US-  nX!:  a'  U R                  US-
     R                  5       (       d  M1  [        5       nU R                  Ul        U R                  X UR                  SS& U$ )zGReturn new Source object with trailing and leading blank lines removed.r   r;   N)rH   r   stripr	   r   )r&   r?   endsources       r   rL   Source.stripK   s    D	sk$**U"3"9"9";";QJE k$**U"3"9"9";";k$**S1W"5";";"="=1HC k$**S1W"5";";"="=>>**U/Qr2   c                    [        5       nU R                  Ul        U R                   Vs/ s H  o1U-   PM	     snUl        U$ s  snf )zVReturn a copy of the source object with all lines indented by the
given indent-string.)r	   r   r   )r&   indentrA   lines       r   rQ   Source.indentW   s?     H	"nn	7;zzBztTMzB	 Cs   Ac                0    U R                  U5      u  p#XU $ )zMReturn Source statement which contains the given linenumber
(counted from 0).)getstatementrange)r&   linenor?   rM   s       r   getstatementSource.getstatement_   s      ++F3
#r2   c                j    SUs=::  a  [        U 5      :  d  O  [        S5      e[        X5      u  p#nX44$ )zeReturn (start, end) tuple which spans the minimal statement region
which containing the given lineno.r   zlineno out of range)rH   r>   getstatementrange_ast)r&   rV   astr?   rM   s        r   rU   Source.getstatementrangee   s7     V'c$i'233/=Czr2   c                    [        5       n[        U R                  5      UR                  SS& U R                  Ul        U$ )z&Return a new Source object deindented.N)r	   r   r   r   )r&   rA   s     r   r   Source.deindentm   s2    H	%djj1	"nn	r2   c                8    SR                  U R                  5      $ Nr   )joinr   rD   s    r   __str__Source.__str__t   s    yy$$r2   )r   r   r-   )r'   objectreturnNone)r/   rd   re   bool)r6   r<   re   r    )r6   slicere   r	   )r6   zint | slicere   zstr | Source)re   zIterator[str])re   r<   )re   r	   )z    )rQ   r    re   r	   )rV   r<   re   r	   )rV   r<   re   ztuple[int, int])re   r    )__name__
__module____qualname____firstlineno____doc__r*   r0   __hash__r   r7   rE   rI   rL   rQ   rW   rU   r   rb   __static_attributes__r4   r2   r   r	   r	      sa    
-,) H/ /4 4	 
%r2   r	   c                     [         R                  " U 5      u  p[        5       nU Vs/ s H  oDR	                  5       PM     snUl        Xl        X24$ ! [         a     gf = fs  snf )N)N)r#   
findsource	Exceptionr	   r   r   r   )r'   sourcelinesrV   rN   rR   s        r   rr   rr   }   sc    %005 XF.9:kdKKMk:FL">   ;s   A A"
AAc                     U R                   $ ! [         a     Of = fU(       a3  [        U SS5      nU(       a  [        U [        5      (       d
  [        USS9$ [        SU < 35      e)z&Return code object for given function.__call__NF)trycallzcould not get code object for )__code__AttributeErrorgetattrr   typer"   r%   )r'   rw   calls      r   r"   r"      sc    || sJ-
3--dE22
4SG<
==s    
c                h    [         R                  " SR                  U 5      5      R                  5       $ r`   )textwrapdedentra   
splitlines)r   s    r   r   r      s#    ??499U+,7799r2   c                   / n[         R                  " U5       GH  n[        U[         R                  [         R                  45      (       d  M5  [        U[         R
                  [         R                  [         R                  45      (       a1  UR                   H!  nUR                  UR                  S-
  5        M#     UR                  UR                  S-
  5        S H<  n[        X5S 5      nU(       d  M  UR                  US   R                  S-
  S-
  5        M>     GM     UR                  5         [        X 5      nX'S-
     nU[        U5      :  a  S n	X4$ X'   n	X4$ )Nr;   )	finalbodyorelser   )r[   walkr   stmtExceptHandlerClassDefFunctionDefAsyncFunctionDefdecorator_listappendrV   rz   sortr   rH   )
rV   nodevaluesr   dnamevalinsert_indexr?   rM   s
             r   get_statement_startend2r      s    FXXd^a#((C$5$5677!cllCOOS=Q=QRSS))AMM!((Q,/ *MM!((Q,'/-4Qd-C3MM#a&--!"3a"78	 0  KKM/L!#$Es6{" : ":r2   c                  ^
 UcW  [        U5      n[        R                  " 5          [        R                  " S5        [        R
                  " USS5      nS S S 5        [        X5      u  pVUc  [        UR                  5      nXeS-   :  a  [        R                  " 5       n[        UR                  U   5      =(       a     UR                  U   S   R                  5       Ul        S UR                  XV  5       m
 [        R                  " U
4S j5       H  nUR                   " U6   M     U(       aM  UR                  US-
     R+                  5       n	U	R-                  S5      (       d  U	(       d  US-  nOO	U(       a  MM  X5U4$ ! , (       d  f       GN3= f! [        R"                  [$        4 a    UR&                  U-   n N[(         a     Nf = f)	NignorerN   execr;   r   c              3  *   #    U  H	  oS -   v   M     g7fr   r4   r   s     r   r   (getstatementrange_ast.<locals>.<genexpr>   s     :"9Q4x"9s   c                    > [        T 5      $ r-   )next)its   r   <lambda>'getstatementrange_ast.<locals>.<lambda>   s	    Rr2   #)r    warningscatch_warningssimplefilterr[   parser   rH   r   r#   BlockFinderrg   isspacestartedtokenizegenerate_tokens
tokeneater
EndOfBlockIndentationErrorlastrs   lstrip
startswith)rV   rN   	assertionastnodecontentr?   rM   block_findertokrR   r   s             @r   rZ   rZ      s    f+ $$&!!(+ii6:G ' )9JE
 {&,,
QY **, e$%J&,,u*=a*@*H*H*J 	 ;&,,u"9:	//0@A''- B ||C!G$++-??3t1HC # 3I '&0 ""$45 	,##e+C 		s#   /F 80F  
F)G	=	G	G	)re   ztuple[Source | None, int])T)r'   rd   rw   rg   re   ztypes.CodeType)r   zIterable[str]re   z	list[str])rV   r<   r   zast.ASTre   ztuple[int, int | None])FN)
rV   r<   rN   r	   r   rg   r   zast.AST | Nonere   ztuple[ast.AST, int, int])
__future__r   r[   bisectr   collections.abcr   r   r#   r~   r   typestypingr   r   r	   rr   r"   r   r   rZ   r4   r2   r   <module>r      s    " 
  $ $      e% e%Z
>:: "	... . 	.
 .r2   