
    2Vh                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dl
mZ d dl
mZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ ej,                  ej.                  ej0                  ej2                  fZddZd Zd Zd Zd Zd Z ddZ!ddZ"ddZ#ddZ$ddZ%d Z&d Z'ddZ(d Z)ddZ*ddZ+ddZ,dd Z-dd!Z.d" Z/d# Z0d$ Z1d% Z2d& Z3d' Z4d( Z5dd)Z6dd*Z7dd+Z8dd,Z9dd-Z:d. Z;d/ Z<dd0Z=d1 Z>d2 Z?d3 Z@d4 ZAd5 ZBd6 ZCd7 ZDd8 ZEd9 ZFd: ZGd; ZHd< ZId= ZJdd>ZKd? ZLd@ ZMdA ZNdB ZOdC ZPddDZQddEZRddFZSddGZTddHZUddIZVddJZWddKZXdL ZYdM ZZddNZ[dO Z\dP Z]dQ Z^dR Z_dS Z`ddTZadU ZbddVZcddWZddX ZedY ZfdZ Zgdd[Zhd\ Zidd]Zjd^ Zkd_ Zld` Zmda Zndb Zo	 ddcZpdd Zqde Zrdf Zsdg Ztdh Zudi Zvdj Zwdk ZxddlZydm ZzddnZ{dodpdqZ|ddrZ}ds Z~dt Zdu ZddvZdw Zdx Zdy ZddzZd{ Zdd|Zdd}Zdd~Zd Zd Zd Zd ZddZd ZddZddZd Zd Zd Zd Zd ZddZddZddZddZd ZddZddZd Zd ZddZddZd ZddZddZddZddZd Zd Zd Zd ZddddZd Zd Zd Zd Zd Zd Zd Zd ZddZddZddZddZddZd Zd ZddZddZd ZddZd Zy)    N)KerasTensor)config)dtypes)canonicalize_axis)to_tuple_or_list)vectorize_impl)standardize_dtypecastconvert_to_tensor)
get_device)	is_tensor)to_torch_dtypec                     t                 j                  dk  rt        d j                         t        |      dk7  s|d   |d   k(  rt        d| d      t	         fd|D              }t        j                   fd|D              st        d	| d
 j                   d      t        j                   ||      }t         t        j                        r|j                         j                         }|S )a/  Rotate an array by 90 degrees in the specified plane using PyTorch.

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

    Returns:
        Rotated tensor
       zBInput array must have at least 2 dimensions. Received: array.ndim=r      zInvalid axes: z3. Axes must be a tuple of two different dimensions.c              3   J   K   | ]  }|d k\  r|nj                   |z     ywr   Nndim.0axisarrays     M/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/backend/torch/numpy.py	<genexpr>zrot90.<locals>.<genexpr>5   s%     Kd

T(99Ks    #c              3   R   K   | ]  }d |cxk  xr j                   k  nc    ywr   r   r   s     r   r   zrot90.<locals>.<genexpr>7   s"     @4T.EJJ..@s   $'zInvalid axes z for tensor with z dimensions)kdims)r   r   
ValueErrorlentuplebuiltinsalltorchrot90
isinstancenpndarraycpunumpy)r   r   axesrotateds   `   r   r'   r'      s     e$EzzA~$$)JJ<1
 	
 4yA~aDG+TF #+ +
 	

 KdKKD<<@4@@D6!25::,kJ
 	
 kk%140G%$++-%%'N    c                 Z    t        |       } t        |      }t        j                  | |      S N)r   r&   addx1x2s     r   r2   r2   C   s'    	2	B	2	B99Rr/   c                    |D cg c]  }t        |       }}t        t        d |D                    }t        |      dk(  rd|d   dk(  r\d}t	               dk(  rt        j                         }|D cg c]  }t        ||       }}t        t        j                  | g| d      S t        j                  | g| S c c}w c c}w )Nc              3   F   K   | ]  }t        |j                          y wr1   )r	   dtype)r   xs     r   r   zeinsum.<locals>.<genexpr>M   s      N!2177!; Ns   !r   r   int8int32cuda)
r   listsetr"   r   r   floatxr   r&   einsum)
subscriptsoperandskwargsoperanddtypes_to_resolvecompute_dtypes         r   r@   r@   I   s    :BCw!'*CHC S NX NNO
"'8';v'E<6!"MMOM@HIWD-0IIELL7h7AA<<
.X.. D Js   B<1Cc                    t        |       } t        |      }t        | j                        dk(  rt        | |j                        } t        |j                        dk(  rt        || j                        }t	        j
                  | |      S Nbool)r   r	   r8   r   r&   subtractr3   s     r   rJ   rJ   Y   si    	2	B	2	B"f,"bhh"f,"bhh>>"b!!r/   c                 L   t        |       } t        |      }d } || |      rt        j                  | |      S t        | j                        }t        |j                        }|dk(  r|dk(  rd}n*t        j                  | j                  |j                        }|}|dk(  rt        j                         }t               dk(  r|dk(  rd}t               dk(  rd	|v rt        j                         }t        | |      } t        ||      }t        t        j                  | |      |      S )
Nc                 n   t               dk7  ryt        | j                        }t        |j                        }|dk7  s|dk7  ry| j                  }|j                  }| j                  dk7  s|j                  dk7  ry|d   dk  s|d   dk  s|d   dz  dk7  ry|d   dk  s|d   dz  dk7  s|d   dz  dk7  ryy	)
Nr<   Fr:   r   r      r      T)r   r	   r8   shaper   )r4   r5   x1_dtypex2_dtypex1_shapex2_shapes         r   can_use_int_matmulz"matmul.<locals>.can_use_int_matmulh   s     <6!$RXX.$RXX.vV!3888877a<277a<A;"b 0HQK!Oq4HA;x{Q!3x{Q!7Kr/   r:   r;   rI   r+   float16float32r<   int)r   r&   _int_mmr	   r8   r   result_typer   r?   r   r   matmul)r4   r5   rT   rP   rQ   result_dtyperF   s          r   rZ   rZ   d   s    	2	B	2	B4 "b!}}R$$ *H *H6h&0))"((BHH= M |u)!;!|v%="8	b-	 B	b-	 BR$l33r/   c                 Z    t        |       } t        |      }t        j                  | |      S r1   )r   r&   multiplyr3   s     r   r]   r]      s'    	2	B	2	B>>"b!!r/   c                 j   t        | t        t        f      rt        |       } t	        |       } |dk(  s|g k(  r| S t        |      }t        | j                        }t        j                  | j                  d      }d|v s|dk(  r|}n|}t        j                  | ||t        |            }t        ||      S )N rV   rW   rI   r8   )r(   r=   r#   stackr   r   r	   r8   r   rY   r&   meanr   r   )r9   r   keepdims	ori_dtyperF   r[   results          r   rb   rb      s    !dE]#!H!ArzTRZD!D!!''*I&&qww	:M	Y&0$  ZZ	]+	F %%r/   c                 :   t        |       } d| j                  v rP|t        d      |r,t        j                  dt        | j                        z  |      S t        j                  |      S |t        j                  |       }nt        | ||      }t        t        |dd       t        j                        r|j                  }|Xt        |j                        }t        ||      }t        j                  |t        j                  |j                  ||            S |S )Nr   z*Cannot compute the max of an empty tensor.r   r   rc   valuesr`   )r   rO   r!   r&   fullr"   tensormaxamaxr(   getattrTensorri   r   r8   maximumr9   r   rc   initialre   r8   s         r   rl   rl      s    !AAGG|?IJJ::dS\17;;<<((|1adX6'&(D15<<@v||,#G59}}EJJv||WEB
 	
 Mr/   c                     t        |xs t        j                               }t        | t              r| f} t        j                  | |t                     S Nsizer8   device)r   r   r?   r(   rW   r&   onesr   rO   r8   s     r   rx   rx      s=    53FMMO4E%::5jlCCr/   c                     t        |xs t        j                               }t        | t              r| f} t        j                  | |t                     S rt   )r   r   r?   r(   rW   r&   zerosr   ry   s     r   r{   r{      s=    53FMMO4E%;;Ez|DDr/   c                 x    t        |       } t        |xs | j                        }t        j                  | |      S Nr`   )r   r   r8   r&   
zeros_liker9   r8   s     r   r~   r~      s2    !A5+AGG,EAU++r/   c                 v    t        |       } t        | j                        dk(  r| S t        j                  |       S rH   )r   r	   r8   r&   absr9   s    r   absoluter      s0    !A!V+99Q<r/   c                     t        |       S r1   )r   r   s    r   r   r      s    A;r/   c                     t        |       } |t        t        j                  |       d      S t	        |      }|D ]  }t        j                  | ||      }  t        | d      S NrI   dimkeepdim)r   r   r&   r%   r   r9   r   rc   as       r   r%   r%      _    !A|EIIaL&))D!D 2IIaQ12 6?r/   c                     t        |       } t        | j                        }t               dk7  r0|dk(  r+t	        | d      } t	        t        j                  |       d      S t        j                  |       S Nr+   rU   rV   )r   r	   r8   r   r   r&   angler9   rd   s     r   r   r     s\    !A!!''*I |ui!7IEKKNI..;;q>r/   c                     t        |       } |t        t        j                  |       d      S t	        |      }|D ]  }t        j                  | ||      }  t        | d      S r   )r   r   r&   anyr   r   s       r   r   r     r   r/   c                     t        |       } |t        j                  |       S |dk(  s|g k(  r| S t        j                  | ||      S Nr_   r   )r   r&   rm   r9   r   rc   s      r   rm   rm   !  D    !A|zz!}rzTRZ::aT844r/   c                     t        |       } |t        j                  |       S |dk(  s|g k(  r| S t        j                  | ||      S r   )r   r&   aminr   s      r   r   r   +  r   r/   c                     t        |       t        |      }} |3t        j                  | j                         |j                         f      S t        j                  | |f|      S Nr   )r   r&   catflatten)r4   r5   r   s      r   appendr   5  sP    r"$5b$9B|yy"**,

56699b"X4((r/   c           	      n   |et        | dt        |             t        |dt        |            g}|%|j                  t        |dt        |                   t        j                  | }t        |      }| t        j                  | |t                     S t        j                  | |||t                     S )Nr8   )endr8   rw   )stepr8   rw   )	rn   typer   r   rY   r   r&   aranger   )startstopr   r8   rE   s        r   r   r   <  s    }E7DK0D'4:.
 $$WT7DJ%GH""$565!E|||U:<HH<<t$eJL r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   arccosr   s    r   r   r   M      !A<<?r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   arccoshr   s    r   r   r   R      !A==r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   arcsinr   s    r   r   r   W  r   r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   arcsinhr   s    r   r   r   \  r   r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   arctanr   s    r   r   r   a  r   r/   c                 (   t        |       } t        |      }t        j                  | j                  |j                  t              }|}t               dk(  r|dk(  rd}t        | |      } t        ||      }t        t        j                  | |      |      S r   )	r   r   rY   r8   floatr   r   r&   arctan2r4   r5   r[   rF   s       r   r   r   f  s}    	2	B	2	B%%bhh%@L M|u)!;!	b-	 B	b-	 Bb"%|44r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   arctanhr   s    r   r   r   s  r   r/   c                     t        |       } t        | j                        dk(  rt        | d      } t        t	        j
                  | ||      d      S NrI   uint8r   r;   r`   )r   r	   r8   r   r&   argmaxr   s      r   r   r   x  E    !A !V+GQD(;7KKr/   c                     t        |       } t        | j                        dk(  rt        | d      } t        t	        j
                  | ||      d      S r   )r   r	   r8   r   r&   argminr   s      r   r   r     r   r/   c                     t        |       } t        | j                        dk(  rt        | d      } |d}| j	                  d      } t        t        j                  | |d      d      S )NrI   r   T)r   stabler;   r`   )r   r	   r8   r   reshaper&   argsortr9   r   s     r   r   r     s\    !A !V+G|IIbMaT$7wGGr/   c                     t        | |      S r}   r   r   s     r   r   r     s    Qe,,r/   c                    t        |       } | j                  t        g}|&t        |      }|j                  |j                         t	        j
                  | }t        | |      } |t        ||      }|dk(  s|g k(  r| S |Ct        j                  t        j                  | |      |      t        j                  |d      z  S t        j                  | |      S )Nr_   r   r   )r   r8   r   r   r   rY   r   r&   summulrb   )r9   r   weightsrE   r8   s        r   averager     s    !A%(#G,  / 12EQAw&rzTRZyy1g.D9EII=
 
 	
 ::ar/   c                 j    t        |       } t        j                  j                  j	                  |       S r1   )r   r&   signalwindowsbartlettr   s    r   r   r     '    !A<<((++r/   c                 j    t        |       } t        j                  j                  j	                  |       S r1   )r   r&   r   r   hammingr   s    r   r   r     s'    !A<<''**r/   c           	         |rt        d      t        |       } | j                  g}|9t        |      }|j                  |j                         t	        j
                  | }nd}t        | j                        dk(  r`|fd}t        t        ||             }n$fd}t        t        |t        | |                  }t        t        j                  |      |      S t        t        j                  | |      |      S )Nz2Unsupported value `sparse=True` with torch backendr;   r   c                 2    t        j                  |       S )N)	minlengthr&   bincount)arrr   s    r   bincount_fnzbincount.<locals>.bincount_fn  s    ~~cY??r/   c                 @    t        j                  | d   | d         S )Nr   r   )r   r   r   )arr_wr   s    r   r   zbincount.<locals>.bincount_fn  s#    ~~!HeAh) r/   )r!   r   r8   r   r   rY   r"   rO   r=   mapzipr   r&   ra   r   )r9   r   r   sparserE   r8   r   	bincountss     `     r   r   r     s    MNN!A	#G,  /""$56
177|q?@ Sa01I
 Sc!Wo>?IEKK	*E22q'95u==r/   c                 Z    t        |       } t        |      }t        j                  | |      S r1   )r   r&   bitwise_andr9   ys     r   r   r     )    !A!AQ""r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   bitwise_notr   s    r   bitwise_invertr         !AQr/   c                     t        |       S r1   )r   r   s    r   r   r     s    !r/   c                 Z    t        |       } t        |      }t        j                  | |      S r1   )r   r&   
bitwise_orr   s     r   r   r     s)    !A!AAq!!r/   c                 Z    t        |       } t        |      }t        j                  | |      S r1   )r   r&   bitwise_xorr   s     r   r   r     r   r/   c                 z    t        |       } t        |t              st        |      }t        j                  | |      S r1   )r   r(   rW   r&   bitwise_left_shiftr   s     r   r   r     s3    !Aaa ##Aq))r/   c                     t        | |      S r1   )r   r   s     r   
left_shiftr     s    a##r/   c                 z    t        |       } t        |t              st        |      }t        j                  | |      S r1   )r   r(   rW   r&   bitwise_right_shiftr   s     r   r   r      s3    !Aaa $$Q**r/   c                     t        | |      S r1   )r   r   s     r   right_shiftr     s    q!$$r/   c                 j    t        |       } t        j                  j                  j	                  |       S r1   )r   r&   r   r   blackmanr   s    r   r   r     r   r/   c                 D    t        |       } t        j                  | |      S r1   )r   r&   broadcast_to)r9   rO   s     r   r   r     s    !Aa''r/   c                 n   t        |       } t        | j                        }|dk(  rt        | d      } n0t	               dk(  r#|dk(  rt        | t        j                               } |dk(  rt        j                         }nt        j                  |t              }t        t        j                  |       |      S )NrI   r   r+   rU   int64r`   )r   r	   r8   r   r   r   r?   r   rY   r   r&   ceil)r9   rd   r8   s      r   r   r     s    !A!!''*I FG		9	#9FMMO$G""9e4

1U++r/   c                 @   t        |       } t        |      }t        |      }t        | j                        }t               dk(  r3|dk(  r.t	        | d      } t	        t        j                  | ||      d      S |dk(  rt	        | d      } t        j                  | ||      S )Nr+   rU   rV   )minrl   rI   r;   )r   r	   r8   r   r   r&   clip)r9   x_minx_maxrd   s       r   r   r   '  s    !Ae$Ee$E!!''*I |ui!7IEJJqe7CCFG::aU..r/   c                 j    | D cg c]  }t        |       } }t        j                  | |      S c c}w r   )r   r&   r   )xsr   r9   s      r   concatenater  7  s1    (*	+1
A
	+B	+99RT"" 
,   0c                     t        | t        j                        st        j                  |       } t        j                  |       j                         S r1   r(   r&   ro   
from_numpyconjresolve_conjr   s    r   	conjugater
  <  7    a&Q::a=%%''r/   c                     t        | t        j                        st        j                  |       } t        j                  |       j                         S r1   r  r   s    r   r  r  B  r  r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   cloner   s    r   copyr  H      !A;;q>r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   cosr   s    r   r  r  M      !A99Q<r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   coshr   s    r   r  r  R      !A::a=r/   c                     t        |       } |dk(  s|g k(  r t        t        j                  | d      d      S t        t        j                  | |      j
                  d      S )Nr_   r   r;   r   )r   r   r&   necount_nonzeroTr   s     r   r  r  W  sP    !ArzTRZEHHQNG,,##A4022G<<r/   c           	         |dk7  s
|dk7  s|dk7  rt        d| d| d| d      t        |       } t        |      }t        j                  | j                  |j                        }|}t               dk(  r|dk(  rd}nt               d	k(  r|d
k(  rd}t        | |      } t        ||      }t        t        j                  | ||      |      S )Nr   zMTorch backend does not support `axisa`, `axisb`, or `axisc`. Received: axisa=z, axisb=z, axisc=z). Please use `axis` arg in torch backend.r<   bfloat16rV   r+   rU   r   )	r!   r   r   rY   r8   r   r   r&   cross)r4   r5   axisaaxisbaxiscr   rF   r[   s           r   r  r  _  s    {erkUb[$gXeWHUG D//
 	

 
2	B	2	B&&rxx:M L|v-:"=!		=I#=!	b-	 B	b-	 BB-|<<r/   c           	      R   t        |       } || j                         } d}t        j                  |xs | j                        }|dk(  rd}n=t               dk(  r0|dk(  r+t        t        j                  | |t        d            d      S t        j                  | |t        |            S Nr   rI   r;   r+   rU   rV   r   r8   )
r   r   r   rY   r8   r   r   r&   cumprodr   r9   r   r8   s      r   r$  r$  u  s    !A|IIKu/0E		5I#5MM!^I-FG
 	
 ==N5,ABBr/   c           	      R   t        |       } || j                         } d}t        j                  |xs | j                        }|dk(  rd}n=t               dk(  r0|dk(  r+t        t        j                  | |t        d            d      S t        j                  | |t        |            S r"  )
r   r   r   rY   r8   r   r   r&   cumsumr   r%  s      r   r'  r'    s    !A|IIKu/0E		5I#5LLN9,EF
 	
 <<t>%+@AAr/   c                 F    t        |       } t        j                  | |      S Ndiagonal)r   r&   diagr9   r   s     r   r,  r,        !A::a!$$r/   c                 F    t        |       } t        j                  | |      S )N)offset)r   r&   diagflatr-  s     r   r1  r1    s    !A>>!A&&r/   c                 J    t        |       } t        j                  | |||      S )N)r0  dim1dim2)r   r&   r+  )r9   r0  axis1axis2s       r   r+  r+    s)    !A>>		 r/   c                 H    t        |       } t        j                  | ||      S )N)nr   )r   r&   diff)r   r8  r   s      r   r9  r9    s    !A::a1$''r/   c                     t        |       } t        |      }t        | j                        dk(  rt        | d      } t        t	        j
                  | |d      d      S )NrI   r   T)rightr;   )r   r	   r8   r   r&   	bucketize)r9   binss     r   digitizer>    sM    !AT"D!V+G4t4g>>r/   c                    t        |       } t        |      }t        j                  | j                  |j                        }t        j                  |t              }t               dk(  r|dk(  rd}t        | |      } t        ||      }| j                  dk(  s|j                  dk(  r t        t        j                  | |      |      S t        t        j                  | |      |      S )Nr+   rU   rV   r   )r   r   rY   r8   r   r   r   r   r&   r]   rZ   )r9   r   r[   rF   s       r   dotr@    s    !A!A%%aggqww7L&&|U;M |u)!;!QAQAvv{affkENN1a(,77Q"L11r/   c                     t        |xs t        j                               }t        j                  | |t                     S rt   )r   r   r?   r&   emptyr   ry   s     r   rB  rB    s,    53FMMO4E;;Ez|DDr/   c                 Z    t        |       t        |      }} t        j                  | |      S r1   )r   r&   eqr3   s     r   equalrE    s'    r"$5b$9B88Br/   c                     t        |       } t        | j                        }d|v s|dk(  rt        | t	        j
                               } t        j                  |       S NrW   rI   )r   r	   r8   r   r   r?   r&   expr   s     r   rH  rH    sI    !A!!''*I	Y&0FMMO$99Q<r/   c                     t        |       } t        | j                        }d|v s|dk(  rt        | t	        j
                               } t        j                  |       S rG  )r   r	   r8   r   r   r?   r&   exp2r   s     r   rJ  rJ    sI    !A!!''*I	Y&0FMMO$::a=r/   c           	          t        |       } t        |      }t        | j                        t        |      z   }t	        |D cg c]  }t        ||       c}      }|D ]  }t        j                  | |      }  | S c c}w r   )r   r   r"   rO   sortedr   r&   	unsqueeze)r9   r   out_ndimr   s       r   expand_dimsrO    ss    !AD!D177|c$i'H4@a$Q1@AD &OOA1%&H As   A;c                     t        |       } t        | j                        }d|v s|dk(  rt        | t	        j
                               } t        j                  |       S rG  )r   r	   r8   r   r   r?   r&   expm1r   s     r   rQ  rQ    sI    !A!!''*I	Y&0FMMO$;;q>r/   c                     t        |       } |t        t        | j                              }t	        |      }t        j                  | |      S Nr    )r   r#   ranger   r   r&   flipr   s     r   rV  rV    s>    !A|U166]#D!D::ad##r/   c                     t        |       } t        | j                        dk(  rt        j                         n#t        j                  | j                  t              }t        | |      } t        j                  |       S Nr   )r   r	   r8   r   r?   r   rY   r   r   r&   floorr   s     r   rY  rY    s^    !A QWW%0 	/ 

 	QA;;q>r/   c                 `   t        |      }t        ||      }t        |j                        dkD  r^t        |       t        |j                        z
  }t	        | d |       dt        |j                        z  z   }t        j                  ||      S t        j                  | ||t                     S )Nr`   r   rg   )rv   
fill_valuer8   rw   )	r   r   r"   rO   r#   r&   tilerj   r   )rO   r[  r8   expand_size
tile_shapes        r   rj   rj   	  s    5!E":U;J
:q %j3z'7'7#885+./$Z=M=M9N2NN
zz*j11::zz| r/   c                 R    |xs | j                   }t        | j                  ||      S )N)rO   r[  r8   )r8   rj   rO   )r9   r[  r8   s      r   	full_liker`    s#    QWWEagg*EBBr/   c                 Z    t        |       t        |      }} t        j                  | |      S r1   )r   r&   greaterr3   s     r   rb  rb    s'    r"$5b$9B==R  r/   c                 Z    t        |       t        |      }} t        j                  | |      S r1   )r   r&   greater_equalr3   s     r   rd  rd     s)    r"$5b$9Br2&&r/   c                 f    | D cg c]  }t        |       } }t        j                  |       S c c}w r1   )r   r&   hstackr  r9   s     r   rf  rf  %  /    (*	+1
A
	+B	+<< 
,   .c                 *   t        |xs t        j                               }t               dk(  rF|t        j
                  k(  r3t        t	        j                  | t        d      t                     |      S t	        j                  | |t                     S )Nr+   rV   r8   rw   )r   r   r?   r   r&   r  r   eye)r8  r8   s     r   identityrm  *  sl    53FMMO4E |u%..!8IIa~i8N
 	
 99QeJL99r/   c                     t        | t        j                        st        j                  |       } t        j                  |       S r1   )r(   r&   ro   r  imagr   s    r   ro  ro  6  .    a&Q::a=r/   c                     t        |       } t        |      }t        j                  | j                  |j                        }t	        | |      } t	        ||      }t        j                  | ||||      S r1   )r   r   rY   r8   r   r&   isclose)r4   r5   rtolatol	equal_nanr[   s         r   rr  rr  <  s_    	2	B	2	B%%bhh9L	b,	B	b,	B==RtY77r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   isfiniter   s    r   rw  rw  E      !A>>!r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   isinfr   s    r   rz  rz  J  r  r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   isnanr   s    r   r|  r|  O  r  r/   c                 Z    t        |       t        |      }} t        j                  | |      S r1   )r   r&   lessr3   s     r   r~  r~  T  s'    r"$5b$9B::b"r/   c                 Z    t        |       t        |      }} t        j                  | |      S r1   )r   r&   
less_equalr3   s     r   r  r  Y  )    r"$5b$9BB##r/   c                    |dk7  rt        d|       |Ct        | dt        |             t        |dt        |            t        g}t	        j
                  | }t        |      }t        t        j                        }|r|dkD  r)|| z
  |dz
  z  }n|dkD  r|| z
  |z  }|dkD  r||| z
  |z  z
  }t        | d      rt        |d      r}t        | |      } t        ||      }t        j                  ||t                     |dz
  z  }	t        | j                        D ]  }
|	j                  d      }	 | d    |	|| z
  d    z  z   }n"t        j                   | |||t               	      }|d
u r||fS |S )Nr   zBtorch.linspace does not support an `axis` argument. Received axis=r8   r   __len__r`   rk  r   )r   r   stepsr8   rw   T)r!   rn   r   r   r   rY   r   r   r&   nanhasattrr   r   rU  r   rM  linspace)r   r   numendpointretstepr8   r   rE   r   r  ir  s               r   r  r  ^  s    qy!F$
 	
 }E7DK0D'4:.

 ""$565!EUYY'D75LS1W-D75LC'D7D5LC/0Dui WT9%=!%u5 U3SjlCsQwO uzz" 	(AOOB'E	( ;$,)=!==>><
 $$Or/   c                 B    t        |       } t        j                  |       S r1   )r   r&   logr   s    r   r  r    r  r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   log10r   s    r   r  r    r  r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   log1pr   s    r   r  r    r  r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   log2r   s    r   r  r    r  r/   c                 |   t        |       } t        |      }t        j                  | j                  |j                  t              }t               dk(  r=|dk(  r8t        | d      } t        |d      }t        t        j                  | |      |      S t        | |      } t        ||      }t        j                  | |      S r   )	r   r   rY   r8   r   r   r   r&   	logaddexpr4   r5   r8   s      r   r  r    s    	2	B	2	Brxx59E |u)!3"i "i EOOB+U33"e_"e_r2&&r/   c                 Z    t        |       t        |      }} t        j                  | |      S r1   )r   r&   logical_andr3   s     r   r  r    )    r"$5b$9BR$$r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   logical_notr   s    r   r  r    r   r/   c                 Z    t        |       t        |      }} t        j                  | |      S r1   )r   r&   
logical_orr3   s     r   r  r    r  r/   c                    |dk7  rt        d|       |Ct        | dt        |             t        |dt        |            t        g}t	        j
                  | }t        |      }|du r||| z
  |z  z
  }t        | d      rt        |d      rt        | |      } t        ||      }t        j                  ||t                     |dz
  z  }t        | j                        D ]  }	|j                  d	      } | d    ||| z
  d    z  z   }
||
z  }|S |}t               d
k(  r#|t        j                  k(  rt        j                   }t#        t        j$                  | ||||t                     |      }|S )Nr   zBtorch.logspace does not support an `axis` argument. Received axis=r8   Fr  r`   rk  r   r   r+   )r   r   r  baser8   rw   )r!   rn   r   r   r   rY   r   r  r   r&   r   r   rU  r   rM  rU   rV   r   logspace)r   r   r  r  r  r8   r   rE   r  r  r  r  rF   s                r   r  r    s   qy!F$
 	
 }E7DK0D'4:.

 ""$565!E5u+,ui WT9%=!%u5 U3SjlCsQwO uzz" 	(AOOB'E	( ;$,)=!==>" O <5 Uemm%;!MMMNN#!| 

 Or/   c           
      ^   t        | t        t        f      st        |       } t        |t        t        f      st        |      }t	        j
                  t        | dt        |             t        |dt        |                  }t        | |      } t        ||      }t        j                  | |      S Nr8   )
r(   rW   r   r   r   rY   rn   r   r&   rp   r  s      r   rp   rp         b3,'r"b3,'r"GT"X&GT"X&E 
2u	%B	2u	%B==R  r/   c                 B   t        |       } t        j                  | j                  d      }t        j                  | j                  t              }t        | |      } |#|du rt        t        j                  |       |      S t        |t              r%t        t        j                  | ||      d   |      S |t        | dg      }n|D cg c]  }t        || j                         }}t        t        t        | j                              j!                  |            }|t#        |      z   }t        j$                  | |      }	t#        | j&                        }
|D cg c]  }|
|   	 }}t)        j*                  |D cg c]  }|
|   	 c}      g}||z   }t        |	|      }t        j                  |d      d   }|rG|(t        | j                        D ]  }t-        |d      } nt        |      D ]  }t-        ||      } t        ||      S c c}w c c}w c c}w )	NrV   Fr   r   r   rT  r   r   )r   r   rY   r8   r   r   r&   medianr(   rW   r   r   r   rL  r>   rU  
differencer=   permuterO   mathprodrO  )r9   r   rc   rF   r[   r   r   
other_dimspermx_permedx_shaper  other_shape	end_shape
full_shape_s                   r   r  r    s   !A&&qww	:M%%aggu5LQA|E)ELLO\22	D#	LLh7:L
 	

 |At 7;;!!QVV,;;Caff.99$?@
DJ&==.qww-+56awqz66YYD9q
9:;	 9,
Hj)QB"A<166] ,+, D\ +*+ <  + < 79s   
HH>Hxyindexingc                 j    |D cg c]  }t        |       }}t        j                  ||       S c c}w )Nr  )r   r&   meshgrid)r  r9   	sc_tensors      r   r  r  +  s1    789)	9	%9A9>>!h// 	:r  c                    t        |       } d| j                  v rP|t        d      |r,t        j                  dt        | j                        z  |      S t        j                  |      S |t        j                  |       }nt        | ||      }t        t        |dd       t        j                        r|j                  }|8t        |j                        }t        ||      }t        j                  ||      S |S )Nr   z*Cannot compute the min of an empty tensor.rg   rh   ri   r`   )r   rO   r!   r&   rj   r"   rk   r   r   r(   rn   ro   ri   r   r8   minimumrq   s         r   r   r   0  s    !AAGG|?IJJ::dS\17;;<<((|1adX6'&(D15<<@v||,#G59}}VW--Mr/   c           
      ^   t        | t        t        f      st        |       } t        |t        t        f      st        |      }t	        j
                  t        | dt        |             t        |dt        |                  }t        | |      } t        ||      }t        j                  | |      S r  )
r(   rW   r   r   r   rY   rn   r   r&   r  r  s      r   r  r  I  r  r/   c                     t        |       } t        |      }t        j                  | j                  |j                        }|dk(  rt	        | d      } t	        |d      }t        j                  | |      S NrI   r;   )r   r   rY   r8   r   r&   	remainderr  s      r   modr  W  s`    	2	B	2	Brxx2E"g"g??2r""r/   c                 H    t        |       } t        j                  | ||      S )N)sourcedestination)r   r&   moveaxis)r9   r  r  s      r   r  r  a  s    !A>>!FDDr/   c                 J    t        |       } t        j                  | |||      S )N)r  posinfneginf)r   r&   
nan_to_num)r9   r  r  r  s       r   r  r  f  s#    !AA3vfEEr/   c                 0    t        |       } | j                  S r1   )r   r   r   s    r   r   r   k  s    !A66Mr/   c                 j    t        |       } t        t        j                  |       j                  d      S )Nr;   )r   r   r&   nonzeror  r   s    r   r  r  p  s(    !Aa ""G,,r/   c                 Z    t        |       t        |      }} t        j                  | |      S r1   )r   r&   	not_equalr3   s     r   r  r  u  s'    r"$5b$9B??2r""r/   c                 x    t        |       } t        |xs | j                        }t        j                  | |      S r}   )r   r   r8   r&   	ones_liker   s     r   r  r  z  s0    !A5+AGG,E??1E**r/   c                     t        |       t        |      }} t        j                  | j                         |j                               S r1   )r   r&   outerr   r3   s     r   r  r    s3    r"$5b$9B;;rzz|RZZ\22r/   c           	      x   i }||dk7  rt        d|       ||d<   t        |       } g }t        |      d d d   }d}|D ]  }||d   |d   z   z  } |D ]  }||z  }||d   |d   z   z  }|dk(  s n |dk(  rd}|dk(  r-t        j                  j
                  j                  | f||d	|S | j                  }| j                  }	d
}
| j                  dk  r3d}
dgd| j                  z
  z  } | j                  g || j                   } d
}| j                  t        j                  t        j                  fvrd}t        | t        j                        } t        j                  j
                  j                  | ||	      } |rt        | |      } |
r,t        j                  | t        t!        d|	z
                    } | S )NconstantzZArgument `constant_values` can only be provided when `mode == 'constant'`. Received: mode=valuer   r   r   	symmetric	replicate)padmodeF   Tr   )r!   r   r=   r&   nn
functionalr  r8   r   viewrO   rV   float64r   squeezer#   rU  )r9   	pad_widthr  constant_valuesrC   pad_sumpad_width_sumr  rd   ori_ndimneed_squeezenew_dims	need_casts                r   r  r    s   F":""&) 
 *w!AGY"%IM )Q#a&() 3Q#a&(A	
 {zxx""&&qKgDKFKK
 IvvHLvvz3!aff*%AFF'H'qww'Iwwu}}emm44 	EMM"wT:AIMM!uQ\':!;<Hr/   c                    t        |       } |5t        j                  | j                        }|dk(  rd}n|dv rd}n|dk(  rd}|}t	               dk(  r|dk(  rd}|*t        t        j                  | t        |            |      S t        |      }|D ].  }t        t        j                  | ||t        |      	      |      } 0 | S )
NrI   r;   )r:   int16r   r+   rU   rV   r`   )r   r   r8   )
r   r   rY   r8   r   r   r&   r  r   r   )r9   r   rc   r8   rF   r   s         r   r  r    s    !A}""177+F?E''EgEM|u)!;!|EJJq}(EFNND!D 
JJq(.2O 	

 Hr/   c                 B   t        |       } t        |      }t        |      }t        j                  | j                  d      }t        j                  | j                  t
              }t        | |      } | j                  |j                  k7  rt        || j                        }|t        | dg      }n|D cg c]  }t        || j                         }}t        t        t        | j                              j                  |            }	|	t        |      z   }
t        j                   | |
      }t        | j"                        }|	D cg c]  }||   	 }}t%        j&                  |D cg c]  }||   	 c}      g}||z   }t        ||      }t        j(                  ||d|      }|r]|(t        | j                        D ]  }t+        |d      } n3t        |      D ]%  }|j                  dkD  r|dz   n|}t+        ||      }' t        ||      S c c}w c c}w c c}w )NrV   r   rT  )r   interpolationr  r   r   )r   r   r   rY   r8   r   r   r   r   r   rL  r>   rU  r  r=   r&   r  rO   r  r  quantilerO  )r9   qr   methodrc   rF   r[   r   r   r  r  r  r  r  r  r  r  r  s                     r   r  r    s   !A!AD!D&&qww	:M%%aggu5LQAww!''AGG |At 7;;!!QVV,;;Caff.99$?@
DJ&==.qww-+56awqz66YYD9q
9:;	 9,
Hj)q!6:A<166] ,+, D\ +VVaZAEQ*+ <  - < 79s   5HH)Hc                 B    t        |       } t        j                  |       S r1   )r   r&   ravelr   s    r   r  r    r  r/   c                     t        |       } t        j                  | j                        t	        fdt        j                  | |      D              S )Nc              3   6   K   | ]  }t        |        y wr1   r
   )r   idxr8   s     r   r   z unravel_index.<locals>.<genexpr>  s     Kcc5!Ks   )r   r   rY   r8   r#   r&   unravel_index)r9   rO   r8   s     @r   r  r    s?    !Aqww'EKU-@-@E-JKKKr/   c                     t        | t        j                        st        j                  |       } t        j                  |       S r1   )r(   r&   ro   r  realr   s    r   r  r  
  rp  r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   
reciprocalr   s    r   r  r    s    !AAr/   c                 l   t        |       } t               dk(  rtt        | j                  t	        | j
                              } t        | ||      }t        j                  |j                  t        |j
                        t                     S t        |t              }t        j                  | ||      S )Nmetar  ru   r`   r   )r   r   r   rO   r	   r8   repeatr&   rB  r   rW   repeat_interleave)r9   repeatsr   outputss       r   r  r    s    !A|v!2177!;<G$/{{ /<
 	
  s3G""1g488r/   c                 v    t        |t        t        f      s|f}t        |       } t	        j
                  | |      S r1   )r(   r=   r#   r   r&   r   )r9   newshapes     r   r   r   '  s2    hu.;!A==H%%r/   c                 H    t        |       } t        j                  | ||      S rS  )r   r&   roll)r9   shiftr   s      r   r   r   .  s    !A::aT**r/   c                     t        |       dk7  rt        d| j                         t        |       t	        j
                  t        j                        j                  k  }t        j                  | |||      S )Nr   z`searchsorted` only supports 1-D sorted sequences. You can use `keras.ops.vectorized_map` to extend it to N-D sequences. Received: sorted_sequence.shape=)side	out_int32)
r   r!   rO   r"   r)   iinfor;   rl   r&   searchsorted)sorted_sequenceri   r  r  s       r   r  r  3  st    O!% &5%:%:$;=
 	
 O$(:(>(>>Idi r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   signr   s    r   r	  r	  A  r  r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   signbitr   s    r   r  r  F  r   r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   sinr   s    r   r  r  K  r  r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   sinhr   s    r   r  r  P  r  r/   c                 h    t        t        | j                              }t        j                  |      S r1   )r   r#   rO   r&   r  )r9   r  s     r   rv   rv   U  s#    agg/G::gr/   c                    t        |       } t               dk(  rOt        | j                        dk(  r7t	        | d      } t	        t        j                  | |      j                  d      S t        j                  | |      j                  S )Nr<   rI   r   r   )r   r   r	   r8   r   r&   sortri   r   s     r   r  r  Z  sh    !A|v"3AGG"<"FGEJJqd+22F;;::aT")))r/   c                 P   t        |       } | j                  |   }t        |t              sVt        |      }|dd }||dd  z
  }t	        j
                  |t	        j                  |      |gd      }|j                         }nA||z  dk7  r4t        d| d| d| d| j                  |    d	| d
| j                         ||z  }t	        j                  | ||      }|dk(  r9t        |t              r)t        |      D cg c]  }|d   j                          }}t        |      S c c}w )Nr   r   r   r   zReceived indices_or_sections=z0 (interpreted as a number of sections) and axis=z, but input dimension x.shape[z]=z is not divisible by z. Full input shape: x.shape=)rk   split_size_or_sectionsr   )r   rO   r(   rW   r&   concatr9  tolistr!   splitrU  r  r=   )	r9   indices_or_sectionsr   r   
start_sizeend_sizechunk_sizesoutr  s	            r   r  r  c  sT   !A
''$-C)3//0CD(1-
,RS11ll$78(C
 "((*$$)/0C/D EBBF H//3fBqwwt}o F'':&; <--.WWI	7  00
++*C
 axJ2C8',-@'AB!s1v||~BB9 Cs   <D#c                 j    | D cg c]  }t        |       } }t        j                  | |      S c c}w r   )r   r&   ra   )r9   r   elems      r   ra   ra     s1    -./T	4	 /A/;;qd## 	0r  c                     t        |       } t        | j                        }d|v s|dk(  rt        | d      } t	        j
                  | ||d      S )NrW   rI   rV   F)r   r   unbiased)r   r	   r8   r   r&   std)r9   r   rc   rd   s       r   r!  r!    sJ    !A!!''*I	Y&0I99QD(UCCr/   c                 H    t        |       } t        j                  | ||      S )N)axis0r5  )r   r&   swapaxes)r9   r5  r6  s      r   r$  r$    s    !A>>!566r/   c                    t        |       } t        |      j                         }|| j                  |   n| j                  d   }t        j                  |dk  ||z   |      }| j
                  dk(  r/|dk(  r*t        j                  j                  j                  ||       S |t        j                  | d      } d}|t        || j
                        }| j                  d | |j                  z   | j                  |dz   d  z   }|j                         }t        j                  | ||      j                  |      }|j                  |      S t        j                  | |      S )Nr   r   r   r   )r   index)r'  )r   longrO   r&   wherer   r  r  	embeddingr   r   r  index_selectr  take)r9   indicesr   x_dimrO   r  s         r   r,  r,    s2   !A(--/G!-AGGDM1771:Ekk!%G
 	vv{tqyxx"",,Wa88|MM!U# qvv..1DD --/  G<DDTJ{{5!!::aw''r/   c                     t        |       } t        |      j                         }|| j                  |   n| j                  d   }t        j                  |dk  ||z   |      }t        j
                  | ||      S )Nr   r   )r   r(  rO   r&   r)  take_along_dim)r9   r-  r   r.  s       r   take_along_axisr1    sq    !A(--/G!-AGGDM1771:Ekk!%G
 755r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   tanr   s    r   r3  r3    r  r/   c                 B    t        |       } t        j                  |       S r1   )r   r&   tanhr   s    r   r5  r5    r  r/   c                    t        |       } t        |      }t        j                  | j                  |j                        }t        j                  |t              }t               dk(  r|dk(  rd}t        | |      } t        ||      }t        |t        t        f      r;|\  }}t        |t        t        f      s|f}t        |t        t        f      s|f}||f}t        t        j                  | ||      |      S )Nr+   rU   rV   rT  )r   r   rY   r8   r   r   r   r(   r=   r#   r&   	tensordot)r4   r5   r-   r[   rF   firstseconds          r   r7  r7    s    	2	B	2	B%%bhh9L&&|U;M|u)!;!	b-	 B	b-	 B$u&v%$/HE&4-0YFvBT2LAAr/   c                     t        |       } t        | j                        }d|v r?t        | t	        j
                               } t        t        j                  | |      |      S t        j                  | |      S )NrW   )decimals)r   r	   r8   r   r   r?   r&   round)r9   r;  rd   s      r   r<  r<    s]    !A!!''*I	FMMO$EKKH5yAA;;q8,,r/   c                     t        |      r't        |j                         j                               }t	        |t              r|f}t        |       } t        j                  | |      S rS  )r   r#   rW   r,   r(   r   r&   r\  )r9   r  s     r   r\  r\    sO    ++-.'3*!A::ag&&r/   c                     t        |       } t        | j                        }|dk7  rt        j                  |d      }t        j                  t        j                  | |||      dt        |            S )Nr   r;   r   r#  )	r   r	   r8   r   rY   r&   r   r+  r   )r9   r0  r5  r6  r8   s        r   tracer?    sb    !Aagg&E""5'299q&%/U# r/   c                     t        |xs t        j                               }|xs | }t        j                  | |f|t                     }t        j                  ||      S )Nrk  r*  )r   r   r?   r&   rx   r   tril)NMr   r8   r9   s        r   trirD    sI    53FMMO4E	QA

Aq6z|<A::a!$$r/   c                 F    t        |       } t        j                  | |      S r)  )r   r&   rA  r-  s     r   rA  rA    r.  r/   c                 F    t        |       } t        j                  | |      S r)  )r   r&   triur-  s     r   rG  rG  	  r.  r/   c                 v    t        |       } t        | j                        dk(  r| S t        j                  |       S rH   )r   r	   r8   r&   truncr   s    r   rI  rI    s0    !A!V+;;q>r/   c                 N   t        |       } t        |      }t        j                  | j                  |j                        }t        j                  |t              }t               dk(  r|dk(  rd}t        | |      } t        ||      }t        t        j                  | |      |      S r   )	r   r   rY   r8   r   r   r   r&   vdotr   s       r   rK  rK    s    	2	B	2	B%%bhh9L&&|U;M |u)!;!	b-	 B	b-	 B

2r"L11r/   c                 N   t        |       } t        |      }t        j                  | j                  |j                        }t        j                  |t              }t               dk(  r|dk(  rd}t        | |      } t        ||      }t        t        j                  | |      |      S r   )	r   r   rY   r8   r   r   r   r&   innerr   s       r   rM  rM  %  s    	2	B	2	B%%bhh9L&&|U;M|u)!;!	b-	 B	b-	 BB#\22r/   c                 f    | D cg c]  }t        |       } }t        j                  |       S c c}w r1   )r   r&   vstackrg  s     r   rO  rO  3  rh  ri  excluded	signaturec                <    t        | t        j                  ||      S )NrP  )r   r&   vmap)pyfuncrQ  rR  s      r   	vectorizerV  8  s    

X r/   c                     t        | t              } |/|-t        |      }t        |      }t        j                  | ||      S t        j                  |       S r}   )r   rI   r&   r)  )	conditionr4   r5   s      r   r)  r)  >  sM    !)48I	~".r"r"{{9b"--{{9%%r/   c                     t        | t        t        f      st        |       } t        |t        t        f      st        |      }t	        j
                  | |      S r1   )r(   rW   r   r   r&   divider3   s     r   rZ  rZ  H  sC    b3,'r"b3,'r"<<Br/   c                     t        | t        t        f      st        |       } t        |t        t        f      st        |      }t	        j
                  |dk(  dt	        j                  | |            S )Nr   )r(   rW   r   r   r&   r)  rZ  r3   s     r   divide_no_nanr\  P  sT    b3,'r"b3,'r";;rQw5<<B#788r/   c                     t        | |      S r1   )rZ  r3   s     r   true_divider^  X  s    "b>r/   c                 Z    t        |       t        |      }} t        j                  | |      S r1   )r   r&   powr3   s     r   powerra  \  s'    r"$5b$9B99Rr/   c                 B    t        |       } t        j                  |       S r1   )r   r&   negativer   s    r   rc  rc  a  rx  r/   c                     t        |       } t        | j                        dk(  rt        | d      } t	        j
                  |       S r  )r   r	   r8   r   r&   squarer   s    r   re  re  f  s7    !A!V+G<<?r/   c                     t        |       } t        | j                        dk(  rt        | t	        j
                               } t        j                  |       S rX  )r   r	   r8   r   r   r?   r&   sqrtr   s    r   rg  rg  m  s=    !A!W,FMMO$::a=r/   c                 t    t        |       } |t        j                  | |      S t        j                  |       S r   )r   r&   r  r   s     r   r  r  t  s2    !A}}QD))==r/   c                 b    t        |       } |t        j                  | |      S | j                  S rS  )r   r&   r  r  )r9   r-   s     r   	transposerj  {  s,    !A}}QT**33Jr/   c                 *   t        |       } t        j                  | j                  d      }t        j                  | j                  t              }|g k(  s|dk(  rt        | |      S t        | |      } t        t        j                  | ||d      |      S )NrV   r_   r   )r   r   
correction)	r   r   rY   r8   r   r~   r   r&   var)r9   r   rc   rF   r[   s        r   rm  rm    s    !A&&qww	:M%%aggu5LrzTRZ!\**QA		!xA> r/   c                 .   t        | t        t        f      rt        |       } t	        |       } |dk(  s|g k(  r| S t        | j                        }|dv rd}|"t        t        j                  | ||      |      S t        t        j                  |       |      S )Nr_   )rI   r   r:   r  r;   )r   r   )
r(   r=   r#   ra   r   r	   r8   r   r&   r   )r9   r   rc   r8   s       r   r   r     s    !dE]#!H!ArzTRZagg&E 22EIIadH=uEE		!e$$r/   c           	         t        |xs t        j                               }|| n|}|dn|}|dk(  rut               dk(  rG|t        j
                  k(  r4t        t	        j                  | |t        d      t                     |      S t	        j                  | ||t                     S t        j                  | |      }t	        j                  ||t                     }t	        j                  ||      d | d |f   S )Nr   r+   rV   rk  r*  )r   r   r?   r   r&   r  r   rl  r$   rl   rx   r,  )rB  rC  r   r8   diag_lengthr,  s         r   rl  rl    s    53FMMO4EYAAYAAAv<5 Uenn%<		qy 9*, 	  yyAU:<@@,,q!$K::kz|DD::dQ'BQB//r/   c           
      B   t        | t        t        f      st        |       } t        |t        t        f      st        |      }t	        j
                  t        | dt        |             t        |dt        |                  }t        t        j                  | |      |      S r  )r(   rW   r   r   r   rY   rn   r   r   r&   floor_divider  s      r   rr  rr    s~    b3,'r"b3,'r"GT"X&GT"X&E ""2r*E22r/   c                 Z    t        |       t        |      }} t        j                  | |      S r1   )r   r&   logical_xorr3   s     r   rt  rt    r  r/   c           
         t        |       } t        |      }t        j                  t        | dt	        |             t        |dt	        |                  }|dk(  rd}n|dvrd}t        | |      } t        ||      }| j                  d      |j                  d      }}| j                  d d |j                  d d k7  rt        | j                  d d |j                  d d       D cg c]  \  }}t        ||       }}}t        j                  | || j                  d   gz         } t        j                  |||j                  d   gz         }t        j                  | j                  d d       j                         }	t        j                  | t        |	      | j                  d      f      } t        j                  |t        |	      |j                  d      f      }t        j                   j"                  j%                  | |j'                  d      | j                  d      |j                  d      dz
  	      }
| j                  d d d
z   }|
j                  |      }|dk(  rSt)        j                  ||      t)        j*                  ||      z
  dz   }|j                  d      |z
  dz  }|d|||z   f   }|dk(  r#|j                  d      |z
  dz  }|d|||z   f   }t        j,                  |      S c c}}w )Nr8   r   r  )r  rU   r  rV   r   r   r   )groupspaddingr&  validr   .same)r   r   rY   rn   r   r   rv   rO   r   rl   r&   r   rk   r  r   rW   r  r  conv1drM  r$   r   r  )r4   r5   r  r8   x1_lenx2_lenr  j	new_shapenum_signalsoutputoutput_shapere   target_length	start_idxs                  r   	correlater    s   	2	B	2	BGT"X&GT"X&E 	8	8	b%B	b%BWWQZFF	xx}"%+.rxx}bhhsm+LM41aSAYM	MI"$>?I"$>?,,rxx}-224K	rC,bggbk:	;B	rC,bggbk:	;BXX  ''
BLLOBGGAJa ( F 88CR=5(L^^L)FwLL(8<<+GG!K 	 [[_}4:	Y])BBBCv~[[_v-!3	YV);;;<==  3 Ns   %K1c                 
   | D cg c]  }t        |       } }|D cg c]  }t        |       }}t        |      }t        t        t        | |                  D ]  \  }}t	        j
                  |||      } |S c c}w c c}w r1   )r   reversedr=   r   r&   r)  )condlist
choicelistdefaultcr  vs         r   selectr    s    .67!!$7H70:;1#A&;J;
G
$Cc(J789 %1kk!Q$%J 8;s
   A;B c                 h    t        |       } t        t        j                  j	                  |             S r1   )r   r#   r&   linalgslogdetr   s    r   r  r    s&    !A%%a())r/   c                 :   t        | d      } t        j                  | |d      } t        j                  |  |dz         d   }d }t	        | j                         dz
        D ]  }t        j                  |      }  |t        j                  | t        j                        |      }t        j                  || j                  d   |z
  dz
        d   }t        j                  ||g| j                         dz
        }t        t        j                  |d|      d      S )Nr;   r   r   c                 d    t        j                  d| j                  | j                        | |<   | S )Nr   rk  )r&   r{   r8   rw   )r   r  s     r   set_to_zeroz!argpartition.<locals>.set_to_zero  s%    {{1AGGAHH=!r/   r`   r   )r   r&   rj  topkrU  r   rT  r  r;   rO   r   r   )	r9   kthr   
bottom_indr  r  proxytop_indr  s	            r   argpartitionr    s    !W%A4$AQBa(+J 1557Q; .jj-.=zJEjjc 1A 56q9G
))Z)quuw{
;CR.88r/   c                 b    t        j                  | ||      }|j                  |j                  fS )N)r=  rU  )r&   	histogramhist	bin_edges)r9   r=  rU  hist_results       r   r  r    s+    //!$e<K[2222r/   )r   )r   r   )NF)NFNr1   )Nr   Nr&  )NN)Nr   F)r   )r   r   r   r   )r   r   r   )r   r   )gh㈵>g:0yE>F)2   TFNr   )r  T
   Nr   )g        NN)r  N)NlinearF)left)r   )NNN)Nr   N)rx  )r$   r  r,   r)   r&   keras.src.backendr   r   keras.src.backend.commonr   &keras.src.backend.common.backend_utilsr   r   r   "keras.src.backend.common.variablesr	   keras.src.backend.torch.corer   r   r   r   r   r:   r  r;   r   TORCH_INT_TYPESr'   r2   r@   rJ   rZ   r]   rb   rl   rx   r{   r~   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   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r  r  r$  r'  r,  r1  r+  r9  r>  r@  rB  rE  rH  rJ  rO  rQ  rV  rY  rj   r`  rb  rd  rf  rm  ro  rr  rw  rz  r|  r~  r  r  r  r  r  r  r  r  r  r  r  rp   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  rv   r  r  ra   r!  r$  r,  r1  r3  r5  r7  r<  r\  r?  rD  rA  rG  rI  rK  rM  rO  rV  r)  rZ  r\  r^  ra  rc  re  rg  r  rj  rm  r   rl  rr  rt  r  r  r  r  r  r_   r/   r   <module>r     s       ) $ + D C A @ - : 3 2 7 
JJ	KK	KK	KK	$N/ "54p"!&H4DE,55)"





5
LL
H-(,
+
>># 
"#*$+%,
(
,$/ #
((


==,C"B"%
'
(
?2$E

$
C
!
'

	:8



$ IJ/d



' %
 
$
-`!'!T  0
2!#E
F

-
#
+3
/d:(!V
L
9$&+





*@$
D7
(6
6

B,-'	%%
%
2 3
 #'$ & 9

%"0&	3%
,!^*
9"3r/   