U
    d                     @   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	   C/tmp/pip-unpacked-wheel-ua33x9lu/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rd}nF||kr|d}|dkr| || d  |krd}n| |krd}|dkrd}|st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      zINumpy style broadcasting is not supported in ONNX. Input dims are: {}, {})r   r   
ValueErrorformat)Zdims1Zdims2	broadcast	supportedZlen1Zlen2Znumel1Znumel2r	   r	   r
   check_onnx_broadcast    s0     r"   N)T)T)	functoolsr   r   r   r"   r	   r	   r	   r
   <module>   s   

