
    "g                     r    d dl Zd dlmZ d dlmZmZ d dlmZ d dl	Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zy)    N)Factor)assert_allcloseassert_equal)approx_fprimec                      t         j                  d   } t        j                  g dg dg      j                  }t         j                  d   }t        j                  g dg dg dg      }| |||fS )N)   	      )         )r         )	r   r   r   r   r   r   r   r   r   )r         ?      ?)r   r   r   )r   r   r   )npr_asarrayT)uniqloadparcorrs       j/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/multivariate/tests/test_ml_factor.py_toyr      s[    55?D::y),-//D
%%)
*C::|[,?@DtS      c                      t               \  } }}}t        d|      }|j                  || f      }|j                  |      }t        ||       y )Nr   n_factorr   )r   r   logliker   )r   r   r   r   fall1ll2s          r   test_logliker$      sI     FD$c		&B **dD\
"C
**S/CCr   c                     	 t               \  } }}}t        d|      		fd}t        j                  d   }||fD ].  }t	        ||d      }	j                  |      }t        ||d       0 y )Nr   r   c                 &    j                  |       S )N)r    )r   r!   s    r   fztest_score.<locals>.f!   s    zz#r   )皙?皙?333333?皙?r*   r(   r)   gɿr   g?r   r   g:0yE>MbP?atol)r   r   r   r   r   scorer   )
r   r   r   r   r'   par2ptg1g2r!   s
            @r   
test_scorer4      so     FD$c		&B 55HIDDk +2q$'XXb\BT*+r   c                  |   t         j                  j                  d       dD ]  } dD ]  }t         j                  j                  | |f      }t        j                  dd|       }t        j
                  ||j                        }|j                  d d |j                  d   dz   xx   |z  cc<   t        j                  t        j                  |            }|t        j                  ||      z  }t        ||d	      }|j                         }t        |j                  |d
d
       |j!                            y )N[  r   
      r   r   r   sizer   r   r   mlr   r   method-C6?rtolr.   )r   randomseednormallinspacedotr   flatshapesqrtdiagouterr   fitr   
fitted_covsummary)k_varr   r   r   csr!   rslts           r   
test_exactrT   ,   s     IINN5   
	H99##%):#;D;;q!U+DtTVV$AFF>QWWQZ\>"d*"
#A!QAQ$?B668DDOOQTELLN
	r   c                     t         j                  j                  d       dD ]K  } dD ]B  }t         j                  j                  | |f      }t        j                  dd|       }t        j
                  ||j                        }|j                  d d |j                  d   dz   xx   |z  cc<   t        j                  t        j                  |            }|t        j                  ||      z  }t        ||d	      }|j                  d
      \  }}t        j
                  ||j                        }	|	j                  d d |	j                  d   dz   xx   |z  cc<   t        |	|dd       E N y )Nr6   r7   r:   r;   r   r   r   r=   r>   i  r@   rA   )r   rC   rD   rE   rF   rG   r   rH   rI   rJ   rK   rL   r   
_fit_ml_emr   )
rP   r   r   r   rQ   rR   r!   load_euniq_ec_es
             r   test_exact_emrZ   A   s,    IINN5  : 	:H99##%):#;D;;q!U+DtTVV$AFF>QWWQZ\>"d*"
#A!QAQ$?B]]40NFF&&*CHH%syy|A~%&&0&CD9	::r   c                  4   d} t         j                  j                  t        j                  d      t        j                  d      |       j
                  }t         j                  j                         }t        j                         5  t        j                  dd       t        |dd	      j                          d d d        t         j                  j                         }|d
   |d
   k(  sJ t        |d   |d          |dd  |dd  k(  sJ y # 1 sw Y   TxY w)Nr8   r   r;   ignorezFitting did not converge)messager   r=   )endogr   r?   r   r   )r   rC   multivariate_normalzeroseyer   	get_statewarningscatch_warningsfilterwarningsr   rM   r   )r   epsiloninitialfinals       r   test_fit_ml_em_random_stateri   W   s     	Aii++BHHQK+KMMGii!!#G		 	 	" =2LMWq6::<= II!E1:q!!!U1X&12;%)###= =s   4DDc                     d} t        j                  g dg dg dg      }t        || d      }|j                  ddi	      }|j                  }|j
                  }|j                  d
      \  }}t        j                  ||j                        }|j                  d d |j                  d   dz   xx   |z  cc<   t        ||j                  dd       y )Nr   )r   r   r*   )r   r   r   )r*   r   r   r=   r>   gtolr,   )opti  r   g{Gz?rA   )r   r   r   rM   loadings
uniquenessrV   rG   r   rH   rI   r   rN   )	r   corr!   rS   load_optuniq_optload_emuniq_emccs	            r   test_emru   h   s    H
**m[+>
?C	S8D	9B66vtn6%D}}HH}}T*GW		#BGGObhhqk!mO'Bd>r   c                  (   d} d}t        j                  |      }| t        j                  t         j                  j	                  ||            z  }t        |dd      }|j                         }|j                  d   dk  r|j                  dddfxx   d	z  cc<   t         j                  d
   }t        j                  dgdgdgdgg      }t        ||j                  dd       t        ||j                  dd       t        |j                  d       y)z
    # R code:
    r = 0.4
    p = 4
    ii = seq(0, p-1)
    ii = outer(ii, ii, "-")
    ii = abs(ii)
    cm = r^ii
    fa = factanal(covmat=cm, factors=1)
    print(fa, digits=10)
    r+   r   r   r=   r>   )r   r   r   N)gbJ?g=~?gzL?g:;wo?gkȪ΋?g`h?go
M_?g6?r,   rA   r   )r   arangeabssubtractrL   r   rM   rm   r   r   r   rn   r   df)rpiicmr!   rS   r   r   s           r   test_1factorr   y   s     	A	A	1B	
bffR[[&&r2./	/B	R!D	1B668D}}TQadr! 55BCD::
|j\J<!{$ %D D$--d>D$//4@!r   c            	         d} d}t        j                  |      }| t        j                  t         j                  j	                  ||            z  }t        |ddd      }|j                         }dD ]2  }|j                  d|f   dk  s|j                  d	d	|fxx   d
z  cc<   4 t         j                  d   }t        ||j                  dd       t         j                  d   t         j                  d   g}dD ]_  }	t        j                  ||	   |j                  d	d	|	f         dk  r||	xx   d
z  cc<   t        ||	   |j                  d	d	|	f   dd       a t        |j                  d       t        j                  g d      }
t        |j                  |
d       t        j                  ddgddgddgddgddgddgg      }
t        |j                   |
d       y	)z
    # R code:
    r = 0.4
    p = 6
    ii = seq(0, p-1)
    ii = outer(ii, ii, "-")
    ii = abs(ii)
    cm = r^ii
    factanal(covmat=cm, factors=2)
    r+      r   d   r=   )r   r   nobsr?   )r   r   r   Nrw   )/$?rh|?ʡE?r   r   r   r,   rA   )y&1?獗n?S㥛?r   r   r   )g rh?gK7?gV-?gV-ǿgK7g rhտr   )n,B5N?<7c
?ؠY.?r   r   r   r@   r-   g	ʢ?g ?gӬY?)r   rx   ry   rz   rL   r   rM   rm   r   r   rn   rG   r   r{   r   uniq_stderrload_stderr)r|   r}   r~   r   r!   rS   jr   loadskes              r   test_2factorr      s    	A	A	1B	
bffR[[&&r2./	/B	R!#d	;B668D &==A"MM!Q$2%& 559:DD$//4@UU;<UU>?AE M66%(DMM!Q$/014!HNHa$--1"5DtLM
 ! 	

 8 	9AD$$ad3


Z,z:.F,z:.F,z:.FH 	IA D$$ad3r   )numpyr   statsmodels.multivariate.factorr   numpy.testingr   r   scipy.optimizer   rc   r   r$   r4   rT   rZ   ri   ru   r   r    r   r   <module>r      sB     2 7 ( !	+ *:,$"?"'T+4r   