U
    yh	                     @   s4   d dl Z d dlmZ d
ddZdddZdd	 ZdS )    N)reduceTc                 C   s"   |r|   |kr| S |  |S )N)size
contiguousview)tensorr   check_same_size r   Q/var/www/html/venv/lib/python3.8/site-packages/torch/autograd/_functions/utils.py
maybe_view   s    r
   c                 C   s   |r|   |kr| S |  t| }dd tt|   |d  |D }t|D ]}| jddd} qP|D ]}| j|dd} qh| S )Nc                 S   s    g | ]\}\}}||kr|qS r   r   ).0dimexpandedoriginalr   r   r	   
<listcomp>   s   
z"maybe_unexpand.<locals>.<listcomp>r   F)ZkeepdimT)r   r   len	enumerateziprangesum)r   Zold_sizer   Znum_unsqueezedZexpanded_dims_r   r   r   r	   maybe_unexpand   s    r   c                 C   s   d}d}t | }t |}ttj| }ttj|}||k rJd}|dkrd}nF||krxd}|dkr| || d  |krd}n| |krd}|dkrd}|std|  d| |S )NFT   zCNumpy style broadcasting is not supported in ONNX. Input dims are: z, )r   r   operatormul
ValueError)Zdims1Zdims2	broadcast	supportedZlen1Zlen2Znumel1Znumel2r   r   r	   check_onnx_broadcast&   s.    r   )T)T)r   	functoolsr   r
   r   r   r   r   r   r	   <module>   s   

