
    tKgi8                     |   d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dl	Z	d dl
mZ 	 d dlZ G d d      Z G d d      Z G d	 d
      Z G d d      Zd Z G d d      Zd Zd Zd Zd Zd Z	 d dlZd ee      v Z G d de      Zdej<                  dfdZd Z d Z!ddZ"y# e$ r Y w xY w# e$ r dZY ;w xY w)     N)zip_longest)assert_)assert_func_equalc                   V    e Zd ZdZej
                   ej
                  ddfdZd Zd Zy)ArgzGenerate a set of numbers on the real axis, concentrating on
    'interesting' regions and covering all orders of magnitude.

    Tc                 F   ||kD  rt        d      |t        j                   k(  r&dt        j                  t              j
                  z  }|t        j                  k(  r&dt        j                  t              j
                  z  }||c| _        | _        ||c| _        | _	        y )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        ^/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/special/_mptestutils.py__init__zArg.__init__   s~    q5BCC<RXXe_(((A;BHHUO'''AA-8+*$*    c                 x   |dk  rt        d      |dz  dk(  r|dz  }|}n
|dz  }|dz   }|dk\  r?t        j                  t        j                  |      t        j                  |      |      }n|dkD  r|dk  rt        j                  |||      }n|dkD  r\t        j                  |d|d      }t        j                  dt        j                  |      |      }t        j
                  ||f      }n4|dk(  rw|dk  rrt        j                  d||      }|j                  dkD  rt        j                  |d         }	nd}	t        j                  d|	|d      }t        j
                  ||f      }n|dz  dk(  r|dz  }
|
}n
|dz  }
|
dz   }t        j                  dd|d      }|j                  dkD  rt        j                  |d         }	nd}	t        j                  d|	|
d      }t        j                  dt        j                  |      |      }t        j
                  |||f      }t        j                  |      S )	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_valueszArg._positive_values'   s   q5344 q5A:dGGdGkG7++bhhqk288A;:CUq2v++aA&CU [[B%@F[[BHHQK9F))VV,-C!VR [[Aw/F{{Q+[[eWuEF))VV,-C
 {a"A:#"A:#a<[[B%@F{{Q+kk#uhGGkk!RXXa[(;G))Wfg67Cwws|r   c                 2   | j                   | j                  }}||k(  rt        j                  |      S | j                  s|dz  }| j
                  s|dz  }|dz  dk(  r|dz  }|}n
|dz  }|dz   }|dk\  r| j                  |||      }g }nN|dk  rg }| j                  | | |       }n0| j                  d||      }| j                  d| |dz          }|dd }t        j                  |ddd   |f      }| j                  s|dd }| j
                  s|dd }|S )z%Return an array containing n numbers.r   r   r   N)r   r   r   zerosr   r   r.   r    )	r   r#   r   r   n1n2posptsnegptsr&   s	            r   valuesz
Arg.values_   sB   vvtvv1688A;FAFAq5A:ABBABaB6**1a3FF!VF++QBA66F**1a4F++Ar26::FABZFii"v./ab'Ccr(C
r   N)	__name__
__module____qualname____doc__r   r   r   r.   r6    r   r   r   r      s-    
 &&BFF$ 	F6p#r   r   c                       e Zd Zd Zd Zy)FixedArgc                 8    t        j                  |      | _        y N)r   asarray_values)r   r6   s     r   r   zFixedArg.__init__   s    zz&)r   c                     | j                   S r?   )rA   )r   r#   s     r   r6   zFixedArg.values   s    ||r   Nr7   r8   r9   r   r6   r;   r   r   r=   r=      s    *r   r=   c                       e Zd Z eej
                   ej
                          eej
                  ej
                        fdZd Zy)
ComplexArgc                     t        |j                  |j                        | _        t        |j                  |j                        | _        y r?   )r   realimagr   r   r   s      r   r   zComplexArg.__init__   s.    '	'	r   c                    t        t        j                  t        j                  |                  }| j                  j                  |      }| j                  j                  |dz         }|d d d f   d|d d d f   z  z   j                         S )Nr   y              ?)intr   floorsqrtrG   r6   rH   ravel)r   r#   mxys        r   r6   zComplexArg.values   sq    $%IIQIIQU#!D&	BqayL(//11r   N)r7   r8   r9   complexr   r   r   r6   r;   r   r   rE   rE      s3     "&&266'2gbffbff6M (2r   rE   c                       e Zd ZddZd Zy)IntArgc                      || _         || _        y r?   )r   r   rI   s      r   r   zIntArg.__init__   s    r   c                 p   t        | j                  | j                        j                  t	        d|dz  z   |dz
              j                  t              }t        j                  dd      }t        j                  t        j                  ||f         }||| j                  k\  || j                  k  z     }|S )Nr   r      )r   r   r   r6   r   astyperK   r   arangeuniquer_)r   r#   v1v2vs        r   r6   zIntArg.values   s     ''A1Hac(:;BB3GYYr1IIbeeBFm$qDFF{q466z*+r   N)ii  rC   r;   r   r   rT   rT      s    r   rT   c           	      :   t        | t        j                        r| j                         }|S t	        |       }t        j
                  | D cg c]  }t        |t              rdnd c}      }||t        |      z  z  j                  t              dz   }t        | |      D cg c]  \  }}|j                  |       }}}t        j                  t        j                  t        j                  |        j                  |d      j                   }|S c c}w c c}}w )Ng      ?g      ?r   r0   )
isinstancer   ndarraycopylenr@   rE   sumrY   rK   zipr6   arraybroadcast_arraysix_reshapeT)argspecr#   argsnargsspecmsrO   s          r   get_argsrq      s    '2::&||~ K GZZFMNgdJtZ0Sc9gN
 "SW*o%%c*Q..1'2.>?.>74A.>?xx++RVVT];<DDUBOQQK O @s   D#Dc                   (    e Zd Z	 	 	 	 ddZd Zd Zy)
MpmathDataNc           	         |0	 t        t        j                  j                  dd            }|rdnd}|| _        || _        || _        || _        || _	        || _
        || _        |	| _        |
| _        || _        t        | j                  t         j"                        r>t!        j$                  | j                  j&                  t         j(                        | _        n6t-        | j                  D cg c]  }t        |t.               c}      | _        |
| _        || _        |r|dk(  rt3        |dd       }|r|dk(  rt3        |dd       }|| _        || _        y # t        $ r d}Y 7w xY wc c}w )NSCIPY_XSLOW0Fi  i  z<lambda>r7   )rK   osenvirongetr
   
scipy_funcmpmath_funcarg_specdpsprecr#   rtolatolignore_inf_signnan_okra   r   rb   
issubdtypedtypecomplexfloating
is_complexanyrE   distinguish_nan_and_infgetattrnameparam_filter)r   rz   r{   r|   r   r}   r~   r#   r   r   r   r   r   r   is_xslowargs                   r   r   zMpmathData.__init__   sC    9!rzz~~mSAB !cA$& 			.dmmRZZ0 mmDMM,?,?ASASTDO!8<FC,FDO  /'>$tz):z48Dtz);
D9D	(9  ! !& Gs   )E .E(E%$E%c                 |   
 t         j                  j                  d       t         j                   j
                        }t        j                  j                  t        j                  j                  }}	  j                   j                  g}ndg} j                   j                  t        j                  _	        t        j                  |j                  t         j                        r
t        d 
nd 
d t        |      D ]|  \  }}|t        j                  _        	 t         j                   
 fd|d j"                   j$                   j&                   j(                   j*                   j,                  
        n ||ct        j                  _        t        j                  _	        y # t.        $ rN |t1        |      d	z
  k\  r9t3        j4                         \  }}}	|j6                  |	ur|j9                  |	      |Y w xY w# ||ct        j                  _        t        j                  _	        w xY w)
Ni     c                 >    t        j                  t        |             S r?   )mpmathmpcrR   rP   s    r   mptypez MpmathData.check.<locals>.mptype   s    !::gaj11r   c                 >    t        j                  t        |             S r?   )r   mpfr   r   s    r   r   z MpmathData.check.<locals>.mptype   s    !::eAh//r   c                     t        | j                        ddt        | j                        z   z  kD  rt        j                  S t        | j                        S )NgؗҜ<r   )absrH   rG   r   nan	mpf2floatr   s    r   pytypez MpmathData.check.<locals>.pytype   s;    166{UAAFFO%<<!vv(00r   c                  B      j                   t        |              S r?   )r{   map)r   r   r   r   s    r   <lambda>z"MpmathData.check.<locals>.<lambda>	  s    6*:$*:*:CN*K#Lr   F)
vectorizedr   r   r   r   r   r   r   )r   randomseedrq   r|   r#   r   mpr}   r~   r   r   r   mpc2complex	enumerater   rz   r   r   r   r   r   r   AssertionErrorrd   sysexc_info__traceback__with_traceback)r   argarrold_dpsold_precdps_listjr}   tpvaluetbr   r   s   `         @@r   checkzMpmathData.check   s   
		t $--0 #IIMM699>>4	>xx# HH:4yy$!%		
 }}V\\2+=+=>$201 $H-3 #		$%L#(!YY!YY(,(<(<040L0L#{{%)%6%6 ! .2 -4X)FIIM699> & $CM!O+(+E2 ..b8"'"6"6r"::# ,$ -4X)FIIM699>s3   8B,H %A F4H 4AHH 
HH -H;c                 Z    | j                   rd| j                   dS d| j                   dS )Nz<MpmathData: z (complex)>>)r   r   )r   s    r   __repr__zMpmathData.__repr__  s/    ??"499+[99"499+Q//r   )
NNNNgHz>gYnFTTN)r7   r8   r9   r   r   r   r;   r   r   rs   rs      s    ?C>D@D+/')R<>|0r   rs   c                  :    t        | i |}|j                          y r?   )rs   r   )r   kwds      r   assert_mpmath_equalr   %  s    AAGGIr   c                 L    t        j                  j                  d      |       S )Nz8    Test not yet functional (too slow), needs more work.)reason)pytestmarkskip)funcs    r   nonfunctional_tooslowr   *  s)    ;;I  
 r   c                 F    t        t        j                  | ddd            S )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    t        t        | j                        t        | j                              S r?   )rR   r   rG   rH   r   s    r   r   r   @  s!    9QVV$i&788r   c                      d  fd}|S )Nc                 b    t        | t        j                        rt        |       S t	        |       S r?   )ra   r   r   rR   r   r   s    r   tofloatztrace_args.<locals>.tofloatE  s#    a$1:8Or   c                     t         j                  j                  t        t	        |             d       t         j                  j                          	  | i |}t         j                  j                  d|z         t         j                  j                  d       t         j                  j                          |S # t         j                  j                  d       t         j                  j                          w xY w)N: z-> %r
)r   stderrwritetupler   flush)r   r   rr   r   s      r   wrapztrace_args.<locals>.wrapK  s    

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

	a2AJJWq[)JJT"JJ JJT"JJs   *B? ??C>r;   )r   r   r   s   ` @r   
trace_argsr   D  s    	 Kr   	setitimerFc                       e Zd Zy)TimeoutErrorN)r7   r8   r9   r;   r   r   r   r   _  s    r   r   r	   Tc                 @     t         r|rd  fd}|S  fd}|S )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                     t               r?   )r   )signumframes     r   sigalrm_handlerz%time_limited.<locals>.sigalrm_handlers  s
    . r   c                       fd}|S )Nc                     t        j                   t         j                        }t        j                  t         j                         	  | i |t        j                  t         j                  d       t        j                   t         j                  |       S # t        $ rM cY t        j                  t         j                  d       t        j                   t         j                  |       S w xY w# t        j                  t         j                  d       t        j                   t         j                  |       w xY w)Nr   )signalSIGALRMr   ITIMER_REALr   )r   r   old_handlerr   
return_valr   timeouts      r   r   z(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 C1&C4 0C11C4 4A
D>r;   )r   r   r   r   r   s   ` r   decoztime_limited.<locals>.decov  s    	? Kr   c                       fd}|S )Nc                  N   t        j                          fdt        j                         	  | i |t        j                  d        S # t        $ r/ t        j                  d        cY t        j                  d        S w xY w# t        j                  d        w xY w)Nc                 P    t        j                          z
  kD  r
t               S r?   )timer   )r   eventr   
start_timer   traces      r   r   z7time_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   z(time_limited.<locals>.deco.<locals>.wrap  s}    !YY[
! U#'>b>
 LL&	 $ &LL&%%LL&	& LL&s#   A  B
2B 	B

B B$r;   )r   r   r   r   s   ` r   r   ztime_limited.<locals>.deco  s    ' Kr   )POSIX)r   r   use_sigalrmr   r   s   ``  @r   time_limitedr   c  s'     	!	< K#	" Kr   c                       fd}|S )z9Decorate function to return nan if it raises an exceptionc                  T    	  | i |S # t         $ r t        j                  cY S w xY wr?   )	Exceptionr   r   )r   r   r   s     r   r   zexception_to_nan.<locals>.wrap  s.    	>b>! 	66M	s    ''r;   r   r   s   ` r   exception_to_nanr     s    
 Kr   c                       fd}|S )z1Decorate function to return nan if it returns infc                  b     | i |}t        j                  |      st         j                  S |S r?   )r   isfiniter   )r   r   r_   r   s      r   r   zinf_to_nan.<locals>.wrap  s)    !NrN{{1~66Mr   r;   r   s   ` r   
inf_to_nanr     s    
 Kr   c                     g }t        t        | |            D ]`  \  }\  }}||t        d      t        j                  ||z
        ||t        j                  |      z  z   kD  sM|j                  |||f       b t        |      }|dkD  rt        t        t        j                  |                  }	dg}
|
j                  d| ddz    d       |D ]  \  }}}t        j                  ||	dd	      }t        j                  ||	dd	      }|dk(  rd
}n1t        j                  ||z
  |z        }t        j                  |d      }|
j                  | d| d| d| d        t        ddj                  |
             yy)z|
    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appendrd   rK   r   r   r   r   r   join)resstdr   r   failureskresvalstdvalnfailndigitsmsgresrepstdreprdiffs                 r   mp_assert_allcloser    st   
 H(S#)>?FF>V^KLL;;v'$fkk&6I1I*IIOOQ/0	  @ MEqyc"((4.)*d

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