U
    ©Ê¹jê  ã                   @   s,   d dl mZ d
dd„Zddd„Zdd„ Zd	S )é    )ÚreduceTc                 C   s"   |r|   ¡ |kr| S |  ¡  |¡S ©N)ÚsizeÚ
contiguousÚview)Útensorr   Úcheck_same_size© r	   ú^/var/www/html/bwave/python/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dd„ | ƒ}tdd„ |ƒ}||k rNd}|dkr”d}nF||kr|d}|dkr”| || d … |kr”d}n| |kr”d}|dkr”d}|s¬td| › d|› �ƒ‚|S )	NFTc                 S   s   | | S r   r	   ©ÚxÚyr	   r	   r
   Ú<lambda>)   ó    z&check_onnx_broadcast.<locals>.<lambda>c                 S   s   | | S r   r	   r   r	   r	   r
   r   *   r   é   zCNumpy style broadcasting is not supported in ONNX. Input dims are: z, )r   r   Ú
ValueError)Zdims1Zdims2Ú	broadcastÚ	supportedZlen1Zlen2Znumel1Znumel2r	   r	   r
   Úcheck_onnx_broadcast$   s.    ÿr!   N)T)T)Ú	functoolsr   r   r   r!   r	   r	   r	   r
   Ú<module>   s   

