
    eL                     p   d Z ddlZddlZddlZddlmZmZmZ ddl	Z
ddlmZmZmZ ddlZej                            d e
j        d          d 	          d
             ZddZej                            d e
j        d          d 	          d             ZddZej                            d e
j        d                    d             Zd ZefdZefdZd Zd Zej                            de          ej                            de
j        e
j        fd 	          d                         ZdS )zTest reduce functions.    N)assert_equalassert_raisesassert_array_almost_equal   )arraysarray_orderDTYPESfuncreducec                     | j         S N__name__xs    <lib/python3.11/site-packages/bottleneck/tests/reduce_test.py<lambda>r          1:     )idsc                      t          |           S )ztest reduce functions)
unit_makerr
   s    r   test_reducer      s     dr      nansumssc           
         d}|dz  }| j         }t          d|z            }t          t          |                    D ]\  }}|j        dk    rdg}n&t          t          d|j                            dgz   }|D ]o}	d}
d}d}	  | ||		          }
n	#  d
}Y nxY wd}	 t          j                    5  t          j	        d            |||		          }ddd           n# 1 swxY w Y   n	#  d
}Y nxY w|r|r|dt          |          z   t          |j                  t          |j                  t          |	          t          |          |f}||z  }||k    r/|rd}nd}|||t          j                    fz  }||z  }J |            t!          |
|||           |dz  }||vrDt#          |
d          r4t#          |d          r$|
j        }|j        }t%          |||||fz             qdS )z6Test that bn.xxx gives the same output as bn.slow.xxx.z9
func %s | input %s (%s) | shape %s | axis %s | order %s

Input array:
%s

bn.slow.%sr   NCrashedFaxisTignoreaz 
bn.%s raised
bn.slow.%s ran

%sz 
bn.%s ran
bn.slow.%s raised

%sz
 dtype mismatch %s %sdtype)r   eval	enumerater   ndimlistrangewarningscatch_warningssimplefilterstrr(   shaper   	traceback
format_excr   hasattrr   )r
   decimal
skip_dtypefmtnamefunc0ir'   axesr%   actualdesiredactualraiseddesiredraisedtuperr_msgfmt2msgdadds                       r   r   r      s   
GC!!C=D$%%E&,,'' 0A 0A16Q;;6DDb!&))**dV3D +	A +	ADFG L$ad+++$#!M%,.. 2 2)(333#eAD111G2 2 2 2 2 2 2 2 2 2 2 2 2 2 2% $ A A #a&&LLLLLIINN )=00# FEE$i.B.D.D!EECsNG)'))))&'7GLLL44z))vw// AGGW4M4M A#\$]$RWBx-?@@@W+	A0A 0As<   BBC+1"CC+C##C+&C#'C++C1c                     | j         S r   r   r   s    r   r   r   Q   r   r   c                      t          |           S )ztest argument parsing)unit_maker_argparser   s    r   test_arg_parsingrJ   Q   s     t$$$r   c                    | j         }t          d|z            }t          j        g d          }d| z  }|dz  }|d|z  z  } | |          } ||          }|dz  }t	          ||||            | |d          } ||d          }|dz  }t	          ||||            | |d	          } ||d	          }|d
z  }t	          ||||            | |d          } ||d          }|dz  }t	          ||||            | |d	          } ||d	          }|dz  }t	          ||||            | |          } ||          }|dz  }t	          ||||           |df}	i }
 | |	i |
 d	S )ztest argument parsing.r!         ?      z
%sz%s
r    z(a)r   z(a, 0)Nz	(a, None)r$   z(a, axis=0)z(a, axis=None))r'   )r   r)   nparrayr   )r
   r6   r9   r:   r'   r8   r=   r>   rB   argskwargss              r   rI   rI   W   s    =D$%%E
A
4-C6MC!A%%CT!WWFeAhhGEkGfgw@@@T!QZZFeAqkkGHnGfgw@@@T!T]]FeAtnnGKGfgw@@@T!!___FeAAGM!Gfgw@@@T!$FeAD!!!G$$Gfgw@@@TAYYYFeajjjGEkGfgw@@@ q6DFD$&r   c                      t          |           S )&test argument parsing raises in reduce)unit_maker_argparse_raisesr   s    r   test_arg_parse_raisesrW      s     &d+++r   c           
         t          j        g d          }t          t          |            t          t          | |           t          t          | |dd           t          t          | |d|           t          t          | |ddddd           t          t          | |d           | j        dvrt          t          | |d           t          t          | ||           d	S )
rU   rL   r$   r   )r%   extra)r%   r'   0)nanstdnanvarddofN)rP   rQ   r   	TypeErrorr   )r
   r'   s     r   rV   rV      s    
A)T""")T****)T11A6666)T112222)T1aAq!444)T13////}000iqq1111)T1a(((((r   c                     g d}|D ]b}| D ]]}t          j        ||          }t          t          t          j        |           t          t          t          j        j        |           ^cdS )z'Test nanmax for size zero input arrays.)r   )rN   r   )r   rN   r   r(   N)rP   zerosr   
ValueErrorbnnanmaxslowdtypesshapesr2   r(   r'   s        r   test_nanmax_size_zerork      {    &&&F 9 9 	9 	9Ee,,,A*bi333*bgna8888	99 9r   c                     g d}|D ]b}| D ]]}t          j        ||          }t          t          t          j        |           t          t          t          j        j        |           ^cdS )z'Test nanmin for size zero input arrays.ra   rb   N)rP   rc   r   rd   re   nanminrg   rh   s        r   test_nanmin_size_zeroro      rl   r   c                  Z   t          j        dgd          } t          j        d          5  t           j                            dgd          }ddd           n# 1 swxY w Y   t          | |d           t          j        dgd          } t          j        d          5  t           j                            dgd          }ddd           n# 1 swxY w Y   t          | |d	           t          j        dt          j        gd          } t          j        d          5  t           j                            dt          j        gd          }ddd           n# 1 swxY w Y   t          | |d
           t          j        dt          j        gt          j        dggdd          } t          j        d          5  t           j                            dt          j        gt          j        dggdd          }ddd           n# 1 swxY w Y   t          | |d           dS )z"nanstd regression test (issue #60)rM   r   r]   r&   invalidNzbn.nanstd([1.0], ddof=1) wrongrB   zbn.nanstd([1], ddof=1) wrongz!bn.nanstd([1, nan], ddof=1) wrongr   r%   r^   issue #60 regression)re   r[   rP   errstaterg   r   nanfss     r   test_nanstd_issue60r{          		3%a   A	X	&	&	& * *GNNC5qN))* * * * * * * * * * * * * * *A?@@@@
	1#AA	X	&	&	& ( (GNNA3QN''( ( ( ( ( ( ( ( ( ( ( ( ( ( (A=>>>>
	1bf+A&&&A	X	&	&	& 0 0GNNArv;QN//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0ABCCCC
	Arv;,11===A	X	&	&	& G GGNNQK"&!5AANFFG G G G G G G G G G G G G G GA5666666G   #AA #A %#CCC(.E""E&)E&=HHHc                  Z   t          j        dgd          } t          j        d          5  t           j                            dgd          }ddd           n# 1 swxY w Y   t          | |d           t          j        dgd          } t          j        d          5  t           j                            dgd          }ddd           n# 1 swxY w Y   t          | |d	           t          j        dt          j        gd          } t          j        d          5  t           j                            dt          j        gd          }ddd           n# 1 swxY w Y   t          | |d
           t          j        dt          j        gt          j        dggdd          } t          j        d          5  t           j                            dt          j        gt          j        dggdd          }ddd           n# 1 swxY w Y   t          | |d           dS )z"nanvar regression test (issue #60)rM   r   r]   r&   rq   Nzbn.nanvar([1.0], ddof=1) wrongrs   zbn.nanvar([1], ddof=1) wrongz!bn.nanvar([1, nan], ddof=1) wrongr   rt   ru   )re   r\   rP   rv   rg   r   rw   rx   s     r   test_nanvar_issue60r      r|   r}   r(   c                     | j         S r   r   r   s    r   r   r      s    qz r   c                     t          j        d|          }dD ]&} | ||d          }t          j        |          sJ 'd S )N)r   r   rb   )Nr   r   r"   rO   rt   )rP   onesisnan)r
   r(   rQ   r%   results        r   test_ddof_nansr      s`     GF%(((E     e$Q///x   r   )r   r   )r   ) __doc__r.   r3   numpyrP   numpy.testingr   r   r   
bottleneckre   utilr   r   r	   pytestmarkparametrizeget_functionsr   r   rJ   rI   rW   rV   rk   ro   r{   r   r[   r\   r    r   r   <module>r      s:              P P P P P P P P P P     - - - - - - - - - -  !1!1(!;!;AUAUVV  WV
6A 6A 6A 6Az !1!1(!;!;AUAUVV% % WV%
- - - -` !1!1(!;!;<<, , =<,
) ) )& "( 9 9 9 9 "( 9 9 9 97 7 707 7 70 &))")RY!7=Q=QRR    SR *)     r   