
    Phy                        d dl Z d dlm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mZmZ d	dlmZmZmZmZ ddlmZ d dlmZ g dZdZ d Z!d Z"d Z# ee#e!      Z$ ee#e"      Z%d Z& ee&e!      Z' ee&e"      Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d*dZ1d Z2d Z3 G d  d!e      Z4 ejj                  g dgg e	jl                         D  cg c]  } | d	   	 c} z   e7"      Z8 ejj                  e8D cg c]*  }ejs                  |d  e:e8      dz
   e:|      z
  fd#$      , c}      Z;d+d%Z< e4d&'      Z= G d( d)e      Z>yc c} w c c}w ),    N)partial)optimize)	integrate)_builtincoeffs)interpolate)RectBivariateSpline
_lazywhere   )rv_continuous
_ShapeInforv_continuous_frozen)uniformexpon	_norm_pdf	_norm_cdf   )Nolan)inherit_docstring_from)levy_stablelevy_stable_genpdf_from_cf_with_fftg [n=c                    | dk7  rIt        j                  t         j                  | z  dz         t        j                  |      d| z
  z  dz
  z  S dt        j                  t        j                  |            z  t         j                  z  S Nr   r   g       )nptanpiabslogalphats     lC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\scipy/stats/_levy_stable/__init__.py_Phi_Z0r$   .   sr     A: 
!	""bffQiAI&>&BC BFF266!9%%-    c                     | dk7  r)t        j                  t         j                  | z  dz        S dt        j                  t        j                  |            z  t         j                  z  S r   )r   r   r   r   r   r    s     r#   _Phi_Z1r'   6   sT     A: 	ruuu}q ! BFF266!9%%-r%   c           	          t        j                  t        j                  |      |z   dd|z  t        j                  |      z   | ||      z  z
  z        S )zCharacteristic function.r                 ?)r   expr   sign)Phir"   r!   betas       r#   _cfr.   >   sL    66
&&)u
R$Y%;c%m%K!KL r%   c                     |j                  dt              } fd} fd}t        j                  d      5  t	        j
                  |dt        j                  d|d||d	
	      ^}}	t	        j
                  |dt        j                  d|d||d	
	      ^}
}ddd       
z   t        j                  z  S # 1 sw Y   xY w)a  To improve DNI accuracy convert characteristic function in to real
    valued integral using Euler's formula, then exploit cosine symmetry to
    change limits to [0, inf). Finally use cosine addition formula to split
    into two parts that can be handled by weighted quad pack.
    quad_epsc                     | dk(  ryt        j                  | z         t        j                  | z  z   |       z        z  S Nr   )r   r*   cosr"   r,   r!   r-   s    r#   
integrand1z2_pdf_single_value_cf_integrate.<locals>.integrand1Q   I    6vvU
m$FF41:&UA67
 	
r%   c                     | dk(  ryt        j                  | z         t        j                  | z  z   |       z        z  S r2   )r   r*   sinr4   s    r#   
integrand2z2_pdf_single_value_cf_integrate.<locals>.integrand2X   r6   r%   ignore)invalidr   r3   i  r   )weightwvarlimitepsabsepsrelfull_outputr8   N)get	_QUAD_EPSr   errstater   quadinfr   )r,   xr!   r-   kwdsr0   r5   r9   int1ret1int2ret2s   ` ``        r#   _pdf_single_value_cf_integraterM   I   s     xx
I.H

 
X	&nnFF

t  nnFF

t 
'2 4K255  3 
'	&s   AB99Cc                 R    t        j                  | |z
        ||d|z  z  z  k  r|} | S )z1Round x close to zeta for Nolan's method in [NO].r   )r   r   )x0r!   zetax_tol_near_zetas       r#   _nolan_round_x_near_zetarR      s1     
vvb4i?Uq5y-AAAIr%   c                 b    t        j                  |dz
        |k  rd}t        | |||      } | ||fS )z8Round difficult input values for Nolan's method in [NO].r         ?)r   r   rR   )rO   r!   r-   rP   rQ   alpha_tol_near_ones         r#   _nolan_round_difficult_inputrV      s=     
vveai-- 
""eT?	CBud?r%   c                     | t        j                  t         j                  |z  dz        z  }|dk7  r| |z   n| }t        |||fi |S N       @r   )r   r   r   _pdf_single_value_piecewise_Z0rG   r!   r-   rH   rP   rO   s         r#   _pdf_single_value_piecewise_Z1r\      K     5266"%%%-#-..DaZTQB)"eTBTBBr%   c           	         |j                  dt              }|j                  dd      }|j                  dd      }| t        j                  t        j                  |z  dz        z  }t        | |||||      \  } }}|dk(  r7t        | t        j                  d      z        t        j                  d      z  S |dk(  r[|dk(  rV| d	z   }|d
k  ry
d	t        j                  dt        j                  z  |z        z  |z  t        j                  dd|z  z        z  S |dk(  r|dk(  r| d
k7  rt        j                  d	t        j                  dt        j                  z  t        j                  |       z        z  g      \  }	}
d	dt        j                  |       z  z  }t        j                  |      d|	d
   z
  z  t        j                  |      d|
d
   z
  z  z   t        j                  dt        j                  z  t        j                  |       dz  z        z  S |dk(  r!|dk(  rd	d	| dz  z   z  t        j                  z  S t        | ||||      S )Nr0   piecewise_x_tol_near_zeta{Gzt?piecewise_alpha_tol_near_onerY   r         ?rT   r   r                 )rB   rC   r   r   r   rV   r   sqrtr*   scfresnelr   r8   r3   ,_pdf_single_value_piecewise_post_rounding_Z0)rO   r!   r-   rH   r0   rQ   rU   rP   _xSCargs               r#   rZ   rZ      s   xx
I.Hhh:EBO"@%H5266"%%%-#-..D2
E40BOBt |bggaj)BGGAJ66	#$#+ !V72771ruu9r>**R/"&&q2v2GGG	#$#+"'zz1rwwq255y266":'=>>?@11rvvbz>"FF3K31:&ad
)CCGGAIr
a/01 	1 
#$#+AaK 255((7
E4? r%   c                    t        |||       }|j                  }|j                  }|j                  }|j                  t        | |||      } | |k(  rTt        j                  dd|z  z         t        j                  |      z  t        j                  z  d|dz  z   d|z  dz  z  z  S | |k  rt        |  || ||      S t        j                  | t        j                  dz  dd      ryfd}	t        j                  d      5  t        j                  fd	| t        j                  dz  |
      }
dD cg c]/  t        j                  fd| t        j                  dz        1 }}d|
g|z   }t!        j"                  |	| t        j                  dz  |d|dd      ^}}ddd       ||z  S c c}w # 1 sw Y   |z  S xY w)z8Calculate pdf using Nolan's methods as detailed in [NO].r   r   +=rtolatolrd   c                 ~     |       }t        j                  |      r|dk  rd}|t        j                  |       z  S r2   )r   isfiniter*   thetag_1gs     r#   	integrandz?_pdf_single_value_piecewise_post_rounding_Z0.<locals>.integrand  s8    h{{337CRVVSD\!!r%   r:   allc                      |       dz
  S )Nr    )r"   ry   s    r#   <lambda>z>_pdf_single_value_piecewise_post_rounding_Z0.<locals>.<lambda>  s    adQhr%   )xtol)d   
      c                      |       z
  S Nr~   )r"   
exp_heightry   s    r#   r   z>_pdf_single_value_piecewise_post_rounding_Z0.<locals>.<lambda>  s    adZ&7r%   r   r   pointsr>   r@   r?   rA   N)r   rP   xic2ry   rR   rh   gammar   r3   r   rj   iscloserD   r   bisectr   rE   )rO   r!   r-   r0   rQ   _nolanrP   r   r   rz   peakr   tail_pointsintg_pointsintgretry   s              `    @r#   rj   rj      s    5$#F;;D	B	BA
 
""eT?	CB	TzHHQU]#ffRjee DAI1u9q=13	
 
d;Cx
 	
 
zz2#ruuqyvF;" 
	"RUUQYX
 +
*
 OO7"beeaiH* 	 

 $i+-^^CEEAI	

s' 
#< 9#
 
#< 9s   4F884F3,:F83F88Gc                     | t        j                  t         j                  |z  dz        z  }|dk7  r| |z   n| }t        |||fi |S rX   )r   r   r   _cdf_single_value_piecewise_Z0r[   s         r#   _cdf_single_value_piecewise_Z1r   +  r]   r%   c                 H   |j                  dt              }|j                  dd      }|j                  dd      }| t        j                  t        j                  |z  dz        z  }t        | |||||      \  } }}|dk(  r!t        | t        j                  d      z        S |dk(  r;|dk(  r6| d	z   }|d
k  ry
t        j                  t        j                  d|z              S |dk(  r.|dk(  r)dt        j                  |       t        j                  z  z   S t        | ||||      S )Nr0   r_   r`   ra   rY   r   rb   rT   r   r   rd   )rB   rC   r   r   r   rV   r   rg   rh   erfcarctan,_cdf_single_value_piecewise_post_rounding_Z0)	rO   r!   r-   rH   r0   rQ   rU   rP   rk   s	            r#   r   r   5  s   xx
I.Hhh:EBO"@%H5266"%%%-#-..D2
E40BOBt |bggaj))	#$#+ !V7wwrwwsRx())	#$#+RYYr]RUU***7
E4? r%   c                    t        |||       }|j                  }|j                  }|j                  }|j                  }	|j
                  t        | |||      } |dk(  r|dk  s| |k  rdt        |  || ||      z
  S | |k(  rd|t        j                  z  z
  S t        j                  | t        j                  dz  dd      r|S fd}
t        j                  d	      5  | }t        j                  dz  }|dkD  rL |
|       d
k7  rt        j                  |
| fd| t        j                  dz  fg      }|j                  d   }nk |
t        j                  dz        d
k7  rOt        j                  |
t        j                  dz  fd| t        j                  dz  fg      }|j                  d   }t        j                   |
||||gd|dd      ^}}ddd       ||	z  z   S # 1 sw Y   xY w)z8Calculate cdf using Nolan's methods as detailed in [NO].r   r   rb   r   rp   rq   c                 @     |       }t        j                  |       S r   )r   r*   rv   s     r#   rz   z?_cdf_single_value_piecewise_post_rounding_Z0.<locals>.integrand{  s    hvvsd|r%   r:   r{   rd   zL-BFGS-B)methodboundsr   r   N)r   rP   r   c1c3ry   rR   r   r   r   r   rD   r   minimizerG   r   rE   )rO   r!   r-   r0   rQ   r   rP   r   r   r   rz   left_supportright_supportresr   r   ry   s                   @r#   r   r   X  s    5$#F;;D	B	B	BA 
""eT?	CB
taxBI
 ?Cx
 
 	
 
tR"%%Z 
zz2#ruuqyvF;	 
	"s	19"~$''SF% S"%%!),-	  #uuQx #s*''UUQYL% S"%%!),-	 !$a^^ -0	

s3 
#H T	>I 
#	"s   C4G##G,c                    d }d d fd}t        j                  | |      } t        j                  ||      }t        j                  t         j                   dz  t         j                  ||      }t        j                  ||      }| |z  }||z  }	t        j                  |      }
t        j                  |      }t        | dk(  | ||||	|
||f||	      }|S )
zISimulate random variables using Nolan's methods as detailed in [NO].
    c                     dt         j                  z  t         j                  dz  |z   |z  |t        j                  t         j                  dz  |z  |z  t         j                  dz  |z   z        z  z
  z  S )Nr   )r   r   r   r!   r-   THaTHbTHcosTHtanTHWs           r#   
alpha1funcz_rvs_Z1.<locals>.alpha1func  sj    ee SE)Q!625519s? KLLM	
r%   c                     ||t        j                  |      z  t        j                  |      z   z  t        j                  |      t        j                  |      |z  z   |z  d| z  z  z  S )NrT   )r   r   r8   r3   r   s           r#   	beta0funcz_rvs_Z1.<locals>.beta0func  s]    rvvc{"RVVBZ/1sbffSkE11Q6C%KHI	
r%   c                    |t        j                  t         j                  | z  dz        z  }t        j                  |      | z  }	||t        j                  | |	|z   z        z  t        j                  |      z   z  }
|
t        j
                  |      t        j                  |      |z  z   |t        j                  |      t        j
                  |      |z  z
  z  z
  |z  d| z  z  z  }|S )Nr   rT   )r   r   r   r   r8   r3   )r!   r-   r   r   r   r   r   r   val0th0val3res3s               r#   	otherwisez_rvs_Z1.<locals>.otherwise  s    bffRUUU]Q.//iio%EBFF5C"H#566CDs&&+%&"&&+se(;;<=  Ek  r%   c                 <    t        |dk(  | |||||||f	
      }|S )Nr   f2r	   )r!   r-   r   r   r   r   r   r   r   r   r   s            r#   alphanot1funcz_rvs_Z1.<locals>.alphanot1func  s5    AID"c3ua8	
 
r%   rY   )locscalesizerandom_state)r   r   r   r   )	r   broadcast_tor   rvsr   r   r3   r   r
   )r!   r-   r   r   r   r   r   r   r   r   r   r   r   r   r   s                @@r#   _rvs_Z1r     s    

 OOE4(E??4&D	UUFSLD|
B 			t,7A
"*C
)CFF2JEFF2JE

	b#sE5!4	C Jr%   c                    t        |       \  }}}}|dk7  r3|||z  t        j                  t        j                  |z  dz        z  z   }n2|d|z  |z  t        j                  |      z  t        j                  z  z   }||||fS )Nr   rY   r   )_fitstart_S1r   r   r   r   )datar!   r-   delta1r   delta0s         r#   _fitstart_S0r     s    !-d!3E4
 z$,0C)DDD!d(U*RVVE]:RUUBB$%%r%   c                 H   g d}g d}t        j                  g dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg      j                  }t        j                  g dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g      j                  }g d!d d d"   }g d#}t        j                  g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g      d d d"   j                  }t        j                  g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg      d d d"   j                  }t        |||dDdDdEF      fdG}	t        |||dDdDdEF      fdH}
t        |||dDdDdEF      fdI}t        |||dDdDdEF      fdJ}t        j                  | dK      }t        j                  | dL      }t        j                  | dM      }t        j                  | dN      }t        j                  | dO      }||z
  ||z
  z  }||z   dP|z  z
  ||z
  z  }|dQk\  rft        j
                  t              j                  }t        j                   |	||      dR   |dS      }t        j                   |
||      dR   dTdU      }ndS}t        j                  |      }||z
   |||      dR   z  }|| |||      dR   z  z   }|dUk7  r2|||z  t        j                  t         j                  |z  dSz        z  z
  n|}||||fS )VN)Pn@g      @g@g@gffffff@rf   g	@g      @re   r         r         )r   g?g?g333333?rb   ffffff?r   )rY   rY   rY   rY   rY   rY   rY   )-?bX9?r   r   r   r   r   )g!rh?g5^I?$C?r   r   r   r   )gDl?gGz?gn?Q?r   r   r   )g9v?S㥛?r   g㥛 ?7A`?r   r   )g5^I?(\?g+?gS㥛?獗n?r   r   )gX9v?gGz?gK7?g\(\?g^I+?5^I?r   )gK7A?gV-?g?5^I?gm?g1Zd?J+?r   )gX9v?g|?5^?gK7A?g      ?g\(\?gl?gffffff?)g?5^I?gV-?gm?gV-?gOn?g;On?gA`"?)gX9v?gtV?gMbX9?gMb?g^I+?gQ?g+?)gy&1?g%C?g}?5^I?gK7A?g\(\?tV?gS㥛?)gV-?gCl?gn?goʡ?g(\?gx&1?g&1?)gtV?g=
ףp=?g/$??5^I?goʡ?gˡE?gv?)g`"?gzG?g7A`?gn?gI+?gjt?g"~j?)r   gHzG@rT   rT   rT   rT   rT   )r   gFx?gQ@rT   rT   rT   rT   )r   g}?5^I??rT   rT   rT   rT   )r   g+?gS㥛?gv?rT   rT   rT   )r   g
ףp=
?gRQ?gʡE?gE@rT   rT   )r   gx&1?g~jt?r   g333333?rT   rT   )r   gCl?g=
ףp=?gMbX9?gCl?g"~?rT   )r   gQ?gsh|??gV-?gV-?r   rT   )r   g rh?gMbX?gB`"?r   gGz?g(\@)r   gCl?gS?gy&1?gsh|??gX9v?gy&1?)r   g~jt?gRQ?gV-?gh|?5?gV-?g/$?)r   gˡE?gw/?gv?g|?5^?gZd;?gK7?)r   gl?g7A`?g)\(?gT㥛 ?gFx?gʡE?)r   gMb?gMb?g r?gQ?gd;O?gn?)r   gy&1?gy&1?gK7A`?g=
ףp=?g1Zd?gMb?)r   gffffff?r   g333333?g?g      ?gffffff?g?g333333?g?r   g?g?r   g333333?rb   rc   )r   g      ?rb   g      ?r   )I+?r   r   r   r   )g9v?gp=
ף?r   g㥛 ?#~j?)r   gn?E?g`"?gx&?)r   gzG?gJ+?gK7A`?gn?)g!rh?g
ףp=
?g1Zd?gʡE?gMbX @)g/$?gZd;?g+?g\(\ @g!rh @)gA`"?gFx?gV- @g+ @g㥛 @)gHzG?gX9v?gK7 @g/$@gDl@)gq=
ףp?guV @g      @g'1Z@g!rh@)gGz?RQ @gp=
ף@g{Gz@g rh@)rY   gGz @grh|@gˡE@gbX9@)r   gx&1@g㥛 @gJ+@g+
@)gbX9 @gʡE@g rh@gQ
@gK@)gPn@gA`"@gx&1@gn@g@)gV-@gOn@gtV@gZd;@grh@)gNbX9@g/$@gA`"@g%C@g}?5^I"@)r   rd   rd   rd   rd   )r   g rhgMbgJ+gMb)r   gQZd;gZd;Ogrh|)r   gjtgI+gL7A`gxƿ)r   gy&1g"~jg(\ſgV-Ϳ)r   gL7A`尿gx&g|?5^ʿg&1ҿ)r   g333333gʡEÿg+οgq=
ףpտ)r   g/$g/$ƿgDlѿg(\ؿ)r   g
ףp=
g~jtȿgףp=
ӿgS㥛ܿ)r   gRQg9vʿg/$ֿgK7A)r   gJ+g%C̿gRQؿg;On)r   gMbXgtVοgA`"ۿgw/)r   g~jtg      пgjt޿gX9v)r   gbX9ȶgS㥛пgp=
ףgK)r   g+g rhѿgd;OgCl)r   r   gB`"ѿgJ+g^I+r   r   )kxkysc                 4    | dkD  r	 | |      S  |  |      S r2   r~   )nu_betanu_alphapsi_1s     r#   psi_1_1z_fitstart_S1.<locals>.psi_1_1W  s,    { Wh' 	: %wh 9	:r%   c                 6    | dkD  r	 | |      S  |  |       S r2   r~   )r   r   psi_2s     r#   psi_2_1z_fitstart_S1.<locals>.psi_2_1^  s/    { Wh' 	;!&x!: :	;r%   c                 4    | dkD  r	 | |      S  |  |      S r2   r~   )r-   r!   phi_3s     r#   phi_3_1z_fitstart_S1.<locals>.phi_3_1e  s$    %)AXuT5!F5$3FFr%   c                 6    | dkD  r	 | |      S  |  |       S r2   r~   )r-   r!   phi_5s     r#   phi_5_1z_fitstart_S1.<locals>.phi_5_1k  s'    %)AXuT5!GE4%4G3GGr%   r   2   _   r   K   r   r   )r   r   rY   g      rT   )r   arrayTr   
percentilefinfofloatepsclipr+   r   r   )r   nu_alpha_rangenu_beta_rangealpha_table
beta_tablealpha_range
beta_range
nu_c_tablenu_zeta_tabler   r   r   r   p05p50p95p25p75r   r   r   r!   r-   crP   deltar   r   r   r   s                             @@@@r#   r   r     sP   +N3M ((999999999999999; < =>A ( 5555555555555557 8 9: (//3t5K(J ++++++++++++++++!- .  /3d!4  56A! * HH'+++++++++++++++!- .  /3d!4  56A! &  ~ +a1>E:  ~ *qQ!=E;  
K#$a1EG  
K#$a1EH --a
 C
--b
!C
--b
!C
--b
!C
--b
!Cc	cCi(HSy1s7"sSy1G5hhuo!!248#rBwwww1$7sCwww	sgdE*400AWT5)$///D272+DaruuU{2~...4E4""r%   c                        e Zd ZdZdZdZdZeZdZ	dZ
dZdZdZdZdZd Zd	 Zd
 Zd Z ee       fd       ZddZ ee       fd       Zd Z ee       fd       Zd Zd Zd Z xZS )r   uU  A Levy-stable continuous random variable.

    %(before_notes)s

    See Also
    --------
    levy, levy_l, cauchy, norm

    Notes
    -----
    The distribution for `levy_stable` has characteristic function:

    .. math::

        \varphi(t, \alpha, \beta, c, \mu) =
        e^{it\mu -|ct|^{\alpha}(1-i\beta\operatorname{sign}(t)\Phi(\alpha, t))}

    where two different parameterizations are supported. The first :math:`S_1`:

    .. math::

        \Phi = \begin{cases}
                \tan \left({\frac {\pi \alpha }{2}}\right)&\alpha \neq 1\\
                -{\frac {2}{\pi }}\log |t|&\alpha =1
                \end{cases}

    The second :math:`S_0`:

    .. math::

        \Phi = \begin{cases}
                -\tan \left({\frac {\pi \alpha }{2}}\right)(|ct|^{1-\alpha}-1)
                &\alpha \neq 1\\
                -{\frac {2}{\pi }}\log |ct|&\alpha =1
                \end{cases}


    The probability density function for `levy_stable` is:

    .. math::

        f(x) = \frac{1}{2\pi}\int_{-\infty}^\infty \varphi(t)e^{-ixt}\,dt

    where :math:`-\infty < t < \infty`. This integral does not have a known
    closed form.

    `levy_stable` generalizes several distributions.  Where possible, they
    should be used instead.  Specifically, when the shape parameters
    assume the values in the table below, the corresponding equivalent
    distribution should be used.

    =========  ========  ===========
    ``alpha``  ``beta``   Equivalent
    =========  ========  ===========
     1/2       -1        `levy_l`
     1/2       1         `levy`
     1         0         `cauchy`
     2         any       `norm` (with ``scale=sqrt(2)``)
    =========  ========  ===========

    Evaluation of the pdf uses Nolan's piecewise integration approach with the
    Zolotarev :math:`M` parameterization by default. There is also the option
    to use direct numerical integration of the standard parameterization of the
    characteristic function or to evaluate by taking the FFT of the
    characteristic function.

    The default method can changed by setting the class variable
    ``levy_stable.pdf_default_method`` to one of 'piecewise' for Nolan's
    approach, 'dni' for direct numerical integration, or 'fft-simpson' for the
    FFT based approach. For the sake of backwards compatibility, the methods
    'best' and 'zolotarev' are equivalent to 'piecewise' and the method
    'quadrature' is equivalent to 'dni'.

    The parameterization can be changed  by setting the class variable
    ``levy_stable.parameterization`` to either 'S0' or 'S1'.
    The default is 'S1'.

    To improve performance of piecewise and direct numerical integration one
    can specify ``levy_stable.quad_eps`` (defaults to 1.2e-14). This is used
    as both the absolute and relative quadrature tolerance for direct numerical
    integration and as the relative quadrature tolerance for the piecewise
    method. One can also specify ``levy_stable.piecewise_x_tol_near_zeta``
    (defaults to 0.005) for how close x is to zeta before it is considered the
    same as x [NO]. The exact check is
    ``abs(x0 - zeta) < piecewise_x_tol_near_zeta*alpha**(1/alpha)``. One can
    also specify ``levy_stable.piecewise_alpha_tol_near_one`` (defaults to
    0.005) for how close alpha is to 1 before being considered equal to 1.

    To increase accuracy of FFT calculation one can specify
    ``levy_stable.pdf_fft_grid_spacing`` (defaults to 0.001) and
    ``pdf_fft_n_points_two_power`` (defaults to None which means a value is
    calculated that sufficiently covers the input range).

    Further control over FFT calculation is available by setting
    ``pdf_fft_interpolation_degree`` (defaults to 3) for spline order and
    ``pdf_fft_interpolation_level`` for determining the number of points to use
    in the Newton-Cotes formula when approximating the characteristic function
    (considered experimental).

    Evaluation of the cdf uses Nolan's piecewise integration approach with the
    Zolatarev :math:`S_0` parameterization by default. There is also the option
    to evaluate through integration of an interpolated spline of the pdf
    calculated by means of the FFT method. The settings affecting FFT
    calculation are the same as for pdf calculation. The default cdf method can
    be changed by setting ``levy_stable.cdf_default_method`` to either
    'piecewise' or 'fft-simpson'.  For cdf calculations the Zolatarev method is
    superior in accuracy, so FFT is disabled by default.

    Fitting estimate uses quantile estimation method in [MC]. MLE estimation of
    parameters in fit method uses this quantile estimate initially. Note that
    MLE doesn't always converge if using FFT for pdf calculations; this will be
    the case if alpha <= 1 where the FFT approach doesn't give good
    approximations.

    Any non-missing value for the attribute
    ``levy_stable.pdf_fft_min_points_threshold`` will set
    ``levy_stable.pdf_default_method`` to 'fft-simpson' if a valid
    default method is not otherwise set.



    .. warning::

        For pdf calculations FFT calculation is considered experimental.

        For cdf calculations FFT calculation is considered experimental. Use
        Zolatarev's method instead (default).

    The probability density above is defined in the "standardized" form. To
    shift and/or scale the distribution use the ``loc`` and ``scale``
    parameters.
    Generally ``%(name)s.pdf(x, %(shapes)s, loc, scale)`` is identically
    equivalent to ``%(name)s.pdf(y, %(shapes)s) / scale`` with
    ``y = (x - loc) / scale``, except in the ``S1`` parameterization if
    ``alpha == 1``.  In that case ``%(name)s.pdf(x, %(shapes)s, loc, scale)``
    is identically equivalent to ``%(name)s.pdf(y, %(shapes)s) / scale`` with
    ``y = (x - loc - 2 * beta * scale * np.log(scale) / np.pi) / scale``.
    See [NO2]_ Definition 1.8 for more information.
    Note that shifting the location of a distribution
    does not make it a "noncentral" distribution.

    References
    ----------
    .. [MC] McCulloch, J., 1986. Simple consistent estimators of stable
        distribution parameters. Communications in Statistics - Simulation and
        Computation 15, 11091136.
    .. [WZ] Wang, Li and Zhang, Ji-Hong, 2008. Simpson's rule based FFT method
        to compute densities of stable distribution.
    .. [NO] Nolan, J., 1997. Numerical Calculation of Stable Densities and
        distributions Functions.
    .. [NO2] Nolan, J., 2018. Stable Distributions: Models for Heavy Tailed
        Data.
    .. [HO] Hopcraft, K. I., Jakeman, E., Tanner, R. M. J., 1999. Lévy random
        walks with fluctuating step number and multiscale behavior.

    %(example)s

    S1	piecewiser`   NgMbP?rf   c                 F    t        | g|i |}| j                  |_        |S r   )levy_stable_frozenparameterization)selfargsparamsdists       r#   __call__zlevy_stable_gen.__call__3  s)    !$888 $ 5 5r%   c                 0    |dkD  |dk  z  |dk  z  |dk\  z  S )Nr   r   r   rc   r~   )r  r!   r-   s      r#   	_argcheckzlevy_stable_gen._argcheck8  s'    	eqj)TQY742:FFr%   c                 B    t        dddd      }t        dddd      }||gS )Nr!   F)r   r   )FTr-   )rc   r   )TT)r   )r  ialphaibetas      r#   _shape_infozlevy_stable_gen._shape_info;  s,    GUFMB65'<@r%   c                 L    d}| j                   }||vrt        d| d|       |S )N)S0r  zParameterization 'z' in supported list: )r  RuntimeError)r  allowedpzs      r#   _parameterizationz!levy_stable_gen._parameterization@  s?    ""W$RD(=gYG  	r%   c           
      x   t        	|   |i |}|j                  dd        |j                  dd         | j                  |i |\  \  }}}}}t	        j
                  |dk(  |d|z  |z  t	        j                  |      z  t        j                  z  z   |      }| j                         dk(  rzt	        j
                  |dk(  ||dz  |z  t	        j                  |      z  t        j                  z  z
  |||z  t	        j                  t        j                  |z  dz        z  z
        S | j                         dk(  r|S y )Ndiscreter   rT   r   r  rY   r  )
superr   pop_parse_args_rvsr   wherer   r   r!  r   )
r  r  rH   X1r!   r-   r
  r   r   	__class__s
            r#   r   zlevy_stable_gen.rvsI  s+   W[$'$'T"&,@D,@,@$,O$,O)ueT XXSL"q4x%/"&&-?"%%GG
 !!#t+88dQh&6>?UT\BFF2555=3+>$??? 
 ##%-I .r%   c                     t        ||||      S r   )r   )r  r!   r-   r   r   s        r#   _rvszlevy_stable_gen._rvs_  s    udD,77r%   c                    | j                         dk(  rt        |   |g|i |S | j                         dk(  r | j                  |i |\  \  }}}}t	        j
                  t	        j                  |d      dd d f   dk7        rt        |   |g|i |S t	        j                  |d      dd d f   }t	        j                  |||      \  }}}t	        j                  |||f      d   }t	        j                  t        |      df      }	t	        j                  |d d dd f   d      }
|
D ]  }|\  }}|dk(  r2|d	|z  |z  t	        j                  |      z  t        j                  z  z   n|}t	        j
                  |d d dd f   |k(  d
      }||df   }t        | 	  |||||      j                  t        |      d      |	|<    |	j                  d   }|j                  dk(  r|d   S |S y Nr  r  )r   rc   r   r   shapeaxisrT   r   rc   )r   r   )r   )r!  r$  pdf_parse_argsr   r|   reshapebroadcast_arraysdstackemptylenuniquer   r   r   r/  r  rG   r  rH   r!   r-   r
  r   data_indata_outuniq_param_pairspair_alpha_beta_delta	data_maskrk   outputr)  s                     r#   r2  zlevy_stable_gen.pdfb  s     !!#t+7;q040400##%-*:$*:*:D*ID*I'MUD5%vvbjj0A6!;<w{14t4t44 JJq'*1a40!#!4!4Qt!D5$))Qt$45a8883w<*;<#%99WQU^!#D ,D$(MFE "S= E	E 1BFF5M ABEE II" 
 !#wq!"u~'=B GI A.B F%H R!, Y' - "A<<4'!!9$= .r%   c                    | j                         dk(  rt        }t        }t        n%| j                         dk(  rt        }t
        }t        t        j                  |      j                  dd      dd d f   }t        j                  |||      \  }}}t        j                  |||f      d   }t        j                  t        |      df      }| j                  }|dv r}	n|dv r}	n|d	k(  s| j                  d }	| j                   | j"                  | j$                  d
}
| j&                  }| j(                  }| j*                  }| j,                  }t        j.                  |d d dd f   d      }|D ]  }t        j0                  |d d dd f   |k(  d      }||   }	Qt        j2                  |D cg c]  \  }}} |	|||fi |
 c}}}      j                  t        |      d      ||<   t5        j6                  dt8        d       |\  |d d df   }dk  rt;        d      ||t=        d      t        j>                  t        j@                  |            }|dd|z
  z  |z  n|}|Gt        jB                  t        jD                  d|z  |z        t        jD                  d      z        dz   n
tG        |      }d}||kD  rt;        dd| z         tI        fd|||      \  }}tK        jL                  |t        jN                  |      |      } ||      ||<    |jP                  d   S c c}}}w )Nr  r  r   rc   r   r.  )r  best	zolotarev)dni
quadraturefft-simpsonr0   r_   ra   r0  zgDensity calculations experimental for FFT method. Use combination of piecewise and dni methods instead.rf   
stacklevelr   rT   z4FFT method does not work well for alpha less than 1.BOne of fft_grid_spacing or fft_n_points_two_power needs to be set.r      z%fft_n_points_two_power has a maximum z	value of c                      |       S r   r~   r"   r?  r@  r.   s    r#   r   z&levy_stable_gen._pdf.<locals>.<lambda>      c!VU3r%   hqlevelk))r!  rZ   !_pdf_single_value_cf_integrate_Z0_cf_Z0r\   !_pdf_single_value_cf_integrate_Z1_cf_Z1r   asarrayr4  r5  r6  r7  r8  pdf_default_methodpdf_fft_min_points_thresholdr0   r_   ra   pdf_fft_grid_spacingpdf_fft_n_points_two_powerpdf_fft_interpolation_levelpdf_fft_interpolation_degreer9  r|   r   warningswarnRuntimeWarningr  
ValueErrormaxr   ceilr   intr   r   InterpolatedUnivariateSplinerealr   )r  rG   r!   r-   _pdf_single_value_piecewiserM   r;  r<  pdf_default_method_namepdf_single_value_methodpdf_single_value_kwdsfft_grid_spacingfft_n_points_two_powerfft_interpolation_levelfft_interpolation_degreer=  r>  rB  data_subsetrk   r?  r@  	max_abs_xrT  rU  MAX_Q	density_xdensityfr.   s                       ``       @r#   _pdfzlevy_stable_gen._pdf  s   !!#t+*H'-N*C##%-*H'-N*CJJqM!!!R(A.,,Qt<5$))Qt,-a0883w<"34"&"9"9"&HH&A#$(==&D##}400<&*# )-)G)G,0,M,M!
  44!%!@!@"&"B"B#'#D#D  99WQU^!<$Dwq!"u~5B?I!),K&2&(hh
 2=	 2=-B 01F 2=	' '#k*A. # O"q
 !% D)C<&N 
 $+0F0N$-  FF266":.	 (/ !445	A)  .5 GGBFF1y=1#45q	ABQF34  u9&?%eW-. 
 &:31	&"	7  <<rwww/3K '(e# %B zz!}ys   8L?c                    | j                         dk(  rt        |   |g|i |S | j                         dk(  r | j                  |i |\  \  }}}}t	        j
                  t	        j                  |d      dd d f   dk7        rt        |   |g|i |S t	        j                  |d      dd d f   }t	        j                  |||      \  }}}t	        j                  |||f      d   }t	        j                  t        |      df      }	t	        j                  |d d dd f   d      }
|
D ]  }|\  }}|dk(  r2|d	|z  |z  t	        j                  |      z  t        j                  z  z   n|}t	        j
                  |d d dd f   |k(  d
      }||df   }t        | 	  |||||      j                  t        |      d      |	|<    |	j                  d   }|j                  dk(  r|d   S |S y r-  )r!  r$  cdfr3  r   r|   r4  r5  r6  r7  r8  r9  r   r   r   r/  r:  s                     r#   r}  zlevy_stable_gen.cdf  s    
 !!#t+7;q040400##%-*:$*:*:D*ID*I'MUD5%vvbjj0A6!;<w{14t4t44 JJq'*1a40!#!4!4Qt!D5$))Qt$45a8883w<*;<#%99WQU^!#D ,D$(MFE "S= E	E 1BFF5M ABEE II" 
 !#wq!"u~'=B GI A.B F%H R!, Y' - "A<<4'!!9$= .r%   c                    | j                         dk(  rt        }t        n| j                         dk(  rt        }t        t        j                  |      j                  dd      dd d f   }t        j                  |||      \  }}}t        j                  |||f      d   }t        j                  t        |      df      }| j                  }|dk(  r}n|dk(  rd }| j                  | j                  | j                  d	}	| j                   }
| j"                  }| j$                  }| j&                  }t        j(                  |d d dd f   d
      }|D ]  }t        j*                  |d d dd f   |k(  d
      }||   }Qt        j,                  |D cg c]  \  }}} ||||fi |	 c}}}      j                  t        |      d      ||<   t/        j0                  dt2        d       |\  |d d df   }|
|t5        d      t        j6                  t        j8                  |            }|
dd|z
  z  |z  n|
}|Gt        j:                  t        j<                  d|z  |z        t        j<                  d      z        dz   n
t?        |      }tA        fd|||      \  }}tC        jD                  |t        jF                  |      |      }t        j,                  |D cg c]5  }|jI                  | jJ                  tM        |jO                                     7 c}      j                  ||   jP                        ||<    |jR                  d   S c c}}}w c c}w )Nr  r  r   rc   r   r.  r  rI  rJ  r0  zZCumulative density calculations experimental for FFT method. Use piecewise method instead.rf   rK  rM  rN  r   c                      |       S r   r~   rQ  s    r#   r   z&levy_stable_gen._cdf.<locals>.<lambda>e  rR  r%   rS  rW  )*r!  r   rZ  r   r\  r   r]  r4  r5  r6  r7  r8  cdf_default_methodr0   r_   ra   r`  ra  rb  rc  r9  r|   r   rd  re  rf  rg  rh  r   ri  r   rj  r   r   rk  rl  integralar   squeezer/  r   )r  rG   r!   r-   _cdf_single_value_piecewiser;  r<  cdf_default_method_namecdf_single_value_methodcdf_single_value_kwdsrq  rr  rs  rt  r=  r>  rB  ru  rk   r?  r@  rv  rT  rU  rx  ry  rz  x_1r.   s                      ``       @r#   _cdfzlevy_stable_gen._cdf  so   !!#t+*H'C##%-*H'CJJqM!!!R(A.,,Qt<5$))Qt,-a0883w<"34"&"9"9"k1&A#$5&*# )-)G)G,0,M,M!
  44!%!@!@"&"B"B#'#D#D  99WQU^!<$Dwq!"u~5B?I!),K&2&(hh
 2=	 2=-B 01F 2=	' '#k*A. # ?"q
 !% D) $+0F0N$-  FF266":.	 (/ !445	A)  .5 GGBFF1y=1#45q	ABQF34  &:31	&"	7  <<rwww/3K ')hhIKL#QZZckkm(<=L''(9-334 #a %h zz!}_X Ms   M!/:M(
c                 x    | j                         dk(  rt        }n| j                         dk(  rt        } |      S )Nr  r  )r!  r   r   )r  r   	_fitstarts      r#   r  zlevy_stable_gen._fitstarts  s8    !!#t+$I##%-$Ir%   c                     |dkD  rdnt         j                  }|dk(  rdnt         j                  }|dk(  rdnt         j                  }|dk(  rdnt         j                  }||||fS )Nr   r   r   rY   rd   )r   nanrF   )r  r!   r-   mumu2g1g2s          r#   _statszlevy_stable_gen._statsz  sT    !)QA:a266SLSbffSLSbff3Br%   NN)__name__
__module____qualname____doc__r  r^  r  rC   r0   r_   ra   r_  r`  ra  rb  rc  r  r  r  r!  r   r   r   r+  r2  r{  r}  r  r  r  __classcell__)r)  s   @r#   r   r     s    ]@ $$H %#( #'  !%"##$ 
G
 M* +*8 M*# +#JjX M*$ +$LVpr%   r   )dtypeconstant)modec                 F   |}d|z  }t        j                  d|      }||z  dz  }t         j                  ||dz  z
  z  |z  }|dkD  rt        j                  |      j                  |d      }	t        j                  d|z  t
        ||	f   z  t         j                  j                  d|z   | | ||z  z   ||	z  |dz
  z  z         z        z  t        j                  dt         j                  z  |	z  |dz
  z  dt         j                  z  |	z  |z  ||dz
  z  z  z
        z  d      }
nDd|z  t
        |df   z  t         j                  j                  d|z   | | ||z  z         z        z  }
||
z  dt         j                  z  t        j                  t
        |         z  z  }||fS )a  Calculates pdf from characteristic function.

    Uses fast Fourier transform with Newton-Cotes integration following [WZ].
    Defaults to using Simpson's method (3-point Newton-Cotes integration).

    Parameters
    ----------
    cf : callable
        Single argument function from float -> complex expressing a
        characteristic function for some distribution.
    h : Optional[float]
        Step size for Newton-Cotes integration. Default: 0.01
    q : Optional[int]
        Use 2**q steps when performing Newton-Cotes integration.
        The infinite integral in the inverse Fourier transform will then
        be restricted to the interval [-2**q * h / 2, 2**q * h / 2]. Setting
        the number of steps equal to a power of 2 allows the fft to be
        calculated in O(n*log(n)) time rather than O(n**2).
        Default: 9
    level : Optional[int]
        Calculate integral using n-point Newton-Cotes integration for
        n = level. The 3-point Newton-Cotes formula corresponds to Simpson's
        rule. Default: 3

    Returns
    -------
    x_l : ndarray
        Array of points x at which pdf is estimated. 2**q equally spaced
        points from -pi/h up to but not including pi/h.
    density : ndarray
        Estimated values of pdf corresponding to cf at points in x_l.

    References
    ----------
    .. [WZ] Wang, Li and Zhang, Ji-Hong, 2008. Simpson's rule based FFT method
        to compute densities of stable distribution.
    r   r   r   rc   r)   y               @r0  )r   aranger   r4  sumCotesfftr*   )cfrT  rU  rV  nNstepsLx_lindicess1ry  s               r#   r   r     s   L 	A	1AIIaOE	A	A
%%51q5=
!A
%Cqy))A,&&q!,VVEME!W*--

eb!a%i!g+Q2G!GHH1 RUU
W$A.255.7*U2a!e 	
 U]U1a4[(266::EMBrAI~..,
 
 "fBEE	BFF58$445G>r%   r   )namec                   @    e Zd Zed        Zej
                  d        Zy)r  c                 .    | j                   j                  S r   r  r  )r  s    r#   r  z#levy_stable_frozen.parameterization  s    yy)))r%   c                 &    || j                   _        y r   r  )r  values     r#   r  z#levy_stable_frozen.parameterization  s    %*		"r%   N)r  r  r  propertyr  setterr~   r%   r#   r  r    s.    * * + +r%   r  r  )g{Gz?	   rf   )?rd  	functoolsr   numpyr   scipyr   r   scipy.integrate._quadraturer   r   scipy.interpolater   scipy.specialspecialrh   scipy._lib._utilr
   _distn_infrastructurer   r   r   _continuous_distnsr   r   r   r   levystr   scipy._lib.doccerr   __all__rC   r$   r'   r.   rZ  r\  rM   rY  r[  rR   rV   r\   rZ   rj   r   r   r   r   r   r   r   r   valuesobjectCotes_tablepadr8  r  r   r   r  )vrs   00r#   <module>r     s        6  1  ' S S E E  4 E, 	 
g		g	/!d %,"G% ! %,"G% !
&*C'TIXC FK\=@&O#dym yz bhh!I4~44676!1677v 	 A 	q1c+&*SV34:F	<~ =1+- +Y 8s   !E
/E