o
    h                     @   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	   U/var/www/html/ai/venv/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)keepdimT)r   r   len	enumerateziprangesum)r   old_sizer   num_unsqueezedexpanded_dims_r   r	   r	   r
   maybe_unexpand
   s   r   c                 C   s   d}d}t | }t |}tdd | }tdd |}||k r'd}|dkr&d}n#||kr>d}|dkr=| || d  |kr=d}n| |krJd}|dkrJd}|sVtd|  d| |S )	NFTc                 S      | | S r   r	   xyr	   r	   r
   <lambda>)       z&check_onnx_broadcast.<locals>.<lambda>c                 S   r   r   r	   r   r	   r	   r
   r    *   r!      zCNumpy style broadcasting is not supported in ONNX. Input dims are: z, )r   r   
ValueError)dims1dims2	broadcast	supportedlen1len2numel1numel2r	   r	   r
   check_onnx_broadcast$   s2   r,   N)T)	functoolsr   r   r   r,   r	   r	   r	   r
   <module>   s    

