
    ukiM                     	   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
 e j                  Ze j                  Ze j                  Ze j"                  Zej&                  Zej*                  Zej,                  Zej.                  Zd Zej2                  Zej4                  Zej8                  Zej:                  Zej<                  Zej>                  Zej@                  Z ejB                  Z!ejD                  Z"ejF                  Z#ejH                  Z%ejL                  Z&d Z'ejP                  Z(ejR                  Z)ejT                  Z*ejV                  Z+ejX                  Z-ej\                  Z/ej`                  Z1ejd                  Z2ejf                  Z3ejh                  Z5ejl                  Z7ejp                  Z9d Z:d Z;d Z<d	 Z=ej|                  j~                  Z@ej|                  j                  ZBd
 ZCd ZDd ZEd ZFd ZGej                  ZHej                  ZId ZJd ZKej                  ZMej                  ZOej                  ZPej                  ZQej                  ZRej                  ZSej                  ZTej                  ZVej                  ZXd ZYd ZZej                  Zej                  Zej                  Z^ej                  Z`d Zad Zbej                  Zdej                  Zfej                  Zhej                  Zjej                  Zlej                  Znd Zod Zpd Zqd Zrd Zsd Ztd Zud Zvd Zwej                  Zxd Zyd Zzd  Z{d! Z|ej                  Z}ej                  Z~d;d"Zd# Zd$ Zej                  Zd;d%Zd& Zd' Zej                  Zd( Zd) Zej                  Zd<d*Zd+ Zd, Zd- Zd. Zd=d/Zd0 Zd1 Zd2 Zd3 Zd4 Z ej*                  d5d6d7g      Z eej                  j                  e       eej                  j                  e       eej                  j                   eej                               eej                  j                   eej                               eej                  j                   eej                               eej.                  j                   eej.                               eej0                  j                   eej0                              d8Zd9 Zd<d:Zy)>    N)dtypes)utilc                 H   t        j                  | t        j                  t        j                  t        j                  d| j
                        t        j                  d| j
                        | j
                        |       z         j                  | j
                        S )Ng      ?dtype        )nptrunccopysign	nextafterarrayr   astypexs    Q/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/lax_reference.pyroundr   %   sn    	BLL"AGG!<!#"AGG!<'(ww012	4 4
5 6<VAGG_E    c                 X    t        j                  |       t        j                  |       z  S N)r	   	ones_likesqrtr   s    r   <lambda>r   :   s    ",,q/BGGAJ. r   c                 l    ddt        j                  |        z   z  j                  | j                        S )N   )r	   expr   r   r   s    r   logisticr   I   s)    a"&&!*n-55agg>>r   c                 v    t         j                  j                  | ||      j                  |j                        S r   )scipyspecialbetaincr   r   )abr   s      r   r    r    J   s)    U]]221a;BB177KKr   c                 r    t         j                  j                  |       j                  | j                        S r   )r   r   gammalnr   r   r   s    r   lgammar%   K   s%    emm++A.55agg>>r   c                 r    t         j                  j                  |       j                  | j                        S r   )r   r   digammar   r   r   s    r   r'   r'   L   s%    u}},,Q/66qww??r   c                 r    t         j                  j                  |       j                  | j                        S r   )r   r   erfr   r   r   s    r   r)   r)   O   s%    5==$$Q'..qww77r   c                 r    t         j                  j                  |       j                  | j                        S r   )r   r   erfcr   r   r   s    r   r+   r+   P   s%    EMM&&q)0099r   c                 r    t         j                  j                  |       j                  | j                        S r   )r   r   erfinvr   r   r   s    r   erf_invr.   Q   s%    u}}++A.55agg>>r   c                 r    t         j                  j                  |       j                  | j                        S r   )r   r   i0er   r   r   s    r   
bessel_i0er1   S   %    %--++A.55agg>>r   c                 r    t         j                  j                  |       j                  | j                        S r   )r   r   i1er   r   r   s    r   
bessel_i1er5   T   r2   r   c                 X    t        j                  |       t        j                  d      z   S )Nr   )r	   conj	complex64r   s    r   r7   r7   Y   s    	bll1o	%%r   c                 8    | t        j                  d      |z  z   S )Ny              ?)r	   r8   )r   ys     r   complexr;   \   s    	
R\\"!	!!r   c                    t        j                  t        j                  |       t        j                        rt        j
                  | |      }t        j                  t        j                  |       t        j                  |      k7  t        j                  | |      dk7        }t        j                  ||dz   |      S t        j                  | |      S )Nr   r   )r   
issubdtyperesult_typer	   integerfloor_dividelogical_andsign	remainderwheredivide)lhsrhsquotientselects       r   divrJ   k   s    v))#.

;sC(H^^BGGCLBGGCL8\\#s3q8:F88FHqL(3399S#r   c                     t        j                  |       t        j                  t        j                  |       t        j                  |            z  S r   )r	   rB   rC   abs)rF   rG   s     r   remrM   t   s0    	RVVC["&&+>	>>r   c                 b   t        j                  | j                  t         j                        sJ | j                  }t        j                  | j                        }t        j                  | j                        j
                  dk  rN|j                  dv sJ | j                  |j                  dk(  rt         j                  nt         j                        } |j                  dk(  r;| j                  dt        j                  | j                        j
                         } | j                  t         j                  t         j                  fv sJ t        j                  d      t        j                  d      t        j                  d      t        j                  d	      t        j                  d
      t        j                  d      g}| j                  t         j                  k(  r&t        t        t         j                  |d d             }| |d   z  | dz	  |d   z  z   } | |d   z  | dz	  |d   z  z   } | |d   z  | dz	  |d   z  z   } | |d   z  | dz	  |d   z  z   } | |d   z  | dz	  |d   z  z   } | j                  t         j                  k(  r| |d   z  | dz	  |d   z  z   } | j                  |      S )N    )iurQ   rP   uintl   UU*UU* l   33ffL l   <<xxl    l     l    r   r                     )r	   r=   r   r?   iinfobitskindr   uint32int32viewuint64listmap)r   r   rZ   ms       r   population_countrd   ~   s7   	qww

	++	+
''%
((177
%XXaggb ::###	ejjC/RXX>A
ZZ3	bhhqww',,-./A	
RYY		*	**	*ii"#ii"#ii"#ii"#ii"#ii"#! WW		SAcrF#$A1Q4xQ1W!$%!1Q4xQ1W!$%!1Q4xQ1W!$%!1Q4xQ1W!$%!1Q4xQ"W!$%!WW			
QqTqBw!A$&'A	
%r   c                    t        j                  | j                  t         j                        sJ t        j                  | j                        j
                  }dt        j                  || j                        z  d d d   }| d   |z  j                  t         j                        }t        j                  |d      j                  | j                        }||| dk(  <   |S )NrT   r   rS   ).Naxisr   )
r	   r=   r   r?   rZ   r[   aranger   bool_argmax)r   nbitsmaskr[   outs        r   clzrn      s    	qww

	++	+
((177

 
 %
ryyagg.
."	5$
I,
	%	%bhh	/$
		$R ''0##a1f+	*r   c                 0    t        j                  | |      S Nr   )r	   asarray)operandr   s     r   convert_element_typers      s    	G5	))r   c                 v    | j                   dk(  sJ | j                  d      } | dd d df   | ddd df   dz  z   S )Nuint4uint8.rT   r   rU   )r   r   )rr   s    r   _bitcast_uint4_to_uint8rw      sN    	'	!!	!NN7#'	cc	gc14a4i0A5	66r   c                    | j                   dk(  sJ t        j                  g | j                  d d | j                  d   dz  d      }| dz  j	                  d      |dd d df<   | dz  d	z	  j	                  d      |dd
d df<   |S )Nrv   rS   rT   ru   r      .   rU   r   )r   r	   zerosshaper   )rr   results     r   _bitcast_uint8_to_uint4r~      s    	'	!!	!88@gmmCR(@'--*;a*?@P&
*227;&cc*,2::7C&add	-r   c                    t        j                  |       } t        j                  | j                        }t        j                  |      }||kD  r'| j
                  d   ||z  k(  sJ | j
                  d d }n&||k(  r| j
                  }ng | j
                  ||z  }|dk(  rt        | j                  d            } |dk(  rt        | j                  d            } | j                  |      j                  |      S )NrS   rU   ru   rv   )
r	   rq   r   itemsize_bitsr   r|   rw   r_   r~   reshape)rr   r   nbits_in	nbits_out	out_shapes        r   bitcast_convert_typer      s    JJw'!!'--0(""5))==	X 5555cr"IHI7'--7Y!67I ]%gll7&;<G!^%gll7&;<G	e		$	$Y	//r   c                     t        j                  |t        j                  | d |      |      j                  |j                        S r   )r	   clipr   r   )minrr   maxs      r   clampr      s1    	"''#tS13	7	>	>w}}	MMr   c                 0    t        j                  | |      S Nrf   )r	   concatenate)operands	dimensions     r   r   r      s    	y	11r   c                 n    t        | j                  dd  |j                  dd  ||      }t        | |||      S NrT   )padtype_to_padsr|   _conv)rF   rG   window_stridespaddingpadss        r   convr      s7    	12		!"~w	O$	sC	..r   c                 F    t        t        | |      t        ||      ||      S r   )r   _dilate)rF   rG   r   r   lhs_dilationrhs_dilations         r   conv_with_general_paddingr      s&    	wsL)73+Ew
( (r   c                 n   t        |      \  }}}	t        |t              rPt        t	        j
                  | j                  |      dd  t	        j
                  |j                  |      dd  ||      }t        | |      }
t        ||      }t        |
|||||      }t        |t	        j                  |	            S r   )
_conv_general_permutations
isinstancestrr   r	   taker|   	transposer   argsort)rF   rG   r   r   r   r   dimension_numberslhs_permrhs_permout_perm	trans_lhs	trans_rhsrm   s                r   conv_general_dilatedr      s    !;<M!N(Hhbggcii:12> ggcii:12>,g7G X&)X&)!)Y".	>#	3

8,	--r   c                 R   |\  \  }}\  }}t        j                         }| j                  D cg c]  }t        |       }	}|j                  D cg c]  }t        |       }
}|	d d  }|
d d  }t	        ||      D ]$  \  }}t        |      }||	|<   ||
|<   d ||<   d ||<   & g }t	        ||      D ]5  \  }}t        |      }||	|<   ||
|<   d ||<   d ||<   |j                  |       7 d }t        |||z   |z         }| j                  |j                  k(  sJ | j                  t        j                  k(  rt        j                  nd }t        j                  | |	||
||      }| j                  t        j                  k(  r|j                  t        j                        S |S c c}w c c}w )Nc                 
    | d uS r    r   s    r   r   zdot_general.<locals>.<lambda>	  s
    q} r   r   )	itertoolscountr|   nextzipappendfilterr   r   bfloat16r	   float32einsumr   )rF   rG   r   lhs_contractingrhs_contracting	lhs_batch	rhs_batchnew_id_lhs_axis_idsrhs_axis_idslhs_out_axis_idsrhs_out_axis_idslhs_axisrhs_axis	shared_id	batch_idsnot_noneout_axis_idsr   rm   s                        r   dot_generalr      s   ?P<$?O&<y)??&(+		21$v,2,2(+		21$v,2,2!!_!!_A &hVI&L&L!%X!%X& )	95  hVI&L&L!%X!%XY  %(!$447GGI,	cii				V__4"**$%
		#|S,	 #(+		V__(DFOO	$M#M9 32s   FF$c                    | j                   \  }}|j                   \  }}}||k(  sJ ||j                   d   k(  sJ | j                  |j                  k(  sJ t        j                  ||f| j                        }t        j                  t        j
                  |j                   d         t        t        d|j                                    }	|	j                  |j                        }	t        j                  d|j                        }
t        |      D ]  \  }}|t        j                  t        j                  |
|	k  |	|
|z   k        t        j                  d| ||ddddf   | j                  t        j                   k(  rt        j"                  nd      t        j                  |j                   |j                              z  }|
|z  }
 | j                  t        j                   k(  r|j                  t        j                         S |S )z$Reference ragged dot implementation.r   r   r   z	nk,km->nmN)r|   r   r	   r{   expand_dimsrh   ra   rangendimr   rq   	enumeraterD   rA   r   r   r   r   )rF   rG   group_sizesrc   lkgroup_countrknrm   result_iotastartrP   sizes                r   
ragged_dotr     s    ))%!Ryy+r1	r/	))!,	,,	,	cii		
!Qsyy)#ryy16U1chh=O8PQ+"";#4#45+
**Qk//
0%;' ga288
u+[EDL-IJ
		


aAg,!ii6??:

		
 	#)),	 	C 
TME ),		V__(DFOO	$M#Mr   c                 Z    t        j                  | |t        j                  |       z         S r   )r	   broadcast_tor|   )rr   sizess     r   	broadcastr   0  s!    	%"((7*;";	<<r   c                     t        j                  t        |      t         j                        }t	        |      D ]  \  }}| j
                  |   ||<    t        j                  t        j                  | |      |      S rp   )r	   oneslenr^   r   r|   r   r   )rr   r|   broadcast_dimensions
in_reshaperP   bds         r   broadcast_in_dimr   3  sa    wws5z2*-. &ea]]1%JrN&	GZ8%	@@r   c                     |'t        t        t        j                  |                   }t        j                  t        j
                  | |      |      S r   )r   r   r	   r|   r   r   )rr   	new_sizes
dimensionss      r   r   r   =  s<    s288G,-.J	BLL*5y	AAr   c                 t   t        j                  |      \  }}}t        j                  |dd       t        j                  |dd       }}t        j                  t        j                  t        j                  ||      | j
                        t        j                  |t        j                  | j
                  d                  }t        j                  ||| j                        }	t        d t        ||t        j                  d|            D              }
| |	|
<   t        d t        ||      D              }|	|   S )Nr   r   c              3   \   K   | ]$  \  }}}t        |d kD  r|nd |d kD  r| nd|       & ywr   N_slice).0lhsteps       r   	<genexpr>zpad.<locals>.<genexpr>J  s;      Q#At QAAQUrdK Qs   *,c              3   X   K   | ]"  \  }}t        |d k  r| nd |d k  r|nd       $ ywr   r   )r   r   r   s      r   r   zpad.<locals>.<genexpr>M  s5      .A 1q5aRaa!eF .s   (*)r   unzip3r	   r   addr|   multiplysubtractfullr   tupler   )rr   padding_valuepadding_configlohiinteriorlo_poshi_posoutshaperm   
lhs_slicestrim_slicess               r   padr   B  s    [[0"b(772q$'Q)=&&VVBFF266&&17==A[[2;;w}}a+HIK(
-7# Q'*66266!X;N'OQ Q*#j/ .!$R. .+	[	r   c                     t              fdt        t        j                  |             D        }| t	        |         S )Nc              3   V   K   | ]   }|v rt        d d d      n
t        d        " y w)NrS   r   )r   dr   s     r   r   zrev.<locals>.<genexpr>S  s1      / ()JVD$#F4LH /s   &))	frozensetr   r	   r   r   )rr   r   indexers    ` r   revr  Q  s9    $*/BGGG,-/'	w	  r   c                     |1t        j                  t        |            j                  t              }t        t        t        |||            }| |   S r   )r	   r   r   r   intr   _mapr   )rr   start_indiceslimit_indicesstridesslicess        r   slicer  Y  sD    _ggc-()005Gfm]GDE&	r   c                     t        j                  || j                        }t        d t	        ||      D              }| |   }||t        d |j
                  D              <   |S )Nr   c              3   @   K   | ]  \  }}t        |||z           y wr   r   )r   r   r   s      r   r   z dynamic_slice.<locals>.<genexpr>a  s)      B% UE$J' Bs   c              3   4   K   | ]  }t        d |        y wr   r   )r   stops     r   r   z dynamic_slice.<locals>.<genexpr>d  s     94F49s   )r	   r{   r   r   r   r|   )rr   r	  slice_sizesrm   idxsections         r   dynamic_slicer  _  s^    
GMM2# B!$]K!@B 	B#CL'=D#e97==99:	*r   c           
          t        t        t        |t        j                  ||j
                                    }t        j                  |       }|||<   |S r   )r   r  r   r	   r   r|   copy)rr   updater	  r  updated_operands        r   dynamic_update_slicer  g  sB    fmRVVM6<<-PQR&GGG$/"/&	r   c                     t        ||      } || t        |            j                  t        j                  |       j
                        S r   )_make_reducerr   r   r	   rq   r   )rr   
init_valuecomputationr   reducers        r   reducer   o  s:    +z2'	%
+	,	3	3BJJw4G4M4M	NNr   c                 p   | ||}	}}t        |t              rt        |j                  ||	|      }
n|}
|j	                  d|j                  z         }|rt        |||      }t        |d|z   |	|
|      d   }|j	                  |j                  ddt        |      z    dz         }t        ||      } ||d      S )N)r   r   )	pad_valuer   r   rS   rS   rf   )	r   r   r   r|   r   r   
_conv_viewr   r  )rr   r  r  window_dimensionsr   r   base_dilationopdimsr  r   r_   r  s                r   reduce_windowr)  s  s    0.Gd"288T7G<DD	zz&288#$"	]J	/B	Bw(
**+
-$	djj1SY;/%7	8$+z2'	B	r   c           
         t        t        j                  | j                  D cg c]  }t        j                  |       c}       }t        j
                  | |      ||<   | t        |         |t        |         fS c c}w r   )ra   r	   ix_r|   rh   r   r   )keysvaluesr   r  idxss        r   sort_key_valr/    sb    	bffTZZ8ryy|89	:$JJt)4$y/	eDk	F5;/	// 9s   A=c                 t    t        | |j                  ||d      \  }}}}t        j                  |||||d      S )Nr   T)use_blas)r$  r|   
opt_einsumcontract)rF   rG   r   r   r_   	view_axesrhs_axesout_axess           r   r   r     sD    (2	399ndB)0%$	8X			
IsHh
? ?r   c           
         |j                         dk(  s|j                         dk(  rt        j                  t        j                  | |            j	                  t
              }t        ||||       D cg c]  \  }}}}t        |dz
  |z  |z   |z
  d      ! }	}}}}|j                         dk(  r|	D 
cg c]  }
|
dz  |
|
dz  z
  f c}
S |	D 
cg c]  }
|
|
dz  z
  |
dz  f c}
S dgt        |       z  S c c}}}}w c c}
w c c}
w )NSAME
SAME_LOWERr   r   rT   r   r   )	upperr	   ceiltrue_divider   r  r   _maxr   )in_shapefilter_shaper   r   r   out_sizestridefilter_sizein_size	pad_sizespad_sizes              r   r   r     s!   ]]_'--/\"Ax@AHHMI 	><JL L;Xv{G x!|v-;gEqI LI L }}& DM8@8q=(X]2
3 
 EN8@8h!m#X]
3  8c(m##Ls   6$C7
6C?Dc                    t        | j                  t        |            dk  s-| j                  t        |      k7  s| j                  d   |d   k7  rt	        d      t        |      t        |      dz
  k7  rt	        d      t        |      t        |      dz
  k7  rt	        d      t        | dgdz  t        |      z   |      } | j                  dd }|dd }t        |      }t        j                  || j                  dd       }| j                  dd t        |      z   | j                  dd z   }	t        j                  t        j                  ||      |      dz   }
| j                  dd t        |
      z   |dd z   }t        j                  j                  j                  | ||	      }t        t!        |j                              }|| dz
  d }|j                  g|z   }d|j                  gt        t!        d|dz               z   }||||fS )	zECompute the view (and its axes) of a convolution or window reduction.rT   r   zDimension mismatchz.Wrong number of strides for spatial dimensionsz+Wrong number of pads for spatial dimensionsr:  Nr   )_minr   r   r|   
ValueError_padra   r	   r   r  r   r@   r   libstride_tricks
as_stridedr   )rF   	rhs_shaper   r   r"  r?  r@  dimout_stridesview_stridesr   
view_shaper_   r4  sum_axesr5  r6  s                    r   r$  r$    s   
388S^$q(CHHI,F	11	%
)
**C	NQ..
E
FFY#i.1$$
B
CCS6(Q,d+Y7#YYqr](12,L#NCKKO<+Ra5#55ABG,ookk(L)>;=>?)yy!}uY//)AB-?*				(	(j,	G$5#$)tAvw(ii[8#(^d5CE?33(	y(H	,,r   c           	          t        j                  | t        j                  d|      d|      j                  | j                        }t        d t        |t        j                  |             D              }||   S )Nr   constant)modeconstant_valuesc              3   t   K   | ]0  \  \  }}}t        |d k  rt        |      nd |d k  r||z  nd       2 ywr   )r   rL   )r   r   r   rO  s       r   r   z_pad.<locals>.<genexpr>  sA      @"Xb"s 26Bqb1f"s($O @s   68)r	   r   maximumr   r   r   r   r|   )arrr   r"  rm   r  s        r   rJ  rJ    sh    
sBJJq$'j )	++16#))+<  @&)$&>@ @&	Vr   c                    t        j                  | j                  dd  t        j                  t        j                  |d      t        j                  | j                  dd  d                  }t        j
                  | j                  d d t        |      z   || j                        }t        d |D              }| |t        d       fdz  |z   <   |S )NrT   r   c              3   6   K   | ]  }t        d d |        y wr   r   )r   r   s     r   r   z_dilate.<locals>.<genexpr>  s     B$VD$-Bs   )	r	   r   r|   r   r   r   r   r   r   )rr   factors
fill_valueoutspacerm   r   s         r   r   r     s     VVGMM!"%[[Wa!8"$++gmmAB.?"CEF( 	bq!E(O3ZO#B'BB**1#vd|oJ&'	*r   c           	         | \  j                  d      j                  d      ft        d t              D              z   }j                  d      j                  d      ft        t        d t              D        fd            z   }j                  d      j                  d      ft        t        d	 t              D        fd
            z   }|||fS )NOIc              3   0   K   | ]  \  }}|d vs|  yw)>   rb  ra  Nr   r   rP   cs      r   r   z-_conv_general_permutations.<locals>.<genexpr>  s     ODAq1J;NaOs   NCc              3   .   K   | ]  \  }}|d vr|  yw>   rg  rf  Nr   rd  s      r   r   z-_conv_general_permutations.<locals>.<genexpr>  #      6DAq!"*!4   6   c                 ,    j                  |          S r   index)rP   lhs_specrhs_specs    r   r   z,_conv_general_permutations.<locals>.<lambda>      8>>(1++F r   )keyc              3   .   K   | ]  \  }}|d vr|  ywri  r   rd  s      r   r   z-_conv_general_permutations.<locals>.<genexpr>  rj  rk  c                 ,    j                  |          S r   rm  )rP   out_specrp  s    r   r   z,_conv_general_permutations.<locals>.<lambda>  rq  r   )rn  r   r   sorted)r   r   r   r   ro  ru  rp  s       @@@r   r   r     s    !2(Hh~~c"HNN3$78OIh$7OOP(~~c"HNN3$78f 6Ih,? 6!FH II( ~~c"HNN3$78f 6Ih,? 6!FH II( 
8X	%%r   c                     t         j                  t        | d            }|r%|\  }}| |t        j                  |            k(  r|S t        | |      S )zBMake a reducer function given a Python binop and an initial value.__name__)_monoidsgetgetattrr   r>   _reducer_from_pyfunc)py_binopinit_valmonoid_recordr  monoid_identitys        r   r  r    sP     ,,wx<=-,G_?6#5#5h#?@@n	h	11r   c                     t        j                  | t        j                        rt        j                   S t        j
                  |       j                  S r   )r   r=   r	   floatinginfrZ   r   dts    r   _get_max_identityr    s4    %%b"++6"&&LBHHRL<L<LLr   c                     t        j                  | t        j                        rt        j                  S t        j
                  |       j                  S r   )r   r=   r	   r  r  rZ   r   r  s    r   _get_min_identityr    s2    $$R5K288B<;K;KKr   c                       fdS )Nc                 F    t        j                  j                  |       S rp   )r	   rq   identity)r   r'  s    r   r   z"_identity_getter.<locals>.<lambda>  s    rzz"++U; r   r   )r'  s   `r   _identity_getterr    s	    	;;r   MonoidRecordr  r  )r   r   r   mulr   rA   
logical_orc                      d fd	}|S )Nc                    |t        t        j                  |             n|}t        j                  t        j                  t        j
                  |       |      t        j                  |       j                        }t        j                  |       D ]6  \  }}t        t        j                  ||            } ||   | |         ||<   8 |S rp   )
r   r	   r   r   deleter|   rq   r   ndenumerater   )rr   rg   r}   r  r   out_idxr~  r}  s         r   r  z%_reducer_from_pyfunc.<locals>.reducer  s    &*l5!"DWWRYYrxx0$7JJw/557F..) @QbiiT*+g '#,?fWo@ Mr   r   r   )r}  r~  r  s   `` r   r|  r|  
  s     
.r   c                    |dk  r| j                   |z   }d|cxk  r| j                   k  sJ  J t        j                  | |      }t        j                  ||d      }| j                  |   dz
  t        j                  ||      z
  j                  t        j                        }|t        d       f|z  t        |      fz      }t        j                  | ||      }||fS )Nr   stable)rg   r\   r   rf   )	r   r	   flipr   r|   r   r^   r   take_along_axis)rr   krg   operand_flippedindices_flippedindices_allindicesr-  s           r   top_kr    s    	AX<<$D	
d	!W\\	!!	!!	!GGGT*/JJTI/t$q(277?D+IIQQRTRZRZ[+$.&)=>'gwT:&	r   r   r#  r  )builtinscollectionsr   numpyr	   r2  scipy.specialr   jax._srcr   r   r  r   r   r>  r   rH  rb   r  negativenegrB   floorr<  r   r   isfinite	is_finiter   exp2expm1loglog1ptanhsincosarctan2atan2r   rsqrtcbrtsquare
reciprocaltanarcsinasinarccosacosarctanatansinhcosharcsinhasinharccoshacosharctanhatanhr   r    r%   r'   r   gammaincigamma	gammainccigammacr)   r+   r.   r1   r5   realimagr7   r;   absoluterL   powerpowbitwise_notbitwise_and
bitwise_orbitwise_xorr   r   subr   r  rJ   rM   rY  minimum
left_shift
shift_leftright_shiftshift_right_arithmeticrd   rn   equaleq	not_equalnegreater_equalgegreatergt
less_equallelessltrs   rw   r~   r   r   r   r   r   r   dotr   r   r   r   sumsqueezer   r   r  rD   rI   r  r  r   r   r)  sortr/  r   r   r$  rJ  r   r   r  r  r  r  
namedtupler  rA   r  ry  r|  r  r   r   r   <module>r     sD           	||||||kk	ww
	wwE LL	KK	ff	ww
ff
	wwffff


	ww.	ww	]]
ff	yy	yy	yy	ww	ww








 > K > ?			
--
!
! 7 9 > > >	ww	ww&" 	kkhhnnnn]]
nnffkkkk? 	jjjj]]
 > XX\\ZZ]]WW*70*N2/(
. 	ffNBN<=A 	ff
**B
! 
 LL	O $ 
ww0?$"->	& 2ML< &{%%ny*6MN

))+<=

))+<='7'?@**,<R[[,IJR[[//-bkk:< 5 5 0 @Br}}33/>@		r   