o
    ip	                     @   s@   d dl mZ dd Zdd Zdd Zdd	 Zd
d Zdd ZdS )   )_axis_to_axistuplec                    s   d fdd	}|S )NFc                    s   |d u rt t| j nt| j| |dd}|}|t  fddt|jD }	| |} 
j| ||d} | |rM|} | S |} | S )NTaxiskeepdimsc                 3   s     | ]\}}| vr|V  qd S N ).0isaxesr   ^/home/ubuntu/.local/lib/python3.10/site-packages/einx/_src/adapter/classical_from_classical.py	<genexpr>   s    z/logsumexp.<locals>.logsumexp.<locals>.<genexpr>)tuplerangendimr   maxstop_gradientreshape	enumerateshapesubtractlogsumexpadd)xr   r   x_max_keepdimsx_max_dropdims	classicalr   r   	logsumexp   s   
$zlogsumexp.<locals>.logsumexp)NFr   )r    r!   r   r   r   r!      s   r!   c                    s    fdd}|S )Nc                     sV   j |      fdd| D } jfdd| D  }| }|S )Nc                    s   g | ]}  |qS r   )r   r   r   )r    x_maxr   r   
<listcomp>   s    z0logaddexp.<locals>.logaddexp.<locals>.<listcomp>c                    s   g | ]}  |qS r   )r   r"   r   r   r   r$      s    )maximumr   r   r   )xsr   r   )r#   r   	logaddexp   s   

zlogaddexp.<locals>.logaddexpr   )r    r'   r   r   r   r'      s   
r'   c                       d fdd	}|S )Nc                    sH    j | |dd} |} | |}  | } | j||ddS NTr   )r   r   r   r   divider   )r   r   r#   x_expr   r   r   softmax'   s
   

zsoftmax.<locals>.softmaxr   r   )r    r,   r   r   r   r,   &   s   	r,   c                    r(   )Nc                    s     | t | |ddS r)   )r   r!   r   r   r   r   r   log_softmax4   s   z log_softmax.<locals>.log_softmaxr   r   )r    r.   r   r   r   r.   3      r.   c                    r(   )Nc                    s    j  | d|dS )N    r   )r   	not_equalr-   r   r   r   count_nonzero;   s   z$count_nonzero.<locals>.count_nonzeror   r   )r    r3   r   r   r   r3   :   r/   r3   c                    s   d fdd	}|S )Nc                    sn   t trfd u rttjfdd t fddD tfddtjD S )Nc                    sD   |  j  k s|  j krtd|  d j  d| dk r |  j 7 } | S )NzInvalid axis z for array with z dimensions.r0   )r   
ValueErrorr1   )r   r   r   _shiftH   s
   
z"flip.<locals>.flip.<locals>._shiftc                 3   s    | ]} |V  qd S r   r   )r   a)r5   r   r   r   O   s    z%flip.<locals>.flip.<locals>.<genexpr>c                 3   s,    | ]}| vrt d nt d d dV  qd S )N)slice)r   r	   r1   r   r   r   Q   s   * )
isinstanceintr   r   r   r-   getitem)r5   r   r   r   flipB   s   
"zflip.<locals>.flipr   r   )r    r<   r=   r   r;   r   r=   A   s   r=   N)_utilr   r!   r'   r,   r.   r3   r=   r   r   r   r   <module>   s    