o
    2hOl                    @   s	  d dl Z d dlZd dlZd dlZ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 d dlmZ dddZ e!e	jj"dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd d!Z(e)d"d#d$ Z*d%d& Z+e!ej,d'd( Z-d)d* Z.ej/d+d, Z0dd-d.Z1dd/d0Z2dd1d2Z3dd3d4Z4ej5d5d6 Z6d7d8 Z7dd9d:Z8d;d< Z9dd=d>Z:dd?d@Z;ddAdBZ<ddCdDZ=ddEdFZ>e?dGej@ dHdI ZAe?ejBdJdK ZCej5dLdM ZDej5dNdO ZEej5dPdQ ZFdRdS ZGej5dTdU ZHdVdW ZIddXdYZJddZd[ZKdd]d^ZLdd_d`ZMddadbZNdcdd ZOdedf ZPdgdh ZQdidj ZRdkdl ZSdmdn ZTdodp ZUdqdr ZVdsdt ZWdudv ZXdwdx ZYdydz ZZej5d{d| Z[d}d~ Z\dddZ]ej5dd Z^ej5dd Z_ej5dd Z`e?ddd Zae?ddd ZbdddZcdddZddddZedddZfdd ZgdddZhdddZidddZjdddZkdd Zldd ZmdddZndd Zoe?ddd Zpe?ddd Zqdd Zrej5dd ZsdddZtej5dd ZudddZvdddZwdd Zxdd Zydd ZzdddZ{ej5dd Z|dddZ}e?dáddń Z~ddǄ ZddɄ Zdd˄ Zdd̈́ Z	 dddЄZe?ej dd҄ Ze?ej ddԄ Zej5ddք Ze?ej dd؄ Zddڄ Zdd܄ Zddބ Zdd ZdddZej!e	jjdddd ZdddZddddZdddZej!e	jjdddd Zdd Zdd ZdddZdd Zdd Zdd ZdddZdd dZdd ZdddZdddZdd
dZdddZdd Zdd Zej5dd Ze?ejdd ZdddZdd ZdddZdddZej5dd  Zej5d!d" Zej5d#d$ Zej5d%d& Zd'd( Zdd)d*Zdd+d,Zdd-d.Zdd/d0Zd1d2 Zdd3d4Zdd5d6Zej5d7d8 Zej5d9d: Zdd<d=Zej5dd>d?Zd@dA ZddBdCZddDdEZddFdGZddHdIZdJdK ZdLdM ZdNdO ZdPdQ ZddRdSZdddTdUdVZddWdXZejĐdYdZ ZŐd[d\ ZƐd]d^ Zǐd_d` Zej5dadb Zej5dcdd Zej5dedf ZːddgdhZ̐ddidjZ͐ddkdlZΐddmdnZϐddodpZАdqdr Zѐdsdt ZҐdudv ZӐddxdyZԐddzd{ZՐd|d} Z֐dd~dZאdddZdS (      N)sparse_csr_matrix_ops)is_nan)tree)config)standardize_dtype)dtypescanonicalize_axis)to_tuple_or_list)vectorize_implsparse)castconvert_to_tensorshape   r   r   c                    s  t    jjdk rtd jj tdks!d d kr)td d|d }|dkr3 S t fdd	D fd
dt jjD }| t	 | t }|dd }|d |d }}t
 tjdg||ggdd tj dgd t	 g d |d dkr||}}	n||}}	|dkrt
 tjdg||	ggdd t|d D ]}
tj dgd t	 g d qtj|||	ggdd}t
 | dgt| }t|D ]\}}|||< qt	 |  S )a<  Rotate an array by 90 degrees in the specified plane.

    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 with correct shape transformation
       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 j| V  qdS )r   N)r   rank).0axis)array ]/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/backend/tensorflow/numpy.py	<genexpr>8   s    
zrot90.<locals>.<genexpr>c                       g | ]}| vr|qS r   r   r   iaxesr   r   
<listcomp><       zrot90.<locals>.<listcomp>Nr   r   r   r   )r   r   r   
ValueErrorlentuplerangeextendtf	transposereshapeconcatreverse	enumerate)r   kr"   permr   non_rot_shapehwfinal_hfinal_w_final_shapeinv_permr    pr   )r   r"   r   rot90   sR   


 
 
r?   c                 C   s  t | ttfst| } t |ttfst|}tt| dt| t|dt|}t| |} t||}dd |j	 D }dt
|krt
| jdkr|d d ur|d | j	 d | j	 d hv r| jd |d krmd}nd}t
|jdkr{t|}tjj| ||d	S t| |S )
Ndtypec                 S   s    g | ]}|d u s|dkr|qS )Nr   r   )r   dr   r   r   r#   o        zadd.<locals>.<listcomp>r   r   r&   NHWCNCHW)data_format)
isinstanceintfloatr   r   result_typegetattrtyper   as_listr*   r.   squeezennbias_addadd)x1x2r@   x2_squeeze_shaperE   r   r   r   rP   _   s0   


rP   c                 C   s~   t | t d} | dkrtg S | dkrtdgS t| }| d d }t||kd| | d  dd| | d   }|S )Nr@   r   r   r          @)r   r   floatxr.   constantonesr,   where)xnhalfwindowr   r   r   bartlett   s   

.r^   c                 C      t | tjd} tjj| ddS NrT   F)periodic)r   r.   int32signalhamming_windowrZ   r   r   r   hamming      rf   c                 C   r_   r`   )r   r.   rb   rc   hann_windowre   r   r   r   hanning   rg   ri   c              
   C   s   t | } t |}t| j|j}|dv rt }n|dv rd}t| |} t||}t| dk t	| t| dkt
| |S )N)int8int16rb   uint8uint16uint32int64float64r   )r   r   rI   r@   r   rV   r.   r   rY   
zeros_like	ones_likerQ   rR   r@   r   r   r   	heaviside   s   
ru   c                 C   s   t | tjd} tjj| |dS )NrT   )beta)r   r.   rb   rc   kaiser_window)rZ   rv   r   r   r   kaiser   rg   rx   Fc           
      C   sL  t | } | jg}t| jdvrt| tj} |d urGt |}||j tj| }t|jdvrFdt|jv r?t|tj}n
t|tj	}nd}|sQt
| tjrtjj| ||dd}|jd }|d u rkt|d }t||}| jjdkrz|f}n|jd }	|	d u rt|d }	|	|f}tj|j|j|d	S ttjj| ||dd|S )
N)rb   rp   )rb   rp   float32rq   rG   rb   r&   )weights	minlengthr   r   r   indicesvaluesdense_shape)r   r@   r   r.   r   rb   appendr   rI   ry   rF   SparseTensorr   bincountr   r   r}   r~   math)
rZ   rz   r{   r   dtypes_to_resolver@   outputactual_lengthoutput_shape
batch_sizer   r   r   r      sP   



r   i   c                 C   sP   i }d}| D ]}|t jv r!||vrt jt| ||< ||| 7 }q||7 }q|S )N )stringascii_lettersr*   )
subscriptsmappingnormalized_subscriptscr   r   r   _normalize_einsum_subscripts   s   

r   c           	         s  t t|}t| } dd }dd }ttdd |D }t|dkr0|d d	kr0d	 d
}d
}n	tj| }| d }|| g|R  re|sed v rO|d u rOt	
  t  fdd|}|| g|R d|i}nd v rmt	
  t  fdd|}tj| g|R i |}t||S )Nc                 W   s  | dv rdS | dkr2|d j \}}}|d j \}}}||p|||f\}}	}
}d ||	|
|fv r0dS dS | dkr^|d j \}}}|d j \}}}||pJ|||f\}}	}
}d ||	|
|fv r\dS dS | dkr|d j \}}}|d j \}}}||pv|||f\}}	}
}d ||	|
|fv rdS dS | d	kr|d j \}}}}|d j \}}}||p||p||f\}}	}
}d ||	|
|fv rdS dS | d
kr|d j \}}}}|d j \}}}||p||p||f\}}	}
}d ||	|
|fv rdS dS | dkr|d j \}}}}|d j \}}}||p||p||f\}}	}
}d ||	|
|fv rdS dS | dkrS|d j \}}}}}|d j \}}}}|p7||||p=||f\}}	}
}}d ||	|
||fv rQdS dS | dkr|d j \}}}}}|d j \}}}}||pp|||pu||f\}}	}
}}d ||	|
||fv rdS dS dS )N)a,b->abab,b->a	ab,bc->ac	ab,cb->acabc,cd->abdabc,dc->abdabcd,abde->abceabcd,abed->abceabcd,acbe->adbeabcd,adbe->acbeabcd,aecd->acbeabcd,aecd->acebTabc,cde->abder   r   Fabc,dce->abdeabc,dec->abdeabcd,cde->abeabcd,ced->abeabcd,ecd->abeabcde,aebf->adbcfabcde,afce->acdbfr   )r   operandsr;   b1c1c2d2e2br   rA   ed1e1b2f2fr   r   r   is_valid_for_custom_ops   sv   
 
$
$z'einsum.<locals>.is_valid_for_custom_opsc                W   s  |d |d }}| dkr#t j|dd}t j|dd}t j|||dS | dkr=t j|dd}t j|||d}t j|ddS | dkrIt j|||dS | d	kr]t |ddg}t j|||dS | d
krit j|||dS | dkr|j\}}}|j\}	}
}||p}|	|
|f\}}}}t ||dg}t j|||d}t |d|||gS | dkrt |ddg}t j|||dS | dkr|j\}}}|j\}
}	}||p|	|
|f\}}}}t |g d}t ||dg}t j|||d}t |d|||gS | dkr1|j\}}}|j\}
}}	||p|	|
|f\}}}}t |g d}t ||dg}t j|||d}t |d|||gS | dkr>t j|||dS | dkrSt |g d}t j|||dS | dkrxt |g d}t |g d}t j|||d}t |g dS | dkrt |g d}t j|||d}t |g dS | dkrt |g d}t |g d}t j|||dS | dkrt |g d}t |g d}t j|||d}t |g dS | dkr|j\}}}}|j\}	}
}||p|	|p|
|f\}}}}t |d||| g}t |d|g}t j|||dS | dkrY|j\}}}}|j\}	}}
||p+|	|p/|
|f\}}}}t |d||| g}t |g d}t |d|g}t j|||dS | dkr|j\}}}}|j\}}	}
||pp|	|pt|
|f\}}}}t |d||| g}t |g d}t |d|g}t j|||dS | dkr|j\}}}}}|j\}}}}|p||||p||f\}}}}}t |d||| |g}t |g d}t j|||d}t |d||||g}t |g d S | d!krH|j\}}}}}|j\}}}	}||p|	||p||f\}}}}}t |g d"}t |d||| |g}t |g d}t j|||d}t |d||||gS t)#Nr   r   r   r&   r'   output_typer   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.   expand_dimsmatmulrM   r/   r   r0   NotImplementedError)r   r   r   rZ   yresultr;   r   r   r   r   r   r   r   rA   r   r   r   r   r   r   r   r   r   use_custom_opsL  s   







 
 
 
$
$zeinsum.<locals>.use_custom_opsc                 s   s    | ]}t |jV  qd S N)r   r@   r   rZ   r   r   r   r     s    zeinsum.<locals>.<genexpr>r   r   rj   rb   rG   c                       t |  S r   r.   r   re   compute_dtyper   r   <lambda>      zeinsum.<locals>.<lambda>r   c                    r   r   r   re   r   r   r   r     r   )r   map_structurer   r   listsetr*   r   rI   r   rV   r.   einsumr   )	r   r   kwargsr   r   r   result_dtyper   r   r   r   r   r      s4   Op
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@   )
rF   rG   rH   r   r   rI   rJ   rK   r.   subtractrt   r   r   r   r        

r   c                 C   s,  t | } t |}| j}|j}t| tj}t|tj}t| j}t|j}|dkrA|dkrA|sA|sA|jdkrA|jdkrAd}d}	|	}
nt	| j|jt
}t	| j|j}	d }
t| |} t||}dd }dd }dd	 }d
d }|st|rddlm} |||}|r|r|jdkr|| |}n9|| |||}n1|r|jn|j}|r|dkr|| |}n|dkrtj| |}n|dkr|| |}n|| |||}t||	}|| |S |jdkr|jdkrtj| ||
d}n)|jdkrtj| |dd}n|jdkrtj| |dgdggd}ntj| ||
d}t||	S )Nrj   r   rb   c                 S   s   t | tj}t |tj}|r|jd d n| jd d }t|}|g| jdd   }|r4tj| |nt| |}	|g|jdd   }
|rMtj||
nt||
}||	|}t |tjretj||S t||S )Nr%   )rF   r.   r   r   r   prodr   r0   )ar   r   fn_3da_sparseb_sparsebatch_shaper   	a3d_shapea_3d	b3d_shapeb_3d	result_3dr   r   r   with_combined_batch_dimensions
  s(    





z.matmul.<locals>.with_combined_batch_dimensionsc                 S   s^   | j j}t| j| j | j}t|j|j |j}t|||}t||}t	|j|j |jS r   )
r~   r@   r   "sparse_tensor_to_csr_sparse_matrixr}   r   sparse_matrix_sparse_mat_mul"csr_sparse_matrix_to_sparse_tensorr.   r   )r   r   r@   a_csrb_csr
result_csrresr   r   r   sparse_sparse_matmul"  s   z$matmul.<locals>.sparse_sparse_matmulc                 S   sH   t j| d\} }t j| j| jd d df | jd}t jj||| ddS )Nr   r   r|   sum)combiner)r.   r   fill_empty_rowsr   r}   r   rN   embedding_lookup_sparse)r   r   r;   idsr   r   r   $embedding_lookup_sparse_dense_matmul5  s   z4matmul.<locals>.embedding_lookup_sparse_dense_matmulc                 S   s   t jdd | |f| jdS )Nc                 S   s   t j| d | d S )Nr   r   )r.   r   sparse_dense_matmulre   r   r   r   r   H      z8matmul.<locals>.sparse_dense_matmul_3d.<locals>.<lambda>)elemsfn_output_signature)r.   map_fnr@   )r   r   r   r   r   sparse_dense_matmul_3dF  s
   z&matmul.<locals>.sparse_dense_matmul_3dr   )compute_matmul_output_shaper   r   r   r!   r%   )r   r   rF   r.   r   r   r@   r   r   rI   rH   r   keras.src.ops.operation_utilsr   r   r   	set_shaper   	tensordot)rQ   rR   x1_shapex2_shape	x1_sparse	x2_sparsex1_dtypex2_dtyper   r   r   r   r   r   r   r   r   r   sparse_rankr   r   r   r     st   







r   c                 C   r   r   )
rF   rG   rH   r   r   rI   rJ   rK   r.   multiplyrt   r   r   r   r   v  r   r   c              	      s"  t | tjr d u r tj| j|d}|tjt| j|jd S t	   s(| S t
| j}t|d fdd D      dgkr\tj| jd|d}|tj|d |jd S  d dkrtj| jddd}|tj|d |jd }tj| |dS |rtj| j dd}tj|dd |jdd  gdd	}t|| j|S t d krttj| jdd	tj| j d	|d gS  fd
dtD }ttj| j d	| jtj| j|dd	S t
| } t| j}	t| jd}
d|	v s|	dkr|
}n|	}tjt| |
 |d}t||S )N)keepdimsrT   r   c                       g | ]}t | qS r   r   r   r   )r   r   r   r#     r   zmean.<locals>.<listcomp>r   r   Tr   r'   c                    r   r   r   r   r'   r   r   r#     r$   ry   rG   bool)rF   r.   IndexedSlices
reduce_sumr~   r   reduce_prodr   r@   r
   r   r   sortreduce_meanr1   r}   r*   
scatter_ndr   r,   gatherr   r   rI   )rZ   r   r   r   r   axis_0_mean
new_valuesnew_dense_shapegather_indices	ori_dtyper   r   r   r   )r   r   r   mean  s\   
	
r  c                 C      t | } |d ur;t| jdkr,tj| ||d} tjt| dt|d} t| dS tj| ||d} tj| |S t	 rQt
| }tj|tjd|jddd t| jdkr`tj| ||dS tj| ||dS )Nr   r   rb   r   rT   z*Cannot compute the max of an empty tensor.message)r   r   r@   r.   
reduce_anyr   maximumr   
reduce_maxexecuting_eagerlysizeassert_greaterrW   rZ   r   r   initialsize_xr   r   r   max  $   r  c                 C      |pt  }tj| |dS NrT   )r   rV   r.   rX   r   r@   r   r   r   rX        rX   c                 C   r  r  r   rV   r.   zerosr  r   r   r   r    r  r  c                 C   s0   t | } t| j}d|v s|dkr| S t| S )Nuintr   )r   r   r@   r.   absrZ   r@   r   r   r   absolute  s
   

r#  c                 C      t | S r   )r#  re   r   r   r   r!       r!  c                 C      t | d} t j| ||dS Nr   r   )r.   r   
reduce_allrZ   r   r   r   r   r   all     r*  c                 C   F   t | } t| jdkrt }nt| jt}t	| |} tj
| S Nrp   )r   r   r@   r   rV   r   rI   rH   r.   r   r   angler"  r   r   r   r.    s   
r.  c                 C   r&  r'  )r.   r   r  r)  r   r   r   any  r+  r/  c                 C      t | ||dS Nr   )r  r)  r   r   r   amax     r2  c                 C   r0  r1  )minr)  r   r   r   amin   r3  r5  c                 C   sx   t | } t |}t| j|j}t| |} t||}|d u r3tjt| dgt|dggddS tj| |g|dS )Nr&   r   r'   )r   r   rI   r@   r.   r   r1   r0   )rQ   rR   r   r@   r   r   r   r   $  s   &r   c              	   C   s   |d u r(t | dt| t |dt|g}|d ur#|t |dt| tj| }t|}ztj| |||d}W |S  tjj	yS   tj| ||dd}t
||}Y |S w )Nr@   )deltar@   ry   )rJ   rK   r   r   rI   r   r.   r,   errorsNotFoundErrorr   )startstopstepr@   r   outr   r   r   arange0  s    
r=        ?c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   acosr"  r   r   r   arccosC     
r@  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   acoshr"  r   r   r   arccoshN  rA  rC  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   asinr"  r   r   r   arcsinY  rA  rE  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   asinhr"  r   r   r   arcsinhd  rA  rG  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   atanr"  r   r   r   arctano  rA  rI  c                 C   sH   t | } t |}t| j|jt}t| |} t||}tj| |S r   )	r   r   rI   r@   rH   r.   r   r   atan2rt   r   r   r   arctan2z  s   rK  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   atanhr"  r   r   r   arctanh  rA  rM  c                 C   sV   |d u rdd t t| jD }ntt| }t|D ]}d||< qt||}|S )Nc                 S   s   g | ]}d qS )r   r   )r   r;   r   r   r   r#         z_keepdims.<locals>.<listcomp>r   )	r,   r*   r   r   shape_opr   flattenr.   r0   )rZ   r   r   r   r   r   r   	_keepdims  s   
rQ  c                 C   s   t | } t| j}d|vs| jdkr1| }|d u rt| dg} tj| |dd}|r/t|||}|S t	|d}t
| |} tt| dt| }t|tt| jj | } | }|d u rdt| dg} tj| |dd}|rtt|||}|S )NrH   r   r&   rb   r   r   ry           )r   r   r@   ndimr.   r0   argmaxrQ  r   rI   r   logical_andequalsignbitrY   npfinfotiny)rZ   r   r   r@   _xr   is_negative_zeror   r   r   rU    s.   

rU  c                 C   s   ddl m} t| } t| j}d|vs| r| jdkr:| }|d u r(t| dg} tj| |dd}|r8t	|||}|S t
|d}t| |} tt| dt| }t|tt| jj | } | }|d u rmt| dg} tj| |dd}|r}t	|||}|S )	Nr   )uses_cpurH   r&   rb   rR  ry   rS  )keras.src.testing.test_caser^  r   r   r@   rT  r.   r0   argminrQ  r   rI   r   rV  rW  rX  rY   rY  rZ  r[  )rZ   r   r   r^  r@   r\  r   r]  r   r   r   r`    s0   

r`  r&   c                 C   sh   t | } t| jdkrt| d} | j}|jdkr tdgdS |d u r-t| dg} d}tj| |dS )Nr   rl   r   rb   r&   r'   )	r   r   r@   r.   r   r   r   r0   argsort)rZ   r   x_shaper   r   r   ra    s   
ra  c                 C   s   t | |dS r  r   r"  r   r   r   r        r   c                    s   t d u rtjt}t|tj d}|S t tjjt}t|t| fdd} fdd} d u rP| }|S tj	tj	kr_| }|S | }|S )Nr'   c                     s$   t j d} t j  d|  S )Nr'   )r.   r   )weights_sumr   rz   rZ   r   r   _rank_equal_case  s   z!average.<locals>._rank_equal_casec                     s.   t } t  gdgg}t ||  S Nr   )r.   r   r   r   )rd  r"   re  r   r   _rank_not_equal_case  s   
z%average.<locals>._rank_not_equal_case)
r   r   rI   r@   rH   r.   r   r  r*   r   )rZ   r   rz   r@   avgrf  rh  r   re  r   average  s(   rj  c                 C   F   t | } t |}t| j|j}t| |} t||}tj| |S r   )r   r   rI   r@   r.   r   bitwisebitwise_andrZ   r   r@   r   r   r   rm       rm  c                 C      t | } tj| S r   )r   r.   rl  invertre   r   r   r   bitwise_invert  s   rr  c                 C   r$  r   )rr  re   r   r   r   bitwise_not  r%  rs  c                 C   rk  r   )r   r   rI   r@   r.   r   rl  
bitwise_orrn  r   r   r   rt    ro  rt  c                 C   rk  r   )r   r   rI   r@   r.   r   rl  bitwise_xorrn  r   r   r   ru  #  ro  ru  c                 C   P   t | } t|ts!t |}t| j|j}t| |} t||}tj	| |S r   )
r   rF   rG   r   rI   r@   r.   r   rl  
left_shiftrn  r   r   r   bitwise_left_shift,     
rx  c                 C   
   t | |S r   )rx  rZ   r   r   r   r   rw  6     
rw  c                 C   rv  r   )
r   rF   rG   r   rI   r@   r.   r   rl  right_shiftrn  r   r   r   bitwise_right_shift:  ry  r~  c                 C   rz  r   )r~  r{  r   r   r   r}  D  r|  r}  c                 C   s~   t  }t| |} tj| |d}t| d |}d}dtdtj | |  }dtdtj | |  }|| | }|S )NrT   r   gzG?g      r   g{Gz?r   )r   rV   r.   r   r,   cosrY  pi)rZ   r@   r[   	n_minus_1term1term2term3r]   r   r   r   blackmanH  s   r  c                 C   s   t | |S r   )r.   broadcast_to)rZ   r   r   r   r   r  T  rc  r  c                 C   s\   t | } t| j}|dkrt| d} n|dvr t| t } t| tt	| d S )Nrp   rq   )bfloat16float16rq   gUUUUUU?)
r   r   r@   r.   r   r   rV   signpowr!  r"  r   r   r   cbrtX  s   
r  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   ceilr"  r   r   r   r  d  rA  r  c                 C   s,   t | j}|dkrt| d} t| ||S Nr   rb   )r   r@   r.   r   clip_by_value)rZ   x_minx_maxr@   r   r   r   clipo  s   
r  c                    s   t dd | D }|r!|t| krtjj|| dS dd | D } tt| } t	dd | D }t|dkrEt
j|  t fdd	| } tj| |d
S )Nc                 s   s    | ]	}t |tjV  qd S r   )rF   r.   r   r   r   r   r   r   w      zconcatenate.<locals>.<genexpr>)r   	sp_inputsc                 S   s(   g | ]}t |tjrt|d dn|qS )Fr   )rF   r.   r   r   r   r   r   r   r#   |  s    
zconcatenate.<locals>.<listcomp>c                 S   s   g | ]}|j qS r   rT   r   r   r   r   r#         r   c                    r   r   r   re   rT   r   r   r     r   zconcatenate.<locals>.<lambda>r'   )builtinsr   r*   r.   r   r1   r   r   r   r   r   rI   )xsr   sparse_count	dtype_setr   rT   r   concatenatev  s   
r  c                 C      t j| S r   r.   r   conjre   r   r   r   	conjugate     r  c                 C   r  r   r  re   r   r   r   r    r  r  c                 C      t | } t| S r   )r   r.   identityre   r   r   r   copy  s   
r  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   r  r"  r   r   r   r    rA  r  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   coshr"  r   r   r   r    rA  r  c                 C   s   t jj| |ddS )Nrb   )r   r@   )r.   r   count_nonzerorZ   r   r   r   r   r    s   r  c                    s:  t | } t |}t| j|j}t| |} t||}|d ur&|}|}| t| |d} t||d}dd }t| d }t|d }	|| |} |||	}t| }
t|
t|}
t	| |
} t	||
}tj
| |t|trt|	tr|dk|	dk@ rd S td S t|dk|	dk@ fdd fddS )	Nr&   c                    sN   dd  t |tr|dkr S S tt|d fddfddS )Nc              	   S   s>   t | t jt t | d dgdt ddggdgddS )Nr   r   rb   r   r'   )r.   padr1   r  r   rW   re   r   r   r   	pad_zeros  s   z1cross.<locals>.maybe_pad_zeros.<locals>.pad_zerosr   c                      s    S r   r   r   r  rZ   r   r   r         z0cross.<locals>.maybe_pad_zeros.<locals>.<lambda>c                          S r   r   r   re   r   r   r         )rF   rG   r.   condrW  )rZ   size_of_last_dimr   r  r   maybe_pad_zeros  s   
 zcross.<locals>.maybe_pad_zerosr   .r   c                      s    d S )Nr  r   r   )r   r   r   r     r  zcross.<locals>.<lambda>c                      s   t d S Nr&   )moveaxisr   axiscr   r   r   r     r   )r   r   rI   r@   r.   r   r  rO  broadcast_dynamic_shaper  linalgcrossrF   rG   r  )rQ   rR   axisaaxisbr  r   r@   r  x1_dimx2_dimr   r   r  r   r    s<   


r  c                 C   P   t | |d} t| jdkrt| d} |d u r t| dg} d}tjj| |dS NrT   r   rb   r&   r   r'   )r   r   r@   r.   r   r0   r   cumprodrZ   r   r@   r   r   r   r       r  c                 C   r  r  )r   r   r@   r.   r   r0   r   cumsumr  r   r   r   r     r  r  c                 C   sf   t | } | j}t|dv rt }nt|dv rd}t| |} tjtj	|d}| |tjd|d  S )Nr   rj   rk   rb   rl   rm   rn   ro   rq   rT   g     f@)
r   r@   r   r   rV   r.   r   rW   r   r  )rZ   r@   r  r   r   r   deg2rad  s   
	r  c                    sp   t tjdkr#tttd fdd fddS tjdkr0t dS tdj )	Nr   r   c                      s    t jt t gjdS r  )r.   r  r  r!  r@   r   r4   rZ   r   r   r   &  rB   zdiag.<locals>.<lambda>c                      s   t jj dS )Nr4   )r.   r  diagr   r  r   r   r   '  rN  r   )offsetz(`x` must be 1d or 2d. Received: x.shape=)	r   r*   r   r.   r  rW  r  diagonalr)   rZ   r4   r   r  r   r  !  s   r  c                 C   s   t | } tt| dg|S r  )r   r  r.   r0   r  r   r   r   diagflat/  s   r  c              
      s  t j}|dkr%||d ks|dkr%||d ks|dkr%tjS t||fdtfdd td trXtd trX|dd  ksT|d krW  n!t	t
t|dd  t|d  fd	d
fdd
tjj|dS )Nr   r   r%   r   r&   r%   r&   c                      s&   t jt d d dggd jdS )Nr&   r   rT   )r.   r  r1   r@   r   )rZ   rb  r   r   _zerosA  s   &zdiagonal.<locals>._zerosc                      s     S r   r   r   )r  r   r   r   M  s    zdiagonal.<locals>.<lambda>c                      r  r   r   r   re   r   r   r   N  r  r  )r   rT  r.   r  	diag_partr  rO  rF   rG   r  
logical_or
less_equalgreater_equal)rZ   r  axis1axis2x_rankr   )r  rZ   rb  r   r  4  s,   

r  c                 C   s   t | } |dkr
| S |dk rtd| | jdkr!td|  t|| j}td g| j }td g| j }tdd ||< td d||< t|}t|}t|D ]}t| jdkret	
| | | | } qQt	| | | | } qQ| S )Nr   z+Order `n` must be non-negative. Received n=zD`diff` requires input that is at least one dimensional. Received: a=r   r&   r   )r   r)   rT  r	   slicer+   r,   r   r@   r.   	not_equalr   )r   r[   r   slice1slice2slice1_tupleslice2_tupler;   r   r   r   diffS  s.   
r  c                    s   t | } t  tdd   t| j}|dv rt| d} n|dkr)t| d} n	|dv r2t| d} t| tj	rCtj
 fd	d| S t| tjrhtjt| jtjj| j d
t| jd}|| j |S tjj|  d
S )Nc                 S   r$  r   )rH   re   r   r   r   r   r  r  zdigitize.<locals>.<lambda>)r   rj   rk   rl   rm   rb   rn   rp   )r  r  ry   c                    s   t jj|  dS )Ninput
boundaries)r.   raw_ops	Bucketize)r   binsr   r   r     rN  r  r|   )r   r   r   r   r   r@   r   rF   r.   RaggedTensorraggedmap_flat_valuesr   r  r}   r  r  r~   r   r   r   )rZ   r  r
  r   r   r  r   digitizem  s.   



r  c                 C   s   t | } t |}t| j|j}t|t}t| |} t||}| j}|j}|jdks2|jdkr7| | }n|jdkrItj	| |dgdggd}ntj	| |dgdggd}t||S )Nr   r   r&   r!   r%   )
r   r   rI   r@   rH   r.   r   r   r   r   )rQ   rR   r   r   rb  y_shaper   r   r   r   dot  s   

r  c                 C   r  r  r  r  r   r   r   empty  r  r  c                 C   D   t | } t |}t| j|j}t| |} t||}t| |S r   )r   r   rI   r@   r.   r   rW  rt   r   r   r   rW       rW  c                 C   s<   t | } t| j}d|v s|dkrt| t } t| S NrG   r   )r   r   r@   r.   r   r   rV   exprZ   r
  r   r   r   r    s
   

r  c                 C   s@   t | } t| j}d|v s|dkrt| t } tjd| S )NrG   r   rU   )	r   r   r@   r.   r   r   rV   r   r  r  r   r   r   exp2  s
   
r  c                    s   t | } t|}t| jt|  t fdd|D }t| tjrAddlm	} || j|}|D ]	}tj
| |} q0| | | S |D ]}t| |} qC| S )Nc                    r   r   r   r   out_ndimr   r   r#     r   zexpand_dims.<locals>.<listcomp>r   ) compute_expand_dims_output_shape)r   r
   r*   r   sortedrF   r.   r   r   r  r   r   r   )rZ   r   r  r   r   r   r  r   r     s   
r   c                 C   s>   t | } t| j}d|v s|dkrt| t } tj| S r  )	r   r   r@   r.   r   r   rV   r   expm1r  r   r   r   r    s
   
r  c                 C   s6   t | } |d u rt| tt| S t| |gS r   )r   r.   r2   r,   r   r  r   r   r   flip  s   r  c                 C   sB   t | } t| jdkrt nt| jt}t	| |} t
| S r-  )r   r   r@   r   rV   r   rI   rH   r.   r   floorr"  r   r   r   r    s   
r  c                 C   s"   |pt  }t||}t|| S r   )r   rV   r   r.   r  )r   
fill_valuer@   r   r   r   full  s   
r  c                 C   s4   t | } t|p
| j}t ||}t|t| S r   )r   r   rI   r@   r.   r  r   )rZ   r  r@   r   r   r   	full_like  s   
r  c                 C   r  r   )r   r   rI   r@   r.   r   greaterrt   r   r   r   r    r  r  c                 C   r  r   )r   r   rI   r@   r.   r   r  rt   r   r   r   r    r  r  c                    sj   t dd | D }t|dkrtj|  t fdd| } t| d jdkr.tj| ddS tj| ddS )Nc                 S      g | ]
}t |d t|qS rT   rJ   rK   r   r   r   r   r#         zhstack.<locals>.<listcomp>r   c                    
   t |  S r   r   re   rT   r   r   r        
 zhstack.<locals>.<lambda>r   r'   )	r   r*   r   rI   r   r   r   r.   r1   r  r  r   rT   r   hstack  s   
r  c                 C   s   t | | |dS )N)NMr@   )eye)r[   r@   r   r   r   r    r3  r  c                 C   r  r   )r.   r   imagre   r   r   r   r    r  r  h㈵>:0yE>c                 C   s   t | } t |}t| j|j}t| |} t||}d|v r>t| | ||t|  k}|r<|t| t|@ B }|S t| |S )NrH   )	r   r   rI   r@   r.   r   r!  r   rW  )rQ   rR   rtolatol	equal_nanr@   r   r   r   r   isclose#  s    r  Tc                 C   <   t | } t| j}|js|jst| jtjS tj	
| S r   )r   r.   as_dtyper@   
is_integer
is_numericrX   r   r   r   	is_finiterZ   dtype_as_dtyper   r   r   isfinite2  s
   r  c                 C   r	  r   )r   r.   r
  r@   r  r  r  r   r   r   is_infr  r   r   r   isinf;  
   r  c                 C   r	  r   )r   r.   r
  r@   r  r  r  r   r   r   r   r  r   r   r   isnanC  r  r  c                 C   r  r   )r   r   rI   r@   r.   r   lessrt   r   r   r   r  K  r  r  c                 C   r  r   )r   r   rI   r@   r.   r   r  rt   r   r   r   r  T  r  r  2   c                 C   sN  |dk rt d| |d u r&t| dt| t|dt|tg}tj| }nt|}t| |d} t||d}ttj	}|rWt
j| |||d}	|dkrV||  t
||d  }n5|dkre||  t
|| }|dkrt
||j| }
t
| |
j} t
j| |
||d}	n	t
j| |||d}	|d urd|v rt
|	}	t
|	|}	|r|	|fS |	S )Nr   z4`num` must be a non-negative integer. Received: num=r@   rT   r'   r   rG   )r)   rJ   rK   rH   r   rI   r   r   rY  nanr.   linspacer   r@   r  )r9  r:  numendpointretstepr@   r   r   r;  r   new_stopr   r   r   r  ]  sB   

r  c                 C   D   t | } t| jdkrt nt| jt}t	| |} tj
| S r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   logr"  r   r   r   r       r  c                 C   Z   t | } t| jdkrt nt| jt}t	| |} tj
| tj
td| j S )Nrp   
   r   r   r@   r   rV   r   rI   rH   r.   r   r   r  rW   r"  r   r   r   log10     "r#  c                 C   r  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   log1pr"  r   r   r   r%    r  r%  c                 C   r   )Nrp   r   r"  r"  r   r   r   log2  r$  r&  c                 C   s   t | } t |}t| j|jt}t| |} t||}| | }ttj	|| | t
| |tjtjt|  S r   )r   r   rI   r@   rH   r.   r   rY   r   r   r  r%  r  r!  )rQ   rR   r@   r6  r   r   r   	logaddexp  s   
&r'  c                 C   $   t | d} t |d}t | |S Nr   )r.   r   rV  rQ   rR   r   r   r   rV       rV  c                 C   s   t | d} t | S r)  )r.   r   logical_notre   r   r   r   r,    s   
r,  c                 C   r(  r)  )r.   r   r  r*  r   r   r   r    r+  r  r!  c                 C   s*   t | |||||d}tt||j|S )N)r9  r:  r  r  r@   r   )r  r.   r  r   r@   )r9  r:  r  r  baser@   r   r   r   r   r   logspace  s   r.  )densify_mixedc                 C   r   r   )
rF   rG   rH   r   r   rI   rJ   rK   r.   r  rt   r   r   r   r    r   r  c                 C   s   t | d||dS )Nr>  r   )quantiler)  r   r   r   median     r1  xyindexingc                 G   s   t j|d| iS )Nr5  )r.   meshgrid)r5  rZ   r   r   r   r6    r2  r6  c                 C   r  )Nr   r   rb   r   rT   z*Cannot compute the min of an empty tensor.r  )r   r   r@   r.   r(  r   minimumr   
reduce_minr  r  r  rW   r  r   r   r   r4    r  r4  c                 C   r   r   )
rF   rG   rH   r   r   rI   rJ   rK   r.   r7  rt   r   r   r   r7    r   r7  c                 C   sR   t | } t |}t| j|j}|dkrd}t| |} t||}tj| |S r  )r   r   rI   r@   r.   r   r   modrt   r   r   r   r9  '  s   r9  c                    s   t t| t|}tfdd D  tfdd|D }t t|kr4td| d|  |kr:S  fddtjD }tt| D ]
\}}|	|| qMt
|S )Nc                 3       | ]	}t | jV  qd S r   r	   rT  r   re   r   r   r   7  r  zmoveaxis.<locals>.<genexpr>c                 3   r:  r   r;  r   re   r   r   r   8  r  zDInconsistent number of `source` and `destination`. Received: source=z, destination=c                    r   r   r   r   )_sourcer   r   r#   A  r$   zmoveaxis.<locals>.<listcomp>)r   r
   r+   r*   r)   r,   rT  r  zipinsertr.   r/   )rZ   sourcedestination_destinationr5   destsrcr   )r<  rZ   r   r  2  s&   r  rS  c                 C   s   t | } | j}t|}|js|js| S ttj| t	||| } |d u r*|j
}ttj| | dk@ t	||| } |d u rD|j}ttj| | dk @ t	||| } | S rg  )r   r@   r.   r
  r  r  rY   r   r   rW   r  r  r4  )rZ   r  posinfneginfr@   r  r   r   r   
nan_to_numG  s   
&&rF  c                 C   s   t | } | jS r   )r   rT  re   r   r   r   rT  _  s   rT  c                 C   s:   t | } tjtt| d| jjdd}tdd |S )Nr   r   r'   c                 S   s   t | dS )Nrb   r   )r}   r   r   r   r   g  r   znonzero.<locals>.<lambda>)	r   r.   unstackrY   r   r   r   r   r   )rZ   r   r   r   r   nonzerod  s   "rH  c                 C   r  r   )r   r   rI   r@   r.   r   r  rt   r   r   r   r  j  r  r  c                 C      t j| |dS r  )r.   rs   r"  r   r   r   rs   s  r3  rs   c                 C   rI  r  )r.   rr   r"  r   r   r   rr   w  r3  rr   c                 C   sV   t | } t |}t| j|j}t| |} t||}t| ddgt|dg S )Nr&   r   )r   r   rI   r@   r.   r   r0   rt   r   r   r   outer{  s   rJ  rW   c                 C   sV   t | } i }|d ur|dkrtd| ||d< t |d}tj| || fi |S )NrW   zZArgument `constant_values` can only be provided when `mode == 'constant'`. Received: mode=constant_valuesrb   )r   r)   r.   r  upper)rZ   	pad_widthmoderK  r   r   r   r   r    s   
r  c                 C   s`   t | } |d u r(t| j}|dkrd}n|dv rd}n|dv r"d}t| |} tj| ||dS )Nr   rb   )rj   rk   rl   rm   rn   r   )r   r   rI   r@   r.   r   r  rZ   r   r   r@   r   r   r   r     s   r   linearc                    s  t d|d u rt | dgnjt| jfdd|D }ttt|}|t	| }t j
| |d}d | jvr]t	| jfdd|D }tfdd|D g}	||	 }
nt t | t |t j}t j|dggdd	}
t j||
d
t jddd}t t d d  fdd}|dv rt j|||dd	}ng|dkrdt j||ddd	t j||ddd	  }nL|dkr|d} d  }t |d d}t |d t d d }t |t j| }t |j}t j||dd	d|  t j||dd	|  }| jt jt jt jt jfv rOt jt j| |d	}t jt |dt ggdd}t j||d
}t jtd| jd}t |||}|r|d u rrt jt | t  gdd}|t j||jd9 }nt|D ]
}t j ||d	}qvt !t }t "|jj}|dk r|S t#t$d|t%&||  }|dkr|S t'(t|}|)| t j
||dS )Nrq   r&   c                    r   r   r   r   )x_ndimsr   r   r#     r   z_quantile.<locals>.<listcomp>)r   r5   c                       g | ]} | qS r   r   r   rb  r   r   r#         c                    rS  r   r   r   rT  r   r   r#     rU  r   r'   r   	ASCENDING)r   	directionc                    sz   | dkrt j d  }n| dkrt j d  }n| dkr+t  d  }t t |ddt d d S )z1Get values of y at the indices implied by method.lowerr   highernearestrb   r   r&   )r.   r   r  r  roundr  r   r   )methodr}   )rA   qr   r   r   _get_indices  s   z_quantile.<locals>._get_indices)rZ  rX  rY  midpointr>  rX  rY  rQ  r   )paddingsrK  NaNrT   rb   r  r   )*r.   r   r0   r*   r   r  r   r,   
differencer   r/   r   r   r  rp   r1   r  r  r7  rq   r@   r  r  ry   r  r   r  r   rW   rH   rY   rX   r   get_static_valueTensorShaperG   copysignr  r!  collectionsdequerotate)rZ   r]  r   r\  r   
other_dimsr5   x_permedother_shape	end_shape
full_shapesorted_yr^  
gathered_ylarger_y_idx	exact_idxsmaller_y_idxfractionnan_batch_membersright_rank_matched_shape	nan_valueones_vecr    shift_value_staticndimsr   )rA   r]  rR  rb  r   r   	_quantile  s   





 



rz  c                 C   sD   t | } t |}t|}t| jt}t| |} t| ||||dS )N)r   r\  r   )	r   r
   r   rI   r@   rH   r.   r   rz  )rZ   r]  r   r\  r   r   r   r   r   r0    s   r0  c                 C   s   t | } t| dgS r  )r   r.   r0   re   r   r   r   ravel  s   r{  c              	   C   s   t | } | j}d |v rtd| | jdkr6g }t|D ]}|t | | | | | } qtt|S | j	}g }|D ]}|t 
t | | || | | } q=tt|S )Nz8`shape` argument cannot contain `None`. Received: shape=r   )r.   r   r@   r)   rT  reversedr   r   r+   r   r0   )r}   r   input_dtypecoordsdimindices_shaper   r   r   unravel_index  s(   



r  c                 C   rp  r   )r   r.   r   realre   r   r   r   r  6     r  c                 C   rp  r   )r   r.   r   
reciprocalre   r   r   r   r  <  r  r  c                 C   sJ   t | } t| jdkrt| d} ttj| ||ddS tj| ||dS )Nrm   rn   r'   )r   r   r@   r.   r   repeat)rZ   repeatsr   r   r   r   r  B  s
   r  c                 C   sV   t | } t| tjr%ddlm} || j|d}tj| |}|	| |S t| |S )Nr   )compute_reshape_output_shapenewshape)
r   rF   r.   r   r   r  r   r   r0   r   )rZ   r  r  r   r   r   r   r   r0   K  s   
r0   c                 C   sN   t | } |d urtj| ||dS t| }tt| dg|d} t| |S )N)shiftr   r&   r   )r   r.   rollr   r0   )rZ   r  r   original_shaper   r   r   r  Y  s   
r  leftc                 C   sL   t | dkrtd| j t| ttjjkrdnd}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=rb   rp   )sideout_type)
rT  r)   r   r*   rY  iinforb   r  r.   searchsorted)sorted_sequencer~   r  r  r   r   r   r  d  s   r  c                 C   sB   t | } t| j}|dv rt| d} tt| |S t| S )N)rl   rm   rn   rb   )r   r   r@   r.   r   r  r  r   r   r   r  t  s   

r  c              	   C   sv   t | } t| j}|dkrtt| dS d|v r| dk S t| d} ttj	t
| tjtjtjjtjddS )Nr   FrG   r   ry   rT   )r   r   r@   r.   fillr   r   r  rl  rm  bitcastrb   rW   r4  r  r   r   r   rX    s   

rX  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   sinr"  r   r   r   r    rA  r  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   sinhr"  r   r   r   r    rA  r  c                 C   r  r   )r   r.   r  re   r   r   r   r    s   
r  c                 C   sJ   t | } t| j}|dkrt| d} ttj| |d|S tj| |dS )Nr   rj   r'   )r   r   r@   r.   r   r  )rZ   r   r
  r   r   r   r    s   
r  c                 C   sf   t |ts)| j| }t|}|dd }||dd   }tj|t||gdd}n|}tj| ||dS )Nr   r   r&   r'   )rF   rG   r   r   r.   r1   r  split)rZ   indices_or_sectionsr   
total_size
start_sizeend_sizenum_or_size_splitsr   r   r   r    s   

r  c                    sJ   t dd | D }t|dkrtj|  t fdd| } tj| |dS )Nc                 S   r  rT   r  r   r   r   r   r#     r  zstack.<locals>.<listcomp>r   c                    r  r   r   )r   rT   r   r   r     r  zstack.<locals>.<lambda>r'   )r   r*   r   rI   r   r   r.   stack)rZ   r   r  r   rT   r   r    
   
r  c                 C   sD   t | } t| j}d|v s|dkrt| t } tjj| ||dS )NrG   r   r   )	r   r   r@   r.   r   r   rV   r   
reduce_std)rZ   r   r   r
  r   r   r   std  s
   
r  c                 C   s   t | } | jjd ur6t|tr6t|tr6t|| j}t|| j}||kr&| S tt| j}|||< |||< n1t	| }t	
|dk t	|||}t	
|dk t	|||}t	|}t	||g|gg||g}t	| |S rg  )r   r   r   rF   rG   r	   rT  r   r,   r.   rY   rP   tensor_scatter_nd_updater/   )rZ   r  r  r5   r  r   r   r   swapaxes  s*   


r  c                    sV  t  d u rtdd  fdd}t|tjr|jtjtjtjtj	fvr;t
dj d t |dd}nb dkrOt
d	  d t |dd}nNt|||j}tjjt tjj|d
ddd}||j|jt|jd    |S t|tjr|||j} dkrtj|S tj| dS |t |}tj| dS )Nr&   r   c              	      s*   t | dk | t t   | j | S rg  )r.   rY   r   r   r@   )r    r   rZ   r   r   fix_negative_indices  s   *z"take.<locals>.fix_negative_indicesz=`take` with the TensorFlow backend does not support `x.dtype=z:` when `indices` is a sparse tensor; densifying `indices`.Fr   z:`take` with the TensorFlow backend does not support `axis=r&   r'   )embedding_weights
sparse_ids
default_id)r   r.   r0   rF   r   r@   r  ry   rq   r  warningswarnr   sparse_with_valuesr~   rN   safe_embedding_lookup_sparser   r   r   r*   r  with_valuesembedding_lookupr  )rZ   r}   r   r  r   r   r  r   take  sJ   
 r  c                    s  ddl m} t| } t|d}|d u r+|jdkr td|j tt| dg|dS |	| j|j|}| j}|}|dk rA|| n|}||krQtd| d| t
| t
| t| j}t|j}d||< d||< |||}	d |	v r fd	d
t|	D }	t|	}
| |
|< t|	} | ||< t| |
} t||}t|dk |tj|
| |jd |}t| |d} t||d}t| }
t| d|
d g} t|}t|d|d g}tj| |dd}t||}t||d}|| |S )Nr   )operation_utilsrp   r   z;`indices` must be 1D if axis=None. Received: indices.shape=r&   zInvalid axis: z for input rank: c                    s0   g | ]\}}|d u rt |  | n|qS r   )r.   r  )r   r    r  indices_original_shapex_original_shaper   r   r#   S	  s    z#take_along_axis.<locals>.<listcomp>rT   )
batch_dims)keras.src.opsr  r   rT  r)   r   take_along_axisr.   r0   $compute_take_along_axis_output_shaperO  r   broadcast_shapesr3   r  rY   r   r@   r  r  r   )rZ   r}   r   r  static_output_shaper   static_axisx_static_shapeindices_static_shapebroadcast_shaperb  r  r   r   r  r   r  '	  sl   







r  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   tanr"  r   r   r   r  w	  rA  r  c                 C   r,  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   tanhr"  r   r   r   r  	  rA  r  r   c                 C   s^   t | } t |}t| j|j}t|t}t| |} t||}tjtj| ||d|dS )Nr!   rT   )r   r   rI   r@   rH   r.   r   r   )rQ   rR   r"   r   r   r   r   r   r   	  s   r   c                 C   s   |dkr	t | S | j}t |jr-|dkr| S t td|t	 }t | t	 } nt td|| j}t 
| |} t | } t | |} t | |S )Nr   r!  )r.   r[  r@   r
  r  r   r   r  r   rV   r   divide)rZ   decimalsx_dtypefactorr   r   r   r[  	  s   

r[  c                 C   s   t | } tt |dddg}t|}tj|t| jj| ddggdd}tjt| t|| jj ddggdd}t| |} t| |S )Nrb   rT   r&   r   r   )rK  )	r   r.   r0   r  r  r  r   r   tile)rZ   r  repeats_sizerb  r   r   r   r  	  s   
r  c                 C   s   t | } t| j}|dvrt|d}t| }t| ||fd} tt	|| || |dd| t
| } t| jdkrAt| d} ttj| dd|S )N)rp   rn   uint64rb   r  r   )r4   r@   r'   )r   r   r@   r   rI   r.   r   r  rY   r  rr   r   r   )rZ   r  r  r  r@   rb  r   r   r   trace	  s   

r  c                 C   s   |d ur|n| }t |pt }|dk rC| d }|| kr(tj| |g|d}|S tj| |gdd}tjttj	||d|d}|S tj| |g|d}||krT|}|S tj	|d|}|S )Nr   r   rT   r   r&   )
r   r   rV   r.   r  rX   r   r,  r  	band_part)r  r   r4   r@   rX  ror   r   r   tri	  s$   
	r  c                    s^   t  fdd}t tr dkrtjd S | S tt d fdd|S )Nc                     sd   t } | d | d }}t jt |t |dd\}}||  k}t t || t S Nr%   r&   ijr4  r.   r   r6  r,   rY   r  rr   r   rowscolsr    jmaskr  r   r   _negative_k_branch	  
   
 z tril.<locals>._negative_k_branchr   r&   c                      s   t jd S r  r.   r  r  r   r  r   r   r   	  rN  ztril.<locals>.<lambda>)r   rF   rG   r.   r  r  r  r  )rZ   r4   r  r   r  r   tril	  s   

r  c                    s`   t  fdd}t tr  dkrtj  dS | S tt d fdd|S )Nc                     sd   t } | d | d }}t jt |t |dd\}}||  k}t t || t S r  r  r  r  r   r   _positive_k_branch
  r  z triu.<locals>._positive_k_branchr   r&   c                      s   t j  dS r  r  r   r  r   r   r   
  r  ztriu.<locals>.<lambda>)r   rF   rG   r.   r  r  r  r  )rZ   r4   r  r   r  r   triu	  s   

r  c                 C   sH   t | } t| j}|dksd|v r| S t| dk tj| tj| S )Nr   rG   r   )r   r   r@   r.   rY   r   r  r  r"  r   r   r   trunc
  s
   
"r  c                 C   sr   t | } t |}t| j|j}t|t}t| |} t||}t| dg} t|dg}tt| ||S r  )	r   r   rI   r@   rH   r.   r   r0   r  )rQ   rR   r   r   r   r   r   vdot
  s   r  c              
      s   t   t t jj}t|t}t | t|ttj	tj
t dtj
td fdd fdd}t||S )Nr   c                      s     S r   r   r   r*  r   r   r   5
  r  zinner.<locals>.<lambda>c                      s   t j dgdggdS )Nr&   r!   )r.   r   r   r*  r   r   r   6
  r$   )r   r   rI   r@   rH   r.   r   r  r   r  rW  r   )rQ   rR   r   r   rZ   r   r*  r   inner)
  s   r  c                    sJ   t dd | D }t|dkrtj|  t fdd| } tj| ddS )Nc                 S   r  rT   r  r   r   r   r   r#   <
  r  zvstack.<locals>.<listcomp>r   c                    r  r   r   re   rT   r   r   r   ?
  r  zvstack.<locals>.<lambda>r   r'   )r   r*   r   rI   r   r   r.   r1   r  r   rT   r   vstack;
  r  r  c                    s*   |dkrt dt  fdd}|S )Nr   z=Not supported with `vectorize()` with the TensorFlow backend.c                    s   t  | S r   )r.   vectorized_mapre   fnr   r   wrappedI
  r  z_vmap_fn.<locals>.wrapped)r)   	functoolswraps)r  in_axesr  r   r  r   _vmap_fnC
  s   r  excluded	signaturec                C   s   t | t||dS )Nr  )r   r  )pyfuncr  r  r   r   r   	vectorizeP
  s   r  c                 C   s   t | d} |d urG|d urGt|ttfst|}t|ttfs$t|}tt|dt	|t|dt	|}t||}t||}t 
| ||S |d u rS|d u rSt| S td)Nr   r@   zN`x1` and `x2` either both should be `None` or both should have non-None value.)r.   r   rF   rG   rH   r   r   rI   rJ   rK   rY   rH  r)   )	conditionrQ   rR   r@   r   r   r   rY   V
  s$   

rY   c                 C   sr   t | ttfst| } t |ttfst|}tt| dt| t|dt|t}t| |} t||}t	| |S r   )
rF   rG   rH   r   r   rI   rJ   rK   r.   r  rt   r   r   r   r  l
  s   

r  c                 C   st   t | ttfst| } t |ttfst|}tt| dt| t|dt|t}t| |} t||}tj	
| |S r   )rF   rG   rH   r   r   rI   rJ   rK   r.   r   divide_no_nanrt   r   r   r   r  |
  s   

r  c                 C   rz  r   )r  r*  r   r   r   true_divide
  r|  r  c                 C   s   t | ttfst| } t |ttfst|}tt| dt| t|dt|}d|v r@t| d} t|d}t	t
| ||S t| |} t||}t
| |S )Nr@   r   rb   )rF   rG   rH   r   r   rI   rJ   rK   r.   r   r  rt   r   r   r   power
  s   



r  c                 C   s
   t | S r   )r.   negativere   r   r   r   r  
  s   
r  c                 C   s,   t | } t| jdkrt| d} t| S r  )r   r   r@   r.   r   squarere   r   r   r   r  
  s   
r  c                 C   r  r-  )r   r   r@   r   rV   r   rI   rH   r.   r   r   sqrtr"  r   r   r   r  
  r  r  c           	         s   t | } t|}| j  |d ur/|D ]} | dkr#td| dqt fdd|D }t| tjryt| }g }g }t	 D ]#\}}|d u rO|dksen||v se|
|d ur[|n||  |
| qBtj| j|dd}t|| jt|S tj| |dS )Nr   zCannot squeeze axis=z!, because the dimension is not 1.c                    s   g | ]	}t |t qS r   )r	   r*   r   static_shaper   r   r#   
  s    zsqueeze.<locals>.<listcomp>r'   )r   r
   r   rL   r)   r  rF   r.   r   r3   r   r  r}   r~   r+   rM   )	rZ   r   r   dynamic_shape	new_shaper	  r    r  new_indicesr   r  r   rM   
  s.   



rM   c                 C   sL   t | tjrddlm} tjj| |d}||| j| |S tj| |dS )Nr   )compute_transpose_output_shape)r5   )	rF   r.   r   r   r  r   r/   r   r   )rZ   r"   r  r   r   r   r   r/   
  s   r/   c                 C   sJ   t | } t| jd}t| jt}t| |} ttjj| ||d|S )Nry   r   )	r   r   rI   r@   rH   r.   r   r   reduce_variance)rZ   r   r   r   r   r   r   r   var
  s   r  c                 C   sf   t | } t| j}|dv rd}n|dv rd}t| |} t| tjr+tjj| ||ddS tj| ||dS )N)r   rj   rk   rb   rO  rn   T)r   r   output_is_sparser   )	r   r   r@   r   rF   r.   r   r   r   rP  r   r   r   r   
  s   

r   c                 C   s   |pt  }|d u r| n|}t|tr|dkrtj| ||dS tjtjt|| | | |dt| dt| | | dft|dt||  | dffdS )Nr   rT   r`  )	r   rV   rF   rG   r.   r  r  r7  r  )r  r   r4   r@   r   r   r   r  
  s    r  c                 C   sr   t | ttfst| } t |ttfst|}tt| dt| t|dt|}t| |} t||}tj	
| |S r   )rF   rG   rH   r   r   rI   rJ   rK   r.   r   floordivrt   r   r   r   floor_divide  s   

r  c                 C   s&   t | d} t |d}t j| |S r)  )r.   r   r   logical_xorr*  r   r   r   r    s   r  c                 C   s  | j }|dv rt }t| |} t| dkr"tjtdt dS tj| ddd}| | }t	t
| d | j }tj||dd|d	  }tj|}ttj|}tj||dd
}t	||j }|| }	ttj|	dd}
|	j jrttj|	dd}t|
|S |
S )Nr  r   r  rT   r&   Tr   )	adjoint_br   r!   g      g      ?)r@   r   rV   r   r.   r   rW   rH   r  r   r   r   r  r  r  r   r  r   r  
is_complexr  complex)rZ   r@   r  
x_centerednum_samples
cov_matrixr  stddev	outer_stdcorrelationcorrelation_clippedimag_clippedr   r   r   corrcoef  s,   
r	  validc           	      C   s  t | } t |}tt| dt| t|dt|}|tjkr#tj}n|tjtj	tjfvr0tj
}t| |} t||}t| jd t|jd }}|dkr|| d }|| d }|| d }tj| tj|tj|ggd} tj|tj|tj|ggd}t| d|df} t||ddf}ttjj| |dddS t| d|df} t||ddf}ttjj| |d| dS )	Nr@   r   r  r   r   r  SAME)stridepadding)r   r   rI   rJ   rK   r.   rp   rq   r  r  ry   r   rG   r   r  r   r  r  r0   rM   rN   conv1drL  )	rQ   rR   rN  r@   x1_lenx2_lenfull_lenx1_padx2_padr   r   r   	correlate;  s:   
r  c                 C   s   t jjj| ||dS )N)default)r.   experimentalnumpyselect)condlist
choicelistr  r   r   r   r  e  s   r  c                 C   s   t | } ttj| S r   )r   r+   r.   r  slogdetre   r   r   r   r  i  s   r  c                 C   s   t | tj} t| |d} tj|  |d j}t| d }tjtj	||tjddd}t
|}ttjt|d tjd}t| ||}tj|t| d | d j}	tj||	g| jd d}
t|
d|S )Nr&   r   rT   r   r'   )r   r.   rb   r  r   top_kr}   r   r   one_hotrY   rM   r  r  r1   rT  )rZ   kthr   
bottom_indr[   r  r}   updates
final_masktop_indr<  r   r   r   argpartitionn  s   
 "r#  c           	      C   s   t j| | jd} |du rt | }t | }n|\}}t | | |k| |k@ } t |||d }|  }t j	j
| |dd d}t jj|||| jd}||fS )zComputes a histogram of the data tensor `x`.

    Note: the `tf.histogram_fixed_width()` and
    `tf.histogram_fixed_width_bins()` functions
    yield slight numerical differences for some edge cases.
    rT   Nr   r&   r  )r{   	maxlengthr@   )r.   r   r@   r8  r  boolean_maskr  r  tolistr  r  r   r   )	rZ   r  r,   min_valmax_val	bin_edgesbin_edges_listbin_indices
bin_countsr   r   r   	histogram  s   

r-  )r   r   )Nr   F)NF)NFNr   )Nr   Nr  )NN)r   )r&   r&   r&   N)r   r   r   )r   r&   )r  r  F)r  TFNr   )r  Tr!  Nr   )rS  NN)rW   N)NrQ  F)r  )r   )Nr   N)r
  )r!  N)r  rf  r  r   r   r  r  rY  
tensorflowr.   #tensorflow.python.ops.linalg.sparser   tensorflow.python.ops.math_opsr   	keras.srcr   keras.src.backendr   r   keras.src.backend.commonr   &keras.src.backend.common.backend_utilsr	   r
   r   keras.src.backend.tensorflowr   !keras.src.backend.tensorflow.corer   r   r   rO  r?   elementwise_binary_unionrP   r^   rf   ri   ru   rx   r   	lru_cacher   r   sparse_subtractr   r   elementwise_binary_intersectionr   r  r  rX   r  elementwise_unaryr#  r!  r*  r.  r/  r2  r5  r   r=  densifying_unaryr  r@  r  rC  rE  rG  rI  rK  rM  rQ  rU  r`  ra  r   rj  rm  rr  rs  rt  ru  rx  rw  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  rW  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  infr  r#  r%  r&  r'  rV  r,  r  r.  r  r1  r6  r4  r7  r9  r  rF  rT  rH  r  rs   rr   rJ  r  r   rz  r0  r{  r  r  r  r  r0   r  r  r  rX  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  rY   elementwise_divisionr  r  r  r  r  r  r  rM   r/   r  r   r  r  r  r	  r  r  r  r#  r-  r   r   r   r   <module>   s   E
&2
 
e
 
M
	











	

 			










? 	



		


	
+





		l	
	



0P


 *