o
    h                     @   s   U d dl Z d dlZd dlmZ 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mZ d dlmZ d	d
hZee ed< eddG dd deZeddde
defddZedddejjddfddZedddeddfddZeddG dd dZG dd deZdS )    N)Iterable)Set)control_flow)
OpOverload)
FakeTensor)GraphModule)compatibilityvalstack_tracePRESERVED_META_KEYSFis_backward_compatiblec                   @   s   e Zd ZdS )SpecViolationErrorN)__name__
__module____qualname__ r   r   L/var/www/html/ai/venv/lib/python3.10/site-packages/torch/_export/verifier.pyr      s    r   opreturnc                 C   s
   | j j S N)_schema
is_mutable)r   r   r   r   is_functional   s   
r   nodec                    s@    fdd | j dd }|d u s |std| j dd S )Nc                    s2   t | trdS t | trt fdd| D S dS )NTc                 3   s    | ]} |V  qd S r   r   ).0x_check_is_fake_tensorr   r   	<genexpr>$   s    zH_check_has_fake_tensor.<locals>._check_is_fake_tensor.<locals>.<genexpr>F)
isinstancer   r   all)r	   r   r   r   r       s
   

z5_check_has_fake_tensor.<locals>._check_is_fake_tensorr	   z
Node.meta z is missing val field.)metagetr   name)r   r	   r   r   r   _check_has_fake_tensor   s
   r%   gmc                 C   sF   t |  |  D ]\}}t|tjr | s td| dq
d S )Nz,Tensors in Aten dialect must be contiguous, z is not contiguous)		itertoolschainnamed_parametersnamed_buffersr    torchTensoris_contiguousr   )r&   r$   paramr   r   r   _check_tensors_are_contiguous,   s   
r/   c                   @   sz   e Zd ZdeddfddZedddd	 Zeddd
d ZedddeddfddZedddede	fddZ
dS )Verifierr&   r   Nc                 C   s   |  | d S r   )check_validselfr&   r   r   r   __call__9   s   zVerifier.__call__Fr   c                 C   s   t jtjtjjgS r   )operatorgetitemr   condr+   opsmap_impl)r3   r   r   r   valid_builtin_funcs<   s   zVerifier.valid_builtin_funcsc                 C   sL   t |dr|jn|j}t|tstd| dt|s$td| dd S )Nr$   
Operator '' is not a registered Opz
operator 'z' is not functional)hasattrr$   r   r    r   r   r   r3   r   op_namer   r   r   check_valid_opD   s   


zVerifier.check_valid_opc                 C   s   |j jD ]D}|jdv rtd|j d|jdkrHt| |j|  vr*| |j t|jt	rHt
D ]}|j|d d u rGtd| d| q2qd S )N>   call_methodcall_modulez'call_module is not valid: got a class 'z' call_functionznode z is missing metadata )graphnodesr   r   targetr%   r:   r@   r    r   r   r"   r#   )r3   r&   r   r"   r   r   r   r1   S   s$   

zVerifier.check_validc                 C   s&   z|  | W dS  ty   Y dS w )NTF)r1   r   r2   r   r   r   is_validk   s   
zVerifier.is_valid)r   r   r   r   r4   r   r:   r@   r1   boolrG   r   r   r   r   r0   7   s    

r0   c                       sH   e Zd Zeddd
 fddZedddeddf fdd	Z  ZS )ATenDialectVerifierFr   r   Nc                    sz   t  | t|dr|jn|j}t|tstd| dtj	j
|jvr9tj	j|jvr;td|j d|j dd S d S )Nr$   r;   r<   z	Operator .z is not Aten Canonical.)superr@   r=   r$   r   r    r   r   r+   Tagcoretags	view_copyr   r>   	__class__r   r   r@   u   s   

z"ATenDialectVerifier.check_valid_opr&   c                    s   t  | t| d S r   )rK   r1   r/   r2   rP   r   r   r1      s   zATenDialectVerifier.check_valid)r   N)r   r   r   r   r@   r   r1   __classcell__r   r   rP   r   rI   t   s
     rI   )r'   r5   collections.abcr   typingr   r+   functorch.experimentalr   
torch._opsr   torch._subclasses.fake_tensorr   torch.fxr   torch.fx._compatibilityr   r   str__annotations__	Exceptionr   rH   r   fxNoder%   r/   r0   rI   r   r   r   r   <module>   s0   
 
<