o
    Ú­j  ã                   @   sJ  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„ dƒZdeee ef fdd„Zd!dededejfdd„Zde	e dee fdd„Zdede jdeeee f fdd„Z		d"dedededee j dee jeef f
dd „ZdS )#é    N)Úbisect_right)ÚIterable)ÚIterator)ÚList)ÚOptional)Úoverload)ÚTuple)ÚUnionc                   @   s
  e Zd ZdZd"deddfdd„Zdedefdd	„ZdZe	d
e
defdd„ƒZe	d
edd fdd„ƒZd
ee
ef deed f fdd„Zdee fdd„Zde
fdd„Zd#dd„Zd$dedd fdd„Zde
dd fdd„Zde
dee
e
f fdd„Zd#dd„Zdefd d!„ZdS )%ÚSourcezvAn immutable object holding a source code fragment.

    When using Source(...), the source lines are deindented.
    NÚobjÚreturnc                 C   s°   |sg | _ d S t|tƒr|j | _ d S t|ttfƒr%tdd„ |D ƒƒ| _ d S t|tƒr4t| d¡ƒ| _ d S zt|ƒ}t	 
|¡}W n tyM   t	 
|¡}Y nw t| d¡ƒ| _ d S )Nc                 s   s   � | ]}|  d ¡V  qdS ©Ú
N©Úrstrip©Ú.0Úx© r   úQ/var/www/html/CropPilot/venv/lib/python3.10/site-packages/_pytest/_code/source.pyÚ	<genexpr>   s   € z"Source.__init__.<locals>.<genexpr>r   )ÚlinesÚ
isinstancer
   ÚtupleÚlistÚdeindentÚstrÚsplitÚ
getrawcodeÚinspectÚ	getsourceÚ	TypeError)Úselfr   ÚrawcodeÚsrcr   r   r   Ú__init__   s   


ÿzSource.__init__Úotherc                 C   s   t |tƒstS | j|jkS ©N)r   r
   ÚNotImplementedr   )r"   r&   r   r   r   Ú__eq__(   s   
zSource.__eq__Úkeyc                 C   ó   d S r'   r   ©r"   r*   r   r   r   Ú__getitem__0   ó   zSource.__getitem__c                 C   r+   r'   r   r,   r   r   r   r-   4   r.   c                 C   sD   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*   Ú	newsourcer   r   r   r-   8   s   


c                 C   ó
   t | jƒS r'   )Úiterr   ©r"   r   r   r   Ú__iter__B   ó   
zSource.__iter__c                 C   r6   r'   )Úlenr   r8   r   r   r   Ú__len__E   r:   zSource.__len__c                 C   s    dt | ƒ}}||k r!| j|  ¡ s!|d7 }||k r!| j|  ¡ r||kr?| j|d   ¡ s?|d8 }||kr?| j|d   ¡ r.tƒ }| j||… |jdd…< |S )zGReturn new Source object with trailing and leading blank lines removed.r   r/   N)r;   r   Ústripr
   )r"   r3   ÚendÚsourcer   r   r   r=   H   s   ÿÿzSource.stripú    Úindentc                    s    t ƒ }‡ fdd„| jD ƒ|_|S )z^Return a copy of the source object with all lines indented by the
        given indent-string.c                    s   g | ]}ˆ | ‘qS r   r   ©r   Úline©rA   r   r   Ú
<listcomp>W   ó    z!Source.indent.<locals>.<listcomp>)r
   r   )r"   rA   r5   r   rD   r   rA   S   s   zSource.indentÚlinenoc                 C   s   |   |¡\}}| ||… S )zUReturn Source statement which contains the given linenumber
        (counted from 0).)Úgetstatementrange)r"   rG   r3   r>   r   r   r   ÚgetstatementZ   s   zSource.getstatementc                 C   s@   d|  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)r;   r2   Úgetstatementrange_ast)r"   rG   Úastr3   r>   r   r   r   rH   `   s   ÿzSource.getstatementrangec                 C   s   t ƒ }t| jƒ|jdd…< |S )z&Return a new Source object deindented.N)r
   r   r   )r"   r5   r   r   r   r   h   s   zSource.deindentc                 C   s   d  | j¡S ©Nr   )Újoinr   r8   r   r   r   Ú__str__n   s   zSource.__str__r'   )r   r
   )r@   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úobjectr%   Úboolr)   Ú__hash__r   r0   r   r-   Úslicer	   r   r9   r<   r=   rA   rI   r   rH   r   rN   r   r   r   r   r
      s$    "


r
   r   c                 C   sF   z	t  | ¡\}}W n
 ty   Y dS w tƒ }dd„ |D ƒ|_||fS )N)Néÿÿÿÿc                 S   s   g | ]}|  ¡ ‘qS r   r   rB   r   r   r   rE   }   rF   zfindsource.<locals>.<listcomp>)r   Ú
findsourceÚ	Exceptionr
   r   )r   ÚsourcelinesrG   r?   r   r   r   rX   w   s   ÿrX   Tr   Útrycallc                 C   sT   z| j W S  ty   Y nw |r#t| ddƒ}|r#t| tƒs#t|dd�S td| ›�ƒ‚)z&Return code object for given function.Ú__call__NF)r[   zcould not get code object for )Ú__code__ÚAttributeErrorÚgetattrr   Útyper   r!   )r   r[   Úcallr   r   r   r   �   s   ÿr   r   c                 C   s   t  d | ¡¡ ¡ S rL   )ÚtextwrapÚdedentrM   Ú
splitlines)r   r   r   r   r   Ž   s   r   rG   Únodec           
      C   sà   g }t  |¡D ]E}t|t jt jfƒrLt|t jt jt jfƒr+|jD ]
}| 	|j
d ¡ q | 	|j
d ¡ dD ]}t||d ƒ}|rK| 	|d j
d d ¡ q5q| ¡  t|| ƒ}||d  }|t|ƒkrhd }	||	fS || }	||	fS )Nr/   )Ú	finalbodyÚorelser   )rK   Úwalkr   ÚstmtÚExceptHandlerÚClassDefÚFunctionDefÚAsyncFunctionDefÚdecorator_listÚappendrG   r_   Úsortr   r;   )
rG   re   Úvaluesr   ÚdÚnameÚvalÚinsert_indexr3   r>   r   r   r   Úget_statement_startend2’   s(   
€
ÿrv   Fr?   Ú	assertionÚastnodec           
   	      sH  |d u r(t |ƒ}t ¡ � t d¡ t |dd¡}W d   ƒ n1 s#w   Y  t| |ƒ\}}|d u r8t|jƒ}||d kr…t	 
¡ }|j| d  ¡ |_dd„ |j||… D ƒ‰ zt ‡ fdd	„¡D ]}|j|Ž  qbW n t	jtfy|   |j| }Y n	 ty„   Y nw |rŸ|j|d   ¡ }	|	 d
¡s—|	sœ|d8 }nn|s‡|||fS )NÚignorer?   Úexecr/   r   c                 s   s   � | ]}|d  V  qdS r   r   r   r   r   r   r   É   s   € z(getstatementrange_ast.<locals>.<genexpr>c                      s   t ˆ ƒS r'   )Únextr   ©Úitr   r   Ú<lambda>Ë   s    z'getstatementrange_ast.<locals>.<lambda>ú#)r   ÚwarningsÚcatch_warningsÚsimplefilterrK   Úparserv   r;   r   r   ÚBlockFinderÚisspaceÚstartedÚtokenizeÚgenerate_tokensÚ
tokeneaterÚ
EndOfBlockÚIndentationErrorÚlastrY   ÚlstripÚ
startswith)
rG   r?   rw   rx   Úcontentr3   r>   Úblock_finderÚtokrC   r   r|   r   rJ   ­   s:   

þ
ÿÿ
û
rJ   )T)FN)rK   r   rb   r‡   Útypesr€   Úbisectr   Útypingr   r   r   r   r   r   r	   r
   r0   rX   rS   rT   ÚCodeTyper   r   r   ÚASTrv   rJ   r   r   r   r   Ú<module>   s@    f
$üÿþýüû