
    !gr*                        d Z ddlZddlZddlmZmZmZmZm	Z	 ddl
Z
ddlmZ ddlZej                  j!                  ej                  j#                  e            Zej                  j)                  ed      Z G d d      Zd Zd	 Zy)
a  
Lowess testing suite.

Expected outcomes are generated by R's lowess function given the same
arguments. The R script test_lowess_r_outputs.R can be used to
generate the expected outcomes.

The delta tests utilize Silverman's motorcycle collision data,
available in R's MASS package.
    N)assert_assert_allcloseassert_almost_equalassert_equalassert_raises)lowessresultsc                       e Zd Zd Zej
                  j                  dddg      d        Zd Ze	dd       Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)
TestLowessc                 ^    dd l m} |j                  j                  }t	        t        |u        y )Nr   )statsmodels.apiapinonparametricr   r   )selfsmlowess1s      h/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/nonparametric/tests/test_lowess.pytest_importzTestLowess.test_import"   s%     	%""))'!"    
use_pandasFTc                 h   t        j                  d      t        j                  d      t        j                  d      d}|r&|D ci c]  }|t        j                  ||          }}t        j
                  |d   |d   g      j                  }t        |d   |d         }t        ||d       y c c}w N   )xyoutr   r   r      )	nparangezerospdSeriesarrayTr   r   )r   r   	test_datakexpected_lowessactual_lowesss         r   	test_flatzTestLowess.test_flat*   s     2"88B<
	
 =FGBIIil33GIG((IcNIe4D#EFHHy~y~>O]A> Hs    B/c                    t        j                  d      t        j                  d      t        j                  d      d}t        j                  |d   |d   g      j                  }t	        |d   |d         }t        ||d       y r   )r   r   r#   r$   r   r   )r   r%   r'   r(   s       r   
test_rangezTestLowess.test_range7   sn    2299R=
	
 ((IcNIe4D#EFHHy~y~>O]A>r   Nc                 N   |i n|}t        j                  t        j                  j	                  t
        |      dd      }| t        _        t        |      r ||      }t        ||   ||   fi |}t        j                  ||   ||   g      j                  }	t        ||	|       y )N,T	delimiternames)r   
genfromtxtospathjoinrpathr   descriptioncallabler   r#   r$   )
namefnamer   r   r   kwargsdecimaldataresultexpects
             r   generatezTestLowess.generateA   s    ~6}}GGLL&#T
 +/'FD\FQa3F347DI./11FFG4r   c                 (    | j                  dd       y )Ntest_simpletest_lowess_simple.csvr?   r   s    r   rA   zTestLowess.test_simpleO   s    m%=>r   c                 2    | j                  dddddi       y )Ntest_iter_0test_lowess_iter.csvout_0itr   r   r:   rC   rD   s    r   rF   zTestLowess.test_iter_0R   #    "!9	 	 	
r   c                 2    | j                  dddddi       y )NrF   rG   out_3rI      rJ   rC   rD   s    r   test_iter_0_3zTestLowess.test_iter_0_3Z   rK   r   c                 2    | j                  dddddi       y )Ntest_frac_2_3test_lowess_frac.csvout_2_3fracgUUUUUU?rJ   rC   rD   s    r   rQ   zTestLowess.test_frac_2_3b   $    "G$	 	 	
r   c                 2    | j                  dddddi       y )Ntest_frac_1_5rR   out_1_5rT   g?rJ   rC   rD   s    r   rW   zTestLowess.test_frac_1_5j   rU   r   c                 2    | j                  dddddi       y )Ntest_delta_0test_lowess_delta.csvrH   rT   皙?rJ   rC   rD   s    r   rZ   zTestLowess.test_delta_0r   s#    #C=	 	 	
r   c                 0    | j                  dddd        y )Ntest_delta_Rdefr[   out_Rdefc                 >    ddt        j                  | d         z  dS )Nr\   g{Gz?r   rT   delta)r   ptp)r<   s    r   <lambda>z,TestLowess.test_delta_rdef.<locals>.<lambda>   s!    tCy 11! r   rJ   rC   rD   s    r   test_delta_rdefzTestLowess.test_delta_rdefz   s!    #	 	 	
r   c                 6    | j                  ddddddd       y )	Ntest_delta_1r[   out_1r\   g8   ?ra   
   )r   r:   r;   rC   rD   s    r   rg   zTestLowess.test_delta_1   s'    #)4 	 	
r   c                 j	   t         j                  j                  t        d      }t	        j
                  t        |d      dd      }|d   |d   }}|d   }t	        j                  |d   |d   g      j                  }t        ||d	      }t        ||d
       t        j                  ||d      }t        |d   |d   d	      }t        ||d
       t        ||dd      }	t        |	|d
       t        |d d d   |d d d   d      }	t        |	|d d ddf   d
       t        ||ddd      }	t        |	|d d df   d
       t        t	        j                  |      j                  t              |d	      }	t        t	        j                  |      |d	      }t        |	|d
       t!        |	j"                  t	        j"                  t$              u        t        |t	        j                  |      j                  t              d	      }	t        |t	        j                  |      d	      }t        |	|d
       t!        |	j"                  t	        j"                  t$              u        t	        j&                  t)        |      dz        }
t        j*                  j-                  |
       t        ||||
   d      }t        |	|
df   |d
       t        j.                  |ddg<   t        j.                  |d<   t	        j0                  |      t	        j0                  |      z  }t        ||d	      }	t        ||   ||   d	      }t        |	|d
       t3        t4        t        ||d       t	        j&                  t)        |            }
t        j*                  j-                  |
       ||
   }||
   }t        ||d	      }t        |	|d
       t        ||dd      }t	        j0                  |      t	        j0                  |      z  }t7        t	        j8                  |      |        t	        j:                  |      }||   }|t	        j0                  |         }t        ||d d df   d
       t	        j&                  |	j<                  d         }
t        |||	|
df   d      }t        |	|
df   |d
       y )NrB   rbr-   Tr.   r   r   r   	is_sorted   r;   )r   r   none)rm   missingF)return_sorted   )rs   rq   rm      )xvalsrs         rN   raise)rq   )rm   rs   r   )r2   r3   r4   r5   r   r1   openr#   r$   r   r   r!   	DataFrameroundastypeintr   dtypefloatr   lenrandomshufflenanisfiniter   
ValueErrorr   isnanargsortshape)r   rfiler%   r   r   res1_fittedr'   actual_lowess1dfr(   perm_idxactual_lowess2
mask_validypermxpermactual_lowess3sort_idxyhatactual_lowess4s                      r   test_optionszTestLowess.test_options   s   U$<=MM$ud"3s$O	~y~1&((IcNIe4D#EFHH  15NORH \\*+3CDANORH q!tVDM>2F q2w$B$uEM>$B$'+BBO qv
 	M>!Q$+?L rxx{11#6TJQ$?M>2F##rxx67q"((1+"4"4S"9TJ288A;$?M>2F##rxx67 99SVq[)
		(#1AhKuM(A+&	

 FF1a&	vv![[^bkk!n4
q!t4*q}MM>2Fj&!Q@99SV$
		(#((u>M>2F5E
 [['"++e*<<
RXXn-
{;::e$h'BKK%&D.A"6C 99]0034qhk2%
 	(A+&	
r   c                     dgdgdz  z   dgdz  z   dgz   }|t         j                  j                  t        |            dz  z   }t	        ||dt        |      z  d	      }t        |dd
df   |dd
 d       y )Nr   rt   d   ru   rN   )sizeg:0yE>2   rT   rI   rr   r   ro   )r   r   normalr   r   r   r   r   r   r=   s       r   test_duplicate_xszTestLowess.test_duplicate_xs   s     C1#)OqcCi'1#-		  c!f -4412A;15 	F1R47OQqWa@r   c                    t        j                  ddd      }t        j                  |dz  dz        }t        ||dt	        |      z  d      }t        t        j                  |d d df   t        j                  |      d	z
  kD               t        t        j                  |d d df   t        j                  |      d	z   k               y )
Nr   ri   i  ru   rw      rt   r   r\   )	r   linspacecosr   r   r   allminmaxr   s       r   
test_spikezTestLowess.test_spike   s    
 KK2t$FF16A:12A;15vad|bffQi#o567vad|bffQi#o567r   c           
      8   t         j                  j                  t        d      }t	        j
                  t        |d      dd      }|d   |d   }}t        ||d      }t	        j                  t        |      d	z        }t        j                  j                  |       t        ||||   d
      }t        ||df   |d       t        ||dd      }t        ||||   d      }	t        ||   |	d       t        j                  t              5  t        ||t	        j                   t        j"                  ddg      d       d d d        t        |||d      }
t%        |
|d d df          t        j"                  |ddg<   t        j"                  |d<   t        ||d      }t	        j                  |j&                  d         }t        ||||df         }t        ||df   |d       t        |||d      }	t	        j(                  |      t	        j(                  |      z  }t%        |	|   |d d df          t        j                  t              5  t        ||t	        j                   dgdgg             d d d        y # 1 sw Y   BxY w# 1 sw Y   y xY w)NrB   rk   r-   Tr.   r   r   rl   ru   rp   )rv   rq   rt   rn   ro   Fr   )rs   rI   )rv   rI   rw   rN   ry   )rv   rm   rx   )rv   dropri   )r2   r3   r4   r5   r   r1   rz   r   r   r   r   r   r   pytestraisesr   r#   r   r   r   r   )r   r   r%   r   r   targetr   r(   
target_it0r   r   r   
all_finites                r   test_exog_predictzTestLowess.test_exog_predict   s=   U$<=MM$ud"3s$O	~y~11- 99SVq[)
		(#q!1X;GF8Q;/KAq!<
1AhKA>Jx0."M ]]:& 	J1arxxA7I	J  1A>^VAqD\2 FF1a&	vv!1- 99V\\!_-1F8Q;,?@F8Q;/L  1Av>[[^bkk!n4
^J/1> ]]:& 	61arxx!rd45	6 	6/	J 	J.	6 	6s   4J&JJJ)r   r   r   Nr   )__name__
__module____qualname__r   r   markparametrizer)   r+   staticmethodr?   rA   rF   rO   rQ   rW   rZ   re   rg   r   r   r   r    r   r   r   r   !   s    # [[\5$-8
? 9
?? 
5 
5?




	

T
lA	8)6r   r   c                      dgdz  dgdz  z   } t        j                  d      }t        | |d      }t        |t        j                  || f             y )Nr   ri   rt   r   皙?)rT   )r   r   r   r   column_stack)r   r   r=   s      r   test_returns_inputsr   %  sJ    	
bA38A
		"AAqs#FA 78r   c                     dgdz  dgdz  z   }t        j                  d      }t        ||d|d d       }t        |t        j                  d      d	       y )
Nr   ri   rt   r   r   rw   )rT   rv   g-q=)atol)r   r   r   r   r    )reset_randomstater   r   results_xvalss       r   test_xvals_dtyper   -  sO    	
bA38A
		"A1ac2A7MM288A;U;r   )__doc__r2   numpyr   numpy.testingr   r   r   r   r   r   *statsmodels.nonparametric.smoothers_lowessr   pandasr!   r3   dirnameabspath__file__curdirr4   r5   r   r   r   r   r   r   <module>r      ss   	 
    =  
2	3
VY'A6 A6H9<r   