
    e                        d 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 ddlZej                            d ej        d          d 	          d
             Zej                            d ej        d          d 	          dd            Zej                            d ej        d          d 	          d             Zd Zd Zd ZdS )zTest moving window functions.    N)assert_equalassert_array_almost_equalassert_raises   )arraysarray_orderfuncmovec                     | j         S N__name__xs    :lib/python3.11/site-packages/bottleneck/tests/move_test.py<lambda>r   
            )idsc                    d}|dz  }t           }| j        }t          d|z            }|dk    rd}nd}t          t	          |                    D ]+\  }}t          d|j                  }|D ]}	t          d|j        |	                   }
|
D ]}t          t          d|dz                       d	gz   }|D ]} | ||||	
          } |||||	
          }||t          |          dt          |          z   t          |j
                  t          |j                  t          |	          t          |          |f	}||z  } |||||           |dz  }|j
        }|j
        }t          |||||fz             Ì-d	S )z?Test that bn.xxx gives the same output as a reference function.zT
func %s | window %d | min_count %s | input %s (%s) | shape %s | axis %s | order %s

Input array:
%s

bn.slow.%smove_var      r   Naxisaz
 dtype mismatch %s %s)r   r   eval	enumerater   rangendimshapeliststrdtyper   r   )r	   fmtaaae	func_namefunc0decimalir   axesr   windowswindow
min_counts	min_countactualdesiredtuperr_msgdadds                       r   	test_mover9   
   s   	  !!C$DI	)**EJ&++,, = =1R   	= 	=DAqwt}--G! = =!%6A:"6"6774&@
!+ = =I!T!VYTBBBF#eAvytDDDG!Ic!ffAGAGD		#A
C "CiGD'7;;;88GB B RB8);<<<<'==	== =r   c                     | j         S r   r   r   s    r   r   r   9   r   r   r   c                 N   | j         }t          d|z            }t          j        g d          }d| z  }|dz  }|d|z  z  } | |d          } ||d          }|dz  }t	          ||||            | |dd          } ||dd          }|d	z  }t	          ||||            | |d
          } ||d
          }|dz  }t	          ||||            | |dd          } ||dd          }|dz  }t	          ||||            | |ddd          } ||ddd          }|dz  }t	          ||||            | |ddd          } ||ddd          }|dz  }t	          ||||            | |ddd          } ||ddd          }|dz  }t	          ||||            | |ddd          } ||ddd          }|dz  }t	          ||||           |dv r7 | |dddd          } ||dddd          }|dz  }t	          ||||           |dddf}	i }
 | |	i |
 dS )ztest argument parsing.r   g      ?   r   z
%sz%s
r   r=   z(a, 2)r   z	(a, 2, 1)r0   z(a, window=2)r0   r2   z(a, window=2, min_count=1)r   )r0   r2   r   z"(a, window=2, min_count=1, axis=0))r2   r0   r   z"(a, min_count=1, window=2, axis=0)r   N)r   r2   r0   z&(a, axis=-1, min_count=None, window=2))r   r   r2   r0   z((a=a, axis=-1, min_count=None, window=2)move_stdr   ddofz(a, 2, 1, -1, ddof=1))r   r    nparrayr   )r	   r,   namer+   r   r(   r3   r4   r6   argskwargss              r   test_arg_parsingrI   9   s(    =D$%%E
A
4-C6MC!A%%CT!QZZFeAqkkGHnGfgw@@@T!Q]]FeAq!nnGKGfgw@@@T!AFeAa   GO#Gfgw@@@T!A+++FeAa1---G00Gfgw@@@T!A333FeAa11555G88Gfgw@@@T!q333FeA11555G88Gfgw@@@T!"Q777FeAB$q999G<<Gfgw@@@TAB$q999FeabD;;;G>>Gfgw@@@'''aAr***%1a!,,,//!&'7GDDD q!R=DFD$&r   c                     | j         S r   r   r   s    r   r   r   z   r   r   c           
         t          j        g d          }t          t          |            t          t          | |           t          t          | |ddd           t          t          | |dd|           t          t          | |ddddd           t          t          | |dd           t          t          | |dd	
           | j        dvrt          t          | |dd           dS dS )z$test argument parsing raises in mover<   r   r=   r   )r   extra)r   r   0r   1)r2   r@   rB   N)rD   rE   r   	TypeErrorr   )r	   r   s     r   test_arg_parse_raisesrP   z   s     	A)T""")T****)T1aaq9999)T1aa15555)T1aAq!444)T1ac2222)T1a37777}444iq!!444444 54r   c                  P   d} t           }d}d}t          j        }t          j        j        }t          j                            g d          }t          d          D ]}t	          j        |t          j	                  } |j
        |j         dk     }	t          j        ||	<    |j
        |j         dk     }	t          j        ||	<   |                    |           t          d	|dz             D ];}
 |||
|
          } |||
|
          }| |j        |
||fz  } |||d|           <dS )ztest move_median.c with nans5
func %s | window %d | min_count %s

Input array:
%s
r   
   r   r=   r   d   r'   g?g?r=   r?   r   r,   r6   N)r   bnmove_medianslowrD   randomRandomStater"   arangefloat64randr$   infnanshuffler   )r(   r)   r2   sizer	   r+   rsr-   r   idxr0   r3   r4   r6   s                 r   test_move_median_with_nansrf      sC   
FC$DID>DGE			yyy	)	)B3ZZ > >Id"*---bgqw#%#bgqw#%#


1Atax(( 	> 	>FT!Fi@@@FeAf	BBBGT]FIqAAGD!W=====		>> >r   c                     d} t           }d}d}t          j        }t          j        j        }t          j                            g d          }t          d          D ]}t	          j        |t          j	                  }|
                    |           t          d|dz             D ];}	 |||	|          }
 |||	|          }| |j        |	||fz  } ||
|d	|
           <dS )ztest move_median.c without nansrR   r   rS   rT   rU   rV   r=   r?   r   rW   N)r   rX   rY   rZ   rD   r[   r\   r"   r]   int64rb   r   )r(   r)   r2   rc   r	   r+   rd   r-   r   r0   r3   r4   r6   s                r   test_move_median_without_nansri      s   
FC$DID>DGE			yyy	)	)B3ZZ > >Id"(+++


1Atax(( 	> 	>FT!Fi@@@FeAf	BBBGT]FIqAAGD!W=====		>> >r   c                  r   g d} d}t          j        | d          }t          j        |dd                                                   sJ |dz              t          j        | | g          }t          j        |dd          }t          j        |ddddf                                                   sJ |dz              t          j        | | g| | gg          }t          j        |dd          }t          j        |ddddddf                                                   sJ |dz              dS )	zTest move_std for neg sqrt.)ge>R?Rz12?rk   rk   rk   z)Square root of negative number. ndim = %dr   r>   r=   Nr   )r0   r   )rX   rA   rD   isfiniteallrE   )r   r6   ba2a3s        r   test_move_std_sqrtrq      sG   	 	 	A :G
Aa   A;qu!!##00Wq[000	1a&		B
Bqq)))A;qABBx  $$&&33!333	Aq6Aq6"	#	#B
Bqq)))A;qAAAqrr{##''))667Q;66666r   )r   )__doc__numpyrD   numpy.testingr   r   r   
bottleneckrX   utilr   r   pytestmarkparametrizeget_functionsr9   rI   rP   rf   ri   rq    r   r   <module>r|      sr   # #     P P P P P P P P P P     % % % % % % % %  !1!1&!9!9?S?STT'= '= UT'=\ !1!1&!9!9?S?STT= = = UT=@ !1!1&!9!9?S?STT5 5 UT5.> > >.> > >.7 7 7 7 7r   