o
    yqit                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlZddlmZ ddl	m
Z
 defddZdefd	d
ZdedefddZedZddgddg ddddZG dd deZG dd dZG dd dZG dd deZejd e  dS )    N)
ModuleType   )logging)class_requires_depsreturnc                   C   s   t jdS )N~)ospath
expanduser r   r   [/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddlex/ops/__init__.pyget_user_home      r   c                   C   s   t jt dS )Nz.pprndr)r   r	   joinr   r   r   r   r   get_pprndr_home   s   r   	directoryc                 C   s"   t jt | }t j|dd |S )NT)exist_ok)r   r	   r   r   makedirs)r   homer   r   r   get_sub_home#   s   r   tmpzvoxel/voxelize_op.cczvoxel/voxelize_op.cuz0.1.0)sourcesversion)ziou3d_nms/iou3d_cpu.cppziou3d_nms/iou3d_nms_api.cppziou3d_nms/iou3d_nms.cppziou3d_nms/iou3d_nms_kernel.cu)ZvoxelizeZ	iou3d_nmsc                   @   s   e Zd Zdd Zdd ZdS )CustomOpNotFoundExceptionc                 C   s
   || _ d S N)op_name)selfr   r   r   r   __init__=   s   
z"CustomOpNotFoundException.__init__c                 C   s   d | jS )NzCouldn't Found custom op {})formatr   r   r   r   r   __str__@   r   z!CustomOpNotFoundException.__str__N)__name__
__module____qualname__r   r    r   r   r   r   r   <   s    r   c                   @   s   e Zd ZddefddZdS )CustomOperatorPathFinderNfullnamec                 C   s"   | dsd S tjj|t ddS )Npaddlex.opsF)nameloader
is_package)
startswith	importlib	machinery
ModuleSpecCustomOperatorPathLoader)r   r%   r	   targetr   r   r   	find_specE   s   
z"CustomOperatorPathFinder.find_specr   )r!   r"   r#   strr0   r   r   r   r   r$   D   s    r$   c                   @   s   e Zd ZdefddZdS )r.   r%   c                 C   sj   | dd }|tvrt||tjvr0z
t|tj|< W n ty/   t||tj|< Y nw tj| S )N.)	split
custom_opsr   sysmodulesr+   import_moduleImportErrorPaddleXCustomOperatorModule)r   r%   
modulenamer   r   r   load_moduleP   s   

z$CustomOperatorPathLoader.load_moduleN)r!   r"   r#   r1   r<   r   r   r   r   r.   O   s    r.   c                       sH   e Zd Zdedef fddZdd Zdd Zd	ef fd
dZ  ZS )r:   r;   r%   c                    s"   || _ || _d | _t | d S r   )r%   r;   modulesuperr   )r   r;   r%   	__class__r   r   r   a   s   z$PaddleXCustomOperatorModule.__init__c                    s   ddl m} z[d| j}tjt|}t	t
jd }tj|d  t| j  }|d} fdd|D }|d t| |d| j|d	|W  d    W S 1 sZw   Y  W d S    td
| j  )Nr   )loadzpaddlex.ops.{}r&   r   c                    s   g | ]	}t j |qS r   )r   r	   r   ).0filerootdirr   r   
<listcomp>r   s    z9PaddleXCustomOperatorModule.jit_build.<locals>.<listcomp>r   )r'   r   z{} built fail!r   )Zpaddle.utils.cpp_extensionrA   r   r;   r   r	   r   TMP_HOMEinspect
getabsfiler6   r7   r4   r5   copypopfilelockZFileLockr   error)r   Zpaddle_jit_loadlockfilerC   argsr   r   rD   r   	jit_buildg   s    

(z%PaddleXCustomOperatorModule.jit_buildc                 C   sr   | j d u r6z	t| j| _ W n  ty.   td| j |  | _ t	d| j Y nw | j t
j| j< | j S )Nz$No custom op {} found, try JIT buildz{} built success!)r=   r+   r8   r;   r9   r   warningr   rP   infor6   r7   r%   r   r   r   r   _load_module{   s   


z(PaddleXCustomOperatorModule._load_moduleattrc                    sR   |dv rd S |dv rt  |S |  }t||s$td|| j|jt||S )N)__path____file__)
__loader____package__r!   __spec__z&cannot import name '{}' from '{}' ({}))	r>   __getattr__rS   hasattrr9   r   r;   rV   getattr)r   rT   r=   r?   r   r   rZ      s   


z'PaddleXCustomOperatorModule.__getattr__)	r!   r"   r#   r1   r   rP   rS   rZ   __classcell__r   r   r?   r   r:   `   s
    r:   )r+   rH   r   r6   typesr   rL   utilsr   Z
utils.depsr   r1   r   r   r   rG   r5   	Exceptionr   r$   r.   r:   	meta_pathinsertr   r   r   r   <module>   s0   ;