
    !g1                        d dl Zd dlmZmZmZ d dlmZmZ d dl	Z	d dl
mZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ 	 d dlmZ dZerd dlm Z   e d      Z!ndZ!d Z" G d	 d
      Z# G d de#      Z$ G d de$      Z% G d d      Z& G d de&      Z' G d d      Z( G d d      Z) G d d      Z*e	jV                  jX                  d        Z-y# e$ r Y w xY w)    N)assert_array_lessassert_equalassert_raises)	DataFrameSeries)abline_plot
add_lowessinfluence_plotplot_added_variable	plot_ccprplot_ccpr_gridplot_ceres_residualsplot_fitplot_leverage_resid2plot_partial_residualsplot_partregress_gridplot_regress_exogF)PdfPagesztest_regressionplots.pdfc                 4    t         r| j                  |       y y )N)
pdf_outputsavefig)pdffigs     l/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/graphics/tests/test_regressionplots.pyclose_or_saver   $   s    C     c                       e Zd Zed        Zej                  j                  d        Zej                  j                  d        Z	ej                  j                  d        Z
ej                  j                  d        Zy)TestPlotc                    d}d}t        j                  dd|      }ddt         j                  j                  |      z  z   }t         j                  ||t        j
                  d|z        |dz
  dz  t        j                  |      f   }g d}t        j                  ||      }||t         j                  j                  |	      z  z   }t        j                  t         j                  ||f   d
      }	t        j                  ||	      j                         | _        t        j                  ||      j                         | _        y )Nd         ?r               r!   r!      g{Gzg      @sizeFprepend)nplinspacerandomrandnc_sinonesdotnormalsmadd_constantOLSfitresres_true)
clsnsamplesigx1x2xbetay_trueyexog0s
             r   setup_classzTestPlot.setup_class+   s    [[B(RYY__W---EE"b"&&r*R!VM2777;KKL'4S299+++999b"fu=&&E"&&(vva|'')r   c                    | j                   }t        |dd       }|j                  j                  d d df   }|j                  }|j                  j
                  }|j                  d   j                         d   j                         \  }}t        j                  j                  ||       t        j                  j                  ||       |j                  d   j                         d   j                         \  }}t        j                  j                  ||       t        j                  j                  ||       t        t        |       y )Nr   rB   r'   )r9   r   modelexogfittedvaluesendogaxes	get_linesget_datar,   testingr   r   r   )	selfclose_figuresr9   r   x0yfrC   px1px2s	            r   test_plot_fitzTestPlot.test_plot_fit:   s    hhsAd+YY^^AqD!IIOO88A;((*1-668S


C(


3'88A;((*1-668S


C(


C(c3r   c                 J   | j                   }t        |dd        t        |ddg       t        | j                  d       t	        |d       t        |d       t        |dg       t        |ddg      }|j                  D ]  }t        |        t        t        |       y )Nr   rG   r'   )exog_idx)r%   r$   )grid)r9   r   r   r:   r   r   r   rL   r	   r   r   )rP   rQ   r9   r   axs        r   test_plot_othzTestPlot.test_plot_othN   s     hha%cQF3dmm&9#*#"saS)SAa51(( 	BrN	 	c3r   c                    | j                   j                         }t        | j                         }t        t	        |t
        j                        d       	 |j                  d   j                         d   j                  }t        j                  |j                  d         }t        j                  ||      j                         j                  }t!        |d       t        | j                   d      }t        t	        |t
        j                        d       	 |j                  d   j                         d   j                  }t        j                  t)        j*                  |j,                  d               }t        j                  ||      j                         j                  }t!        |d       t/        t0        t        | j                   d       y # t"        $ r dd l}|j'                  d       Y w xY w# t"        $ r Y Rw xY w)NTr   g-q=z+test not compatible with matplotlib versionDFFITS)	criterionunknown)r9   get_influencer
   r   
isinstancepltFigurerL   get_children_sizesr5   r6   cooks_distancer7   r8   ssrr   AttributeErrorwarningswarnr,   absdffitsr   
ValueError)rP   rQ   inflr   sizesexrg   ri   s           r   test_plot_influencezTestPlot.test_plot_influence_   s   xx%%'TXX&ZSZZ0$7	IHHQK,,.q188E!4!4Q!78B&&#'')--Cc5)
 TXX:ZSZZ0$7	HHQK,,.q188EA!78B&&#'')--Cc5) 	j.$((iP  	IMMGH	I  		s&   BG BG7 G43G47	HHc                 v    t        | j                        }t        t        |t        j
                        d       y )NT)r   r9   r   ra   rb   rc   )rP   rQ   r   s      r   test_plot_leverage_resid2z"TestPlot.test_plot_leverage_resid2z   s%    "488,ZSZZ0$7r   N)__name__
__module____qualname__classmethodrE   pytestmark
matplotlibrV   r[   rq   rs    r   r   r   r   )   s    * * [[   & [[     [[Q Q4 [[8 8r   r   c                       e Zd Zd Zy)TestPlotPandasc                    d}d}t        j                  dd|      }ddt         j                  j                  |      z  z   }t         j                  ||t        j
                  d|z        |dz
  dz  t        j                  |      f   }g d}t        j                  ||      }||t         j                  j                  |	      z  z   }t        j                  t         j                  ||f   d
      }	t        |	g d      }	t        |d      }t        j                  ||	      j                         }
|
| _        t        |	g d      }||d<   || _        y )Nr    r!   r   r"   r#   r$   r%   r&   r(   Fr*   )constvar1var2columnsoutcomenamerC   )r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r   r   r7   r8   r9   data)rP   r<   r=   r>   r?   XrA   rB   rC   rD   r9   r   s               r   setup_methodzTestPlotPandas.setup_method   s   [[B(BIIOOG,,,EE"b"&&R.2a4!)RWWW5EEF'4S299+++999b"fu=%)BC19%ffQ""$(ABS		r   N)rt   ru   rv   r   r{   r   r   r}   r}      s    r   r}   c                   D    e Zd Zej                  j
                  d        Zy)TestPlotFormulac                     ddl m}  |d| j                        j                         }t	        |d        |d| j                        j                         }t	        |d       y )Nr   )olszy~var1-1)r   r   zy~var1)statsmodels.formula.apir   r   r8   r   )rP   rQ   r   r9   s       r   test_one_column_exogz$TestPlotFormula.test_one_column_exog   sK    /*499-113#v&(+//1#v&r   N)rt   ru   rv   rx   ry   rz   r   r{   r   r   r   r      s    [[' 'r   r   c                   4   e Zd Zed        Zej                  j                  d        Zej                  j                  d        Z	ej                  j                  d        Z
ej                  j                  d        Zej                  j                  d        Zy)
TestABLinec                    t         j                  j                  d       t        j                  t         j                  j                  ddd            }t        j                  |ddg      t         j                  j                  ddd      z   }t        j                  ||      j                         }|| _	        || _
        || _        y )N90  r   r"      r(            @)r,   r.   seedr5   r6   r4   r3   r7   r8   r   rC   modr;   r   rC   r   s       r   rE   zTestABLine.setup_class   s    
		uOOBII,,Q,<=FF1r3i 299#3#3Ar#3#CCffQqkoor   c                     t        | j                        }|j                  d   }|j                  | j                  d d df   | j
                         t        t        |       y )N)model_resultsr   r'   )r   r   rL   scatterr   rC   r   r   rP   rQ   r   rZ   s       r   test_abline_modelzTestABLine.test_abline_model   sE    1XXa[


466!A#;'c3r   c                     t        j                         }|j                  d      }|j                  | j                  d d df   | j
                         t        | j                  |      }t        t        |       y )No   r'   )r   rZ   )
rb   figureadd_subplotr   r   rC   r   r   r   r   r   s       r   test_abline_model_axzTestABLine.test_abline_model_ax   sS    jjl__S!


466!A#;'R8c3r   c                 t    | j                   }|j                  \  }}t        ||      }t        t        |       y )N)	interceptslope)r   paramsr   r   r   )rP   rQ   r   r   r   r   s         r   test_abline_abzTestABLine.test_abline_ab   s/    hh::	5IU;c3r   c                    | j                   }|j                  \  }}t        j                         }|j	                  d      }|j                  | j                  d d df   | j                         t        |||      }t        t        |       y )Nr   r'   r   r   rZ   )r   r   rb   r   r   r   r   rC   r   r   r   )rP   rQ   r   r   r   r   rZ   s          r   test_abline_ab_axzTestABLine.test_abline_ab_ax   sh    hh::	5jjl__S!


466!A#;'IUrBc3r   c                    | j                   }|j                  \  }}t        j                         }|j	                  d      }|j                  | j                  d d df   | j                         t        |||       t        |d|z  |       |j                         }|j                  d      j                          t        t        |       y )Nr   r'   r   r%   r   )r   r   rb   r   r   r   r   rC   r   rM   popremover   r   )rP   rQ   r   r   r   r   rZ   liness           r   test_abline_removezTestABLine.test_abline_remove   s    hh::	5jjl__S!


466!A#;'iu<iqw2>		!c3r   N)rt   ru   rv   rw   rE   rx   ry   rz   r   r   r   r   r   r{   r   r   r   r      s      [[    [[    [[    [[    [[
  
 r   r   c                       e Zd Zed        Zy)TestABLinePandasc                    t         j                  j                  d       t        j                  t         j                  j                  ddd            }t        j                  |ddg      t         j                  j                  ddd      z   }|| _        || _        t        |dd	g
      }t        |d      }t        j                  ||      j                         }|| _        y )Nr   r   r"   r   r(   r   r   r   someXr   r   r   )r,   r.   r   r5   r6   r4   r3   r   rC   r   r   r7   r8   r   r   s       r   rE   zTestABLinePandas.setup_class   s    
		uOOBII,,Q,<=FF1r3i 299#3#3Ar#3#CCa'7!3419%ffQqkoor   N)rt   ru   rv   rw   rE   r{   r   r   r   r      s    	 	r   r   c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestAddedVariablePlotc                    t         j                  j                  d       d}d}t         j                  j                  ||f      }d|d d df   z   d|d d df   d	z  z  z   }|t         j                  j                  |      z   }t	        j
                  ||      }|j                         }t        |d      }	|	j                         d   }
|
j                  d
       t        t        |	        |        y )Nv  r    r$   r(      r   皙?r'   r%   zAdded variable plot (OLS))r,   r.   r   r4   r5   r7   r8   r   get_axes	set_titler   r   )rP   rQ   nprI   lin_predrK   rH   resultsr   rZ   s              r   test_added_variable_olsz-TestAddedVariablePlot.test_added_variable_ols   s    
		tyyaV,tAqDz>C$q!t*a-$77299+++33ud#))+!'1-\\^A
01c3r   c           
      P   t         j                  j                  d       d}d}t         j                  j                  ||f      }d|d d df   z   d|d d df   d	z  z  z   }t        j                  |      }t         j                  j                  |      }t        j                  ||t        j                  j                         
      }|j                         }	dD ]  }
dD ]  }dD ]  }ddg|   }dD ]  }|dk(  rt        |	|
||      }d}n|	j                  |
||      }d}|j                         d   }t        |       |j                  g d       g d|
   }|dz  }||dz   z  }||dz   z  }|d|z  z  }|j                  |       t!        t"        |        |            y )Nr   r    r$   r(   r   r   r   r'   r%   family)r   r'   r%   )FT)resid_devianceresid_response
UnweightedWeightedr   r'   )use_glm_weights
resid_typezAdded variable plotz&Added variable plot (called as method))皙?r   皙?gffffff?)Linear effect, slope=1Quadratic effectz	No effect
Poisson regression

zUsing '%s' residuals)r,   r.   r   r4   exppoissonr5   GLMfamiliesPoissonr8   r   r   r	   set_positionr   r   r   )rP   rQ   r   r   rI   r   expvalrK   rH   r   	focus_colr   r   
weight_strjr   tirZ   
effect_strs                      r   test_added_variable_poissonz1TestAddedVariablePlot.test_added_variable_poisson   s    			tyyaV,tAqDz>C$q!t*a-$77!		!!&)ud2;;+>+>+@A))+  	(I#. ("D (J".
!;O!LJ " (6"5gyFUAK#MC "7B")"="=iN]IS #> #UC "JB \\^A."2(<=&GGP&R
66j4//j4//4zAAR(%c3/%1(	((	(r   N)rt   ru   rv   rx   ry   rz   r   r   r{   r   r   r   r      s<    [[   [[,( ,(r   r   c                   D    e Zd Zej                  j
                  d        Zy)TestPartialResidualPlotc                     t         j                  j                  d       d}d}t         j                  j                  ||f      }d|d d df<   d|d d df   z   d|d d d	f   d	z  z  z   }t        j                  |      }t         j                  j                  |      }t        j                  ||t        j                  j                         
      }|j                         }	dD ]  }
dD ]  }|dk(  rt        |	|
      }n|	j                  |
      }|j                         d   }t        |       |j                  g d       g d|
   }d}|dk(  r|dz  }|j                  |dz   |z          t!        t"        |         y )Nr   r    r$   r(   r'   r   r   r   r%   r   r'   r%   r   r   r   r   gp=
ף?	Interceptr   r   zPartial residual plot (called as method)r   )r,   r.   r   r4   r   r   r5   r   r   r   r8   r   r   r	   r   r   r   r   rP   rQ   r   r   rI   r   r   rK   rH   r   r   r   r   rZ   r   r   s                   r   test_partial_residual_poissonz5TestPartialResidualPlot.test_partial_residual_poisson+  sj    			tyyaV,QT
tAqDz>CQT
A$55!		!!&)ud2;;+>+>+@A))+ 	(I (60)DC!88CC\\^A&2 5622;=
,6//BR"::'( )c3'(	(r   N)rt   ru   rv   rx   ry   rz   r   r{   r   r   r   r   )      [[( (r   r   c                   D    e Zd Zej                  j
                  d        Zy)TestCERESPlotc                     t         j                  j                  d       d}d}t         j                  j                  ||f      }d|d d df<   d|d d df   z   d|d d d	f   d	z  z  z   }t        j                  |      }t         j                  j                  |      }t        j                  ||t        j                  j                         
      }|j                         }	dD ]  }
dD ]  }|dk(  rt        |	|
      }n|	j                  |
      }|j                         d   }t        |       |j                  g d       g d|
   }d}|dk(  r|dz  }|j                  |dz   |z          t!        t"        |         y )Nr   r    r$   r(   r'   r   r   r   r%   r   r   r   r   r   z
CERES plotr   r   )r,   r.   r   r4   r   r   r5   r   r   r   r8   r   r   r	   r   r   r   r   r   s                   r   test_ceres_poissonz TestCERESPlot.test_ceres_poissonO  sj    			tyyaV,QT
tAqDz>CQT
A$55!		!!&)ud2;;+>+>+@A))+ 	(I (6.w	BC!66yAC\\^A&2 5622;=
!6//BR"::'( )c3'(	(r   N)rt   ru   rv   rx   ry   rz   r   r{   r   r   r   r   M  r   r   r   c            	         t         j                  d        } t        t        t         j                  j	                  d      t         j                  j	                  d      t         j                  j	                  d                  }t
        j                  j                  dddgd|d	
       t
        j                  j                  dddgd|       y )Nc                 :    | dkD  rt        j                  |       S dS )Nr   )r,   log10)r@   s    r   lgz(test_partregress_formula_env.<locals>.lgv  s    !erxx{**r   
   r(   )abcr   zlg(b)r   Fr'   )
obs_labelsr   eval_env)r   r   )r,   	vectorizer   dictr.   r5   graphicsplot_partregress)r   dfs     r   test_partregress_formula_envr   r  s     \\+ + 
iiB'iiB'iiB'	

B KK  WseB ! D KK  WseB ! 8r   ).numpyr,   numpy.testingr   r   r   pandasr   r   rx   statsmodels.apiapir5   $statsmodels.graphics.regressionplotsr   r	   r
   r   r   r   r   r   r   r   r   r   matplotlib.pyplotpyplotrb   ImportErrorr   matplotlib.backends.backend_pdfr   r   r   r   r}   r   r   r   r   r   r   ry   rz   r   r{   r   r   <module>r     s     H H $     	# 
8
-
.C
C
T8 T8nX &'n '7  7 tz @( @(F"( "(H"( "(J 8 8w
  		s   C CC