U
    ªÊ¹jó  ã                   @   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/bwave/python/venv/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_moduleÚcall_methodz'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    þ
<