o
    #j                      @   sx   d dl Z d dl mZ ddlmZmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ g ZG d	d
 d
eZG dd deZdS )    N)_C_ops   )core	frameworkunique_name)
check_type)_current_expected_placein_dygraph_mode   )Initializerc                       s*   e Zd ZdZ fddZdddZ  ZS )NumpyArrayInitializerzInit an parameter with an numpy array
    This api initialize the tensor by numpy array.

    Args:
        value (numpy): numpy array to initialize the tensor

    Returns:
        A Tensor initialized by numpy.

    c                    s,   dd l }t||jsJ t   || _d S )Nr   )numpy
isinstancendarraysuper__init___value)selfvaluer   	__class__ ]/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/nn/initializer/assign.pyr   %   s   

zNumpyArrayInitializer.__init__Nc           
   	   C   s6  |  |}t|tjsJ t|tjsJ |jtjjj	tjjj
fv rFtjjj}| jd}|jtdd|jdg|j|tjjjdd}n|}|j}| j}|tjjjkr`d}dd	 |jD }nD|tjjjkrrd
}dd	 |jD }n2|tjjjkrd}dd	 |jD }n |tjjjks|tjjjkrd}dd	 |jD }ntd| jj| jjdkrtdt rt|t| jj||t   |jtjjj	tjjj
fv rt!||j}|"| dS |"| dS |j#dd|id|dt| jj||idd}	|jtjjj	tjjj
fv r|j#dd|id|i|j|jdd |	|_$|	S )aN  Initialize the input tensor with Numpy array.

        Args:
            var(Tensor): Tensor that needs to be initialized.
            block(Block, optional): The block in which initialization ops
                   should be added. Used in static graph only, default None.

        Returns:
            The initialization op
        Zfloat32.Znumpy_array_inittmpF)nameshapedtypetypeZpersistableZfp32_valuesc                 S      g | ]}t |qS r   float.0vr   r   r   
<listcomp>P       z1NumpyArrayInitializer.forward.<locals>.<listcomp>Zfp64_valuesc                 S   r   r   r    r"   r   r   r   r%   S   r&   Zint32_valuesc                 S   r   r   intr"   r   r   r   r%   V   r&   Zint8_valuesc                 S   r   r   r'   r"   r   r   r   r%   \   r&   zUnsupported dtype %si   @zXThe size of input is too big. Please consider saving it to file and 'load_op' to load itNZassign_valueZOutr   r   T)r   outputsattrsZstop_gradientcastX)Zin_dtype	out_dtype)r   Zinputsr)   r*   )%Z_check_blockr   r   VariableZBlockr   r   ZVarDescZVarTypeZFP16ZBF16ZFP32r   ZastypeZ
create_varr   generatejoinr   r   Z
LOD_TENSORZflatZFP64ZINT32ZINT8ZUINT8
ValueErrorsizer	   r   Zassign_value_listr   r+   Z_share_underline_tensor_toZ	append_opop)
r   varblockr-   Znp_valueZout_varZ
value_namevaluesZvar_tmpr4   r   r   r   forward,   s   





zNumpyArrayInitializer.forwardN)__name__
__module____qualname____doc__r   r8   __classcell__r   r   r   r   r      s    r   c                       s"   e Zd ZdZd fdd	Z  ZS )AssignaT  Init an parameter with a numpy array, list, or tensor.

    Args:
        value (Tensor|numpy.ndarray|list|tuple): numpy array, list, tuple, or tensor to initialize the parameter.
        name(str, optional): Normally there is no need for user to set this
            property. For more information, please refer to :ref:`api_guide_Name`. Default is None.

    Returns:
        A parameter initialized by the input numpy array, list, or tensor.

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> import numpy as np

            >>> # numpy array
            >>> data_1 = paddle.ones(shape=[1, 2], dtype='float32')
            >>> weight_attr_1 = paddle.framework.ParamAttr(
            ...     name="linear_weight_1",
            ...     initializer=paddle.nn.initializer.Assign(np.array([2, 2])))
            >>> bias_attr_1 = paddle.framework.ParamAttr(
            ...     name="linear_bias_1",
            ...     initializer=paddle.nn.initializer.Assign(np.array([2])))
            >>> linear_1 = paddle.nn.Linear(2, 2, weight_attr=weight_attr_1, bias_attr=bias_attr_1)
            >>> print(linear_1.weight.numpy())
            [2. 2.]
            >>> print(linear_1.bias.numpy())
            [2.]

            >>> res_1 = linear_1(data_1)
            >>> print(res_1.numpy())
            [6.]

            >>> # python list
            >>> data_2 = paddle.ones(shape=[1, 2], dtype='float32')
            >>> weight_attr_2 = paddle.framework.ParamAttr(
            ...     name="linear_weight_2",
            ...     initializer=paddle.nn.initializer.Assign([2, 2]))
            >>> bias_attr_2 = paddle.framework.ParamAttr(
            ...     name="linear_bias_2",
            ...     initializer=paddle.nn.initializer.Assign([2]))
            >>> linear_2 = paddle.nn.Linear(2, 2, weight_attr=weight_attr_2, bias_attr=bias_attr_2)
            >>> print(linear_2.weight.numpy())
            [2. 2.]
            >>> print(linear_2.bias.numpy())
            [2.]

            >>> res_2 = linear_2(data_2)
            >>> print(res_2.numpy())
            [6.]

            >>> # tensor
            >>> data_3 = paddle.ones(shape=[1, 2], dtype='float32')
            >>> weight_attr_3 = paddle.framework.ParamAttr(
            ...     name="linear_weight_3",
            ...     initializer=paddle.nn.initializer.Assign(paddle.full([2], 2)))
            >>> bias_attr_3 = paddle.framework.ParamAttr(
            ...     name="linear_bias_3",
            ...     initializer=paddle.nn.initializer.Assign(paddle.full([1], 2)))
            >>> linear_3 = paddle.nn.Linear(2, 2, weight_attr=weight_attr_3, bias_attr=bias_attr_3)
            >>> print(linear_3.weight.numpy())
            [2. 2.]
            >>> print(linear_3.bias.numpy())
            [2.]

            >>> res_3 = linear_3(data_3)
            >>> print(res_3.numpy())
            [6.]
    Nc                    sd   dd l }t|d|jtttjjfd t|ttfr|	|}t|tjjr*| d}t
 | d S )Nr   r   r?   F)r   r   r   r3   tuplepaddleZstaticr.   r   arrayr   r   )r   r   r   r   r   r   r   r      s   

zAssign.__init__r9   )r:   r;   r<   r=   r   r>   r   r   r   r   r?      s    Gr?   )rA   r   baser   r   r   Zbase.data_feederr   Zbase.frameworkr   r	   Zinitializerr   __all__r   r?   r   r   r   r   <module>   s   x