o
    Zh                     @   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   N/var/www/auris/lib/python3.10/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} q(|D ]	}| j|dd} q4| 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|}||k rd}|dkrd}n#||kr6d}|dkr5| || d  |kr5d}n| |krBd}|dkrBd}|sNt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numel2r   r   r	   check_onnx_broadcast&   s0   r   )T)r   	functoolsr   r
   r   r   r   r   r   r	   <module>   s
   

