
    Vpf<i                     	   d Z ddlmZ ddlZddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 dd	l0m2Z2 dd
l3m4Z4 ddl5m6Z6m7Z7 de7de7de7de6fdZ8de7de6fdZ9de7de6fdZ:de7de7de6fdZ;de7de7de6fdZ<de7de7de6fdZ=de7de7de6fdZ>de7de7de6fdZ?de7de7de6fdZ@de7de6fdZAde7de6fdZBde7de6fdZCde7de6fdZDde7de6fdZEd  ZFd! ZGd" ZHd# ZId$ ZJd% ZKd& ZLd' ZMd( ZNd) ZO G d* d+e          ZPd,e6de6fd-ZQd. ZRd/ ZSd0 ZTd1 ZUd2 ZVd3 ZWd4 ZXd5 ZYd6 ZZd7 Z[d8 Z\ e"e'e'e'gd9          Z] e2j^        e] e2j_         eXeO          d:;                      e1j`        e]eGeGeF            e#e'd<          Za e1j`        ead=             e2j^        ea ee(e4j9                              e#e'd>          Zb e2j^        eb ee(e4j:                              e1j`        ebd?             e"e'e'gd@          Zc e2j^        ec ee(e4j;                              e1j`        eceLeM            e"e'e'gdA          Zd e2j^        ed e2j_         eXeS          d:;                      e"e'e'gdB          Ze e2j^        ee e2j_         eXeV          d:;                      e1j`        edeIeH            e"e'e'gdC          Zf e2j^        ef e2j_         eXeU          d:;                      e1j`        efeKeJ            e"e'e'gdD          Zg e2j^        eg e2j_         eXeW          d:;                      e"e'e'gdE          Zh e2j^        eh ee(e4j@                              e#e'dF          Zi e2j^        ei e2j_        e\d:;                      e1jj        eidG             e#e'dH          Zk e2j^        ek ee(e4jB                             dI Zl e1jj        ekel            e#e'dJ          Zm e1j`        emdK             e2j^        em ee(e4jC                              e#e'dL          Zn e1j`        endM             e2j^        en ee(e4jD                              e#e'dN          Zo e1jj        eodO             e2j^        eo ee(e4jE                             dS )Pz` Special functions

LAX decompositions for special functions into their StableHLO counterparts.
    )EnumN)partial)$addbitwise_andbitwise_not
bitwise_orbroadcast_in_dimbroadcast_shapesconvert_element_typediveqexp	full_likegegtleloglog1pltmulneneg
reciprocalreduceselectsignsqrtsquarestandard_naryopstandard_unopsub_const_dtype_float_nary_lower_hlo_ones_isnan_reduce)
while_loop)dtypes)ad)mlir)chlo)Array	ArrayLikeabxreturnc                 :    t                               | ||          S )z1Elementwise regularized incomplete beta integral.)regularized_incomplete_beta_pbind)r0   r1   r2   s      T/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/_src/lax/special.pybetaincr8   (   s    	&	+	+Aq!	4	44    c                 6    t                               |           S )z7Elementwise log gamma: :math:`\mathrm{log}(\Gamma(x))`.)lgamma_pr6   r2   s    r7   lgammar=   ,   s    	q		r9   c                 6    t                               |           S )z%Elementwise digamma: :math:`\psi(x)`.)	digamma_pr6   r<   s    r7   digammar@   0       			r9   mc                 8    t                               | |          S )z-Elementwise polygamma: :math:`\psi^{(m)}(x)`.)polygamma_pr6   )rB   r2   s     r7   	polygammarE   4   s    			!Q		r9   c                 8    t                               | |          S )z2Elementwise regularized incomplete gamma function.)igamma_pr6   r0   r2   s     r7   igammarI   8   s    	q!		r9   c                 8    t                               | |          S )z@Elementwise complementary regularized incomplete gamma function.)	igammac_pr6   rH   s     r7   igammacrL   <   s    	1		r9   c                 8    t                               | |          S )zDElementwise derivative of the regularized incomplete gamma function.)igamma_grad_a_pr6   rH   s     r7   igamma_grad_arO   @   s    			a	#	##r9   c                 8    t                               | |          S )z5Elementwise derivative of samples from `Gamma(a, 1)`.)random_gamma_grad_pr6   rH   s     r7   random_gamma_gradrR   D   s    		!	!!Q	'	''r9   qc                 8    t                               | |          S )z6Elementwise Hurwitz zeta function: :math:`\zeta(x, q)`)zeta_pr6   )r2   rS   s     r7   zetarV   H   s    	Q		r9   c                 6    t                               |           S )zpExponentially scaled modified Bessel function of order 0:
  :math:`\mathrm{i0e}(x) = e^{-|x|} \mathrm{i0}(x)`
  )bessel_i0e_pr6   r<   s    r7   
bessel_i0erY   L        
		1		r9   c                 6    t                               |           S )zpExponentially scaled modified Bessel function of order 1:
  :math:`\mathrm{i1e}(x) = e^{-|x|} \mathrm{i1}(x)`
  )bessel_i1e_pr6   r<   s    r7   
bessel_i1er]   R   rZ   r9   c                 6    t                               |           S )z4Elementwise error function: :math:`\mathrm{erf}(x)`.)erf_pr6   r<   s    r7   erfr`   X   s    	Ar9   c                 6    t                               |           S )z]Elementwise complementary error function:
    :math:`\mathrm{erfc}(x) = 1 - \mathrm{erf}(x)`.)erfc_pr6   r<   s    r7   erfcrc   \   s     
Qr9   c                 6    t                               |           S )zAElementwise inverse error function: :math:`\mathrm{erf}^{-1}(x)`.)	erf_inv_pr6   r<   s    r7   erf_invrf   a   rA   r9   c                     t          |          t          |          z   t          ||z             z
  }t          |dz
  t          |           z  |dz
  t          |          z  z   |z
            }|| z  S N   )r=   r   r   r   )gr0   r1   r2   lbeta	partial_xs         r7   betainc_gradxrm   e   sr    
))fQii
&Q--
/%1q5E1"II%q5CFF"#%*+ , ,)	Qr9   c                      t          d          )Nz7Betainc gradient with respect to a and b not supported.
ValueError)rj   r0   r1   r2   s       r7   betainc_grad_not_implementedrq   k   s    LMMMr9   c                     | t          | |t          |          z
  t          |          z  z   t          |          z
            z  S N)r   r&   r   r=   rj   r0   r2   s      r7   igamma_gradxru   n   s<    	
S!q588|s1vv--q		9::	::r9   c                 (    | t          ||          z  S rs   )rO   rt   s      r7   igamma_gradarw   q   s    	
]1a  	  r9   c                 &    t          | ||           S rs   )ru   rt   s      r7   igammac_gradxry   t       
q!Q

	r9   c                 &    t          | ||           S rs   )rw   rt   s      r7   igammac_gradar|   w   rz   r9   c                      t          d          )Nz5polygamma gradient with respect to m is not supportedro   rj   rB   r2   s      r7   polygamma_gradmr   z   s    JKKKr9   c           
      `    | t          t          |t          |d                    |          z  S rh   )rE   r   r"   r~   s      r7   polygamma_gradxr   }   s)    	
Ys1fQll++Q//	//r9   c           
      D    ddddd fd}f
d} dgR  }t          t          t          |                    t          |j        d          |          }	dd	|	t          |	d          |	g}
t          |||
          }
|
         S )
Nr   ri            c                 d    |          }t          |          }|          }t          ||          S rs   )r   r   )values	iterationiterations_remain_condvalues_unconverged_condkIterationIdxkValuesUnconvergedIdxnum_iterationss       r7   while_cond_fnz7lentz_thompson_barnett_algorithm.<locals>.while_cond_fn   s;    }%I	>::$%:;-/FGGGr9   c                   
 |          } |g
R  } |g
R  }t          |t          ||                              }t          |          }t          t	          t          |          |          ||          }t          |t          ||                              }t          t	          t          |          |          ||          }t          |          }t          ||          }t          |          |          }|dz   | <   || <   || <   || <   t          t          t          |t          |d                                        }	t          |	          | <   | S )Nri         ?)r   r   r   r   r   absr   r   r   r!   r"   _any)r   r   partial_numeratorpartial_denominatorcsmall_constantddeltahtolerance_comparisoninputskCIdxkDIdxkHIdxr   r   nth_partial_denominatornth_partial_numeratorsmall	thresholds             r7   while_body_fnz7lentz_thompson_barnett_algorithm.<locals>.while_body_fn   si   }%I--iA&AAA11)EfEEE%6u!F!FGGAq%((Nr#a&&.))>1==A%6u!F!FGGAr#a&&.))>1==A1A1IIEF5M5!!A &MF=F5MF5MF5Mc#eVE3-?-?"@"@AA9MM$()=$>$>F !Mr9    T)r   r   r   r	   shaper   r)   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   ``````     @@@@@r7    lentz_thompson_barnett_algorithmr      s!   -
%
%
%H H H H H H H             0 0/;F;;;R'((%00e%8%>CC " "! d1Yq^^A&&m]F;;&	r9   c                
   | j         fd}fd}t          t          t          t          | t          | d                    t          |t          |d                              t	          |t          |d                              t          |t          |d                              }t	          || t          | d          z   | |z   t          |d          z   z            }| }t          || |          } t          |||          }t          ||t          t          |d          |                    }t          t          j
        k    rdndt          j                  j        dz                                t          j                  j        dz                                ||| ||g	          }	t          |           t          |          z   t          | |z             z
  }
|	t!          t#          |          | z  t%          |           |z  z   |
z
            z  | z  }t          |t          | t'          d
                    |          }t          ||t          t          |d          |                    S )Nc                 ^   t          | g           }t          |t          |d          z  t          |d                    }t          |t          |d                    }|t          |d          z
  }|t          |d          z  }t          |          }t          |d          }	t          |d          }
||z    ||z   |z   z  |z  ||
|z  z   ||
|z  z   |	z   z  z  }|||z
  z  |z  ||
|z  z   |	z
  ||
|z  z   z  z  }t          |d          }t	          |||          }t	          |||          S )z
    The partial numerator for the incomplete beta function is given
    here: http://dlmf.nist.gov/8.17.E23 Note that there is a special
    case: the partial numerator for the first iteration is one.
    r   r   ri          @r   )r	   r   r   r   r   )r   r0   r1   r2   iteration_bcastiteration_is_eveniteration_is_oneiteration_minus_onerB   onetwoeven_numeratorodd_numeratorone_numerator	numeratordtyper   s                  r7   nth_partial_betainc_numeratorzGregularized_incomplete_beta_impl.<locals>.nth_partial_betainc_numerator   sV    'y%<<O?Y-J-JJ$_a88: :/9_a+H+HII)Ioq,I,IIy)<a@@@AQ&&A
Aq//C
As

C1uXQ+a/	
S1WS1Ws*+-NQK!OC!Gc(9a#'k'JKMa%%M(.-HHI"M9===r9   c           	          t          | g           }t          t          |t          |d                    t          |d          t          |d                    S )Nr   ri   )r	   r   r   r   )r   r0   r1   r2   r   r   s        r7   nth_partial_betainc_denominatorzIregularized_incomplete_beta_impl.<locals>.nth_partial_betainc_denominator   sQ    &y%<<O"_i&C&CDDAq//9Q??4 4 4r9   r   ri   r      iX  r   )r   r   r   r   r   r   nan)r   r   r   r   r   r   r   r!   r   npfloat32r*   finfoepsastyper=   r   r   r   float)r0   r1   r2   r   r   r   result_is_nanconverges_rapidlya_origcontinued_fractionlbeta_abresultr   s      `        @r7    regularized_incomplete_beta_implr      se   
'%> > > > > >.4 4 4 4 4
 Z
q)Aq//Bq)Aq//22)4 )4q)Aq// 9Q??335 5- Q1a0QUYq#=N=N5NOPP&1%%!6**!3yA#:#:;;!72:--333<"Q&
.
.u
5
5|E""&*225997;q!9   AYY"VAE]]2(CFFQJrQ$>$I J JJQN&-1eEll!;!;VDD&	!63y/C/CV+L+L	M	MMr9   c                       e Zd ZdZdZdZdS )
IgammaModeri   r   r   N)__name__
__module____qualname__VALUE
DERIVATIVESAMPLE_DERIVATIVEr   r9   r7   r   r      s         
%*r9   r   
predicatesc                     t          | d          }| j        }t          t          t	          |                              }t          | |t          |          S )NF)r"   r   tuplerangelenr   r   )r   fpredicates_shapeall_dimensionss       r7   r   r      sL    Z!%s#3445566.	
Az>	:	::r9   c           
         d }fd}||t          |d          t          |d          |t          |d          t          |d          f}t          |||          }	|	d         }
|	d         }t          j        k    r|
| z  |z  S t	          |          t          |t          |d          z             z
  }t          j        k    r| |
|z  |z   z  |z  S t          j        k    r||
|z  z    |z  |z  S t          d          )Nc                 ,    t          | d                   S )Nr   )r   )valss    r7   cond_fnz_igamma_series.<locals>.cond_fn   s    Q==r9   c                    | \  }}}}}}}|t          |d          z   }|||z  z  ||z  ||z  z  z
  }||z   }|||z  z  }||z   }
t          j        k    r/t          |||z  t	          j        	          j        k              }n;t          |t          ||z            t	          j        	          j        k              }|t          ||| d                   t          ||| d                   t          ||| d                   t          ||| d                   t          ||| d                   t          ||| d                   fS )Nr   ri   r   r   r         )	r"   r   r   r   r*   r   r   r   r   )r   enabledrr   ansr2   dc_dadans_daconditionalr   modes            r7   body_fnz_igamma_series.<locals>.body_fn  sQ   ,0)GQ35'	F1bMMAQUOq1uQ//EoG	QUA
'CzS6<3F3F3J)JKKkk #EGO 4 4U8K8K8O OQ Qk
 Waa!!Waa!!Wc47##Waa!!WeT!W%%WgtAw'' r9   ri   r   r   r   zInvalid IgammaMode)
r   r)   r   r   r   r@   r"   r   r   rp   )axr2   r0   r   r   r   r   r   	init_valsr   r   r   	dlogax_das       ``       r7   _igamma_seriesr      s0          6 Q	!Q1a!Yq!__aOO)
 
GWi	0	0$Q#G'	Z"H>!ffwq6!Q<</000)	Z"""y7*+a//z+++sY&'!+a//
)
*
**r9   c                   t          t          |           t          |                    }t          |t          |d                    }t          |t          |t	          d                              }t          t          |t          |d                    t          | t          | d                              }t          t          |t          |d                    t          ||                     }| t          |          z  |z
  t          |           z
  }t          |t          t          j        |          j                             }	t          |          }t          t!          t           |||	|g                    }
t#          |t          | d          t%          ||| t          |
|          |t&          j                  z
  t+          ||| t          |
t          |                    |t&          j                            }t#          |t-          | d          |          }t#          |t-          | d          |          }t#          t          ||          t-          | t	          d                    |          }|S )Nr   infri   r   )r   r'   r   r"   r   r   r   r   r   r   r=   r*   r   maxr   r   r(   r   _igammac_continued_fractionr   r   r   r   )r0   r2   r   is_nan	x_is_zerox_is_infinitydomain_erroruse_igammacr   	underflowr   outputs               r7   igamma_implr   0  s   fQii++&F1aLL!!)Qq%,,//00-Bq&A,,//Ava||1D1DEE,Bq&A,,//Aq::+3q66zA~q		!"c&,u--122233)
2ww"j)\9fEFFH H' 
1aLL!"aK,M,M"')9; ;; 2q![+k2J2JKK**, , & )Yq!__f55&-1a&99&*\622AuU||,,f6 6&	-r9   c                    t          j        |          j        d }fd}t          |d          |z
  }||z   t          |d          z   }	t          |d          }
t	          |d          }|}|t          |d          z   }|	|z  }||z  }t	          |d          }t	          |d          }t	          |d          }t	          |d          }| }|||z  z
  |z  }|||||	|
|||||||||f}t          |||          }|d         }t          j        k    r|| z  S |d         }t          |          t          |          z
  }t          j
        k    r,t          | t          t          ||          |                    S t          j        k    r.t          t          |t          ||                    |z            S t          d           )Nc                 r    | ^}}}}}}}t          |t          |d          k     t          |                    S )Ni  )r   r"   r   )r   r   _ans_t_y_xr   _s           r7   r   z,_igammac_continued_fraction.<locals>.cond_fnM  s9    '+$GT2r2q1q6!T??*DMM:::r9   c                    | \  }}}}}}}}}	}
}}}}}|t          |d          z   }|t          |d          z   }|t          |d          z   }||z  }||z  |	|z  z
  }||z  |
|z  z
  }t          |t          |d                    }||z  }t          |t          t	          t          ||          |                    t          |d                    }t          |||          }||z  |z
  ||z  z
  |	|z  z   }||z  |z
  ||z  z
  |
|z  z   }t          |t	          |||z  z
  |          |          }t          |t          ||z
            t          |d                    }|}	|}|}
|}|}|}|}|}t          t          |          t          t          |                              }t          |t          |	t          |	                    |	          }	t          |t          |t          |                    |          }t          |t          |
t          |
                    |
          }
t          |t          |t          |                    |          }t          |t          |t          |                    |          }t          |t          |t          |                    |          }t          |t          |t          |                    |          }t          |t          |t          |                    |          }t          j        k    rt          ||k              }n"t          ||t          |          k              }|t          ||| d                   t          ||| d                   t          ||| d                   t          ||| d                   |t          ||| d                   t          ||| d                   t          ||	| d                   t          ||
| d	                   t          ||| d
                   t          ||| d                   t          ||| d                   t          ||| d                   t          ||| d                   fS )Nri   r   r   r   r   r         	   
               )r"   r   r   r   r   r!   r   r   r   r   r   r   r   )r   r   r   tyzr   pkm1qkm1pkm2qkm2dpkm2_dadqkm2_dadpkm1_dadqkm1_dar   ycpkqkqk_is_nonzeror   dpk_dadqk_dadans_da_newgrad_conditionalrescaler   r   r   s                              r7   r   z,_igammac_continued_fraction.<locals>.body_fnQ  sK   :>8Wc1aAtT48Xw	F1aLLA	F1aLLA	F1aLLA	
QB	D2I	B	D2I	Br6"a==))M
RA}c#c#qkk1"5"566	!QHHA
3
'
'C\D 8b=04!8;F\D 8b=04!8;FFS6\,A2(F(FPPKm!+"788'335 5 DDDDHHHHR*VB__5566G'3tVD#%6%677>>D'3tVD#%6%677>>D'3tVD#%6%677>>D'3tVD#%6%677>>Dgs8VHc-B-BCCXNNHgs8VHc-B-BCCXNNHgs8VHc-B-BCCXNNHgs8VHc-B-BCCXNNHzS11kk6"2C888: :k 	d1g	&	&	DG	$	$	DG	$	$	DG	$	$	
	tAw	'	'	tAw	'	'	tAw	'	'	tAw	'	'	48	,	,	48	,	,	48	,	,	48	,	,	d2h	/	/1 1r9   ri   r   r  zInvalid mode: )r*   r   r   r"   r   r)   r   r   r   r@   r   r   r   r   r   rp   )r   r2   r0   r   r   r   r   r   r  r  r   r  r  r	  r
  r   r  r  r  r  r  r   r   r   r   r   s        `                   @r7   r   r   J  s   U#; ; ;@1 @1 @1 @1 @1 @1D QllQ!!efQll!Qll!	1a$	
$	
VAq\\	$	
Q$t#1oo!q!__(q!__(q!__(R(h&$.'qQTTTT8Xw@) 
GWi	0	0$Q#	Z"9H'!ff

")	Z"""r3s3	**G44555z+++s7CY//0014555
,d,,
-
--r9   c                   t          t          |t          |d                    t          | t          | d                              }t          t          |t          |d                    t          ||                     }| t	          |          z  |z
  t          |           z
  }t          |t	          t          j        |          j                             }t          t          ||                    }t          |          }t          ||| t          ||          |t          j                  }t          ||| t          |t          |                    |t          j                  }	t!          |t          | d          |z
  |	          }
t#          |t          |t%          d                              }t!          |t'          |
d          |
          }
t!          |t'          | d          |
          S )Nr   ri   r   )r   r   r"   r   r   r=   r*   r   r   r   r   r   r   r   r   r   r   r   r   r   )r0   r2   r   out_of_range
use_igammar   r   r   igamma_calligammac_cf_callr   r   s               r7   igammac_implr    s   Bq&A,,//Ava||1D1DEE,"Qq!--r!Qxx88*3q66zA~q		!"c&,u--122233)
<;;<<'
2ww"r1aWj)I)I$j&68 8+/AqZ00115*:JL L/ *fQll[8/JJ&Qq%,,//00--61!5!5v>>&	i1oov	6	66r9   c                v   t          t          |           t          |                    }t          |t          |d                    }t          t	          |t          |d                    t          | t          | d                              }t          t          |t          |d                    t          ||                     }| t          |          z  |z
  t          |           z
  }t	          |t          t          j        |          j                             }t          |          }t          t          t          t          ||          |          |                    }	t          |t!          ||| t          |	|          |t"          j                   t'          ||| t          |	t          |                    |t"          j                            }
t          |t          |
d          |
          }
t          t          ||          t          | t)          d                    |
          }
|
S Nr   ri   r   )r   r'   r   r   r   r   r   r   r   r=   r*   r   r   r   r   r   r   r   r   r   r   r0   r2   r   r   r   r   r   r   r   r   r   s              r7   igamma_grad_a_implr#    s   fQii++&IaNN##)Bq)Aq//22Bq)Aq//4J4JKK,Bq)Aa..112a88<<+3q66zA~q		!"c&,u--122233)
2ww"
:j/ / )$+ $+,24 4 5 5'+ Q;w+L+L!&
(=? ? ?2q![+k2J2JKK*/1 12 2&
 )Yva00&99&*\622AuU||,,f6 6&	-r9   c                   t          t          |           t          |                    }t          |t          |d                    }t          t	          |t          |d                    t          | t          | d                              }t          t          |t          |d                    t          ||                     }| t          |          z  |z
  t          |           z
  }t	          |t          t          j        | j                  j                             }t          |          }t          t          t          t          ||          |          |                    }	t!          |t#          ||| t          |	|          |t$          j                   t)          ||| t          |	t          |                    |t$          j                            }
t!          |t          |
d          |
          }
t!          t          ||          t          | t+          d                    |
          }
|
S r!  )r   r'   r   r   r   r   r   r   r   r=   r*   r   r   r   r   r   r   r   r   r   r   r   r"  s              r7   random_gamma_grad_implr%    s   fQii++&IaNN##)Bq)Aa..112a1Q3H3HII,Bq)Aa..112a88<<+3q66zA~q		!"c&,qw//344455)
2ww"
:j/ /($* $*+13 3 4 4'+ Q;w+L+L!&
(DF F F2q![+k2J2JKK).
0LN NO O&
 )Yva00&99&*\622AuU||,,f6 6&	-r9   c                       fd}|S )Nc                     t          d | D              fd| D             } | d         j        }|t          j        k    p|t          j        k    }|rd | D             } t          j        }n|} | d|i}|rt          ||          }|S )Nc              3   $   K   | ]}|j         V  d S rs   )r   .0r0   s     r7   	<genexpr>z>_up_and_broadcast.<locals>.up_and_broadcast.<locals>.<genexpr>  s$      *A*Aq17*A*A*A*A*A*Ar9   c                 p    g | ]2}t          |t          t          |j                                      3S r   )r	   listr   ndim)r*  r0   broadcasted_shapes     r7   
<listcomp>z?_up_and_broadcast.<locals>.up_and_broadcast.<locals>.<listcomp>  s7    VVVAQ 14af3F3FGGVVVr9   r   c                 B    g | ]}t          |t          j                  S r   )r   r   r   r)  s     r7   r0  z?_up_and_broadcast.<locals>.up_and_broadcast.<locals>.<listcomp>  s%    @@@a"1bj11@@@r9   r   )r
   r   r*   bfloat16r   float16r   r   )argsa_dtypeneeds_upcasta_x_typer   r/  doits        @r7   up_and_broadcastz+_up_and_broadcast.<locals>.up_and_broadcast  s    (*A*AD*A*A*ABVVVVQUVVVD1gmGfo-FBJ1FL @@4@@@dhhhT4(x((F 5#FG44fMr9   r   )r8  r9  s   ` r7   _up_and_broadcastr:    s$         
r9   c                     t          | d          }t          | d          }t          | d          }|D ]}|}|}| |z  |z
  t          | |          z   } d||z
  z  S )Nr         ?)r   )r2   coefficientsb0b1b2r   s         r7   evaluate_chebyshev_polynomialrA     sl    1~~"1~~"1~~" ' 'a	B	B	
R"yA	&BB	Rr9   c                    t          j        g d          }t          j        g d          }t          |           } t          | d          }t          | d          }t          | d          }t	          || z  |z
  |          }t          t	          || z  |z
  |          t          |                     }t          | dk    ||          S )z
  Computes an approximation to the modified Bessel function of the first kind,
  zeroth order. The following implementation follows Cephes' F32 and F64
  implementation of i0e.
  )0K5dMv;p>"c쑾$>'doҾY(X?>ZY&+|t(?RBuZ?I ^qa?!N-Ί>?-4pKw?Wӿ*5N?)["d,->mրVX>na>+A>Rx?I墌k?	b?r<  r         @@       @r   arrayr   r   rA  r   r   r   r2   i0e_coeffs_ai0e_coeffs_bhalfr   
thirty_tworesult_le_8result_gt_8s           r7   _i0e_impl32rg  
  s     < < <
 
,       , 
!ff!	1c		$!S#D!!*-dQhnlKK+1*q.32F2>@ @AEaJ J+ 
S+{	3	33r9   c                    t          j        g d          }t          j        g d          }t          |           } t          | d          }t          | d          }t          | d          }t	          || z  |z
  |          }t          t	          || z  |z
  |          t          |                     }t          | dk    ||          S )N)g4!\Tg}b3<gr넱g^<g"P
g'&&KF5=gbLag$ӛ/=gjzg<t̾=gVg4T&>rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  )gT`g0fFVg!<gA`<gҫ`g8箸g}<g攐*<gbe~g2hϙ]'gE_V=gsk[=g&GCi=gfCg{~5g%t9QgO $=guo >rU  rV  rW  rX  rY  rZ  r[  r<  r   r\  r]  r^  r`  s           r7   _i0e_impl64ri  -  s    > > > ," ! ! ! ,  
!ff!	1c		$!S#D!!*-dQhnlKK+1*q.32F2>@ @AEaJ J+ 
S+{	3	33r9   c                    | j         t          j        k    rt          |           S | j         t          j        k    rt          |           S | j         }|                     t          j                  } t          t          |           |          S rs   )r   r   float64ri  r   rg  r   r   )r2   x_dtypes     r7   bessel_i0e_implrm  Z  sj    W
q>>w"*q>> gG	AA888r9   regularized_incomplete_betaF)multiple_resultsr=   c                 <    t          | t          |                    S rs   )r   r@   rj   r2   s     r7   <lambda>rr  s  s    Q

!3!3 r9   r@   c           	      Z    t          | t          t          |d          |                    S rh   )r   rE   r"   rq  s     r7   rr  rr  x  s"    #a6!Q<<)C)C"D"D r9   rE   rI   rO   rL   rR   rV   rY   c                 L    | t          |          t          |          |z  z
  z  S rs   )r]   r   )rj   r  r2   s      r7   rr  rr    s     jmmd1ggk.I)J r9   r]   c                 ^   t          j        t          |                    j        }t	          |          |k    }t          ||t          ||                    }t          |          |t          |          t          |          z   z  z
  }t          ||t          |d                    }| |z  S )Nr<  )
r*   r   r#   r   r   r   r   rY   r   r   )rj   r  r2   r   x_is_not_tinysafe_xdy_dxs          r7   _bessel_i1e_jvpry    s    VAYY##a&&3,--Ia$5$566&
V

qDLL:f3E3E$EF
F%
yC'8'8
9
9%	
Ur9   r`   c                     t          t          |dt          j        t          j                  z            t          | t          t          t          |                                                  S Nr   r   r"   r   r   pir   r   r   rq  s     r7   rr  rr    sL    c&B,?"@"@"%aS^^)<)<"="=? ? r9   rc   c                     t          t          |dt          j        t          j                  z            t          | t          t          t          |                                                  S )Ng       r|  rq  s     r7   rr  rr    sN    s6!S2725>>-A#B#B#&q#c&))nn*=*=#>#> @  @ r9   rf   c                     t          t          |t          j        t          j                  dz            t          | t          t          |                                        S r{  )r   r"   r   r   r}  r   r   )rj   r   r2   s      r7   rr  rr    sH    F1bgbennr6I,J,J,/3vc{{3C3C,D,D)F )F r9   )p__doc__enumr   numpyr   	functoolsr   jax._src.lax.laxr   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(   jax._src.lax.control_flowr)   jax._srcr*   jax._src.interpretersr+   r,   jax._src.lib.mlir.dialectsr-   jax._src.typingr.   r/   r8   r=   r@   rE   rI   rL   rO   rR   rV   rY   r]   r`   rc   rf   rm   rq   ru   rw   ry   r|   r   r   r   r   r   r   r   r   r   r  r#  r%  r:  rA  rg  ri  rm  r5   register_lowering	lower_fundefjvpr;   r?   rD   rG   rN   rK   rQ   rU   rX   defjvp2r\   ry  r_   rb   re   r   r9   r7   <module>r     s@   
                O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 1 0 0 0 0 0       $ $ $ $ $ $ & & & & & & + + + + + + , , , , , , , ,5y 5Y 59 5 5 5 5 5i E    y U       y  U        i I %    y Y 5    $Y $9 $ $ $ $ $( (y (U ( ( ( (I )     )     )     9     I %    
y U      N N N; ; ;! ! !          L L L0 0 00 0 0f:N :N :Nx       
;U ;u ; ; ; ;1+ 1+ 1+f  4g. g. g.R7 7 7$  (  (  &  !4 !4 !4F+4 +4 +4Z
9 
9 
9 !0VV;!= !=   4$.""#CDD"') ) )* * * 
	
'  
 =** 		(33 4 4 4  x$+!F!F G G GM&),,	  y''/4<"H"H I I I 		)DD E E Eovv.<<  {GGOT^$L$L M M M 		+ 8 8 8?FF+X66  x0A0A+0N0NAF"H "H "H I I I "/66"2ODD  %t~&7&78J&K&K7<> > >? ? ? 
	(L, / / /OVV,i88	  y%t~&7&7&E&E7<> > >? ? ? 
	)]M 2 2 2%ovv&68KLL   *%t~&7&78N&O&O7<> > >? ? ? 
&&)6	2	2  vww	BB C C C}V\22  |%t~o7<> > >? ? ? 
<JJ K K K}V\22  |AAC C C   
< ) ) )fe$$ 		% ? ? @ @ @  uggotx@@ A A A	vv	&	& 		& @ @ A A A  vww	BB C C CM&),,	 

9 F F G G G  y''/4<"H"H I I I I Ir9   