U
    ­Ê¹jM  ã                   @   s`   d dl Z d dlZd dlZd dlZe  d¡dd„ ƒZddd„Zedƒdd	„ ƒZed
ƒdd„ ƒZ	dS )é    Nc                   C   s   t j ddd¡S )NÚtorchvisionZIMPLZMeta)ÚtorchZlibraryÚLibrary© r   r   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchvision/_meta_registrations.pyÚget_meta_lib
   s    r   Údefaultc                    s   ‡ ‡fdd„}|S )Nc                    s,   t j ¡ r(tƒ  tttjj ˆ ƒˆƒ| ¡ | S )N)r   Ú	extensionZ_has_opsr   ÚimplÚgetattrr   Zops)Úfn©Úop_nameÚoverload_namer   r   Úwrapper   s    
zregister_meta.<locals>.wrapperr   )r   r   r   r   r   r   Úregister_meta   s    r   Z	roi_alignc                    sd   t  ˆ d¡dkdd„ ¡ t  ˆ jˆjk‡ ‡fdd„¡ ˆ d¡}ˆ  ¡ \}}	}
}ˆ  ||	||f¡S )Né   é   c                   S   s   dS )Nz$rois must have shape as Tensor[K, 5]r   r   r   r   r   Ú<lambda>   ó    z meta_roi_align.<locals>.<lambda>c                      s   dˆ j › dˆj › �S )NzMExpected tensor for input to have the same type as tensor for rois; but type ú does not equal ©Údtyper   ©ÚinputÚroisr   r   r      s    r   )r   Ú_checkÚsizer   Ú	new_empty)r   r   Úspatial_scaleÚpooled_heightÚpooled_widthÚsampling_ratioÚalignedZnum_roisÚ_ÚchannelsÚheightÚwidthr   r   r   Úmeta_roi_align   s    
þ
r(   Z_roi_align_backwardc                    s0   t  ˆ jˆjk‡ ‡fdd„¡ ˆ  ||||f¡S )Nc                      s   dˆ j › dˆj › �S )NzLExpected tensor for grad to have the same type as tensor for rois; but type r   r   r   ©Úgradr   r   r   r   -   s    z)meta_roi_align_backward.<locals>.<lambda>)r   r   r   r   )r*   r   r   r    r!   Z
batch_sizer%   r&   r'   r"   r#   r   r)   r   Úmeta_roi_align_backward'   s
    
þr+   )r   )
Ú	functoolsr   Ztorch.libraryZtorchvision.extensionr   Ú	lru_cacher   r   r(   r+   r   r   r   r   Ú<module>   s   

	
