U
    *-e                     @   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/Darija-Ai-Train/env/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rd}nF||kr|d}|dkr| || d  |krd}n| |krd}|dkrd}|st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   

