o
    NeW  ã                   @   sT   d dl Zd dlZd dlmZ d dlmZmZ d dlm	Z	 dd„ Z
dd„ Zd	d
„ ZdS )é    N)ÚVariable)Úcheck_dtypeÚconvert_dtype)Úcastc                 C   sH   | du r	dg} | S t | ttjtjfƒr| g} | S |  ¡  t¡d g} | S )z]
    Convert out_size(int, np.int32, np.int64, Variable) to list
    in imperative mode.
    Nr   )Ú
isinstanceÚintÚnpÚint32Úint64ÚnumpyZastype)Úout_size© r   úVD:\Projects\ConvertPro\env\Lib\site-packages\paddle/geometric/message_passing/utils.pyÚconvert_out_size_to_list   s   üÿr   c                 C   s’   |du rdg|d< dS t |ttjtjfƒr|g|d< dS t |tƒrEd|_t|jdddgdd| d	 ƒ t	|jƒdkr?t
|dƒ}|| d
< dS tdƒ‚)ze
    Convert out_size(int, np.int32, np.int64, Variable) to inputs
    and attrs in static mode.
    Nr   r   Tr	   r
   Úop_typez(When type of out_size inz is Variable.)ZOut_sizez'Out_size only supports Variable or int.)r   r   r   r	   r
   r   Zstop_gradientr   Zdtyper   r   Ú	TypeError)ZinputsÚattrsr   r   r   r   r   Úget_out_size_tensor_inputs$   s   

ÿ
r   c           	      C   sþ   t | jƒdkrt | ddg¡} t |jƒdkrt |ddg¡}t | ¡}t |¡}t | jƒt |jƒkr{tt | jƒt |jƒƒ}|t | jƒ }|t |jƒ }|d gdg|  t|dd… ƒ }|d gdg|  t|dd… ƒ }t | |¡} t ||¡}| |fS )zm
    Expand dims to ensure there will be no broadcasting issues with different
    number of dimensions.
    é   éÿÿÿÿr   N)ÚlenÚshapeÚpaddleZreshapeÚmaxÚlist)	ÚxÚyZx_shapeZy_shapeZ	max_ndimsZx_pad_ndimsZy_pad_ndimsZnew_x_shapeZnew_y_shaper   r   r   Úreshape_lhs_rhs8   s>   

ÿÿþþüÿÿþþür   )r   r   r   Zpaddle.fluid.frameworkr   Zpaddle.fluid.data_feederr   r   Zpaddle.fluid.layers.tensorr   r   r   r   r   r   r   r   Ú<module>   s   