
    (ph.                         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Qr " S S5      rS rS r    SS	 jr " S
 S5      rg)    N)_pep440)assert_)with_special_errorsassert_func_equalFuncDatac                       \ rS rSrS rSrg)MissingModule   c                     Xl         g Nname)selfr   s     K/var/www/html/venv/lib/python3.13/site-packages/scipy/special/_testutils.py__init__MissingModule.__init__   s    	    r   N)__name__
__module____qualname____firstlineno__r   __static_attributes__ r   r   r	   r	      s    r   r	   c                 @   [        U 5      [        L a*  [        R                  R	                  U R
                   S3S9$ [        R                  R                  [        R                  " U R                  5      [        R                  " U5      :  U R                   SU S3S9$ )Nz is not installedreasonz version >= z	 required)typer	   pytestmarkskipr   skipifr   parse__version__Versionr   )modulemin_vers     r   check_versionr'      s    F|}${{&++6G'HII;;f(()GOOG,DD//",wiyA   r   c                 F   ^  [         R                  " T 5      U 4S j5       nU$ )zW
Enable special function errors (such as underflow, overflow,
loss of precision, etc.)
c                  v   > [         R                  " SS9   T" U 0 UD6nS S S 5        U$ ! , (       d  f       W$ = f)Nraiseall)scerrstate)akwresfuncs      r   wrapper$with_special_errors.<locals>.wrapper*   s4    [[W%.R.C &
 &%
s   	)
8)	functoolswraps)r2   r3   s   ` r   r   r   %   s'    
 __T  Nr   c                    [        US5      (       a  [        U5      n[        R                  " U5      nUR                  S:X  a	  US S 2S 4   nUR
                  S   n[        US5      (       a  UnS nUnO7[        R                  X!4   n[        [        XR
                  S   5      5      nS n[        X[        [        U5      5      XX4UXiUU
US9nUR                  5         g )Nnext   r   )
result_columnsresult_funcrtolatolparam_filterknownfailurenan_ok
vectorizedignore_inf_signdistinguish_nan_and_inf)
hasattrlistnpasarrayndimshapec_ranger   check)r2   resultspointsr<   r=   r>   r?   rA   dtyper@   rB   rC   nparamsdatar:   r;   fdatas                    r   r   r   7   s     vvfZZF{{a$ll1oGw
## uuV_%eGZZ];<TeGn!5$2".*%4-DFE 
KKMr   c                   @    \ rS rSrSr    S	S jrS rS
S jrS rSr	g)r   X   a]  
Data set for checking a special function.

Parameters
----------
func : function
    Function to test
data : numpy array
    columnar data to use for testing
param_columns : int or tuple of ints
    Columns indices in which the parameters to `func` lie.
    Can be imaginary integers to indicate that the parameter
    should be cast to complex.
result_columns : int or tuple of ints, optional
    Column indices for expected results from `func`.
result_func : callable, optional
    Function to call to obtain results.
rtol : float, optional
    Required relative tolerance. Default is 5*eps.
atol : float, optional
    Required absolute tolerance. Default is 5*tiny.
param_filter : function, or tuple of functions/Nones, optional
    Filter functions to exclude some parameter ranges.
    If omitted, no filtering is done.
knownfailure : str, optional
    Known failure error message to raise when the test is run.
    If omitted, no exception is raised.
nan_ok : bool, optional
    If nan is always an accepted result.
vectorized : bool, optional
    Whether all functions passed in are vectorized.
ignore_inf_sign : bool, optional
    Whether to ignore signs of infinities.
    (Doesn't matter for complex-valued functions.)
distinguish_nan_and_inf : bool, optional
    If True, treat numbers which contain nans or infs as
    equal. Sets ignore_inf_sign to be True.

Nc                    Xl         X l        Xl        [        US5      (       d  U4n[	        U5      U l        Ub5  [        US5      (       d  U4n[	        U5      U l        Ub  Sn[        U5      eOUb  S U l        O[        S5      eXPl        X`l	        Xpl
        [        US5      (       d  U4nXl        Xl        Xl        Xl        Xl        Xl        U R                   (       d  SU l        g g )N__len__z5Only result_func or result_columns should be providedz7Either result_func or result_columns should be providedT)r2   rQ   datanamerD   tupleparam_columnsr:   
ValueErrorr;   r<   r=   r>   r?   r@   rA   rB   rC   )r   r2   rQ   rY   r:   r;   r<   r=   r>   r?   rW   r@   rA   rB   rC   messages                   r   r   FuncData.__init__   s     		 }i00*,M"=1%>955"0!2"'"7D&Q )) ' $"&DVWW&		|Y//(?L(($.'>$++#'D  ,r   c                 2   [         R                  " U[         R                  5      (       d  [         R                  " [        5      n[         R
                  " U5      nU R                  U R                  pCUc  SUR                  -  nUc  SUR                  -  nX44$ )N   )
rF   
issubdtypeinexactrO   floatfinfor<   r=   epstiny)r   rO   infor<   r=   s        r   get_tolerancesFuncData.get_tolerances   sl    }}UBJJ//HHUOExxYY		d<TXX:D<TYY;Dzr   c                   ^ ^*^+ [         R                  " S[        5      nT R                  (       a  [        R
                  " T R                  S9  Uc  T R                  nUc  UR                  nOUR                  U5      nT R                  U5      u  pVT R                  (       a  [        R                  " UR                  S   4[        R                  5      n[        T R                   T R                  5       H*  u  m*nU(       d  M  U[#        U" USS2T*4   5      5      -  nM,     X   n/ m+[%        T R                   5       H  u  n	m*[        R&                  " T*5      (       aB  [)        T*R*                  5      m*T+R-                  USS2T*4   R                  [.        5      5        Mc  U(       a:  U	[1        U5      :  a+  T+R-                  USS2T*4   R                  X9   5      5        M  T+R-                  USS2T*4   5        M     SU+U 4S jjn
U
" T R2                  5      nT R4                  b-  [7        T R4                   Vs/ s H  oSS2U4   PM     sn5      nOLSnT R8                  (       a(  [1        U5      S:X  a  [        R:                  " US   5      nU
" T R<                  US9n[?        [1        U5      [1        U5      :H  5        [%        [        X5      5       GH  u  nu  nn[        R@                  " UR                  [        RB                  5      (       d  T RD                  (       aY  [        RF                  " U5      n[        RF                  " U5      n[        RF                  " U5      n[        RF                  " U5      nOX[        RH                  " U5      n[        RH                  " U5      n[        RJ                  " U5      n[        RJ                  " U5      n[        R:                  " U5      n[        R:                  " U5      n[        RL                  " SS	9   [        RN                  " U5      nSU[        RP                  " U5      ) '   [        RN                  " UU-
  5      nSU[        RP                  " U5      ) '   U[        RN                  " U5      -  nSU[        RP                  " U5      ) '   SSS5        WXeW-  -   :*  nUU:H  nUU:H  nUU:H  nUU-  U-  U-  ) nURR                  n T R8                  (       a"  UU) -  nUU) -  nU UU-  RU                  5       -  n T RV                  (       da  T R8                  (       dP  [        RF                  " U5      n![        RF                  " U5      n"U!U-  UU"-  -  n#UU#) -  nU U#RU                  5       -  n [        RX                  " U5      (       d  GM  S
/n$U$R-                  SUU   R[                  5       S 35        U$R-                  SWU   R[                  5       S 35        U$R-                  S[        RT                  " U5      U U4-  5        [        R\                  " U5      S    H  m*[)        T*5      m*U*4S jn%SR_                  [a        U%T+5      5      n&SR_                  [a        U%U5      5      n'SR_                  [a        U%U5      5      n(U%" U5      n)U$R-                  U& SU' SU( SU) S35        M     [?        SSR_                  U$5      5        GM     gs  snf ! , (       d  f       GNJ= f)z,Check the special function against the data.errisinstancer   Nr   c                   > TR                   (       a  U " T6 nO/ n[        [        TS   5      5       Hv  nUb*  X   (       a!  UR                  [        R
                  5        M0  UR                  U " [        [        [        T5      5       Vs/ s H  nTU   U   PM     sn5      6 5        Mx     [        R                  " U5      n[        U[        5      (       d  U4nU$ s  snf )Nr   )	rA   rK   lenappendrF   nanrX   rG   
isinstance)r2   	skip_maskgotjiparamsr   s        r   eval_func_at_params+FuncData.check.<locals>.eval_func_at_params   s    Fms6!9~.A ,

266* JJtU%FBT+UBTQF1IaLBT+U%VWX	 /
 jjoc5))fJ	 ,Vs   
Cr9   )ro   ignorer+    zMax |adiff|: gzMax |rdiff|: zCBad results (%d out of %d) for the following points (in output %d):c                 :   > S[         R                  " U T   SS9-  $ )Nz%30s   )	precision)rF   array2string)xrq   s    r   fmtFuncData.check.<locals>.fmt.  s    %!(KKKr   z  z => z != z	  (rdiff )F
r   )1operatormethodcallerAssertionErrorr?   r   xfailrQ   rO   astyperf   r>   rF   onesrI   bool_ziprY   rE   	enumerateiscomplexobjintimagrl   complexrk   r2   r:   rX   r@   isnanr;   r   r_   complexfloatingrB   isinfisposinfisneginfr.   absoluteisfinitesizesumrC   anymaxnonzerojoinmap),r   rQ   rO   dtypes__tracebackhide__r<   r=   
param_maskfilteridxrt   rp   icolwantedro   
output_numr}   ypinf_xpinf_yminf_xminf_ynan_xnan_yabs_ydiffrdifftol_mask	pinf_mask	minf_masknan_maskbad_jpoint_countinf_xinf_yboth_nonfinitemsgr~   r/   bcdrq   rs   s,   `                                         @@r   rL   FuncData.check   s   $11^
 LL 1 12<99D=JJE;;u%D((/
 $**Q-!1288<J !3!3T5F5FG	66$vd1Q3i'8"99J H #D  2 23FCq!!Kd1Q3i..w78C#f+-d1a4j//<=d1Q3i( 4	 	  "$)), *T5H5HI5HT4L5HIJF I{{s3x1}HHSV,	()9)9YOF 	CCK'("+C,<"=JA}}QWWb&8&899T=Q=Q!!!!QQQQHHQKEHHQKE*A-.r{{5))*{{1q5)+,bkk$''(r{{1~--.r{{5))* + Ez 11H6)I6)IH*Y6ABE**K{{%%2244//"'%-EEM!B.(~1133vve}}d

]4;??+<Q*?@A

]5<+;+;+=a*@AB

 - ffUm[*FG H E*1-AAAL		#c6"23A		#c3-0A		#c6"23AE
AJJ!D4s)A3a@A . tyy~.} #> J4 +*s   9[(B[--
[<	c                 ~   [         R                  " [        [        [         R                  U R
                  5      5      5      (       a  SnOSnU R                  (       aF  SU R                  R                   U S[        R                  R                  U R                  5       S3$ SU R                  R                   U S3$ )zPretty-printingz
 (complex)rw   z
<Data for z: >)rF   r   rE   r   r   rY   rW   r2   r   ospathbasename)r   
is_complexs     r   __repr__FuncData.__repr__7  s    66$s2??D,>,>?@AA%JJ== !3!3 4ZLww''67q: ;  		 2 23J<qAAr   )r=   rQ   rW   rC   r2   rB   r?   r@   rY   r>   r:   r;   r<   rA   )NNNNNNNFTFT)NNN)
r   r   r   r   __doc__r   rf   rL   r   r   r   r   r   r   r   X   s0    &P BFFJLP@D!(F	F/P
Br   r   )	NNNNTNFFT)r   r5   r   
scipy._libr   numpyrF   numpy.testingr   r   scipy.specialspecialr-   __all__r	   r'   r   r   r   r   r   r   <module>r      sY    	     !  
B 

$ >B6::?EIBiB iBr   