o
    * iB                     @  s  d dl mZ d dlZd dlZd dlZ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 d dlmZ d dlZedZedZdZeed	oMeed
Zejdd ZdddZdddZG dd deeef ZG dd dejZG dd dejZe ZdS )    )annotationsN)cached_property)AnyCallableGenericTypeVar)	ParamSpec_InputT_RetTz
paddle.opsgetdlopenflagssetdlopenflagsc               	   c  sL    t sdV  dS t } t| tjB  zdV  W t|  dS t|  w )z
    Context manager to set the RTLD_GLOBAL dynamic linker flag while we open a
    shared library to load custom operators.
    N)_SET_GLOBAL_FLAGSsysr   r   ctypesRTLD_GLOBAL)Z	old_flags r   W/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/_ops.pydl_open_guard)   s   r   modulestrc                 C  s
   t | S N)	importlibimport_module)r   r   r   r   r   :   s   
r   pathc                 C  sB   t j| } t  t|  W d   dS 1 sw   Y  dS )z6
    Load a shared library at the specified path.
    N)osr   realpathr   r   CDLL)r   r   r   r   load_library>   s   "r   c                   @  s8   e Zd ZdddZeddd	Zdd
dZdddZdS )OverloadedOpFunction	namespacer   namec                 C  s   || _ || _d S r   )r   r    )selfr   r    r   r   r   __init__H   s   
zOverloadedOpFunction.__init__returnCallable[_InputT, _RetT]c                 C  s   t jjj| j d| j S )Nz::)paddlebasecoreZtorch_compatZ_get_operationr   r    r!   r   r   r   callable_fnL   s   
z OverloadedOpFunction.callable_fnc                 C  s.   |dkr| j S td| j d| j d| d)Ndefault'.z' has no attribute ')r)   AttributeErrorr   r    r!   r    r   r   r   __getattr__R   s
   z OverloadedOpFunction.__getattr__args_InputT.argskwargs_InputT.kwargsr
   c                 O  s   | j |i |S r   )r)   )r!   r0   r2   r   r   r   __call__Y      zOverloadedOpFunction.__call__N)r   r   r    r   )r#   r$   )r    r   r#   r$   )r0   r1   r2   r3   r#   r
   )__name__
__module____qualname__r"   r   r)   r/   r4   r   r   r   r   r   G   s    

r   c                      s&   e Zd Z fddZd	ddZ  ZS )
OpNameSpacec                   s    t  t d|  || _d S )Nr,   )superr"   PADDLE_OPS_MODULE_NAMEr    r.   	__class__r   r   r"   ^   s   
zOpNameSpace.__init__r    r   r#   OverloadedOpFunction[..., Any]c                 C  s   |dkrt S t| j|S )N__file__)r;   r   r    r.   r   r   r   r/   b   s   zOpNameSpace.__getattr__)r    r   r#   r>   )r6   r7   r8   r"   r/   __classcell__r   r   r<   r   r9   ]   s    r9   c                      s:   e Zd ZdZ fddZdddZdd	 Zd
d Z  ZS )PaddleOpsModulez_ops.pyc                   s   t  t d S r   )r:   r"   r;   r(   r<   r   r   r"   k   r5   zPaddleOpsModule.__init__r    r   c                 C  s   t |}t| || |S r   )r9   setattr)r!   r    r   r   r   r   r/   n   s   zPaddleOpsModule.__getattr__c                 C     t |S r   )r   )r!   r   r   r   r   r   t      zPaddleOpsModule.import_modulec                 C  rC   r   )r   )r!   r   r   r   r   r   w   rD   zPaddleOpsModule.load_library)r    r   )	r6   r7   r8   r?   r"   r/   r   r   r@   r   r   r<   r   rA   h   s    
rA   )r   r   )r   r   ) 
__future__r   
contextlibr   r   r   r   types	functoolsr   typingr   r   r   r   Ztyping_extensionsr   r%   r	   r
   r;   hasattrr   contextmanagerr   r   r   r   
ModuleTyper9   rA   opsr   r   r   r   <module>   s2   


	
