a
    7Sicg                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZ deee ee	e eee f dddZe	e e	e d	d
dZG dd deZejdddd Zdd ZG dd de
Zdd ZdS )    N)dedent)AnyOptionalTupleList
NamedTuple)ErrorReport)SourceRangeFactory)obj	error_msgreturnc              
   C   sv   d}zt | }t | \}}W nJ tyj } z2d|  d}|rL|d| 7 }t||W Y d}~n
d}~0 0 |||fS )z{
    Wrapper around inspect.getsourcelines and inspect.getsourcefile.

    Returns: (sourcelines, file_lino, filename)
    NzCan't get source for zs. TorchScript requires source access in order to carry out compilation, make sure original .py files are available.
)inspectgetsourcefilegetsourcelinesOSError)r
   r   filenamesourcelinesfile_linenoemsg r   J/var/www/html/django/DPS/env/lib/python3.9/site-packages/torch/_sources.pyget_source_lines_and_file	   s    	
 r   )r   r   c                    s   dd  t | D ]\}}| dr|} q0q| | }|dd  fdd| d| D } fdd| |d	 d D }|| || S )
a   
    This helper function accepts a list of source lines. It finds the
    indentation level of the function definition (`def`), then it indents
    all lines in the function body to a point at or greater than that
    level. This allows for comments and continued string literals that
    are at a lower indentation than the rest of the code.
    Args:
        sourcelines: function source code, separated into lines by
                        the '
' character
    Returns:
        A list of source lines that have been correctly aligned
    c                 S   s   | |  |ot|d  S N)
startswithlen)textprefixr   r   r   remove_prefix/   s    z-normalize_source_lines.<locals>.remove_prefixdefr   c                    s   g | ]} | qS r   r   .0sr   
whitespacer   r   
<listcomp>=       z*normalize_source_lines.<locals>.<listcomp>Nc                    s   g | ]} | qS r   r   r!   r$   r   r   r&   >   r'      )	enumeratelstripr   splitappend)r   ilidxZfn_defZaligned_prefixZaligned_suffixr   r$   r   normalize_source_lines!   s     
r0   c                       s   e Zd Zd fdd	Z  ZS )SourceContextTNc                    s,   t t| |||| || _|| _|| _d S r   )superr1   __init__uses_true_divisionr   funcname)selfsourcer   r   leading_whitespace_lenr4   r5   	__class__r   r   r3   H   s    zSourceContext.__init__)TN)__name__
__module____qualname__r3   __classcell__r   r   r9   r   r1   G   s   r1   )maxsizec                  G   s   t |  S r   )r1   )argsr   r   r   make_source_contextO   s    rA   c                   C   s   t dd ddddS )N r   r(   )r1   make_raw_ranger   r   r   r   
fake_rangeT   s    rD   c                   @   s<   e Zd ZU ejed< eed< eed< ee ed< e	ed< dS )	ParsedDefastctxr7   r   r   N)
r;   r<   r=   rF   Module__annotations__r1   strr   intr   r   r   r   rE   X   s
   

rE   c           	      C   s   t | t \}}}t|}d|}t|}t|}t|j	dksXt
|j	d tjsltd| d| t|ddd t|ddd  }t||||d| j}t|||||S )NrB   r(   r   z&Expected a single top-level function: :r   T)r   r   
call_stackr0   joinr   rF   parser   body
isinstanceFunctionDefRuntimeErrorr+   rA   r;   rE   )	fnr   r   r   r7   Z
dedent_srcZpy_astr8   rG   r   r   r   	parse_def_   s    

 (rU   )N)rF   	functoolsr   textwrapr   typingr   r   r   r   r   torch._Cr   Ztorch._C._jit_tree_viewsr	   rJ   rK   r   r0   r1   	lru_cacherA   rD   rE   rU   r   r   r   r   <module>   s&    &

