o
    "j                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	Z	dd Z
G dd deZe Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    N)OrderedDict)ForkingPickler)register_after_forkc                   C   s   t jdkrdS dS )NlinuxFT)sysplatform r   r   k/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/incubate/multiprocessing/reductions.py_supported_check   s   
r
   c                       s8   e Zd Zdd Zdd Z fddZ fddZ  ZS )	_LRUSharedCachec                 C   s   d| _ |   t| tj d S )N   )limit_after_forkr   r   selfr   r   r	   __init__(   s   z_LRUSharedCache.__init__c                 C   s   t  | _d S N)	threadingLocklockr   r   r   r	   r   -   s   z_LRUSharedCache._after_forkc              	      sl   | j ) zt |}t || |W W  d    S  ty+   Y W d    d S w 1 s/w   Y  d S r   )r   superpop__setitem__KeyErrorr   keyvalue	__class__r   r	   get0   s   z_LRUSharedCache.getc              	      sz   | j 0 zt | W n ty#   t| | jkr!t jdd Y nw t || W d    d S 1 s6w   Y  d S )NF)last)r   r   __delitem__r   lenr   popitemr   r   r   r   r	   r   9   s   "z_LRUSharedCache.__setitem__)__name__
__module____qualname__r   r   r   r   __classcell__r   r   r   r	   r   '   s
    	r   c                 C   s   t | }|d u rd S |S r   )shared_cacher   )r   	lodtensorr   r   r	   _cuda_from_cacheF   s   
r*   c                 C   s   | t jjjkr"t jjj| | fi |}|  | |S |\}}t jj	j
 }| r;|  | n	t jg | d}||_|S )N)Zdtype)paddlebase	frameworkEagerParamBaseshapeZ_dtyper   
get_tensorZ_share_data_withcoreeagerTensorZ_is_initializedZ	to_tensorstop_gradient)clsr)   metadatatensorsizer4   r   r   r	   _rebuild_tensorM   s   	r9   c                 C   s   |    }| js| jstd| j s| j s| j r>t	| t
jjjkr/t| j}n| j| jf}tt	| ||ffS td| j )NzQRefusing to serialize non-leaf tensor which not stop_gradient, you can detach it!zJOnly support tensors of CPU/CUDA/CUDAPinned Place, Not support %s for now!)r   r0   r4   Zis_leafRuntimeErrorZplaceis_cpu_placeis_gpu_placeis_cuda_pinned_placetyper+   r,   r-   r.   copydeepcopy__dict__r8   r9   
ValueError)r7   r)   r6   r   r   r	   _reduce_tensor^   s(   rC   c                 C   s    |  |||||f}|  |S r   )Z_new_shared_filenameZ_shared_decref)r5   Zipc_namer8   type_idxdimslodr)   r   r   r	   _rebuild_lodtensor_filenamex   s   rG   c           
   	   C   sb   t ||f}|d u r| |||||||f}	|	t||f< |	S tjj }	|	||||||f |	S r   )r*   Z_new_shared_cudar(   r+   r,   r1   	LoDTensorZ_share_buffer_with)
r5   handleZoffset_bytesr8   rD   rE   rF   Z
device_idxZcache_tensorr)   r   r   r	   _rebuild_cuda_tensor~   s   rJ   c                 C   s   |  S r   r   )r5   r   r   r	   _rebuild_lodtensor_empty   s   rK   c                 C   s   |    s|    r+|  D ]}|dkrtt| ff  S q|  }t}|   n|   	 r8| 
 }t}ntd|t| f| fS )Nr   z/We only support pass cpu/gpu lodtensor for now!)Z_placer;   r=   r/   rK   r>   Z_share_filenamerG   Z_shared_increfr<   Z_share_cudarJ   r:   )r)   dimr6   Zrebuildr   r   r	   _reduce_lodtensor   s"   


rM   c                   C   sT   t  sd S ttjt ttjjjjt ttjj	j
t ttjjjt d S r   )r
   r   registerr+   r3   rC   r,   r1   r2   r-   r.   rH   rM   r   r   r   r	   init_reductions   s   
rO   )r?   r   r   collectionsr   Zmultiprocessing.reductionr   Zmultiprocessing.utilr   r+   r
   r   r(   r*   r9   rC   rG   rJ   rK   rM   rO   r   r   r   r	   <module>   s$   
