
    "g@                         d dl mZ d dl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mZmZ d dlmZmZmZ d dlmZ dZ G d d	      Zd
 Zd Zd Zy)    )PLATFORM_WIN32N)assert_allcloseassert_equalassert_raises)PCApca)data	princomp1	princomp2)EstimationWarningh㈵>c                      e Zd Zed        Zej                  j                  ej                  j                  d               Z	d Z
d Zd Zd Zej                  j                  d        Zd Zej                  j                   d	        Zd
 Zej                  j'                  ed      d        Zd Zej                  j                   d        Zd Zd Zy)TestPCAc                    t         j                  j                         }|j                  d       d}d}d}d}|j                  } |||f      } |||f      }|j                  |||f      |z  }	|j                  |	      |z   | _        | j                  dz   | _        || _	        d}d}d}d}|j                  } |||f      } |||f      }|j                  |||f      |z  }	|j                  |	      |z   | _
        y )	Ni     d         )size        ,  )nprandomRandomStateseedstandard_normalstandard_gammadotxx_copyrsx_wide)
clsr!   kntlamnorm_rngefbs
             d/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/multivariate/tests/test_pca.pysetup_classzTestPCA.setup_class   s   YY""$
%%aVaVcA/#5a1UUS[
%%aVaVcA/#5UU1X\
    c                 T   t        | j                        }|j                         }|j                  d      }|j                  d      }|j                  d      }|j                         }|j                  d      }|j	                          t        | j                  d      }|j	                          t        | j                  dd	      }|j	                          t        | j                  d
d      }d|j	                         v sJ t        | j                  |j                         y )N
   ncompF	log_scaleT)
cumulative   standardizer8   demeanr   r2   glsGLS)r   r   
plot_screeplot_rsquare__repr__r   r	   )selfclose_figurespcfigs       r,   test_smoke_plot_and_reprz TestPCA.test_smoke_plot_and_repr/   s     [mmomm"m%mmem,mmtm,ooooAo&
U+
U59
qd+%%%TVVRWW%r.   c           	          t        | j                        }t        | j                  d      }t        |j                  |j                         t        t	        j
                  |j                  d d d df         t	        j
                  |j                  d d d df                t        t	        j
                  |j                  d dd d f         t	        j
                  |j                  d dd d f                t        |j                  |j                         t        t	        j
                  |j                  d d d df         t	        j
                  |j                  d d d df                t        | j                  dd      }t        | j                  dd      }t        t	        j
                  |j                        t	        j
                  |j                        t               t        t	        j
                  |j                        t	        j
                  |j                        t               t        |j                  |j                  t               t        t	        j
                  |j                        t	        j
                  |j                        t               t        | j                  |j                         t        | j                  |j                         t        | j                  |j                         y )Nsvdmethodr   )rI   r2   nipalsatol)r   r   r   
projectionr   absfactorscoeff	eigenvals	eigenvecs	DECIMAL_5r   r	   )rA   pc_eigpc_svd	pc_nipalss       r,   test_eig_svd_equivzTestPCA.test_eig_svd_equivD   s   TVVTVVE*))6+<+<=v~~a!e45v~~a!e45	7v||BQBE23v||BQBE23	5((((	*v//2A267v//2A267	9 TVVE3xq9	y001v~~.&	( 	y/v||,&	( 		++((&	( 	y223v//0&	( 	TVVV[[)TVVV[[)TVVY^^,r.   c                 4	   t        | j                        }t        | j                  d      }t        |j                  j	                  |j
                        |j                  j	                  |j
                               |j                  }t        |j                  j	                  |      t        j                  d      d       |j
                  }t        |j                  j	                  |      t        j                  d      d       t        | j                  d      }t        |j                  d d d df   |j                         t        |j
                  d dd d f   |j
                         t        |j                  d d |j                         t        |j                  d d |j                         t        |j                  d d d df   |j                         t        | j                  dd	      }| j                  j                  d
      }| j                  |z
  }|j                  j	                  |      }t        j                  j                  |      \  }	}
t        j                  |	      }|d d d   }|	|   }	|
d d |f   }
t        ||j                          t        |	|j                         t        t        j"                  |
      t        j"                  |j                               t        t        j"                  |j                        t        j"                  |j	                  |
                   t        |j$                  ||z          t        | j                  ddd      }| j                  }|j                  j	                  |      }t        j                  j                  |      \  }	}
t        j                  |	      }|d d d   }|	|   }	|
d d |f   }
t        ||j                          t        |	|j                         t        t        j"                  |
      t        j"                  |j                               t        t        j"                  |j                        t        j"                  |j	                  |
                   y )NF)	normalizer   r   rK   r0   r1      )r8   rY   r   )r8   r:   rY   )r   r   r   rO   r   rP   Tr   eyersquarerQ   rR   meanlinalgeighargsorttransformed_datarN   rM   )rA   rC   
pc_no_normprincompweightspc_10muxdmxpxvalvecindr   s                r,   test_optionszTestPCA.test_optionsh   s!   [51


rxx0"**..z/?/?@	B::

x0"&&+DI""		g.s$GDFF"%

1crc6*EMM:"a(%++6

9V-u}}=Sb)5??;QV,eoo>Ue<VV[[^ffrkeeiin99>>#&Sjjo$B$i#h!S&kR001R\\*sRVVBLL%9:rzz*BFF3773<,@AsRx0U5EJFFccggaj99>>#&Sjjo$B$i#h!S&k2../R\\*sRVVBLL%9:rzz*BFF155:,>?r.   c                 \   t         j                  dz  }t        |dd      }t        }t	        t        j                  |j                        t        j                  |j                               t	        |j                  j                  |j                        |j                  d      z   |       t	        t        j                  |j                        t        j                  |j                  j                               t	        |j                  j                  |j                        |j                  j                  |j                  j                               t        |d d dd      }|d d j                  d      }t        }t	        t        j                  |j                        t        j                  |j                               t	        |j                  j                  |j                        |z   |d d        t	        t        j                  |j                        t        j                  |j                  j                               t	        |j                  j                  |j                        |j                  j                  |j                  j                               y )Ng     @@F)rY   r8   r      )r	   xor   r
   r   r   rN   rO   r   rP   r_   coefr\   r   )rA   r   rC   refrh   s        r,   test_against_referencezTestPCA.test_against_reference   s   GGfe7rzz*BFF3;;,?@

rxx0166!9<a@rxx("&&*<=

rxx0

3	5 3B5e<sV[[^rzz*BFF3;;,?@

rxx025q"v>rxx("&&*<=

rxx0

3	5r.   c                    t        j                  d      5 }t        | j                  d      }t	        t        |      d       d d d        t        j                  d      5 }| j                  }|j                  d      t        j                  d      z  }t        |d	      }t	        t        |      d       d d d        t        t        t        | j                  d
	       t        t        t        | j                  d
       t        t        t        | j                  d       t        t        t        t        j                  t        j                  d      z  d       y # 1 sw Y   xY w# 1 sw Y   xY w)NT)recordr   r1      )r   rw   r   eigrH   unknownmissing       @)tol)r   r   )warningscatch_warningsr   r   r   lenr!   r   r   onesr   
ValueErrornan)rA   wrC   r!   r   s        r,   test_warnings_and_errorsz TestPCA.test_warnings_and_errors   s   $$D1 	$QTVV3'BQ#	$ $$D1 	$QB""8,rwws|;AQu%BQ#		$ 	j#tvvi@j#tvvyAj#tvv37j#rvv
0C'CM	$ 	$	$ 	$s   -E"AE,E),E5c                 L   t        t        j                  | j                              }t        | j                        }t	        |j
                  j                  |j
                         |j                         }|j                  d      }|j                  d      }|j                         }|j                  d      }|j                  d      }t        t        j                  | j                        dd	       t        t        j                  | j                        dd
       y )Nr0   r1   Fr3   r6   r      Tr;   )r2   r8   )
r   pd	DataFramer   r   rO   valuesr>   r?   project)rA   rB   rC   pc1rD   projs         r,   test_pandaszTestPCA.test_pandas   s    dff%&$&&k

))3;;7mmomm"m%mmem,ooooAo&zz!}BLL t4BLL u=r.   c           	      l   t        t        t        | j                  d       t        t        t        | j                  t	        j
                  ddg             | j                  | j                  j                  d      z
  }||dz  j                  d      z  }t        |dddd	      }t        |ddd
      }||j                  z
  }|dz  j                  d      }d|z  }|t	        j                  |dz  j                               z  }t        ||j                         t        ||j                         t        ||j                         t        |ddd|      }t        ||j                         t        t	        j                  |j                        t	        j                  |j                               y )NT)r<         ?)rf   r   r|   rw   F)r2   r8   r:   r<   r2   r8   r:   )r2   r8   r:   rf   )r   r   r   r   r   arrayr_   rM   sqrtr   rf   r   r	   rN   rO   )rA   r   pc_glsrC   errorsvarrf   
pc_weightss           r,   test_gls_and_weightszTestPCA.test_gls_and_weights   sE   j#tvv48j#tvvrxxc
7KL VVdffkk!n$c""QaU5dK!u=R]]"}""1%)BGGW^$9$9$;<<0Q$Q !ugV
!3!34z112BFF6>>4JKr.   c                    t        | j                        }t        |j                  j                  d   | j                  j                  d          t        |j
                  j                  d   t        t        j                  | j                  j                                     t        t        j                  | j                              }t        |j                  j                  d   | j                  j                  d          t        |j
                  j                  d   t        t        j                  | j                  j                                     y )Nrw   r   )r   r"   r   rO   shaperR   minr   r   r   r   )rA   rC   s     r,   	test_widezTestPCA.test_wide   s    RZZ%%a($++*;*;A*>?R\\''*C9J9J0K,LMdkk*+RZZ%%a($++*;*;A*>?R\\''*C9J9J0K,LMr.   c                 6   t        | j                  d      }| j                  j                  d      }| j                  |z
  }t        j                  j                  |j                        j                  |      }|j                  j                  |      }t        |j                  ||z          t        | j                  dd      }t        j                  j                  |j                        j                  |      }|j                  j                  |      }t        |j                  ||z          t        | j                  ddd      }t        j                  j                  |j                        j                  | j                        }|j                  j                  |      }t        |j                  |       t        | j                  dd      }| j                  j                  d      }| j                  |z
  }t        j                  j                  |j                        j                  |      }|j                  j                  |      }t        |j                  ||z          t        | j                  dd      }t        j                  j                  |j                        j                  |      }|j                  j                  |      }t        |j                  ||z          t        | j                  dddd	      }t        j                  j                  |j                        j                  | j                        }|j                  j                  |      }t        |j                  |       |j                  }t        t        |d
       y )Nr6   r1   r   F)r8   r2   )r8   r:   r2   Tr;   )r8   r:   r2   r<      )r   r   r_   r   r`   pinvrO   r   r   rM   r   r   r   )rA   rC   rh   demean_xrr   directr   s          r,   test_projectionzTestPCA.test_projection   sc   q!VV[[^66B;yy~~bjj)--h7%v{3U!4yy~~bjj)--h7%v{3U5Byy~~bjj)--dff5%v.qd+VV[[^66B;yy~~bjj)--h7%v{3U!4yy~~bjj)--h7%v{3U5tLyy~~bjj)--dff5%v. **j'1-r.   zWindows 32-bit)reasonc           	      f	   | j                   j                         }t        j                  |d d dd d df<   t	        |d      }|t        j
                  t        j                  t        j                  |      d               }t	        |      }t        |j                  |j                         t        ||j                         t	        |d      }|d d t        j
                  t        j                  t        j                  |      d            f   }t	        |      }t        |j                  |j                         t        ||j                         t	        |d      }|j                  |j                  kD  r|}n|}t	        |      }t        |j                  |j                         t        ||j                         t	        |d	d
      }t        j                  |      }t        j                  |d      }||z
  }	t        j                  t        j                  |	dz  d            }
|	|
z  }d||<   ||   }d}d}|dkD  rt	        |d	dd      }|j                  |   ||<   ||   }||z
  }t        j                  t        j                  |dz              t        j                  t        j                  |dz              z  }|}|dz  }|dkD  r| j                   dz   }j                  |
z  |z   }||   ||<   t        |j                   |       t        | j                   | j"                         | j                   }t	        |      }t	        |d      }t        |j                  |j                  t$               t	        |d      }t        |j                  |j                  t$               t	        |d      }t        |j                  |j                  t$               t	        |d	      }t	        |d	d
      }t        |j                  |j                  t$               | j                   j                         }t        j                  |d d d d f<   t'        t(        t        |d       t'        t(        t        |d       t'        t(        t        |d       t'        t(        t        |d
       y )Nr6      drop-rowrz   rw   drop-colr   drop-minr   fill-emr2   r{   )axisr   r   r   gHj>Fr   rK   r1   )r   copyr   r   r   logical_notanyisnanr   rM   r   r	   r   nanmeanr   sum_adjusted_datar    rS   r   r   )rA   r   rC   x_dropped_row
pc_droppedx_dropped_colx_dropped_minr{   rh   r   sigmax_stdlastdeltacountpc_tempcurrentdiffrM   s                      r,   test_replace_missingzTestPCA.test_replace_missing  s   FFKKMff#A#ss(J'"..Q)?@A'
z'<'<=Q J'!R^^BFF288A;,BCCD'
z'<'<=Q J' 2 22)M)M'
z'<'<=Q !Y/((1+ZZ"R

6Q;Q78gW~dl%qeEJG$//8E'NGnGT>DGGBFF419-.19M1NNEDQJE dl FFSL''%/"4
('
))1-TVVT[[)FFVJ/
z'<'<9MJ/
z'<'<9MJ/
z'<'<9M!_!Y7
z'<'<9M FFKKM&&!Q$j#q*=j#q*=j#q*=j#q)<r.   c                 0   | j                   dz   }|j                  d      }||z
  }t        j                  |d      }||z  }t	        | j                         }|j
                  d   }t        j                  |dz         }t        j                  |dz        }	t        |dz         D ]:  }
||j                  |
dd      z
  }dt        j                  |dz        |	z  z
  ||
<   < t        ||j                         t	        | j                   d      }t        j                  |dz        }	t        |dz         D ]:  }
||j                  |
dd      z
  }dt        j                  |dz        |	z  z
  ||
<   < t        ||j                         t	        | j                   dd	      }t        j                  |dz        }	t        |dz         D ]:  }
||j                  |
dd      z
  }dt        j                  |dz        |	z  z
  ||
<   < t        ||j                         y )
Nr   r   rw   r   F)	transformunweightr   r7   r9   )r   r_   r   stdr   r   zerosr   ranger   r   r^   )rA   r   rh   x_demeanr   r   rC   nvarr^   tssir   s               r,   test_rsquarezTestPCA.test_rsquareZ  s   FFSLVVAYr6ffQl3[wwqz((4!8$ffUaZ tax 	9ARZZUUZKKFrvvfk2S88GAJ	9 	,U+ffX]#tax 	9A

1
 NNFrvvfk2S88GAJ	9 	,U59ffQ!Vntax 	9AAGGFrvvfk2S88GAJ	9 	,r.   c                    | j                   j                         }t        j                  |d d dd d df<   t	        |dd      }t        j                  |      }t	        |dd      }t        |j                  |j                         t        |j                  |j                         t	        t        j                  | j                   j                               d      }t        |j                  t        |j                              sJ t        |j                  t        |j                              sJ t        |j                  t        |j                              sJ t        |j                  t        |j                              sJ | j                   j                         }t        j                  |d d dd d df<   t        j                  |      }t	        |d      }t	        |d      }t        |j                  |j                         t        |j                  |j                         t	        |d	      }t	        |d	      }t        |j                  |j                         t        |j                  |j                         t	        |d
      }t	        |d
      }t        |j                  |j                         t        |j                  |j                         y )Nr6   r   r   r   r   r1   r   rz   r   r   )r   r   r   r   r   r   r   r   rP   rO   
isinstancetyper	   rQ   rR   )rA   r   rC   pc_dfpc_df_nomissingx_dfs         r,   test_missing_dataframezTestPCA.test_missing_dataframex  s   FFKKMff#A#ss(!Y/LLOAQ	2%++.

EMM2bll466;;=9C%++tO,A,A'BCCC%**d?+?+?&@AAA%//40I0I+JKKK%//40I0I+JKKKFFKKMff#A#ss(||AJ'D*-%++.

EMM2J'D*-%++.

EMM2J'D*-%++.

EMM2r.   c                     | j                   j                         }t        t        |      j                  t        |      d          y )Nr   )r   r   r   r   rO   r   )rA   r   s     r,   test_equivalencezTestPCA.test_equivalence  s+    FFKKMAAq	2r.   c                     | j                   j                         }t        |d      j                  }t        |      j                  }t	        ||       y )NT)svd_full_matrices)r   r   r   rO   r   )rA   r   svd_full_matrices_truesvd_full_matrices_falses       r,   test_equivalence_full_matricesz&TestPCA.test_equivalence_full_matrices  s>    FFKKM!$Q$!?!G!G"%a&...0GHr.   N)__name__
__module____qualname__classmethodr-   pytestmarksmoke
matplotlibrE   rW   rn   rt   r   r   r   slowr   r   skipifr   r   r   r   r   r    r.   r,   r   r      s   " "6 [[[[&  &&"-H+@Z5*N  [[> >L. [[N N%.N [[/?@G= AG=R-< [[ 3  3D3Ir.   r   c                      t        j                  d      } t         j                  | d<   t        j                  t
        d      5  t        |        d d d        y # 1 sw Y   y xY w)Nr   2   )r   r   zdata contains non-finite valuesmatch)r   emptyr   r   raisesr   r   )r	   s    r,   test_missingr     sH    88IDDJ	z)J	K D	  s   AA"c                 v   t         j                  j                  d      }t         j                  |dd df<   t	        j
                  t              5  t        |dd       d d d        t        |d      }t        |j                  j                        t        |j                        d	z
  k(  sJ y # 1 sw Y   QxY w)
Nr   r   r6   r   r   r   rz   rw   )r   r   r   r   r   r   r   r   maxrO   r   )reset_randomstater	   ps      r,   test_too_many_missingr     s    99$$Y/D66DCRCL	z	" /D:./D*%Aqyy3tzz?Q#6666/ /s   B//B8c                 X   t         j                  j                  d      }|d d d df   d|d d dd f   z  z   |d d dd f<   t        j                  t
        d      5  t        |dd      j                  }d d d        j                  |j                  d	   dfk(  sJ y # 1 sw Y   *xY w)
N)i  r   rw   g{Gz?z#Many series are being down weightedr   r   Tr;   r   )	r   r   r   r   warnsr   r   rO   r   )r   r	   rO   s      r,   test_gls_warningr     s    99$$Z0Dq"1"u+d1ab5k 11DABK	'/T	U 7d!.667==TZZ]A....7 7s   B  B))statsmodels.compat.platformr   r~   numpyr   pandasr   r   numpy.testingr   r   r   statsmodels.multivariate.pcar   r   .statsmodels.multivariate.tests.results.datamlwr	   r
   r   statsmodels.tools.sm_exceptionsr   rS   r   r   r   r   r   r.   r,   <module>r      sO    6     F F 1G G =	QI QIh7/r.   