
    (phi8                        S SK r S SKrS SKrS SKJr  S SKrS SKJr  S SK	r	S SK
Jr   S SKr " S S5      r " S S5      r " S	 S
5      r " S S5      rS r " S S5      rS rS rS rS rS r S SKrS\" \5      ;   r " S S\5      rS\R<                  S4S jrS r S r!SS jr"g! \ a     Nf = f! \ a    Sr N?f = f)     N)zip_longest)assert_)assert_func_equalc                   `    \ rS rSrSr\R                  * \R                  SS4S jrS rS r	Sr
g)	Arg   zzGenerate a set of numbers on the real axis, concentrating on
'interesting' regions and covering all orders of magnitude.

Tc                 J   X:  a  [        S5      eU[        R                  * :X  a'  S[        R                  " [        5      R
                  -  nU[        R                  :X  a'  S[        R                  " [        5      R
                  -  nXsU l        U l        X4sU l        U l	        g )Nz#a should be less than or equal to bg            ?)

ValueErrornpinffinfofloatmaxabinclusive_ainclusive_b)selfr   r   r   r   s        M/var/www/html/venv/lib/python3.13/site-packages/scipy/special/_mptestutils.py__init__Arg.__init__   sx    5BCC<RXXe_(((A;BHHUO'''A-8*$*    c                    US:  a  [        S5      eUS-  S:X  a  US-  nUnO
US-  nUS-   nUS:  aB  [        R                  " [        R                  " U5      [        R                  " U5      U5      nGOUS:  a  US:  a  [        R                  " XU5      nGOUS:  a\  [        R                  " USUSS9n[        R                  " S[        R                  " U5      U5      n[        R
                  " Xx45      nGO5US:X  aw  US::  aq  [        R                  " SX%5      nUR                  S:  a  [        R                  " US   5      n	OSn	[        R                  " SXSS9n[        R
                  " X45      nOUS-  S:X  a  US-  n
U
nO
US-  n
U
S-   n[        R                  " SSUSS9nUR                  S:  a  [        R                  " US   5      n	OSn	[        R                  " SXSS9n[        R                  " S[        R                  " U5      U5      n[        R
                  " XU45      n[        R                  " U5      $ )	Nr   za should be positive      
   F)endpointi)r   r   logspacelog10linspacehstacksizesort)r   r   r   nnlogptsnlinptsptslinptslogptsrightnlogpts1nlogpts2logpts1logpts2s                 r   _positive_valuesArg._positive_values'   s   q5344 q5A:dGGdGkG7++bhhqk288A;:CUq2v++aA&CU [[B%@F[[BHHQK9F))V,-C!VR [[A/F{{Q+[[euEF))V,-C
 {a"A:#"A:#a<[[B%@F{{Q+kk#uGGkk!RXXa[(;G))Wg67Cwws|r   c                 ^   U R                   U R                  p2X#:X  a  [        R                  " U5      $ U R                  (       d  US-  nU R
                  (       d  US-  nUS-  S:X  a  US-  nUnO
US-  nUS-   nUS:  a  U R                  X#U5      n/ nONUS::  a  / nU R                  U* U* U5      * nO/U R                  SX45      nU R                  SU* US-   5      * nUSS n[        R                  " USSS2   U45      nU R                  (       d  USS nU R
                  (       d  USS nU$ )z%Return an array containing n numbers.r   r   r   N)r   r   r   zerosr   r   r0   r"   )	r   r%   r   r   n1n2posptsnegptsr(   s	            r   values
Arg.values_   s:   vvtvv1688A;FAFAq5A:ABBABaB6**13FF!VF++QBA66F**1a4F++Ar26::FABZFii"v./ab'Ccr(C
r   )r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r0   r9   __static_attributes__ r   r   r   r      s-    
 &&BFF$ 	F6p#r   r   c                        \ rS rSrS rS rSrg)FixedArg   c                 :    [         R                  " U5      U l        g N)r   asarray_values)r   r9   s     r   r   FixedArg.__init__   s    zz&)r   c                     U R                   $ rF   rH   )r   r%   s     r   r9   FixedArg.values   s    ||r   rK   Nr;   r<   r=   r>   r   r9   r@   rA   r   r   rC   rC      s    *r   rC   c                       \ rS rSr\" \R                  * \R                  * 5      \" \R                  \R                  5      4S jrS rSr	g)
ComplexArg   c                     [        UR                  UR                  5      U l        [        UR                  UR                  5      U l        g rF   )r   realimagr   r   r   s      r   r   ComplexArg.__init__   s.    '	'	r   c                 "   [        [        R                  " [        R                  " U5      5      5      nU R                  R                  U5      nU R                  R                  US-   5      nUS S 2S 4   SUS S S 24   -  -   R                  5       $ )Nr   y              ?)intr   floorsqrtrR   r9   rS   ravel)r   r%   mxys        r   r9   ComplexArg.values   sq    $%IIQIIQU#!D&	BqayL(//11r   )rS   rR   N)
r;   r<   r=   r>   complexr   r   r   r9   r@   rA   r   r   rO   rO      s3     "&&266'2gbffbff6M (2r   rO   c                   $    \ rS rSrSS jrS rSrg)IntArg   c                     Xl         X l        g rF   r   r   rT   s      r   r   IntArg.__init__   s    r   c                 n   [        U R                  U R                  5      R                  [	        SUS-  -   US-
  5      5      R                  [        5      n[        R                  " SS5      n[        R                  " [        R                  X#4   5      nXDU R                  :  X@R                  :  -     nU$ )Nr   r      )r   r   r   r9   r   astyperW   r   arangeuniquer_)r   r%   v1v2vs        r   r9   IntArg.values   s     ''A1Hac(:;BB3GYYr1IIbeeBFm$DFF{q66z*+r   rd   N)ii  rM   rA   r   r   ra   ra      s    r   ra   c           	      \   [        U [        R                  5      (       a  U R                  5       nU$ [	        U 5      n[        R
                  " U  Vs/ s H  n[        U[        5      (       a  SOSPM     sn5      nX[        U5      -  -  R                  [        5      S-   n[        X5       VVs/ s H  u  pFUR                  U5      PM     nnn[        R                  " [        R                  " [        R                  " U6 6 5      R                  US5      R                   nU$ s  snf s  snnf )Ng      ?g      ?r   r3   )
isinstancer   ndarraycopylenrG   rO   sumri   rW   zipr9   arraybroadcast_arraysix_reshapeT)argspecr%   argsnargsspecmsr[   s          r   get_argsr      s    '2::&&||~ K GZZFMNgdJtZ00Sc9gN
 SW*o%%c*Q..1'.>?.>74A.>?xx++RVVT];<DDUBOQQK O @s   #D#/D(c                   2    \ rS rSr    SS jrS rS rSrg)
MpmathData   Nc           	         Uc5   [        [        R                  R                  SS5      5      nU(       a  SOSnXl        X l        X0l        XPl        X`l	        Xpl
        Xl        Xl        Xl        Xl        [        U R                  [         R"                  5      (       a?  [         R$                  " U R                  R&                  [         R(                  5      U l        O9[-        U R                   Vs/ s H  n[        U[.        5      PM     sn5      U l        Xl        Xl        U(       a  US:X  a  [3        USS 5      nU(       a  US:X  a  [3        USS 5      nX@l        Xl        g ! [         a    Sn GNDf = fs  snf )NSCIPY_XSLOW0Fi  i  z<lambda>r;   )rW   osenvirongetr   
scipy_funcmpmath_funcarg_specdpsprecr%   rtolatolignore_inf_signnan_okrr   r   rs   
issubdtypedtypecomplexfloating
is_complexanyrO   distinguish_nan_and_infgetattrnameparam_filter)r   r   r   r   r   r   r   r%   r   r   r   r   r   r   is_xslowargs                   r   r   MpmathData.__init__   s*    9!rzz~~mSAB !cA$& 			.dmmRZZ00 mmDMM,?,?ASASTDO!8<FC,FDO  /'>$tz):z48Dtz);
D9D	(9  ! !& Gs   )E# 0E6#E32E3c                   ^ ^
^ [         R                  R                  S5        [        T R                  T R
                  5      n[        R                  R                  [        R                  R                  p2 T R                  b  T R                  /nOS/nT R                  b  T R                  [        R                  l	        [         R                  " UR                  [         R                  5      (       a
  [        mS m
OS m
S m[        U5       Hy  u  pVU[        R                  l         [        T R                   U
UU 4S jUST R"                  T R$                  T R&                  T R(                  T R*                  T R,                  S9
    O   X#s[        R                  l        [        R                  l	        g ! [.         aQ    U[1        U5      S	-
  :  a:  [2        R4                  " 5       u  pxn	UR6                  U	La  UR9                  U	5      eUe GM  f = f! X#s[        R                  l        [        R                  l	        f = f)
Ni     c                 @    [         R                  " [        U 5      5      $ rF   )mpmathmpcr_   r\   s    r   mptype MpmathData.check.<locals>.mptype   s    !::gaj11r   c                 @    [         R                  " [        U 5      5      $ rF   )r   mpfr   r   s    r   r   r      s    !::eAh//r   c                     [        U R                  5      SS[        U R                  5      -   -  :  a  [        R                  $ [        U R                  5      $ )NgؗҜ<r   )absrS   rR   r   nan	mpf2floatr   s    r   pytype MpmathData.check.<locals>.pytype   s;    166{UAAFFO%<<!vv(00r   c                  B   > T" TR                   " [        TU 5      6 5      $ rF   )r   map)r   r   r   r   s    r   <lambda>"MpmathData.check.<locals>.<lambda>	  s    6$*:*:CN*K#Lr   F)
vectorizedr   r   r   r   r   r   r   )r   randomseedr   r   r%   r   mpr   r   r   r   r   mpc2complex	enumerater   r   r   r   r   r   r   r   AssertionErrorru   sysexc_info__traceback__with_traceback)r   argarrold_dpsold_precdps_listjr   tpvaluetbr   r   s   `         @@r   checkMpmathData.check   s   
		t $--0 #IIMM699>>4	>xx# HH:4yy$!%		
 }}V\\2+=+=>>$201 $H- #		$%L#(!YY!YY(,(<(<040L0L#{{%)%6%6 ! .2 -4)FIIM699> & $CM!O+(+2 ..b8"'"6"6r"::# ,$ -4)FIIM699>s3   7B3H +AF8	H 8AHH HH ,Ic                 d    U R                   (       a  SU R                   S3$ SU R                   S3$ )Nz<MpmathData: z (complex)>>)r   r   )r   s    r   __repr__MpmathData.__repr__  s/    ??"499+[99"499+Q//r   )r   r   r   r   r   r   r   r%   r   r   r   r   r   r   )
NNNNgHz>gYnFTTN)r;   r<   r=   r>   r   r   r   r@   rA   r   r   r   r      s    ?C>D@D+/')R<>|0r   r   c                  :    [        U 0 UD6nUR                  5         g rF   )r   r   )r   kwds      r   assert_mpmath_equalr   %  s    AAGGIr   c                 H    [         R                  R                  SS9" U 5      $ )Nz8    Test not yet functional (too slow), needs more work.)reason)pytestmarkskip)funcs    r   nonfunctional_tooslowr   *  s)    ;;I  
 r   c           	      B    [        [        R                  " U SSSS95      $ )z
Convert an mpf to the nearest floating point number. Just using
float directly doesn't work because of results like this:

with mp.workdps(50):
    float(mpf("0.99999999999999999")) = 0.9999999999999999

   r   	min_fixed	max_fixed)r   r   nstrr   s    r   r   r   4  s     Qa1=>>r   c                 f    [        [        U R                  5      [        U R                  5      5      $ rF   )r_   r   rR   rS   r   s    r   r   r   @  s!    9QVV$i&788r   c                    ^ ^ S mU U4S jnU$ )Nc                 l    [        U [        R                  5      (       a  [        U 5      $ [	        U 5      $ rF   )rr   r   r   r_   r   r   s    r   tofloattrace_args.<locals>.tofloatE  s&    a$$1:8Or   c                    > [         R                  R                  [        [	        TU 5      5      < S35        [         R                  R                  5          T" U 0 UD6n[         R                  R                  SU< 35        [         R                  R                  S5        [         R                  R                  5         U$ ! [         R                  R                  S5        [         R                  R                  5         f = f)N: z-> 
)r   stderrwritetupler   flush)r   r   rr   r   s      r   wraptrace_args.<locals>.wrapK  s    

E#gq/25R89

	a2AJJs1%[)JJT"JJ JJT"JJs   +C ?D rA   )r   r   r   s   ` @r   
trace_argsr   D  s    	 Kr   	setitimerFc                       \ rS rSrSrg)TimeoutErrori_  rA   N)r;   r<   r=   r>   r@   rA   r   r   r   r   _  s    r   r   r
   Tc                 X   ^ ^^ [         (       a  U(       a  S mUUU 4S jnU$ UU 4S jnU$ )a  
Decorator for setting a timeout for pure-Python functions.

If the function does not return within `timeout` seconds, the
value `return_val` is returned instead.

On POSIX this uses SIGALRM by default. On non-POSIX, settrace is
used. Do not use this with threads: the SIGALRM implementation
does probably not work well. The settrace implementation only
traces the current thread.

The settrace implementation slows down execution speed. Slowdown
by a factor around 10 is probably typical.
c                     [        5       erF   )r   )signumframes     r   sigalrm_handler%time_limited.<locals>.sigalrm_handlers  s
    . r   c                    >^  U UUU4S jnU$ )Nc                    > [         R                   " [         R                  T5      n[         R                  " [         R                  T5         T" U 0 UD6[         R                  " [         R                  S5        [         R                   " [         R                  U5        $ ! [         aO    Ts [         R                  " [         R                  S5        [         R                   " [         R                  U5        $ f = f! [         R                  " [         R                  S5        [         R                   " [         R                  U5        f = f)Nr   )signalSIGALRMr   ITIMER_REALr   )r   r   old_handlerr   
return_valr   timeouts      r   r   (time_limited.<locals>.deco.<locals>.wrapw  s    $mmFNNOL  !3!3W=?>b> $$V%7%7;MM&..+>	 $ &%%$$V%7%7;MM&..+>	& $$V%7%7;MM&..+>s%   B C8+C; 7C88C; ;AErA   )r   r   r   r   r   s   ` r   decotime_limited.<locals>.decov  s    	? 	? Kr   c                    >^  U UU4S jnU$ )Nc                  ^  >^^ [         R                   " 5       mUUU4S jm[        R                  " T5         T" U 0 UD6[        R                  " S 5        $ ! [         a1    [        R                  " S 5        Ts [        R                  " S 5        $ f = f! [        R                  " S 5        f = f)Nc                 T   > [         R                   " 5       T-
  T:  a
  [        5       eT$ rF   )timer   )r   eventr   
start_timer   traces      r   r	  7time_limited.<locals>.deco.<locals>.wrap.<locals>.trace  s#    yy{Z/'9*n, Lr   )r  r   settracer   )r   r   r  r	  r   r   r   s     @@r   r   r     s}    !YY[
! U#'>b>
 LL&	 $ &LL&%%LL&	& LL&s#   A "B8B BB B,rA   )r   r   r   r   s   ` r   r  r    s    ' Kr   )POSIX)r   r   use_sigalrmr  r   s   ``  @r   time_limitedr  c  s)     u	!	< K#	" Kr   c                    ^  U 4S jnU$ )z9Decorate function to return nan if it raises an exceptionc                  V   >  T" U 0 UD6$ ! [          a    [        R                  s $ f = frF   )	Exceptionr   r   )r   r   r   s     r   r   exception_to_nan.<locals>.wrap  s.    	>b>! 	66M	s    ((rA   r   r   s   ` r   exception_to_nanr    s    
 Kr   c                    ^  U 4S jnU$ )z1Decorate function to return nan if it returns infc                  n   > T" U 0 UD6n[         R                  " U5      (       d  [         R                  $ U$ rF   )r   isfiniter   )r   r   ro   r   s      r   r   inf_to_nan.<locals>.wrap  s+    !NrN{{1~~66Mr   rA   r  s   ` r   
inf_to_nanr    s    
 Kr   c                    / n[        [        X5      5       Hc  u  nu  pgUb  Uc  [        S5      e[        R                  " Xg-
  5      X#[        R                  " U5      -  -   :  d  MP  UR                  XVU45        Me     [        U5      nUS:  a  [        [        [        R                  " U5      5      5      n	S/n
U
R                  SU SWS-    S35        U H  u  pVn[        R                  " XiSSS	9n[        R                  " XySSS	9nUS:X  a  S
nO2[        R                  " Xg-
  U-  5      n[        R                  " US5      nU
R                  U SU SU SU S35        M     [        SSR                  U
5      5        gg)zp
Compare lists of mpmath.mpf's or mpmath.mpc's directly so that it
can be done to higher precision than double.
Nz,Lengths of inputs res and std are not equal.r    zBad results (z out of r   z) for the following points:r   r      r   z != z (rdiff )Fr   )r   r   r   r   fabsappendru   rW   r   r   r    r   r   join)resstdr   r   failureskresvalstdvalnfailndigitsmsgresrepstdreprdiffs                 r   mp_assert_allcloser-    sb   
 H(S)>?F>V^KLL;;v'$fkk&6I1I*IIOOQ/0	  @ MEqyc"((4.)*d

]5'!a%8STU!)Av[[AKF[[AKF{V_f$<=E1-JJ!Bvhd6((5'CD "* 	tyy~& r   )r   gFFg<)#r   r   r  	itertoolsr   numpyr   numpy.testingr   r   scipy.special._testutilsr   r   ImportErrorr   rC   rO   ra   r   r   r   r   r   r   r   r   dirr  r  r   r   r  r  r  r-  rA   r   r   <module>r4     s    	 
  !  !  6	l l^ 	2 	2
 
 l0 l0^
	?9(CK'E
	9 	 T 1h'{  		Z
  Es#   B) 1B5 )B21B25C ?C 