o
    * i,                     @   sf  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	 d dl
Zd dlZd dlmZmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZ eee jd	d
ZG dd dZG dd deZG dd deZdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&ed0dd Z'ed1d"d#Z(d$d% Z)d&d' Z*d(d) Z+d2d*d+Z,d2d,d-Z-d.d/ Z.dS )3    N)BytesIO)FunctionType
MethodType)coreglobal_scope)	ParameterVariablestatic_only)
get_logger)signature_safe_contextmanager)in_pir_modez&%(asctime)s-%(levelname)s: %(message)s)fmtc                   @   s   e Zd Zdd Zdd ZdS )_open_bufferc                 C   s
   || _ d S Nbufferselfr    r   e/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/framework/io_utils.py__init__)      
z_open_buffer.__init__c                 C   s   | j S r   r   )r   r   r   r   	__enter__,   s   z_open_buffer.__enter__N)__name__
__module____qualname__r   r   r   r   r   r   r   (   s    r   c                       s$   e Zd Z fddZdd Z  ZS )_buffer_readerc                    s   t  | | j | _d S r   )superr   r   tellinitial_tellr   	__class__r   r   r   1   s   z_buffer_reader.__init__c                 G   s"   |d d ur| j | j d S d S )Nr   )r   seekr   r   argsr   r   r   __exit__5   s   z_buffer_reader.__exit__)r   r   r   r   r%   __classcell__r   r   r    r   r   0   s    r   c                   @   s   e Zd Zdd ZdS )_buffer_writerc                 G   s   | j   d S r   )r   flushr#   r   r   r   r%   <   s   z_buffer_writer.__exit__N)r   r   r   r%   r   r   r   r   r'   ;   s    r'   c                 C   
   t | tS r   )
isinstancestr)pathr   r   r   _is_file_path@   r   r-   c                 C   s@   t | r	t| |S d|v rt| S d|v rt| S td| )Nwrz$Expected 'r' or 'w' in mode but got )r-   openr'   r   
ValueError)Zpath_or_buffermoder   r   r   _open_file_bufferD   s   
r3   c                 C   r)   r   )r*   r   r   r   r   r   _is_memory_bufferP   r   r4   c                 C   sF   | j  tjjjks| j  tjjjks| j  tjjjkr dS | jS )a@  

    Check whether the given variable is persistable.

    Args:
        var(Variable): The variable to be checked.

    Returns:
        bool: True if the given `var` is persistable
        False if not.

    Examples:
        .. code-block:: python

            >>> # doctest: +SKIP('ValueError: var fc.b not in this block')
            >>> import paddle
            >>> import paddle.base as base

            >>> paddle.enable_static()
            >>> param = base.default_main_program().global_block().var('fc.b')
            >>> res = base.io.is_persistable(param)
    F)	desctyper   VarDescVarTypeZFEED_MINIBATCHZ
FETCH_LISTZREADERpersistablevarr   r   r   is_persistableT   s
   r<   c                 C   r)   )aX  
    Check whether the given variable is an instance of Parameter.

    Args:
        var(Variable): The variable to be checked.

    Returns:
        bool: True if the given `var` is an instance of Parameter,
        False if not.

    Examples:
        .. code-block:: python

            >>> # doctest: +SKIP('ValueError: var fc.w not in this block')
            >>> import paddle
            >>> import paddle.base as base

            >>> paddle.enable_static()
            >>> param = base.default_main_program().global_block().var('fc.w')
            >>> res = base.io.is_parameter(param)
    )r*   r   r:   r   r   r   is_parametert   s   
r=   c                 C   s    t | ts| j st| S dS )NF)r*   r   r5   Zneed_check_feedr<   r:   r   r   r   is_belong_to_optimizer   s   r>   c                 C   s^   t |tsJ |j tjjjkr!| j|j	|j
|j|j|jddS | j|j	|j
|j|jddS )NT)nameshapedtyper6   	lod_levelr9   )r?   r@   rA   r6   r9   )r*   r   r5   r6   r   r7   r8   ZDENSE_TENSORZ
create_varr?   r@   rA   rB   )blockr;   r   r   r   _clone_var_in_block_   s"   	rD   c                 c   s
   | r| nt j }|r|nt j }|r|nt jj }t j|X t j||8 t jj " t jj	
d  d V  W d    n1 sHw   Y  W d    n1 sWw   Y  W d    n1 sfw   Y  W d    d S W d    d S 1 s~w   Y  d S r   )paddlebaseZProgramr   ZScopeZscope_guardZprogram_guardZunique_nameguardZ	frameworkZ_dygraph_guard)mainZstartupscopeprogZstartup_progr   r   r   _load_program_scope   s$   

 P rK      c                    s   dd   fddD t |rQtjdkrQtjjdkrQtj|dt|d}d	|fd
dt	dt
D  W d    d S 1 sJw   Y  d S t|d}tj||d W d    d S 1 sjw   Y  d S )Nc                 S   s    t | tjtjfrt| S | S r   )r*   rE   ZTensorr   ZDenseTensornparrayr:   r   r   r   
get_tensor   s   
z'_legacy_static_save.<locals>.get_tensorc                    s   i | ]	}| | qS r   r   ).0r?   )rO   
param_dictr   r   
<dictcomp>   s    z'_legacy_static_save.<locals>.<dictcomp>darwin   )protocolwb   @c                 3   s     | ]}||   V  qd S r   r   )rP   i)	max_bytespickle_bytesr   r   	<genexpr>   s
    
z&_legacy_static_save.<locals>.<genexpr>r   )r-   sysplatformversion_infomajorpickledumpsr0   
writelinesrangelenr3   dump)rQ   Z
model_pathrU   fr   )rO   rY   rQ   rZ   r   _legacy_static_save   s    

""rg   c                 C   sJ   t d}tj| }d}td||D ]	}|||7 }qtj|dd}|S )Nr   rW   latin1)encoding)	bytearrayosr,   getsizerc   readr`   loads)r,   rf   rZ   	file_sizerY   _Zload_resultr   r   r   _pickle_loads_mac   s   rq   c                    s   t  trDd}| v rDg } |  D ]!\}} fdd|d D }t||d  |< ||d 7 }q|D ]} | q7 |  S )NUnpackBigParamInfor@@c                    s   g | ]} | qS r   r   )rP   partload_objr   r   
<listcomp>   s    z%_pack_loaded_dict.<locals>.<listcomp>slicesOriginShape)r*   dictitemsrM   ZconcatenateZreshapepop)ru   unpack_infoZremoveskeyvaluerw   r   rt   r   _pack_loaded_dict   s   


r   c                 C   sB  i }i }d|  k rdk rzn njt | trz|  D ]`\}}t |tjrytd|jj }t|j	}||kryi ||< |j	|| d< g || d< |
 }ttt|d | D ]!}|d t| }	|| d |	 ||| ||d   ||	< qWq|r| D ]\}}|| v r| | |d D ]}
||
 | |
< qq|| d< | S )	N      i?rx   rw   g      ?z@@.rr   )r*   ry   rz   rM   ndarrayintrA   itemsizeprodr@   flattenrc   mathceilr+   appendr{   )Z	saved_objrU   Ztemp_saved_objr|   r}   r~   ZMAX_NUMBER_OF_ELEMENTZnum_elementrX   Z	part_namers   r   r   r   _unpack_saved_dict   sV   




r   c                 C   s  t |tjst|dstdt| d|d ur)t |tjs)tdt| d|d u r0t }|	| j
}|d u rCtd| j
 d| }t|drzt |jttfrY| }n|j}t| t|krzt| j
 dt|  d	t| d| }| rt }nL| rt }nC| rt }||  t| }n,| rt }||  t| | }nt }||  t|  }|!|| d S )
NZ	__array__zA`value` should be `numpy.ndarray` or `DenseTensor`, but received .C`scope` should be None or `paddle.static.Scope` type, but received Can not find Variable '' in the Scope.r@   z expected a shape z, but the received shape is )"r*   rM   r   hasattr	TypeErrorr6   r   _Scoper   find_varr?   r1   rO   r@   r   r   listZ_placeZis_cpu_placeZCPUPlaceZis_cuda_pinned_placeZCUDAPinnedPlaceZis_xpu_placeZPlaceZ	set_placeZXPUPlaceZxpu_device_idZis_custom_placeZCustomPlaceZcustom_device_typeZcustom_device_idZ	CUDAPlaceZgpu_device_idset)r;   r~   rI   var_temptZvalue_shapepZplacer   r   r   	set_value  sN   

"

r   c                 C   sh   |durt |tjstdt| d|du rt }|| j}|du r.td| j d|	 }|S )aC  
    Get the value of variable or value in given scope.

    Args:
        scope(Scope, optional) : If `scope` is None, it will be set to global scope
            obtained through 'paddle.static.global_scope()'. Otherwise, use `scope`.
            Default: None

    Returns:
        Tensor, the value in given scope.

    Nr   r   r   r   )
r*   r   r   r   r6   r   r   r?   r1   rO   )r;   rI   r   r   r   r   r   	get_valueK  s   r   c                 C   s   t  r|   dkrdS dS )Nzpd_op.fetchTF)r   Zget_defining_opr?   )r~   r   r   r   is_pir_fetch_varf  s   r   )NNN)rL   r   )/loggingr   rk   r`   r\   ior   typesr   r   numpyrM   rE   Zpaddle.baser   r   Zpaddle.base.frameworkr   r   r	   Zpaddle.base.log_helperr
   Zpaddle.base.wrapped_decoratorr   Zpaddle.frameworkr   r   INFOZ_loggerr   r   r'   r-   r3   r4   r<   r=   r>   rD   rK   rg   rq   r   r   r   r   r   r   r   r   r   <module>   sJ    

*
3