U
    9%e                     @   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e
edddZeddejjddddZeddedd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valZstack_tracePRESERVED_META_KEYSFZis_backward_compatiblec                   @   s   e Zd ZdS )SpecViolationErrorN)__name__
__module____qualname__ r   r   U/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/_export/verifier.pyr      s   r   )opreturnc                 C   s
   | j j S N)Z_schemaZ
is_mutable)r   r   r   r   is_functional   s    r   )noder   c                    s@    fdd | j dd }|d k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!   gmr   c                 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chainZnamed_parametersZnamed_buffersr   torchZTensorZis_contiguousr   )r#   r    paramr   r   r   _check_tensors_are_contiguous,   s    
r(   c                   @   st   e Zd ZeddddZedddd Zeddd	d
 ZeddeddddZeddee	dddZ
dS )VerifierNr"   c                 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   Zcondr&   ZopsZmap_impl)r,   r   r   r   valid_builtin_funcs<   s    zVerifier.valid_builtin_funcsc                 C   sL   t |dr|jn|j}t|ts0td| dt|sHtd| dd S )Nr    
Operator '' is not a registered Opz
operator 'z' is not functional)hasattrr    r   r   r   r   r   r,   r   Zop_namer   r   r   check_valid_opD   s    


zVerifier.check_valid_opc                 C   s   |j jD ]}|jdkr(td|j d|jdkrt| |j|  krT| |j t|jt	rt
D ]*}|j|d d krdtd| d| qdqd S )N>   call_methodcall_modulez'call_module is not valid: got a class 'z' Zcall_functionznode z is missing metadata )graphZnodesr   r   targetr!   r0   r5   r   r   r
   r   r   )r,   r#   r   r   r   r   r   r*   S   s    

zVerifier.check_validc                 C   s,   z|  | W dS  tk
r&   Y dS X d S )NTF)r*   r   r+   r   r   r   is_validk   s
    
zVerifier.is_valid)r   r   r   r   r-   r   r0   r5   r*   boolr:   r   r   r   r   r)   7   s   

r)   c                       sJ   e Zd Zedddd fddZeddedd fdd	Z  ZS )
ATenDialectVerifierFr   N)r   c                    sv   t  | t|dr|jn|j}t|ts<td| dtj	j
|jkrrtj	j|jkrrtd|j d|j dd S )Nr    r1   r2   z	Operator .z is not Aten Canonical.)superr5   r3   r    r   r   r   r   r&   TagcoretagsZ	view_copyr   r4   	__class__r   r   r5   u   s    

z"ATenDialectVerifier.check_valid_opr"   c                    s   t  | t| d S r   )r>   r*   r(   r+   rB   r   r   r*      s    zATenDialectVerifier.check_valid)r   r   r   r   r5   r   r*   __classcell__r   r   rB   r   r<   t   s   r<   )r$   r.   collections.abcr   typingr   r&   Zfunctorch.experimentalr   Z
torch._opsr   Ztorch._subclasses.fake_tensorr   Ztorch.fxr   Ztorch.fx._compatibilityr   r
   str__annotations__	Exceptionr   r;   r   ZfxNoder!   r(   r)   r<   r   r   r   r   <module>   s0    
<