@@ -733,6 +733,64 @@ def __hash__(self):
733733gammaincc  =  GammaIncC (upgrade_to_float , name = "gammaincc" )
734734
735735
736+ class  GammaIncInv (BinaryScalarOp ):
737+     """ 
738+     Inverse to the regularized lower incomplete gamma function. 
739+     """ 
740+ 
741+     nfunc_spec  =  ("scipy.special.gammaincinv" , 2 , 1 )
742+ 
743+     @staticmethod  
744+     def  st_impl (k , x ):
745+         return  scipy .special .gammaincinv (k , x )
746+ 
747+     def  impl (self , k , x ):
748+         return  GammaIncInv .st_impl (k , x )
749+ 
750+     def  grad (self , inputs , grads ):
751+         (k , x ) =  inputs 
752+         (gz ,) =  grads 
753+         return  [
754+             grad_not_implemented (self , 0 , k ),
755+             gz  *  exp (gammaincinv (k , x )) *  gamma (k ) *  (gammaincinv (k , x ) **  (1  -  k )),
756+         ]
757+ 
758+     def  c_code (self , * args , ** kwargs ):
759+         raise  NotImplementedError ()
760+ 
761+ 
762+ gammaincinv  =  GammaIncInv (upgrade_to_float , name = "gammaincinv" )
763+ 
764+ 
765+ class  GammaIncCInv (BinaryScalarOp ):
766+     """ 
767+     Inverse to the regularized upper incomplete gamma function. 
768+     """ 
769+ 
770+     nfunc_spec  =  ("scipy.special.gammainccinv" , 2 , 1 )
771+ 
772+     @staticmethod  
773+     def  st_impl (k , x ):
774+         return  scipy .special .gammainccinv (k , x )
775+ 
776+     def  impl (self , k , x ):
777+         return  GammaIncCInv .st_impl (k , x )
778+ 
779+     def  grad (self , inputs , grads ):
780+         (k , x ) =  inputs 
781+         (gz ,) =  grads 
782+         return  [
783+             grad_not_implemented (self , 0 , k ),
784+             gz  *  - exp (gammainccinv (k , x )) *  gamma (k ) *  (gammainccinv (k , x ) **  (1  -  k )),
785+         ]
786+ 
787+     def  c_code (self , * args , ** kwargs ):
788+         raise  NotImplementedError ()
789+ 
790+ 
791+ gammainccinv  =  GammaIncCInv (upgrade_to_float , name = "gammainccinv" )
792+ 
793+ 
736794def  _make_scalar_loop (n_steps , init , constant , inner_loop_fn , name , loop_op = ScalarLoop ):
737795    init  =  [as_scalar (x ) if  x  is  not   None  else  None  for  x  in  init ]
738796    constant  =  [as_scalar (x ) for  x  in  constant ]
@@ -1648,6 +1706,43 @@ def inner_loop(
16481706    return  grad 
16491707
16501708
1709+ class  BetaIncInv (ScalarOp ):
1710+     """ 
1711+     Inverse of the regularized incomplete beta function. 
1712+     """ 
1713+ 
1714+     nfunc_spec  =  ("scipy.special.betaincinv" , 3 , 1 )
1715+ 
1716+     def  impl (self , a , b , x ):
1717+         return  scipy .special .betaincinv (a , b , x )
1718+ 
1719+     def  grad (self , inputs , grads ):
1720+         (a , b , x ) =  inputs 
1721+         (gz ,) =  grads 
1722+         return  [
1723+             grad_not_implemented (self , 0 , a ),
1724+             grad_not_implemented (self , 0 , b ),
1725+             gz 
1726+             *  exp (betaln (a , b ))
1727+             *  ((1  -  betaincinv (a , b , x )) **  (1  -  b ))
1728+             *  (betaincinv (a , b , x ) **  (1  -  a )),
1729+         ]
1730+ 
1731+     def  c_code (self , * args , ** kwargs ):
1732+         raise  NotImplementedError ()
1733+ 
1734+ 
1735+ betaincinv  =  BetaIncInv (upgrade_to_float_no_complex , name = "betaincinv" )
1736+ 
1737+ 
1738+ def  betaln (a , b ):
1739+     """ 
1740+     Beta function from gamma function. 
1741+     """ 
1742+ 
1743+     return  gammaln (a ) +  gammaln (b ) -  gammaln (a  +  b )
1744+ 
1745+ 
16511746class  Hyp2F1 (ScalarOp ):
16521747    """ 
16531748    Gaussian hypergeometric function ``2F1(a, b; c; z)``. 
0 commit comments