o
    biv                     @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dl
mZ d dl
mZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ ejejejejfZdddZdd Zdd Zdd Zdd Zdd Z dddZ!ddd Z"dd!d"Z#dd#d$Z$dd%d&Z%d'd( Z&d)d* Z'dd+d,Z(d-d. Z)dd/d0Z*dd1d2Z+dd3d4Z,dd5d6Z-dd7d8Z.d9d: Z/d;d< Z0d=d> Z1d?d@ Z2dAdB Z3dCdD Z4dEdF Z5ddGdHZ6ddIdJZ7ddLdMZ8ddNdOZ9ddPdQZ:ddRdSZ;dTdU Z<dVdW Z=dXdY Z>dZd[ Z?d\d] Z@dd^d_ZAd`da ZBdbdc ZCddde ZDdfdg ZEdhdi ZFdjdk ZGdldm ZHdndo ZIdpdq ZJdrds ZKdtdu ZLdvdw ZMdxdy ZNdzd{ ZOdd|d}ZPd~d ZQdd ZRdd ZSdd ZTdd ZUdddZVdddZWdddZXdddZYdd ZZdddZ[dddZ\dddZ]dddZ^dd Z_dd Z`dddZadd Zbdd Zcdd Zddd Zedd ZfdddZgdd ZhdddZidddZjdd Zkdd Zldd Zmdd Zndd ZodddZpdd ZqdddÄZrddń ZsdddǄZtddɄ Zudd˄ Zvdd̈́ Zwddτ Zxddф Zyddӄ ZzddՄ Z{ddׄ Z|ddل Z}	 ddd݄Z~dd߄ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdddZdd ZdddZddddZdddZdd Zdd  Zdd ZdddZdd Zdd	 Zd
d ZdddZdd ZdddZdddZdddZdd Zdd Zdd Zdd Zdd d!Zd"d# Zdd$d%Zdd'd(Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zdd3d4Zdd5d6Zdd7d8Zdd9d:Zd;d< Zdd=d>Zdd?d@ZdAdB ZdCdD ZddFdGZddHdIZdJdK ZddLdMZddNdOZddPdQZddRdSZdTdU ZdVdW ZdXdY ZdZd[ Zddd\d]d^Zdd_d`Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl Zdmdn ZddodpZÐddqdrZĐddtduZŐddvdwZƐddxdyZǐddzd{ZȐd|d} Zɐd~d Zʐdd ZːdddZ̐dddZ͐dd ZΐdddZϐdddZdS (      N)KerasTensor)config)dtypescanonicalize_axis)to_tuple_or_list)vectorize_impl)standardize_dtypecastconvert_to_tensor)
get_device)	is_tensor)to_torch_dtype   r   r   c                    s   t    jdk rtd j t|dks|d |d kr'td| dt fdd|D }t fd	d|D sJtd
| d j dtj ||d}t	 t
jr^|  }|S )a/  Rotate an array by 90 degrees in the specified plane using PyTorch.

    Args:
        array: Input tensor
        k: Number of 90-degree rotations (default=1)
        axes: Tuple of two axes that define the
            plane of rotation (defaults to `(0, 1)`).

    Returns:
        Rotated tensor
       zBInput array must have at least 2 dimensions. Received: array.ndim=r   r   zInvalid axes: z3. Axes must be a tuple of two different dimensions.c                 3   s&    | ]}|d kr
|n j | V  qdS r   Nndim.0axisarray Q/home/ubuntu/.local/lib/python3.10/site-packages/keras/src/backend/torch/numpy.py	<genexpr>5   s   $ zrot90.<locals>.<genexpr>c                 3   s*    | ]}d |  ko j k n  V  qdS r   r   r   r   r   r   r   7   s   ( zInvalid axes z for tensor with z dimensions)kdims)r   r   
ValueErrorlentuplebuiltinsalltorchrot90
isinstancenpndarraycpunumpy)r   r   axesrotatedr   r   r   r'      s(   

r'   c                 C      t | } t |}t| |S N)r   r&   addx1x2r   r   r   r1   C      r1   c                    s   dd |D }t tdd |D }t|dkr>|d dkr>d t d	kr)t   fd
d|D }ttj| g|R  dS tj| g|R  S )Nc                 S      g | ]}t |qS r   r   r   operandr   r   r   
<listcomp>J       zeinsum.<locals>.<listcomp>c                 s   s    | ]}t |jV  qd S r0   )r	   dtyper   xr   r   r   r   M   s    zeinsum.<locals>.<genexpr>r   r   int8int32cudac                       g | ]}t | qS r   r
   r7   compute_dtyper   r   r9   T       )	listsetr"   r   r   floatxr   r&   einsum)
subscriptsoperandskwargsdtypes_to_resolver   rB   r   rH   I   s   
rH   c                 C   sP   t | } t |}t| jdkrt| |j} t|jdkr"t|| j}t| |S Nbool)r   r	   r;   r   r&   subtractr2   r   r   r   rO   Y   s   rO   c                 C   s   t | } t |}dd }|| |rt| |S t| j}t|j}|dkr,|dkr,d}nt| j|j}|}|dkr>t }t	 dkrI|dkrId}t	 d	krVd
|v rVt }t
| |} t
||}t
t| ||S )Nc                 S   s   t  dkrdS t| j}t|j}|dks|dkrdS | j}|j}| jdks+|jdkr-dS |d dksA|d dk sA|d d dkrCdS |d dk sY|d d dksY|d d dkr[dS d	S )
Nr@   Fr>   r   r      r      T)r   r	   r;   shaper   )r3   r4   x1_dtypex2_dtypex1_shapex2_shaper   r   r   can_use_int_matmulh   s   


(,z"matmul.<locals>.can_use_int_matmulr>   r?   rN   r+   float16float32r@   int)r   r&   _int_mmr	   r;   r   result_typer   rG   r   r   matmul)r3   r4   rW   rS   rT   result_dtyperC   r   r   r   r]   d   s(   




r]   c                 C   r/   r0   )r   r&   multiplyr2   r   r   r   r_      r5   r_   Fc                 C   s   t | ttfrt| } t| } |dks|g kr| S t|}t| j}t	| jd}d|v s1|dkr4|}n|}t
j| ||t|d}t||S )Nr   rY   rZ   rN   r;   )r(   rE   r#   stackr   r   r	   r;   r   r\   r&   meanr   r   )r=   r   keepdims	ori_dtyperC   r^   resultr   r   r   rb      s$   

rb   c                 C   s   t | } d| jv r#|d u rtd|rtdt| j |S t|S |d u r-t| }nt| ||d}t	t
|dd tjrA|j}|d ur]t|j}t ||d}t|tj|j||dS |S )Nr   z*Cannot compute the max of an empty tensor.r   r   rc   valuesr`   )r   rR   r!   r&   fullr"   tensormaxamaxr(   getattrTensorrh   r   r;   maximumr=   r   rc   initialre   r;   r   r   r   rk      s&   


rk   c                 C   2   t |pt }t| tr| f} tj| |t dS Nsizer;   device)r   r   rG   r(   rZ   r&   onesr   rR   r;   r   r   r   rw         
rw   c                 C   rr   rs   )r   r   rG   r(   rZ   r&   zerosr   rx   r   r   r   rz      ry   rz   c                 C   $   t | } t|p	| j}tj| |dS Nr`   )r   r   r;   r&   
zeros_liker=   r;   r   r   r   r}         r}   c                 C   $   t | } t| jdkr| S t| S rM   )r   r	   r;   r&   absr=   r   r   r   absolute   s   
r   c                 C      t | S r0   )r   r   r   r   r   r         r   c                 C   L   t | } |d u rtt| dS t|}|D ]
}tj| ||d} qt| dS NrN   dimkeepdim)r   r   r&   r%   r   r=   r   rc   ar   r   r   r%         
r%   c                 C   sH   t | } t| j}t dkr|dkrt| d} tt| dS t| S Nr+   rX   rY   )r   r	   r;   r   r   r&   angler=   rd   r   r   r   r     s   


r   c                 C   r   r   )r   r   r&   anyr   r   r   r   r   r     r   r   c                 C   >   t | } |d u rt| S |dks|g kr| S tj| ||dS Nr   r   )r   r&   rl   r=   r   rc   r   r   r   rl   !     
rl   c                 C   r   r   )r   r&   aminr   r   r   r   r   +  r   r   c                 C   sB   t | t |} }|d u rt|  | fS tj| |f|dS Nr   )r   r&   catflatten)r3   r4   r   r   r   r   append5  s   r   c                 C   s   |d u r0t | dt| g}|d ur|t |dt| |d ur+|t |dt| tj| }t|}|d u r=d| } }|d u rCd}tj| |||t dS )Nr;   r   r   )stepr;   rv   )	rm   typer   r   r\   r   r&   aranger   )startstopr   r;   rL   r   r   r   r   <  s   

r   c                 C      t | } t| S r0   )r   r&   arccosr   r   r   r   r   N     
r   c                 C   r   r0   )r   r&   arccoshr   r   r   r   r   S  r   r   c                 C   r   r0   )r   r&   arcsinr   r   r   r   r   X  r   r   c                 C   r   r0   )r   r&   arcsinhr   r   r   r   r   ]  r   r   c                 C   r   r0   )r   r&   arctanr   r   r   r   r   b  r   r   c                 C   sb   t | } t |}t| j|jt}|}t dkr|dkrd}t| |} t||}tt| ||S r   )	r   r   r\   r;   floatr   r   r&   arctan2r3   r4   r^   rC   r   r   r   r   g  s   

r   c                 C   r   r0   )r   r&   arctanhr   r   r   r   r   t  r   r   c                 C   8   t | } t| jdkrt| d} ttj| ||dddS NrN   uint8r   r?   r`   )r   r	   r;   r   r&   argmaxr   r   r   r   r   y     
r   c                 C   r   r   )r   r	   r;   r   r&   argminr   r   r   r   r     r   r   c                 C   sN   t | } t| jdkrt| d} |d u rd}| d} ttj| |ddddS )NrN   r   r   T)r   stabler?   r`   )r   r	   r;   r   reshaper&   argsortr=   r   r   r   r   r     s   

r   c                 C   s   t | |dS r|   r   r~   r   r   r   r     s   r   c                 C   s   t |}t| } | j|dS r|   )r   r   viewr~   r   r   r   r     r5   r   c                 C   s   t | } | jtg}|d urt |}||j tj| }t| |} |d ur*t||}|dks2|g kr4| S |d urJtjt	| ||dtj|dd S t
| |S )Nr   r   r   )r   r;   r   r   r   r\   r   r&   summulrb   )r=   r   weightsrL   r;   r   r   r   average  s    



r   c                 C      t | } tjj| S r0   )r   r&   signalwindowsbartlettr   r   r   r   r        r   c                 C   r   r0   )r   r&   r   r   hammingr   r   r   r   r     r   r   c                 C   r   r0   )r   r&   r   r   hannr   r   r   r   hanning  r   r   c                 C   ^   t | } t |}t| j|j}|dv rt }n|dkrd}t| |} t||}t| |S N)r>   int16r?   r   uint16uint32int64float64)	r   r   r\   r;   r   rG   r   r&   	heavisider3   r4   r;   r   r   r   r        


r   c                 C   s   t | } tjjj| |dS )N)beta)r   r&   r   r   kaiser)r=   r   r   r   r   r        r   c                    s   |rt dt| } | jg}|d ur"t|}||j tj| }nd}t| jdkrU|d u r= fdd}tt	|| }n fdd}tt	|t
| |}tt||S tt| | |S )Nz2Unsupported value `sparse=True` with torch backendr?   r   c                    s   t j|  dS )N	minlengthr&   bincount)arrr   r   r   bincount_fn  s   zbincount.<locals>.bincount_fnc                    s   t j| d | d  dS )Nr   r   )r   r   r   )arr_wr   r   r   r     s   )r!   r   r;   r   r   r\   r"   rR   rE   mapzipr   r&   ra   r   )r=   r   r   sparserL   r;   r   	bincountsr   r   r   r     s"   r   c                 C   r/   r0   )r   r&   bitwise_andr=   yr   r   r   r     r5   r   c                 C   r   r0   )r   r&   bitwise_notr   r   r   r   bitwise_invert  r   r   c                 C   r   r0   )r   r   r   r   r   r     r   r   c                 C   r/   r0   )r   r&   
bitwise_orr   r   r   r   r   
  r5   r   c                 C   r/   r0   )r   r&   bitwise_xorr   r   r   r   r     r5   r   c                 C   &   t | } t|tst |}t| |S r0   )r   r(   rZ   r&   bitwise_left_shiftr   r   r   r   r        
r   c                 C   
   t | |S r0   )r   r   r   r   r   
left_shift     
r   c                 C   r   r0   )r   r(   rZ   r&   bitwise_right_shiftr   r   r   r   r   !  r   r   c                 C   r   r0   )r   r   r   r   r   right_shift(  r   r   c                 C   r   r0   )r   r&   r   r   blackmanr   r   r   r   r   ,  r   r   c                 C   s   t | } t| |S r0   )r   r&   broadcast_to)r=   rR   r   r   r   r   1  s   r   c                 C   sP   t | } t| j}|dkrt| d} n	|dkrt| d} t| t| d  S )NrN   r?   r   r   gUUUUUU?)r   r	   r;   r   r&   signr   r~   r   r   r   cbrt6  s   

r   c                 C   sv   t | } t| j}|dkrt| d} nt dkr#|dkr#t| t } |dkr,t }nt|t	}tt
| |dS )NrN   r   r+   rX   r   r`   )r   r	   r;   r   r   r   rG   r   r\   r   r&   ceil)r=   rd   r;   r   r   r   r   B  s   

r   c                 C   sv   t | } t |}t |}t| j}t dkr*|dkr*t| d} ttj| ||ddS |dkr3t| d} tj| ||dS )Nr+   rX   rY   )minrk   rN   r?   )r   r	   r;   r   r   r&   clip)r=   x_minx_maxrd   r   r   r   r   T  s   


r   c                 C      dd | D } t j| |dS )Nc                 S   r6   r   r   r<   r   r   r   r9   e  r:   zconcatenate.<locals>.<listcomp>r   )r&   r   )xsr   r   r   r   concatenated     r   c                 C   $   t | tjst| } t|  S r0   r(   r&   rn   
from_numpyconjresolve_conjr   r   r   r   	conjugatei     
r   c                 C   r   r0   r   r   r   r   r   r   o  r   r   c                 C   r   r0   )r   r&   cloner   r   r   r   copyu  r   r   c                 C   r   r0   )r   r&   cosr   r   r   r   r  z  r   r  c                 C   r   r0   )r   r&   coshr   r   r   r   r    r   r  c                 C   s@   t | } |dks|g krtt| ddS ttj| |djdS )Nr   r   r?   r   )r   r   r&   necount_nonzeroTr   r   r   r   r    s   r  c                 C   s   |dks|dks|dkrt d| d| d| dt| } t|}t| j|j}|}t dkr8|dkr8d}nt d	krC|d
krCd}t| |} t||}ttj| ||d|S )Nr   zMTorch backend does not support `axisa`, `axisb`, or `axisc`. Received: axisa=z, axisb=z, axisc=z). Please use `axis` arg in torch backend.r@   bfloat16rY   r+   rX   r   )	r!   r   r   r\   r;   r   r   r&   cross)r3   r4   axisaaxisbaxiscr   rC   r^   r   r   r   r    s*   

r  c                 C   z   t | } |d u r|  } d}t|p| j}|dkrd}nt dkr3|dkr3ttj| |t	dddS tj| |t	|dS Nr   rN   r?   r+   rX   rY   r   r;   )
r   r   r   r\   r;   r   r   r&   cumprodr   r=   r   r;   r   r   r   r       r  c                 C   r  r  )
r   r   r   r\   r;   r   r   r&   cumsumr   r  r   r   r   r    r  r  c                 C   s0   t | } t| jdkrtt| dS t| S )Nr   r   )r   r	   r;   r   r&   deg2radr   r   r   r   r    s   
r  c                 C      t | } tj| |dS Ndiagonal)r   r&   diagr=   r   r   r   r   r    r   r  c                 C   r  )N)offset)r   r&   diagflatr  r   r   r   r    r   r  c                 C      t | } tj| |||dS )N)r  dim1dim2)r   r&   r  )r=   r  axis1axis2r   r   r   r    s   r  c                 C      t | } tj| ||dS )N)nr   )r   r&   diff)r   r!  r   r   r   r   r"       r"  c                 C   s>   t | } t |}t| jdkrt| d} ttj| |dddS )NrN   r   T)rightr?   )r   r	   r;   r   r&   	bucketize)r=   binsr   r   r   digitize  s
   
r'  c                 C   s   t | } t |}t| j|j}t|t}t dkr!|dkr!d}t| |} t||}| jdks5|jdkr>tt	| ||S tt
| ||S )Nr+   rX   rY   r   )r   r   r\   r;   r   r   r   r   r&   r_   r]   r   r   r   r   dot  s   

r(  c                 C   s"   t |pt }tj| |t dS rs   )r   r   rG   r&   emptyr   rx   r   r   r   r)     s   r)  c                 C      t | t |} }t| |S r0   )r   r&   eqr2   r   r   r   equal     r,  c                 C   :   t | } t| j}d|v s|dkrt| t } t| S NrZ   rN   )r   r	   r;   r   r   rG   r&   expr   r   r   r   r0  
  
   

r0  c                 C   r.  r/  )r   r	   r;   r   r   rG   r&   exp2r   r   r   r   r2    r1  r2  c                    sT   t | } t|}t| jt|  t fdd|D }|D ]	}tj| |d} q| S )Nc                    rA   r   r   r   r   out_ndimr   r   r9     rD   zexpand_dims.<locals>.<listcomp>r   )r   r   r"   rR   sortedr&   	unsqueeze)r=   r   r   r   r4  r   expand_dims  s   r8  c                 C   r.  r/  )r   r	   r;   r   r   rG   r&   expm1r   r   r   r   r9  $  r1  r9  c                 C   s4   t | } |d u rtt| j}t|}tj| |dS Nr    )r   r#   ranger   r   r&   flipr   r   r   r   r=  ,  s
   r=  c                 C   s@   t | } t| jdkrt nt| jt}t| |} t	
| S Nr   )r   r	   r;   r   rG   r   r\   r   r   r&   floorr~   r   r   r   r?  4  s   

r?  c                 C   sr   t |}t||d}t|jdkr/t| t|j }t| d | dt|j  }t||S tj| ||t dS )Nr`   r   rf   )ru   
fill_valuer;   rv   )	r   r   r"   rR   r#   r&   tileri   r   )rR   r@  r;   expand_size
tile_shaper   r   r   ri   ?  s   
ri   c                 C   s   |p| j }t| j||dS )N)rR   r@  r;   )r;   ri   rR   )r=   r@  r;   r   r   r   	full_likeL  s   
rD  c                 C   r/   r0   )r   r&   gcdr2   r   r   r   rE  Q  r5   rE  c                 C   r*  r0   )r   r&   greaterr2   r   r   r   rF  W  r-  rF  c                 C   r*  r0   )r   r&   greater_equalr2   r   r   r   rG  \  r-  rG  c                 C      dd | D } t | S )Nc                 S   r6   r   r   r<   r   r   r   r9   b  r:   zhstack.<locals>.<listcomp>)r&   hstackr   r   r   r   rI  a     
rI  c                 C   r   r   )	r   r   r\   r;   r   rG   r   r&   hypotr   r   r   r   rL  f  r   rL  c                 C   sR   t |pt }t dkr |tjkr ttj| t dt d|S tj| |t dS )Nr+   rY   r;   rv   )r   r   rG   r   r&   r  r   eye)r!  r;   r   r   r   identityv  s   rO  c                 C       t | tjst| } t| S r0   )r(   r&   rn   r   imagr   r   r   r   rQ       

rQ  h㈵>:0yE>c                 C   sF   t | } t |}t| j|j}t| |} t||}t| ||||S r0   )r   r   r\   r;   r   r&   isclose)r3   r4   rtolatol	equal_nanr^   r   r   r   rU    s   

rU  c                 C   r   r0   )r   r&   isfiniter   r   r   r   rY    r   rY  c                 C   s   t | } t |}t| j|j}|dkrt| d} t|d}t| jdkr+t| |j} t|jdkr8t|| j}tj| |||dS )NrN   r?   )assume_uniqueinvert)r   r   r\   r;   r   r	   r&   isin)r3   r4   rZ  r[  r;   r   r   r   r\    s   

r\  c                 C   r   r0   )r   r&   isinfr   r   r   r   r]    r   r]  c                 C   r   r0   )r   r&   isnanr   r   r   r   r^    r   r^  c                 C   r   r0   )r   r&   isneginfr   r   r   r   r_    r   r_  c                 C   r   r0   )r   r&   isposinfr   r   r   r   r`    r   r`  c                 C   r   r0   )r   r&   isrealr   r   r   r   ra    r   ra  c                 C   r/   r0   )r   r&   kronr2   r   r   r   rb    r5   rb  c                 C   r/   r0   )r   r&   lcmr2   r   r   r   rc    r5   rc  c                 C   r*  r0   )r   r&   lessr2   r   r   r   rd    r-  rd  c                 C   r*  r0   )r   r&   
less_equalr2   r   r   r   re    r-  re  2   Tc                 C   sJ  |dkrt d| |d u r%t| dt| t|dt|tg}tj| }t|}ttj	}|r=|dkr<||  |d  }n|dkrG||  | }|dkrS|||  |  }t
| drt
|drt| |d} t||d}tj||t d|d  }	t| jD ]}
|	d}	q{| d  |	||  d    }ntj| |||t d	}|d
u r||fS |S )Nr   zBtorch.linspace does not support an `axis` argument. Received axis=r;   r   __len__r`   rM  r   )r   endstepsr;   rv   T)r!   rm   r   r   r   r\   r   r   r&   nanhasattrr   r   r<  r   r7  linspace)r   r   numendpointretstepr;   r   rL   r   ri  irl  r   r   r   rl    sN   

rl  c                 C   r   r0   )r   r&   logr   r   r   r   rq    r   rq  c                 C   r   r0   )r   r&   log10r   r   r   r   rr    r   rr  c                 C   r   r0   )r   r&   log1pr   r   r   r   rs    r   rs  c                 C   r   r0   )r   r&   log2r   r   r   r   rt    r   rt  c                 C   sz   t | } t |}t| j|jt}t dkr-|dkr-t| d} t|d}tt| ||S t| |} t||}t| |S r   )	r   r   r\   r;   r   r   r   r&   	logaddexpr   r   r   r   ru    s   



ru  c                 C   sB   t | } t |}t| j|jt}t| |} t||}t| |S r0   )r   r   r\   r;   r   r   r&   
logaddexp2r   r   r   r   rv  ,  s   

rv  c                 C   r*  r0   )r   r&   logical_andr2   r   r   r   rw  5  r-  rw  c                 C   r   r0   )r   r&   logical_notr   r   r   r   rx  :  r   rx  c                 C   r*  r0   )r   r&   
logical_orr2   r   r   r   ry  ?  r-  ry  
   c              	   C   s.  |dkrt d| |d u r%t| dt| t|dt|tg}tj| }t|}|du r5|||  |  }t| drwt|drwt| |d} t||d}t	j
||t d|d  }t| jD ]}	|d	}q]| d  |||  d    }
||
 }|S |}t d
kr|t	jkrt	j}tt	j| ||||t d|}|S )Nr   zBtorch.logspace does not support an `axis` argument. Received axis=r;   Frg  r`   rM  r   r   r+   )r   rh  ri  baser;   rv   )r!   rm   r   r   r   r\   r   rk  r   r&   r   r   r<  r   r7  rX   rY   r   logspace)r   r   rm  rn  r{  r;   r   rL   ri  rp  rl  r|  rC   r   r   r   r|  D  sN   
r|  c                 C   p   t | ttfst| } t |ttfst|}tt| dt| t|dt|}t| |} t||}t	| |S Nr;   )
r(   rZ   r   r   r   r\   rm   r   r&   ro   r   r   r   r   ro   t     

ro   c                    st  t   t jd}t jt}t | |d u r'|du r'tt |S t|t	r9ttj ||dd |S |d u rDt
 dg}nF fdd|D }ttt j|}|t| }tj |d}t jfd	d|D }	tfd
d|D g}
|	|
 }t
||}tj|ddd }|r|d u rt jD ]}t|dd}qnt|D ]}t||d}qt||S )NrY   Fr   r   r   c                       g | ]}t | jqS r   r   r   r3  r   r   r   r9         zmedian.<locals>.<listcomp>r;  c                       g | ]} | qS r   r   r   rp  x_shaper   r   r9     r:   c                    r  r   r   r  r  r   r   r9     r:   r   r   )r   r   r\   r;   r   r   r&   medianr(   rZ   r   r6  rF   r<  r   
differencerE   permuterR   mathprodr8  )r=   r   rc   rC   r^   r   
other_dimspermx_permedother_shape	end_shape
full_shape_rp  r   r=   r  r   r    s<   




r  xyindexingc                 G   s   dd |D }t j|| dS )Nc                 S   r6   r   r   )r   	sc_tensorr   r   r   r9     r:   zmeshgrid.<locals>.<listcomp>r  )r&   meshgrid)r  r=   r   r   r   r    r   r  c                 C   s   t | } d| jv r#|d u rtd|rtdt| j |S t|S |d u r-t| }nt| ||d}t	t
|dd tjrA|j}|d urVt|j}t ||d}t||S |S )Nr   z*Cannot compute the min of an empty tensor.rf   rg   rh   r`   )r   rR   r!   r&   ri   r"   rj   r   r   r(   rm   rn   rh   r   r;   minimumrp   r   r   r   r     s"   


r   c                 C   r}  r~  )
r(   rZ   r   r   r   r\   rm   r   r&   r  r   r   r   r   r    r  r  c                 C   sH   t | } t |}t| j|j}|dkrt| d} t|d}t| |S NrN   r?   )r   r   r\   r;   r   r&   	remainderr   r   r   r   mod  s   

r  c                 C   r   )N)sourcedestination)r   r&   moveaxis)r=   r  r  r   r   r   r    r#  r          c                 C   r  )N)rj  posinfneginf)r   r&   
nan_to_num)r=   rj  r  r  r   r   r   r    r   r  c                 C   s   t | } | jS r0   )r   r   r   r   r   r   r     s   r   c                 C   s   t | } tt| jdS )Nr?   )r   r   r&   nonzeror  r   r   r   r   r    r   r  c                 C   r*  r0   )r   r&   	not_equalr2   r   r   r   r    r-  r  c                 C   r{   r|   )r   r   r;   r&   	ones_liker~   r   r   r   r    r   r  c                 C   s&   t | t |} }t|  | S r0   )r   r&   outerr   r2   r   r   r   r    s   r  constantc                 C   sz  i }|d ur|dkrt d| ||d< t| } g }t|d d d }d}|D ]}||d |d  7 }q(|D ]}||7 }||d |d  8 }|dkrM nq7|dkrTd}|dkrftjjj| f||d	|S | j}| j}	d
}
| jdk rd}
dgd| j  }| j	g || j
R  } d
}| jtjtjfvrd}t| tj} tjjj| ||d	} |rt| |} |
rtj| ttd|	 d} | S )Nr  zZArgument `constant_values` can only be provided when `mode == 'constant'`. Received: mode=valuer   r   r   	symmetric	replicate)padmodeF   Tr   )r!   r   rE   r&   nn
functionalr  r;   r   r   rR   rY   r   r   squeezer#   r<  )r=   	pad_widthr  constant_valuesrK   pad_sumpad_width_sumr  rd   ori_ndimneed_squeezenew_dims	need_castr   r   r   r    sT   

r  c                 C   s   t | } |d u r"t| j}|dkrd}n|dv rd}n|dkr"d}|}t dkr/|dkr/d}|d u r?ttj| t|d|S t	|}|D ]}ttj| ||t|d	|} qE| S )
NrN   r?   )r>   r   r   r+   rX   rY   r`   )r   r   r;   )
r   r   r\   r;   r   r   r&   r  r   r   )r=   r   rc   r;   rC   r   r   r   r   r  8  s.   r  linearc                    sn  t   t |}t|}t jd}t jt}t |  j|jkr+t| j}|d u r6t dg}nF fdd|D }tt	t
 j|}|t| }	tj |	d}
t jfdd|D }tfdd|D g}|| }t|
|}tj||d|d}|r|d u rt
 jD ]}t|dd	}qnt|D ]}|jd
kr|d n|}t||d	}qt||S )NrY   r   c                    r  r   r  r3  r   r   r   r9   g  r  zquantile.<locals>.<listcomp>r;  c                    r  r   r   r  r  r   r   r9   m  r:   c                    r  r   r   r  r  r   r   r9   n  r:   )r   interpolationr  r   r   )r   r   r   r\   r;   r   r   r   r6  rF   r<  r   r  rE   r&   r  rR   r  r  quantiler8  )r=   qr   methodrc   rC   r^   r   r  r  r  r  r  r  r  rp  r   r  r   r  U  s:   



r  c                 C   r   r0   )r   r&   ravelr   r   r   r   r    r   r  c                    s2   t | } t| j t fddt| |D S )Nc                 3   s    | ]}t | V  qd S r0   r
   )r   idxr`   r   r   r     s    

z unravel_index.<locals>.<genexpr>)r   r   r\   r;   r#   r&   unravel_index)indicesrR   r   r`   r   r    s
   
r  c                 C   rP  r0   )r(   r&   rn   r   realr   r   r   r   r    rR  r  c                 C   r   r0   )r   r&   
reciprocalr   r   r   r   r    r   r  c                 C   sh   t | } t dkr&t| jt| j} t| ||d}tj|jt	|jt dS t |t
d}tj| ||dS )Nmetar  rt   r`   r   )r   r   r   rR   r	   r;   repeatr&   r)  r   rZ   repeat_interleave)r=   repeatsr   outputsr   r   r   r    s   
r  c                 C   s(   t |ttfs
|f}t| } t| |S r0   )r(   rE   r#   r   r&   r   )r=   newshaper   r   r   r     s   r   c                 C   r   r:  )r   r&   roll)r=   shiftr   r   r   r   r    r#  r  leftc                 C   sF   t | dkrtd| j | jd ttjjk}tj| |||dS )Nr   z`searchsorted` only supports 1-D sorted sequences. You can use `keras.ops.vectorized_map` to extend it to N-D sequences. Received: sorted_sequence.shape=r   )side	out_int32)	r   r!   rR   r)   iinfor?   rk   r&   searchsorted)sorted_sequencerh   r  r  r   r   r   r    s   r  c                 C   r   r0   )r   r&   r   r   r   r   r   r     r   r   c                 C   r   r0   )r   r&   signbitr   r   r   r   r    r   r  c                 C   r   r0   )r   r&   sinr   r   r   r   r    r   r  c                 C   r   r0   )r   r&   sinhr   r   r   r   r    r   r  c                 C   s   t t| j}t|S r0   )r   r#   rR   r&   r  r  r   r   r   ru     rK  ru   c                 C   sP   t | } t dkr t| jdkr t| d} ttj| |djdS tj| |djS )Nr@   rN   r   r   )r   r   r	   r;   r   r&   sortrh   r   r   r   r   r    s
   
r  c                    s   t | } | j| }t|ts2t |}|dd }||dd   }tj|t||gdd}| }n$|| dkrRtd| d| d| d| j|  d	| d
| j || }tj	| ||d |dkrrt|trr fddt
|D  t S )Nr   r   r   r   zReceived indices_or_sections=z0 (interpreted as a number of sections) and axis=z, but input dimension x.shape[z]=z is not divisible by z. Full input shape: x.shape=)rj   split_size_or_sectionsr   c                    s   g | ]} d    qS r   )r   )r   r  outr   r   r9     r  zsplit.<locals>.<listcomp>)r   rR   r(   rZ   r&   concatr"  tolistr!   splitr<  rE   )r=   indices_or_sectionsr   r   
start_sizeend_sizechunk_sizesr   r  r   r    sB   


r  c                 C   r   )Nc                 S   r6   r   r   )r   elemr   r   r   r9     r:   zstack.<locals>.<listcomp>r   )r&   ra   r   r   r   r   ra     r   ra   c                 C   s>   t | } t| j}d|v s|dkrt| d} tj| ||ddS )NrZ   rN   rY   F)r   r   unbiased)r   r	   r;   r   r&   std)r=   r   rc   rd   r   r   r   r    s
   

r  c                 C   r   )N)axis0r  )r   r&   swapaxes)r=   r  r  r   r   r   r    r#  r  c                 C   s   t | } t | }|d ur| j| n| jd }t|dk || |}| jdkr4|dkr4tjj|| S |d u r@t	| d} d}|d urqt
|| j}| jd | |j | j|d d   }| }tj| ||d|}|	|S tj| |dS )Nr   r   r   r   )r   index)r  )r   longrR   r&   wherer   r  r  	embeddingr   r   r  index_selectr  take)r=   r  r   x_dimrR   r  r   r   r   r    s(   &
r  c                 C   sV   t | } t | }|d ur| j| n| jd }t|dk || |}tj| ||dS )Nr   r   )r   r  rR   r&   r  take_along_dim)r=   r  r   r  r   r   r   take_along_axis4  s   r  c                 C   r   r0   )r   r&   tanr   r   r   r   r  A  r   r  c                 C   r   r0   )r   r&   tanhr   r   r   r   r  F  r   r  r   c                 C   s   t | } t |}t| j|j}t|t}t dkr!|dkr!d}t| |} t||}t|tt	frN|\}}t|tt	fs@|f}t|tt	fsJ|f}||f}tt
j| ||d|S )Nr+   rX   rY   r;  )r   r   r\   r;   r   r   r   r(   rE   r#   r&   	tensordot)r3   r4   r-   r^   rC   firstsecondr   r   r   r  K  s    

r  c                 C   sJ   t | } t| j}d|v rt| t } ttj| |d|S tj| |dS )NrZ   )decimals)r   r	   r;   r   r   rG   r&   round)r=   r  rd   r   r   r   r  a  s   
r  c                 C   s>   t |rt|  }t|tr|f}t| } tj| |dS r:  )r   r#   rZ   r,   r(   r   r&   rA  )r=   r  r   r   r   rA  k  s   
rA  c                 C   s>   t | } t| j}|dv rd}tjt| |||dt|dS )N)rN   r>   r   r   r?   r   r  )r   r	   r;   r&   r   r  r   )r=   r  r  r  r;   r   r   r   tracet  s   
r  c                 C   s<   t |pt }|p| }tj| |f|t d}tj||dS )NrM  r  )r   r   rG   r&   rw   r   tril)NMr   r;   r=   r   r   r   tri  s   r  c                 C   r  r  )r   r&   r  r  r   r   r   r    r   r  c                 C   r  r  )r   r&   triur  r   r   r   r    r   r  c                 C   r   rM   )r   r	   r;   r&   truncr   r   r   r   r    s   
r  c                 C   h   t | } t |}t| j|j}t|t}t dkr!|dkr!d}t| |} t||}tt| ||S r   )	r   r   r\   r;   r   r   r   r&   vdotr   r   r   r   r    s   

r  c                 C   r   r   )	r   r   r\   r;   r   r   r   r&   innerr   r   r   r   r    s   

r  c                 C   rH  )Nc                 S   r6   r   r   r<   r   r   r   r9     r:   zvstack.<locals>.<listcomp>)r&   vstackrJ  r   r   r   r    rK  r  excluded	signaturec                C   s   t | tj||dS )Nr  )r   r&   vmap)pyfuncr  r  r   r   r   	vectorize  s   
r	  c                 C   sD   t | td} |d ur|d urt |}t |}t| ||S t| S r|   )r   rN   r&   r  )	conditionr3   r4   r   r   r   r    s   
r  c                 C   s8   t | ttfst| } t |ttfst|}t| |S r0   )r(   rZ   r   r   r&   divider2   r   r   r   r    s
   r  c                 C   sF   t | ttfst| } t |ttfst|}t|dkdt| |S )Nr   )r(   rZ   r   r   r&   r  r  r2   r   r   r   divide_no_nan  s
   r  c                 C   r   r0   )r  r2   r   r   r   true_divide  r   r  c                 C   r*  r0   )r   r&   powr2   r   r   r   power  r-  r  c                 C   r   r0   )r   r&   negativer   r   r   r   r    r   r  c                 C   s*   t | } t| jdkrt| d} t| S r  )r   r	   r;   r   r&   squarer   r   r   r   r    s   

r  c                 C   s.   t | } t| jdkrt| t } t| S r>  )r   r	   r;   r   r   rG   r&   sqrtr   r   r   r   r    s   
r  c                 C   s(   t | } |d urtj| |dS t| S r   )r   r&   r  r   r   r   r   r    s   
r  c                 C   s$   t | } |d urtj| |dS | jS r:  )r   r&   r  r  )r=   r-   r   r   r   	transpose  s   r        ?c                 C   s\   t | } t| jdkrt| t } |d ur"t |}tj| ||dS t |}tj| ||dS )NrN   )r=   r   )dxr   )r   r	   r;   r   r   rG   r&   trapz)r   r=   r  r   r   r   r   	trapezoid  s   r  c                 C   s`   t | } t| jd}t| jt}|g ks|dkrt| |S t| |} ttj| ||dd|S )NrY   r   r   )r   r   
correction)	r   r   r\   r;   r   r}   r   r&   var)r=   r   rc   rC   r^   r   r   r   r    s   

r  c                 C   sv   t | ttfrt| } t| } |dks|g kr| S t| j}|dv r$d}|d ur3ttj	| ||d|S tt	| |S )Nr   )rN   r   r>   r   r?   )r   r   )
r(   rE   r#   ra   r   r	   r;   r   r&   r   )r=   r   rc   r;   r   r   r   r      s   
r   c                 C   s   t |pt }|d u r| n|}|d u rdn|}|dkr?t dkr5|tjkr5ttj| |t dt d|S tj| ||t dS t	| |}tj
||t d}tj||dd | d |f S )Nr   r+   rY   rM  r  )r   r   rG   r   r&   r  r   rN  r$   rk   rw   r  )r  r  r   r;   diag_lengthr  r   r   r   rN  1  s   rN  c                 C   sb   t | ttfst| } t |ttfst|}tt| dt| t|dt|}tt	
| ||S r~  )r(   rZ   r   r   r   r\   rm   r   r   r&   floor_divider   r   r   r   r  D  s   r  c                 C   r*  r0   )r   r&   logical_xorr2   r   r   r   r  P  r-  r  c                 C   sH   t | } t| jdkrt| t } nt| jdkrt| d} t| S )NrN   r   r   )r   r	   r;   r   r   rG   r&   corrcoefr   r   r   r   r  U  s   

r  validc                 C   s  t | } t |}tt| dt| t|dt|}|dkr!d}n|dvr'd}t| |} t||}| d|d}}| jd d |jd d krvdd	 t| jd d |jd d D }t	
| || jd g } t	
|||jd g }t	| jd d  }t	| t|| df} t	|t||df}t	jjj| |d
| d|dd
 d}| jd d d }	||	}
|dkrt||t|| d
 }|
d| d }|
d||| f }
|dkr|
d| d }|
d||| f }
t	|
S )Nr;   r   r   )r  rX   r   rY   r   r   c                 S   s   g | ]	\}}t ||qS r   )rk   )r   rp  jr   r   r   r9   s  s    zcorrelate.<locals>.<listcomp>r   )groupspaddingr  r  r   .same)r   r   r\   rm   r   r   ru   rR   r   r&   r   rj   r  r   rZ   r  r  conv1dr7  r$   rk   r   r  )r3   r4   r  r;   x1_lenx2_len	new_shapenum_signalsoutputoutput_shapere   target_length	start_idxr   r   r   	correlate`  sD   

(

r,  c                 C   sR   dd | D } dd |D }t |}ttt| |D ]\}}t|||}q|S )Nc                 S   r6   r   r   r   cr   r   r   r9     r:   zselect.<locals>.<listcomp>c                 S   r6   r   r   r-  r   r   r   r9     r:   )r   reversedrE   r   r&   r  )condlist
choicelistdefaultr  r.  vr   r   r   select  s   r4  c                 C   s   t | } ttj| S r0   )r   r#   r&   linalgslogdetr   r   r   r   r6    r#  r6  c           	      C   s   t | d} t| |d} t|  |d d }dd }t|  d D ]}t|}q#|tj| tjd|}t|| j	d | d d }tj
||g|  d d}tt|d|dS )Nr?   r   r   c                 S   s   t jd| j| jd| |< | S )Nr   rM  )r&   rz   r;   rv   )r   rp  r   r   r   set_to_zero  s   z!argpartition.<locals>.set_to_zeror`   r   )r   r&   r  topkr<  r   r  r  r?   rR   r   r   )	r=   kthr   
bottom_indr7  r  proxytop_indr  r   r   r   argpartition  s   
r=  c                 C   s   t j| ||d}|j|jfS )N)r&  r<  )r&   	histogramhist	bin_edges)r=   r&  r<  hist_resultr   r   r   r>    s   r>  )r   r   )NF)NFNr0   )NNNr  )NN)Nr   Fr  )r   r   r   N)r   r   r   )r   r   )rS  rT  F)FF)rf  TFNr   )rf  Trz  Nr   )r  NN)r  N)Nr  F)r  )r   )Nr   N)Nr  r   )r  )rz  N)r$   r  r,   r)   r&   keras.src.backendr   r   keras.src.backend.commonr   &keras.src.backend.common.backend_utilsr   r   r   "keras.src.backend.common.variablesr	   keras.src.backend.torch.corer   r   r   r   r   r>   r   r?   r   TORCH_INT_TYPESr'   r1   rH   rO   r]   r_   rb   rk   rw   rz   r}   r   r   r%   r   r   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r"  r'  r(  r)  r,  r0  r2  r8  r9  r=  r?  ri   rD  rE  rF  rG  rI  rL  rO  rQ  rU  rY  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rl  rq  rr  rs  rt  ru  rv  rw  rx  ry  r|  ro   r  r  r   r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r  r  r  ru   r  r  ra   r  r  r  r  r  r  r  r  rA  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r  r  r  r  r  r  r   rN  r  r  r  r,  r4  r6  r=  r>  r   r   r   r   <module>   s   '8$



	

	2	0*

2+	 	
	
/	