o
    bi                    @   sl
  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ZNddcddZOdedf ZPdgdh ZQdidj ZRdkdl ZSdmdn ZTdodp ZUdqdr ZVdsdt ZWdudv ZXdwdx ZYdydz ZZd{d| Z[ej5d}d~ Z\dd Z]dddZ^ej5dd Z_ej5dd Z`ej5dd Zae?ddd Zbe?ddd ZcdddZddddZedddZfdddZgdd ZhdddZidddZjdddZkdddZldd Zmdd ZndddZodd Zpe?ddd Zqe?ddd Zrdd Zsej5dd ZtdddZuej5dd ZvdddZwdddZxdd Zydd Zzdd Z{dd Z|dd Z}dddZ~ej5ddĄ ZdddȄZe?dɡdd˄ Zddd̈́Zddτ Zddф Zddӄ ZddՄ Zddׄ Zddل Zddۄ Zdd݄ Zdd߄ Z	 dddZe?ej dd Ze?ej dd Zej5dd Ze?ej dd Zdd Zdd Zdd Zdd Zdd ZdddZej!e	jjdddd ZdddZdddd ZdddZej!e	jjdddd Zdd Zdd Zdd
dZdd Zdd Zdd ZdddZdddZdd ZdddZddd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d1d2Zej5d3d4 Zej5d5d6 Zej5d7d8 Zej5d9d: Zd;d< Zdd=d>Zdd?d@ZddAdBZddCdDZdEdF ZddGdHZddIdJZej5dKdL Zej5dMdN ZddPdQZej5ddRdSZdTdU ZddVdWZÐddXdYZĐddZd[ZŐdd\d]ZƐd^d_ Zǐd`da ZȐdbdc Zɐddde ZʐddfdgZdddhdidjZ̐ddkdlZejΐdmdn Zϐdodp ZАdqdr Zѐdsdt Zej5dudv Zej5dwdx Zej5dydz ZՐdd{d|Z֐dd}d~ZאdddZؐdddZِdddZڐdddZېdd Zܐdd Zݐdd ZސdddZߐdd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 V/home/ubuntu/.local/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   
rv   c                 C   s   t | tjd} tjj| |dS )NrT   )beta)r   r.   rb   rc   kaiser_window)rZ   rw   r   r   r   kaiser   rg   ry   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   rq   )rb   rq   float32rr   rG   rb   r&   )weights	minlengthr   r   r   indicesvaluesdense_shape)r   r@   r   r.   r   rb   appendr   rI   rz   rF   SparseTensorr   bincountr   r   r~   r   math)
rZ   r{   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   rk   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.   subtractru   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 )Nrk   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.   multiplyru   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$   rz   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 Nrq   )r   r   r@   r   rV   r   rI   rH   r.   r   r   angler$  r   r   r   r0    s   
r0  c                 C   r(  r)  )r.   r   r  r+  r   r   r   any  r-  r1  c                 C      t | ||dS Nr   )r  r+  r   r   r   amax     r4  c                 C   r2  r3  )minr+  r   r   r   amin   r5  r7  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 r0t | dt| g}|d ur|t |dt| |d ur+|t |dt| tj| }t|}|d u r:d}ztj| |||d}W |S  tjj	ya   tj| ||dd}t
||}Y |S w )Nr@   r   )deltar@   rz   )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   arccosD     
rB  c                 C   r.  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   acoshr$  r   r   r   arccoshO  rC  rE  c                 C   r.  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   asinr$  r   r   r   arcsinZ  rC  rG  c                 C   r.  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   asinhr$  r   r   r   arcsinhe  rC  rI  c                 C   r.  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   atanr$  r   r   r   arctanp  rC  rK  c                 C   sH   t | } t |}t| j|jt}t| |} t||}tj| |S r   )	r   r   rI   r@   rH   r.   r   r   atan2ru   r   r   r   arctan2{  s   rM  c                 C   r.  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   atanhr$  r   r   r   arctanh  rC  rO  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   
rS  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   rz           )r   r   r@   ndimr.   r0   argmaxrS  r   rI   r   logical_andequalsignbitrY   npfinfotiny)rZ   r   r   r@   _xr   is_negative_zeror   r   r   rW    s.   

rW  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   rT  rz   rU  )keras.src.testing.test_caser`  r   r   r@   rV  r.   r0   argminrS  r   rI   r   rX  rY  rZ  rY   r[  r\  r]  )rZ   r   r   r`  r@   r^  r   r_  r   r   r   rb    s0   

rb  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   rm   r   rb   r&   r'   )	r   r   r@   r.   r   r   r   r0   argsort)rZ   r   x_shaper   r   r   rc    s   
rc  c                 C   s   t | |dS r  r   r$  r   r   r   r        r   c                 C   sf  ddl m} t| } t|| j}t||r|n| j}|j}|j}t| j	d | | dkrBt
d| j	 d| d| d||krMtj| |dS ||krw|| }tt| }|d  |9  < t| dg}	tj|	|d}
t|
|S tt| }|d }|| }t|tr|| dkrt
d	| d
| d|d d || |g }t| |}t||S )Nr   )backendr&   zCannot view array of shape z and dtype z
 as dtype zH because the total number of bytes is not divisible by the new itemsize.)rK   z(Cannot view dtype. Last dimension size (z8) must be divisible by the ratio of new/old item sizes (z).)	keras.srcrf  r   r.   as_dtyper   r@   r  r   r   r)   bitcastrQ  r0   rF   rG   )rZ   r@   rf  	old_dtype	new_dtypeold_itemsizenew_itemsizeratio	new_shapeflat_tensorcast_tensor	old_shapelast_dim_sizeintermediate_shapereshaped_tensorr   r   r   view  sF   rv  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   r{   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   )rw  r"   rx  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   r{   r@   avgry  r{  r   rx  r   average  s(   r}  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   r  4     r  c                 C      t | } tj| S r   )r   r.   r  invertre   r   r   r   bitwise_invert=  s   r  c                 C   r&  r   )r  re   r   r   r   bitwise_notB  r'  r  c                 C   r~  r   )r   r   rI   r@   r.   r   r  
bitwise_orr  r   r   r   r  F  r  r  c                 C   r~  r   )r   r   rI   r@   r.   r   r  bitwise_xorr  r   r   r   r  O  r  r  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   r  
left_shiftr  r   r   r   bitwise_left_shiftX     
r  c                 C   
   t | |S r   )r  rZ   r   r   r   r   r  b     
r  c                 C   r  r   )
r   rF   rG   r   rI   r@   r.   r   r  right_shiftr  r   r   r   bitwise_right_shiftf  r  r  c                 C   r  r   )r  r  r   r   r   r  p  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,   cosr[  pi)rZ   r@   r[   	n_minus_1term1term2term3r]   r   r   r   blackmant  s   r  c                 C   s   t | |S r   )r.   broadcast_to)rZ   r   r   r   r   r    re  r  c                 C   s\   t | } t| j}|dkrt| d} n|dvr t| t } t| tt	| d S )Nrq   rr   )bfloat16float16rr   gUUUUUU?)
r   r   r@   r.   r   r   rV   signpowr#  r$  r   r   r   cbrt  s   
r  c                 C   r.  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   ceilr$  r   r   r   r    rC  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   clip  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         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   concatenate  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    rC  r  c                 C   r.  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   coshr$  r   r   r   r    rC  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.   condrY  )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  rQ  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   rk   rl   rb   rm   rn   ro   rp   rr   rT   g     f@)
r   r@   r   r   rV   r.   r   rW   r   r  )rZ   r@   r  r   r   r   deg2rad7  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   R  rB   zdiag.<locals>.<lambda>c                      s   t jj dS )Nr4   )r.   r  diagr   r  r   r   r   S  rP  r   )offsetz(`x` must be 1d or 2d. Received: x.shape=)	r   r*   r   r.   r  rY  r  diagonalr)   rZ   r4   r   r  r   r  M  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   rd  r   r   _zerosm  s   &zdiagonal.<locals>._zerosc                      s     S r   r   r   )r  r   r   r   y  s    zdiagonal.<locals>.<lambda>c                      r  r   r   r   re   r   r   r   z  r  r  )r   rV  r.   r  	diag_partr  rQ  rF   rG   r  
logical_or
less_equalgreater_equal)rZ   r  axis1axis2x_rankr   )r  rZ   rd  r   r  `  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)   rV  r	   slicer+   r,   r   r@   r.   	not_equalr   )r   r[   r   slice1slice2slice1_tupleslice2_tupler;   r   r   r   diff  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  zdigitize.<locals>.<lambda>)r   rk   rl   rm   rn   rb   ro   rq   )r  r  rz   c                    s   t jj|  dS )Ninput
boundaries)r.   raw_ops	Bucketize)r   binsr   r   r     rP  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   digitize  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   rd  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   rY  ru   r   r   r   rY       rY  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   s   t | } t |}t| j|j}t | |} t ||}| jjs&tdt | j	|j	}t 
| |} t 
||}dd }dd }|t jt jt jt jfvrXt | } t |}t ||| |g\}}|S )Nz"Arguments to gcd must be integers.c                 S   s   t |dkS rz  )r.   r  r   r   r   r   r  9  r5  zgcd.<locals>.condc                 S   sX   t t |dt ||}t t |d|| t t |dt j| |t |fS rz  )r.   rY   rY  rt   r  r   floormodrs   )r   r   b_safer   r   r   body<  s   
zgcd.<locals>.body)r.   r   r   rI   r@   r   
is_integer	TypeErrorbroadcast_static_shaper   r  rm   rn   ro   uint64r#  
while_loop)rQ   rR   r@   target_shaper  r  gcd_valr;   r   r   r   gcd*  s"   



r  c                 C   r  r   )r   r   rI   r@   r.   r   greaterru   r   r   r   r  O  r  r  c                 C   r  r   )r   r   rI   r@   r.   r   r  ru   r   r   r   r  X  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#   b      zhstack.<locals>.<listcomp>r   c                    
   t |  S r   r   re   rT   r   r   r   e     
 zhstack.<locals>.<lambda>r   r'   )	r   r*   r   rI   r   r   r   r.   r1   r  r  r   rT   r   hstacka  s   
r  c                 C   s   t | } t |}t| j|j}|dv rt }n|dv rd}t| |} t||}t| }t|}t	||}t
||}tj||}|tdt|  S )Nrj   rp   rr         ?)r   r   rI   r@   r   rV   r.   r   r#  r  minimumr   divide_no_nansqrtsquare)rQ   rR   r@   x1_absx2_absmax_valmin_valrn  r   r   r   hypotk  s   


r&  c                 C   s   t | | |dS )N)NMr@   )eye)r[   r@   r   r   r   r    r5  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   rY  )rQ   rR   rtolatol	equal_nanr@   r   r   r   r   isclose  s    r0  Tc                 C   <   t | } t| j}|js|jst| jtjS tj	
| S r   )r   r.   rh  r@   r  
is_numericrX   r   r   r   	is_finiterZ   dtype_as_dtyper   r   r   isfinite  s
   r6  c                 C   s   t | } t |}t| j|j}t| |} t||}t| }t| dg} t|dg}|s8t|d }t	| dksFt	|dkrNtj
|tjdS tt| dt|d}tj|dd}|rjt|}t||S )Nr&   r   rT   r   r'   )r   r   rI   r@   r.   r   r   r0   uniquer  r!  r   rY  r   r  logical_not)rQ   rR   assume_uniquer  r@   r   cmpresult_flatr   r   r   isin  s"   

r<  c                 C   r1  r   )r   r.   rh  r@   r  r2  r!  r   r   r   is_infr4  r   r   r   isinf  
   r>  c                 C   r1  r   )r   r.   rh  r@   r  r2  r!  r   r   r   r   r4  r   r   r   isnan  r?  r@  c                 C   sP   t | } t| j}|js|jstj| tjdS tj	| tj
td| jd S NrT   infr   r.   rh  r@   r  r2  rs   r   r   rY  rW   rH   r4  r   r   r   isneginf  s
    rD  c                 C   sN   t | } t| j}|js|jstj| tjdS tj	| tj
td| jdS rA  rC  r4  r   r   r   isposinf  s
   rE  c                 C   s4   t | } | jjrttj| dS tj| tjdS )Nr   rT   )	r   r@   
is_complexr.   rY  r   r*  rt   r   re   r   r   r   isreal  s   rG  c                    sD  t t tjj}t|t|ttdd  tk  fddfddtk  fddfddtttj	t
tt
gdd	d
g}tttj	tt
t
gdd	d
g}t||}tt
t
}t||}|S )Nc                 S   s    t |D ]	}tj| dd} q| S )Nr   r'   )r,   r.   r   )rZ   numr;   r   r   r   expand_front  s   zkron.<locals>.expand_frontc                      s     S r   r   r   )rI  ndim_x1ndim_x2rQ   r   r   r         zkron.<locals>.<lambda>c                      r  r   r   r   )rQ   r   r   r     r  c                      s     S r   r   r   )rI  rJ  rK  rR   r   r   r     rL  c                      r  r   r   r   )rR   r   r   r     r  r   r'   r&   )r   r   rI   r@   r.   r   r   r  r0   stackr   rt   r   )rQ   rR   r@   x1_reshapedx2_reshapedr>  	out_shaper   )rI  rJ  rK  rQ   rR   r   kron  sD   



&&rQ  c                 C   s   t | } t |}| jjr|jjstd| jj d|jj t| j|j}t| |} t||}|tj	tj
tjtjfvrJtj| } tj|}t| |}t|dktjd|jd|}| ||  }t|dkt||}|S )Nz6Arguments to lcm must be integers. Received: x1.dtype=z, x2.dtype=r   r   rT   )r   r@   r  r  namer   rI   r.   r   rm   rn   ro   r  r   r#  r  rY   rW   rs   )rQ   rR   r@   divisordivisor_safer   r   r   r   lcm  s.   
rU  c                 C   r  r   )r   r   rI   r@   r.   r   lessru   r   r   r   rV  1  r  rV  c                 C   r  r   )r   r   rI   r@   r.   r   r  ru   r   r   r   r  :  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   r[  nanr.   linspacer   r@   r  )r;  r<  rH  endpointretstepr@   r   r   r=  r   new_stopr   r   r   rY  C  sB   

rY  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^  n     r^  c                 C   Z   t | } t| jdkrt nt| jt}t	| |} tj
| tj
td| j S )Nrq   
   r   r   r@   r   rV   r   rI   rH   r.   r   r   r^  rW   r$  r   r   r   log10z     "rc  c                 C   r]  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   log1pr$  r   r   r   re    r_  re  c                 C   r`  )Nrq   r   rb  r$  r   r   r   log2  rd  rf  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  re  r  r#  )rQ   rR   r@   r8  r   r   r   	logaddexp  s   
&rg  c                 C   s   t | } t |}t| j|jt}t | |} t ||}| | }t t jd|}t 	t j
|| | t | |t jt jt | | |  S )NrU   )r.   r   r   rI   r@   rH   r   r   r^  rY   r   r  re  r  r#  )rQ   rR   r@   r8  rf  r   r   r   
logaddexp2  s   



"rh  c                 C   $   t | d} t |d}t | |S Nr   )r.   r   rX  rQ   rR   r   r   r   rX       rX  c                 C   s   t | d} t | S rj  )r.   r   r8  re   r   r   r   r8    s   
r8  c                 C   ri  rj  )r.   r   r  rk  r   r   r   r    rl  r  ra  c                 C   s*   t | |||||d}tt||j|S )N)r;  r<  rH  rZ  r@   r   )rY  r.   r  r   r@   )r;  r<  rH  rZ  baser@   r   r   r   r   r   logspace  s   rn  )densify_mixedc                 C   r   r   )
rF   rG   rH   r   r   rI   rJ   rK   r.   r  ru   r   r   r   r    r   r  c                 C   s   t | d||dS )Nr@  r   )quantiler+  r   r   r   median     rq  xyindexingc                 G   s   t j|d| iS )Nru  )r.   meshgrid)ru  rZ   r   r   r   rv    rr  rv  c                 C   r  )Nr   r   rb   r   rT   z*Cannot compute the min of an empty tensor.r  )r   r   r@   r.   r*  r   r  r   
reduce_minr  r  r  rW   r  r   r   r   r6    r  r6  c                 C   r   r   )
rF   rG   rH   r   r   rI   rJ   rK   r.   r  ru   r   r   r   r    r   r  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   modru   r   r   r   rx    s   rx  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	   rV  r   re   r   r   r   -  r  zmoveaxis.<locals>.<genexpr>c                 3   ry  r   rz  r   re   r   r   r   .  r  zDInconsistent number of `source` and `destination`. Received: source=z, destination=c                    r   r   r   r   )_sourcer   r   r#   7  r$   zmoveaxis.<locals>.<listcomp>)r   r
   r+   r*   r)   r,   rV  r  zipinsertr.   r/   )rZ   sourcedestination_destinationr5   destsrcr   )r{  rZ   r   r  (  s&   r  rU  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 rz  )r   r@   r.   rh  r  r2  rY   r   r   rW   r  r=  r6  )rZ   rX  posinfneginfr@   r5  r   r   r   
nan_to_num=  s   
&&r  c                 C   s   t | } | jS r   )r   rV  re   r   r   r   rV  U  s   rV  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   ]  r   znonzero.<locals>.<lambda>)	r   r.   unstackrY   r   r   r   r   r   )rZ   r   r   r   r   nonzeroZ  s   "r  c                 C   r  r   )r   r   rI   r@   r.   r   r  ru   r   r   r   r  `  r  r  c                 C      t j| |dS r  )r.   rt   r$  r   r   r   rt   i  r5  rt   c                 C   r  r  )r.   rs   r$  r   r   r   rs   m  r5  rs   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   ru   r   r   r   outerq  s   r  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moder  r   r   r   r   r  z  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   )rk   rl   rm   rn   ro   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
|t	|dS )Nrr   r&   c                    r   r   r   r   )x_ndimsr   r   r#     r   z_quantile.<locals>.<listcomp>)r   r5   c                       g | ]} | qS r   r   r   rd  r   r   r#         c                    r  r   r   r   r  r   r   r#     r  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)r  r  r  midpointr@  r  r  r  r   )paddingsr  NaNrT   rb   r  r   )*r.   r   r0   r*   r   r  r   r,   
differencer   r/   r   r   r  rq   r1   r  r  r  rr   r@   r  r  rz   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  r  rd  r   r   	_quantile  s   





 



r  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   r  )rZ   r  r   r  r   r   r   r   r   rp  	  s   rp  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)   rV  reversedr   r   r+   r   r0   )r~   r   input_dtypecoordsdimindices_shaper   r   r   unravel_index	  s(   



r  c                 C   r  r   )r   r.   r   realre   r   r   r   r  ,	     r  c                 C   r  r   )r   r.   r   
reciprocalre   r   r   r   r  2	  r  r  c                 C   sJ   t | } t| jdkrt| d} ttj| ||ddS tj| ||dS )Nrn   ro   r'   )r   r   r@   r.   r   repeat)rZ   repeatsr   r   r   r   r  8	  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   A	  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  O	  s   
r  leftc                 C   sZ   t | dkrtd| j | jd }|d ur"|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=r   rb   rq   )sideout_type)	rV  r)   r   r[  iinforb   r  r.   searchsorted)sorted_sequencer   r  sequence_lenr  r   r   r   r  Z	  s   
r  c                 C   sB   t | } t| j}|dv rt| d} tt| |S t| S )N)rm   rn   ro   rb   )r   r   r@   r.   r   r  r  r   r   r   r  m	  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   rz   rT   )r   r   r@   r.   fillr   r   rV  r  r  ri  rb   rW   r6  r  r   r   r   rZ  x	  s   

rZ  c                 C   r.  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   sinr$  r   r   r   r  	  rC  r  c                 C   r.  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   sinhr$  r   r   r   r  	  rC  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   rk   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.   rM  )rZ   r   r  r   rT   r   rM  	  
   
rM  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 rz  )r   r   r   rF   rG   r	   rV  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 rz  )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  rz   rr   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_utilsrq   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#   L
  s    z#take_along_axis.<locals>.<listcomp>rT   )
batch_dims)keras.src.opsr  r   rV  r)   r   take_along_axisr.   r0   $compute_take_along_axis_output_shaperQ  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_shaperd  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  p
  rC  r  c                 C   r.  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   tanhr$  r   r   r   r  {
  rC  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   ra  )r.   r  r@   rh  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   )r  )	r   r.   r0   r  r  r  r   r   tile)rZ   r  repeats_sizerd  r   r   r   r  
  s   
r  c                 C   s   t | } t| j}|dv rd}n|dv rd}t| |} t| }t| ||fd} tt|| || |dd| t	| } tj
| ddS )	Nr   rk   rl   rb   r  ro   r  r   )r4   r@   r'   )r   r   r@   r.   r   r   r  rY   r)  rs   r  )rZ   r  r  r  r@   rd  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   r8  r  	band_part)r'  r(  r4   r@   r  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&   ijrt  r.   r   rv  r,   rY   r  rs   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   
  rP  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   rk  r   r   r   .  r  zinner.<locals>.<lambda>c                      s   t j dgdggdS )Nr&   r!   )r.   r   r   rk  r   r   r   /  r$   )r   r   rI   r@   rH   r.   r   r  r   r  rY  r   )rQ   rR   r   r   rZ   r   rk  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#   5  r  zvstack.<locals>.<listcomp>r   c                    r  r   r   re   rT   r   r   r   8  r  zvstack.<locals>.<lambda>r   r'   )r   r*   r   rI   r   r   r.   r1   r  r   rT   r   vstack4  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   wrappedB  r  z_vmap_fn.<locals>.wrapped)r)   	functoolswraps)r  in_axesr  r   r  r   _vmap_fn<  s   r"  excluded	signaturec                C   s   t | t||dS )Nr#  )r   r"  )pyfuncr$  r%  r   r   r   	vectorizeI  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   r  r)   )	conditionrQ   rR   r@   r   r   r   rY   O  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  ru   r   r   r   r  e  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   r  ru   r   r   r   r  u  s   

r  c                 C   r  r   )r  rk  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  ru   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   r!  re   r   r   r   r!    s   
r!  c                 C   r]  r/  )r   r   r@   r   rV   r   rI   rH   r.   r   r   r   r$  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_shapero  r  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   r0  r   r/   r   r   )rZ   r"   r0  r   r   r   r   r/     s   r/   r  c           	      C   s   dd }t | } t| jt}t| |} |d u r t||}nt ||d}t||d}|||}|| |} d| ddd f | dd df   }tj|| dd}|S )	Nc                 S   st   |dkr| S t | }|dk r|| }t jt j|t jdt j|d |t jdt j|gt jdgdd}t j| |dS )Nr&   r   rT   r   r'   r1  )r.   r   r1   r,   rb   rW   r/   )tensorr   r   r5   r   r   r   _move_axis_to_last  s   
z%trapezoid.<locals>._move_axis_to_lastrT   r'   r@  .r   r&   )	r   r   rI   r@   rH   r.   r   r  r  )	r   rZ   dxr   r3  r@   dx_arrayavg_heightsr   r   r   r   	trapezoid  s   

$r7  c                 C   sJ   t | } t| jd}t| jt}t| |} ttjj| ||d|S )Nrz   r   )	r   r   rI   r@   rH   r.   r   r   reduce_variance)rZ   r   r   r   r   r   r   r   var  s   r9  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 )Nr  rb   r  ro   T)r   r   output_is_sparser   )	r   r   r@   r   rF   r.   r   r   r  r  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  r  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   floordivru   r   r   r   floor_divide$  s   

r=  c                 C   s&   t | d} t |d}t j| |S rj  )r.   r   r   logical_xorrk  r   r   r   r>  2  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   rX  rT   r&   Tr   )	adjoint_br   r!   g      r  )r@   r   rV   r   r.   r   rW   rH   r  r   r   r   r  r  r   r   r  r   r  rF  r*  complex)rZ   r@   r  
x_centerednum_samples
cov_matrixr  stddev	outer_stdcorrelationcorrelation_clippedimag_clippedr   r   r   corrcoef8  s,   
rI  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.   rq   rr   r  r  rz   r   rG   r   r  r   r  r  r0   rM   rN   conv1dr  )	rQ   rR   r  r@   x1_lenx2_lenfull_lenx1_padx2_padr   r   r   	correlateX  s:   
rT  c                 C   s   t jjj| ||dS )N)default)r.   experimentalnumpyselect)condlist
choicelistrU  r   r   r   rX    s   rX  c                 C   s   t | } ttj| S r   )r   r+   r.   r  slogdetre   r   r   r   r[    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   rV  )rZ   kthr   
bottom_indr[   r  r~   updates
final_masktop_indr>  r   r   r   argpartition  s   
 "rc  c                 C   s   t j| | jd} |du rt | }t | }n|\}}t | | |k| |k@ } t |||d }t || j}t j|dd | dd}t j	t j
|ddt j|| jd|f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&   right)r  r'   )r~   r`  r   )r.   r   r@   rw  r  boolean_maskrY  r   r  r  r   rt   )rZ   r  r,   r%  r$  	bin_edgesbin_indices
bin_countsr   r   r   	histogram  s   
ri  )r   r   )Nr   F)NF)NFNr   )NNNr  )NN)r   )r&   r&   r&   N)r   r   r   )r   r&   )r+  r,  F)FF)rW  TFNr   )rW  Tra  Nr   )rU  NN)rW   N)Nr  F)r  )r   )Nr   N)Nr  r&   )rJ  )ra  N)r  r  r  r   r   r  rW  r[  
tensorflowr.   #tensorflow.python.ops.linalg.sparser   tensorflow.python.ops.math_opsr   rg  r   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   rQ  r?   elementwise_binary_unionrP   r^   rf   ri   rv   ry   r   	lru_cacher   r   sparse_subtractr   r   elementwise_binary_intersectionr   r  r  rX   r!  elementwise_unaryr%  r#  r,  r0  r1  r4  r7  r   r?  densifying_unaryr  rB  rX  rE  rG  rI  rK  rM  rO  rS  rW  rb  rc  r   rv  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  rY  r  r  r   r  r  r  r  r	  r  r  r  r  r&  r  r*  r0  r6  r<  r>  r@  rD  rE  rG  rQ  rU  rV  r  rY  rB  r^  rc  re  rf  rg  rh  rX  r8  r  rn  r  rq  rv  r6  r  rx  r  r  rV  r  r  rt   rs   r  r  r   r  rp  r  r  r  r  r  r0   r  r  r  rZ  r  r  r  r  r  rM  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/   r7  r9  r   r)  r=  r>  rI  rT  rX  r[  rc  ri  r   r   r   r   <module>   s   E
&2
 
e
 
M
	










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

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