§
    ÖŽ’j—  ã                  ó¼   — 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
          z  ¦  «        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     úBC:\Projects\DSCons\.venv\Lib\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  € Øð 	-Ø$&ˆDŒJØ(*ˆDŒNˆNˆNÝ˜�VÑ$Ô$ð 	-ØœˆDŒJØ œ]ˆDŒNˆNˆNÝ˜�U¥T™\Ñ*Ô*ð 	-Ý!Ð!>Ð!>¸#Ð!>Ñ!>Ô!>Ñ>Ô>ˆDŒJÝ!Ð!>Ð!>¸#Ð!>Ñ!>Ô!>Ñ>Ô>ˆDŒNˆNˆNÝ˜�SÑ!Ô!ð 
	-Ý! #§)¢)¨D¡/¤/Ñ2Ô2ˆDŒJØ ŸYšY t™_œ_ˆDŒNˆNˆNð-Ý$ S™/œ/�ÝÔ'¨Ñ0Ô0��øÝð -ð -ð -ÝÔ'¨Ñ,Ô,���ð-øøøå! #§)¢)¨D¡/¤/Ñ2Ô2ˆDŒJØ ŸYšY t™_œ_ˆDŒNˆNˆNs   Ã6#D ÄD;Ä: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)   € Ý˜%¥Ñ(Ô(ð 	"Ý!Ð!ØŒz˜Uœ[Ò(Ð(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   € Ý�c�3ÑÔð 	Ø”:˜c”?Ð"àŒx˜yÐ(Ð(Ý Ð!DÑEÔEÐEÝ™œˆIØ"œj¨¬°S´XÐ)=Ô>ˆIŒOØ"&¤.°´¸S¼XÐ1EÔ"FˆIÔØÐr   úIterator[str]c                ó*   — t          | j        ¦  «        S r/   )Úiterr   ©r(   s    r   Ú__iter__zSource.__iter__E   s   € Ý�D”JÑÔÐ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ˆØ�cŠkˆk $¤*¨UÔ"3×"9Ò"9Ñ";Ô";ˆkØ�Q‰JˆEð �cŠkˆk $¤*¨UÔ"3×"9Ò"9Ñ";Ô";ˆkà�EŠkˆk $¤*¨S°1©WÔ"5×";Ò";Ñ"=Ô"=ˆkØ�1‰HˆCð �EŠkˆk $¤*¨S°1©WÔ"5×";Ò";Ñ"=Ô"=ˆkå‘”ˆØœ>ˆÔØœ* U¨3 YÔ/ˆŒ�Q�Q�Q‰Øˆ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ÐB¨t˜F T™MÐBÐBÐBr   )r	   r   r   )r(   rP   rB   s    ` r   rP   zSource.indentW   s;   ø€ õ ‘H”Hˆ	Ø"œnˆ	ÔØBÐBÐBÐB°t´zÐ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   sX   € ð �VÐ'Ð'Ò'Ð'�c $™iœiÒ'Ð'Ð'Ð'ÝÐ2Ñ3Ô3Ð3Ý0°¸Ñ>Ô>Ñˆˆe�SØ�cˆzÐ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   € å‘H”Hˆ	Ý% d¤jÑ1Ô1ˆ	Œ˜˜˜ÑØ"œnˆ	ÔØÐr   c                ó6   — d                      | j        ¦  «        S ©Nr   )Újoinr   rF   s    r   Ú__str__zSource.__str__t   s   € Ø�yŠy˜œÑ$Ô$Ð$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)Néÿÿÿÿc                ó6   — g | ]}|                      ¦   «         ‘ŒS r5   r   )r   rS   s     r   rT   zfindsource.<locals>.<listcomp>ƒ   s    € Ð:Ð:Ð: d�D—K’K‘M”MÐ:Ð:Ð:r   )r%   Ú
findsourceÚ	Exceptionr	   r   r   )r
   ÚsourcelinesrU   rN   s       r   rk   rk   }   sp   € ðÝ%Ô0°Ñ5Ô5Ñˆ�V�VøÝð ð ð Øˆxˆxðøøøå‰XŒX€FØ:Ð:¨kÐ:Ñ:Ô:€F„LØ"€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Ý�s˜J¨Ñ-Ô-ˆØð 	3�
 3­Ñ-Ô-ð 	3Ý˜d¨EÐ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*   € ÝŒ?˜4Ÿ9š9 UÑ+Ô+Ñ,Ô,×7Ò7Ñ9Ô9Ð9r   rU   r3   Únodeúast.ASTútuple[int, int | None]c                ó   — g }t          j        |¦  «        D ]ß}t          |t           j        t           j        z  ¦  «        r¶t          |t           j        t           j        z  t           j        z  ¦  «        r'|j        D ]}| 	                    |j
        dz
  ¦  «         Œ | 	                    |j
        dz
  ¦  «         dD ];}t          ||d ¦  «        }|r&| 	                    |d         j
        dz
  dz
  ¦  «         Œ<Œà|                     ¦   «          t          || ¦  «        }|dk    rdS ||dz
           }|t          |¦  «        k    rd }	n||         }	||	fS )Nr=   )Ú	finalbodyÚorelser   )r   N)ÚastÚ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’   ™   sW  € ð €FÝŒX�d‰^Œ^ð 9ð 9ˆÝ�a�œ¥CÔ$5Ñ5Ñ6Ô6ð 
	9å˜!�Sœ\­C¬OÑ;½cÔ>RÑRÑSÔSð 0ØÔ)ð 0ð 0�AØ—M’M !¤(¨Q¡,Ñ/Ô/Ð/Ð/Ø�MŠM˜!œ( Q™,Ñ'Ô'Ð'Ø/ð 9ð 9�Ý-4°Q¸¸dÑ-CÔ-C�Øð 9à—M’M # a¤&¤-°!Ñ"3°aÑ"7Ñ8Ô8Ð8øøØ
‡K‚K�M„M€MÝ ¨Ñ/Ô/€LØ�qÒÐØˆwØ�< !Ñ#Ô$€EØ•s˜6‘{”{Ò"Ð"Øˆˆà�\Ô"ˆØ�#ˆ:Ðr   FrN   Ú	assertionÚastnodeúast.AST | Noneútuple[ast.AST, int, int]c                ó˜  ‡
— |€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    rÇt          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t+          |t          |j        ¦  «        ¦  «        }|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&   è è € Ð:Ð:˜Qˆq�4‰xÐ:Ð:Ð:Ð:Ð:Ð: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   ÚminÚlstripÚ
startswith)rU   rN   r“   r”   Úcontentr@   rM   Úblock_finderÚtokrS   r�   s             @r   r[   r[   µ   sN  ø€ ð €Ý�f‘+”+ˆõ Ô$Ñ&Ô&ð 	;ð 	;ÝÔ! (Ñ+Ô+Ð+Ý”i ¨°6Ñ:Ô:ˆGð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;õ )¨°Ñ9Ô9�J€Eˆ3ð
 €{Ý�&”,ÑÔˆà
ˆU�Q‰Y‚€õ Ô*Ñ,Ô,ˆõ �”˜eÔ$Ñ%Ô%ÐJ¨&¬,°uÔ*=¸aÔ*@×*HÒ*HÑ*JÔ*Jð 	Ôð ;Ð: &¤,¨u°S¨yÔ"9Ð:Ñ:Ô:ˆð	ÝÔ/Ð0@Ð0@Ð0@Ð0@ÑAÔAð .ð .�Ø'�Ô'¨Ð-Ð-Ð-ð.øåÔ"Õ$4Ð5ð 	,ð 	,ð 	,ØÔ# eÑ+ˆCˆCˆCÝð 	ð 	ð 	ØˆDð	øøøõ ˆc•3�v”|Ñ$Ô$Ñ
%Ô
%€CØ
ð ØŒ|˜C !™GÔ$×+Ò+Ñ-Ô-ˆØ�?Š?˜3ÑÔð 	 tð 	Ø�1‰HˆCˆCàð ð ð �E˜3ÐÐ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   