o
    2h                     @   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dvddZdd Zdd Zdd Zdd Zdd Z dwddZ!dxdd Z"dyd!d"Z#dyd#d$Z$dyd%d&Z%d'd( Z&d)d* Z'dwd+d,Z(d-d. Z)dwd/d0Z*dwd1d2Z+dwd3d4Z,dyd5d6Z-dzd7d8Z.d9d: Z/d;d< Z0d=d> Z1d?d@ Z2dAdB Z3dCdD Z4dEdF Z5dwdGdHZ6dwdIdJZ7d{dLdMZ8dydNdOZ9d|dPdQZ:dRdS Z;dTdU Z<dVdW Z=dXdY Z>dZd[ Z?d}d\d]Z@d^d_ ZAd`da ZBdbdc ZCddde ZDdfdg ZEdhdi ZFdjdk ZGdldm ZHdndo ZIdpdq ZJdrds ZKdtdu ZLdvdw ZMdxdy ZNd~dzd{ZOd|d} ZPd~d ZQdd ZRdd ZSdd ZTdyddZUdddZVd|ddZWd|ddZXdd ZYd~ddZZd~ddZ[dddZ\dddZ]dd Z^dd Z_dyddZ`dd Zadd Zbdd Zcdd Zddd ZedyddZfdd ZgdyddZhdyddZidd Zjdd Zkdd ZldyddZmdd ZndddZodd Zpdd ZqddÄ Zrddń ZsddǄ Zt	 ddd˄Zudd̈́ Zvddτ Zwddф Zxddӄ ZyddՄ Zzddׄ Z{ddل Z|ddۄ Z}dddބZ~dd ZdwddZddddZdxddZdd Zdd Zdd ZdddZdd Zdd Zdd ZdyddZdd ZdddZdxdd ZdddZdd Zdd Zdd	 Zd
d ZdyddZdd ZdyddZdddZdd Zdd Zdd Zdd Zdd Zd{dd Zd~d!d"Zd~d#d$Zdwd%d&Zd'd( Zdyd)d*Zdyd+d,Zd-d. Zd/d0 Zdd2d3Zd~d4d5Zd6d7 Zdd8d9Zdd:d;Zd~d<d=Zd~d>d?Zd@dA ZdBdC ZdDdE ZdFdG ZdddHdIdJZd|dKdLZdMdN ZdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Zdyd[d\Zdyd]d^Zdwd_d`ZdwdadbZddcddZdedf Zdgdh Zdidj ZddldmZd~dndoZdpdq ZÐd{drdsZĐddtdu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 X/var/www/html/chatgem/venv/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 r(t | dt| t |dt|g}|d ur#|t |dt| tj| }t|}|d u r9tj| |t dS tj| |||t dS )Nr;   )endr;   rv   )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   M     
r   c                 C   r   r0   )r   r&   arccoshr   r   r   r   r   R  r   r   c                 C   r   r0   )r   r&   arcsinr   r   r   r   r   W  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   a  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   f  s   

r   c                 C   r   r0   )r   r&   arctanhr   r   r   r   r   s  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   x     
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 | } | 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   s^   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     s   


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   *  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   cbrt/  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   ;  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   M  s   


r   c                 C      dd | D } t j| |dS )Nc                 S   r6   r   r   r<   r   r   r   r9   ^  r:   zconcatenate.<locals>.<listcomp>r   )r&   r   )xsr   r   r   r   concatenate]     r   c                 C   $   t | tjst| } t|  S r0   r(   r&   rn   
from_numpyconjresolve_conjr   r   r   r   	conjugateb     
r   c                 C   r   r0   r   r   r   r   r   r   h  r   r   c                 C   r   r0   )r   r&   cloner   r   r   r   copyn  r   r   c                 C   r   r0   )r   r&   cosr   r   r   r   r   s  r   r   c                 C   r   r0   )r   r&   coshr   r   r   r   r   x  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   r-    
   

r-  c                 C   r+  r,  )r   r	   r;   r   r   rG   r&   exp2r   r   r   r   r/    r.  r/  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   r1  r   expand_dims  s   r5  c                 C   r+  r,  )r   r	   r;   r   r   rG   r&   expm1r   r   r   r   r6    r.  r6  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<  -  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   8  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_likeE  s   
rA  c                 C   r'  r0   )r   r&   greaterr2   r   r   r   rB  J  r*  rB  c                 C   r'  r0   )r   r&   greater_equalr2   r   r   r   rC  O  r*  rC  c                 C      dd | D } t | S )Nc                 S   r6   r   r   r<   r   r   r   r9   U  r:   zhstack.<locals>.<listcomp>)r&   hstackr   r   r   r   rE  T     
rE  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   identityY  s   rJ  c                 C       t | tjst| } t| S r0   )r(   r&   rn   r   imagr   r   r   r   rL  e     

rL  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   rP  k  s   

rP  c                 C   r   r0   )r   r&   isfiniter   r   r   r   rT  t  r   rT  c                 C   r   r0   )r   r&   isinfr   r   r   r   rU  y  r   rU  c                 C   r   r0   )r   r&   isnanr   r   r   r   rV  ~  r   rV  c                 C   r'  r0   )r   r&   lessr2   r   r   r   rW    r*  rW  c                 C   r'  r0   )r   r&   
less_equalr2   r   r   r   rX    r*  rX  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`   rH  r   )r   r   stepsr;   rv   T)r!   rm   r   r   r   r\   r   r   r&   nanhasattrr   r   r9  r   r4  linspace)r   r   numendpointretstepr;   r   rL   r   r[  ir^  r   r   r   r^    sN   

r^  c                 C   r   r0   )r   r&   logr   r   r   r   rc    r   rc  c                 C   r   r0   )r   r&   log10r   r   r   r   rd    r   rd  c                 C   r   r0   )r   r&   log1pr   r   r   r   re    r   re  c                 C   r   r0   )r   r&   log2r   r   r   r   rf    r   rf  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   rg    s   



rg  c                 C   r'  r0   )r   r&   logical_andr2   r   r   r   rh    r*  rh  c                 C   r   r0   )r   r&   logical_notr   r   r   r   ri    r   ri  c                 C   r'  r0   )r   r&   
logical_orr2   r   r   r   rj    r*  rj  
   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;   FrZ  r`   rH  r   r   r+   )r   r   r[  baser;   rv   )r!   rm   r   r   r   r\   r   r]  r   r&   r   r   r9  r   r4  rX   rY   r   logspace)r   r   r_  r`  rl  r;   r   rL   r[  rb  r^  rm  rC   r   r   r   rm    sN   
rm  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   "     

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   r0  r   r   r   r9   B      zmedian.<locals>.<listcomp>r8  c                       g | ]} | qS r   r   r   rb  x_shaper   r   r9   H  r:   c                    rt  r   r   ru  rv  r   r   r9   I  r:   r   r   )r   r   r\   r;   r   r   r&   medianr(   rZ   r   r3  rF   r9  r   
differencerE   permuterR   mathprodr5  )r=   r   rc   rC   r^   r   
other_dimspermx_permedother_shape	end_shape
full_shape_rb  r   r=   rw  r   ry  0  s<   




ry  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  Z  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   rn  ro  )
r(   rZ   r   r   r   r\   rm   r   r&   r  r   r   r   r   r  x  rp  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)r\  posinfneginf)r   r&   
nan_to_num)r=   r\  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   viewrR   rY   r   r   squeezer#   r9  )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}    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                    rq  r   rr  r0  r   r   r   r9     rs  zquantile.<locals>.<listcomp>r8  c                    rt  r   r   ru  rv  r   r   r9     r:   c                    rt  r   r   ru  rv  r   r   r9     r:   )r   interpolationrx  r   r   )r   r   r   r\   r;   r   r   r   r3  rF   r9  r   rz  rE   r&   r{  rR   r|  r}  quantiler5  )r=   qr   methodrc   rC   r^   r   r~  r  r  r  r  r  r  rb  r   r  r   r    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   6  s    

z unravel_index.<locals>.<genexpr>)r   r   r\   r;   r#   r&   unravel_index)indicesrR   r   r`   r   r  3  s
   
r  c                 C   rK  r0   )r(   r&   rn   r   realr   r   r   r   r  ;  rM  r  c                 C   r   r0   )r   r&   
reciprocalr   r   r   r   r  A  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metarx  rt   r`   r   )r   r   r   rR   r	   r;   repeatr&   r&  r   rZ   repeat_interleave)r=   repeatsr   outputsr   r   r   r  F  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   X  s   r   c                 C   r  r7  )r   r&   roll)r=   shiftr   r   r   r   r  _  r   r  leftc                 C   sD   t | dkrtd| j t| 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=)side	out_int32)
r   r!   rR   r"   r)   iinfor?   rk   r&   searchsorted)sorted_sequencerh   r  r  r   r   r   r  d  s   r  c                 C   r   r0   )r   r&   r   r   r   r   r   r   r  r   r   c                 C   r   r0   )r   r&   signbitr   r   r   r   r  w  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     rG  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     rs  zsplit.<locals>.<listcomp>)r   rR   r(   rZ   r&   concatr  tolistr!   splitr9  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_axis  s   r  c                 C   r   r0   )r   r&   tanr   r   r   r   r    r   r  c                 C   r   r0   )r   r&   tanhr   r   r   r   r    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   r8  )r   r   r\   r;   r   r   r   r(   rE   r#   r&   	tensordot)r3   r4   r-   r^   rC   firstsecondr   r   r   r    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    s   
r  c                 C   s>   t |rt|  }t|tr|f}t| } tj| |dS r7  )r   r#   rZ   r,   r(   r   r&   r>  )r=   r  r   r   r   r>    s   
r>  c                 C   sF   t | } t| j}|dkrt|d}tjt| |||dt|dS )Nr   r?   r   r
  )	r   r	   r;   r   r\   r&   r   r  r   )r=   r  r  r  r;   r   r   r   trace"  s   
r  c                 C   s<   t |pt }|p| }tj| |f|t d}tj||dS )NrH  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  5  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  F  s   

r  c                 C   r  r   )	r   r   r\   r;   r   r   r   r&   innerr   r   r   r   r  V  s   

r  c                 C   rD  )Nc                 S   r6   r   r   r<   r   r   r   r9   e  r:   zvstack.<locals>.<listcomp>)r&   vstackrF  r   r   r   r  d  rG  r  excluded	signaturec                C   s   t | tj||dS )Nr  )r   r&   vmap)pyfuncr  r  r   r   r   	vectorizei  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  o  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  y  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 r7  )r   r&   r{  r  )r=   r-   r   r   r   	transpose  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   rH  r  )r   r   rG   r   r&   r  r   rI  r$   rk   rw   r  )r  r  r   r;   diag_lengthr  r   r   r   rI    s   rI  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 ro  )r(   rZ   r   r   r   r\   rm   r   r   r&   floor_divider   r   r   r   r	    s   r	  c                 C   r'  r0   )r   r&   logical_xorr2   r   r   r   r
    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    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   rb  jr   r   r   r9     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  conv1dr4  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   1  r:   zselect.<locals>.<listcomp>c                 S   r6   r   r   r  r   r   r   r9   2  r:   )r   reversedrE   r   r&   r  )condlist
choicelistdefaultr  r  vr   r   r   select0  s   r"  c                 C   s   t | } ttj| S r0   )r   r#   r&   linalgslogdetr   r   r   r   r$  9  r   r$  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   rH  )r&   rz   r;   rv   )r   rb  r   r   r   set_to_zeroC  s   z!argpartition.<locals>.set_to_zeror`   r   )r   r&   r  topkr9  r   r  r  r?   rR   r   r   )	r=   kthr   
bottom_indr%  r  proxytop_indr  r   r   r   argpartition>  s   
r+  c                 C   s   t j| ||d}|j|jfS )N)r#  r9  )r&   	histogramhist	bin_edges)r=   r#  r9  hist_resultr   r   r   r,  O  s   r,  )r   r   )NF)NFNr0   )Nr   Nr  )NN)Nr   Fr  )r   r   r   N)r   r   r   )r   r   )rN  rO  F)rY  TFNr   )rY  Trk  Nr   )r  NN)r  N)Nr  F)r  )r   )Nr   N)r  )rk  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-  r/  r5  r6  r:  r<  ri   rA  rB  rC  rE  rJ  rL  rP  rT  rU  rV  rW  rX  r^  rc  rd  re  rf  rg  rh  ri  rj  rm  ro   ry  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  r>  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rI  r	  r
  r  r  r"  r$  r+  r,  r   r   r   r   <module>   s   '8$



	

	20*
2+	 	
	
/	