
    M/Ph!                     R   d dl Z d dlZd dlmZmZmZ ddlmZ  e j	        dej
        z            Z e j        e          Z G d d          Z G d d	          Z G d
 d          Z G d d          Zd Zd Zd Zd ZdZ ej        e          Zdd ej        e          z  z  Z ej        e          Z ej        e          j        Z ej        e          Z  ej        e           Z! ej"        e!e          Z# ej        ej        $                    e                    Z%dZ&d ej        e&          d ej         ej'        e!                    z  z
  e#dz  e&z  z    ej        dej
        z            z   z  Z( eee          \  Z)Z* e+e),                                d            e+e(,                                d            e+ ej        ej-        .                    e#                    ,                                de%z  z
              e+d            e+ ej        ej-        /                    e ej	         ej0        e                                        ,                                            e+d            e+d ej"         ej1         ej2        ed          d          j        dfej                  e          e ej        dej
        z            z  z   d ej         ej'        e!                    ,                                z  z
  z              e+d ej"         ej1         ej2        e          d          j        dfej                  e          e ej        dej
        z            z  z   d ej         ej'        e!                    ,                                z  z
  z              e+d ej"         ej1         ej2        e          ej                  e          e ej        dej
        z            z  z   d ej         ej'        e!                    ,                                z  z
  z              e+ eee                      e ej3        e          e e                      Z4 e+e45                    e#          ,                                            e+ eed                      e ej3        e          e          Z6 e+e65                    e                     e67                    e          Z8 e+d ej"        e8e8                      e+d ej"        e ej1         ej2        e6j                  e                                e+d ej"        e ej1        e6j        dfe                               dS )    N)linalgstatsspecial   )SvdArray   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	StandardNormalzDistribution of vector x, with independent distribution N(0,1)

    this is the same as univariate normal for pdf and logpdf

    other methods not checked/adjusted yet

    c                 @    t           j                            |          S N)nprandomstandard_normalselfsizes     i/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/sandbox/archive/linalg_covmat.pyrvszStandardNormal.rvs   s    y((...    c                 H    t          j        |dz   dz            t          z  S Nr         ?)r   expsqrt2pir   xs     r   pdfzStandardNormal.pdf   s!    vq!teck""W,,r   c                 $    |dz   dz  t           z
  S r   )
logsqrt2pir   s     r   logpdfzStandardNormal.logpdf   s    1us{Z''r   c                 *    t          j        |          S r   )r   ndtrr   s     r   _cdfzStandardNormal._cdf   s    |Ar   c                 N    t          j        t          j        |                    S r   )r   logr   r"   r   s     r   _logcdfzStandardNormal._logcdf   s    vgl1oo&&&r   c                 *    t          j        |          S r   )r   ndtri)r   qs     r   _ppfzStandardNormal._ppf   s    }Qr   N)
__name__
__module____qualname____doc__r   r   r    r#   r&   r*    r   r   r
   r
      sx         / / /- - -( ( (  ' ' '         r   r
   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	AffineTransforma  affine full rank transformation of a multivariate distribution

    no dimension checking, assumes everything broadcasts correctly
    first version without bound support

    provides distribution of y given distribution of x
    y = const + tmat * x

    c                 (   || _         || _        || _        t          |          | _        t          j        | j        |j                                                  st          d          t          j        |          | _        t          j        t
          j
                            | j                            | _        t          j        t          j        t
          j
                            | j                                      | _        | j         d S )Nz(dimension of const and tmat do not agree)consttmatdistlennrvr   equalshapeall
ValueErrorr   invtmatinvabsdetabsdetr%   	logabsdet)r   r3   r4   r5   s       r   __init__zAffineTransform.__init__-   s    
		u::x$*--1133 	IGHHH z$''fRY]]495566ry}}TY'?'? @ @AA				r   c                     t          |f| j        fz              |                     | j                            |f| j        fz                       S )N)r   )printr7   	transformr5   r   r   s     r   r   zAffineTransform.rvs;   sH    tgtxk!"""~~dimm$$(1DmEEFFFr   c                 F    t          j        || j                  | j        z   S r   )r   dotr4   r3   r   s     r   rE   zAffineTransform.transform@   s    va##dj00r   c                 F    t          j        | j        || j        z
            S r   )r   rG   r=   r3   )r   ys     r   invtransformzAffineTransform.invtransformD   s    vdlA
N333r   c                 r    d| j         z  | j                            |                     |                    z  S )N      ?)r@   r5   r   rJ   r   s     r   r   zAffineTransform.pdfG   s0    DK$)--0A0A!0D0D"E"EEEr   c                 n    | j          | j                            |                     |                    z   S r   )rA   r5   r    rJ   r   s     r   r    zAffineTransform.logpdfJ   s0    $)"2"243D3DQ3G3G"H"HHHr   N)
r+   r,   r-   r.   rB   r   rE   rJ   r   r    r/   r   r   r1   r1   #   s           G G G
1 1 14 4 4F F FI I I I Ir   r1   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )MultivariateNormalChola  multivariate normal distribution with cholesky decomposition of sigma

    ignoring mean at the beginning, maybe

    needs testing for broadcasting to contemporaneously but not intertemporaly
    correlated random variable, which axis?,
    maybe swapaxis or rollaxis if x.ndim != mean.ndim == (sigma.ndim - 1)

    initially 1d is ok, 2d should work with iid in axis 0 and mvn in axis 1

    c                     || _         || _        t          | _        t          j        |          | _        t          j        t                    d d dd d df         | _        d S N)meansigmasigmainvr   cholesky	cholsigmacholsigmainvr   rS   rT   s      r   rB   zMultivariateNormalChol.__init__]   sU    	
 //"OH55ddd44R4i@r   c                 6    t          j        t          |          S r   )r   rG   rX   r   s     r   whitenzMultivariateNormalChol.whitenf   s    vlA&&&r   c                    || j         z
  }|                     |          }t          j        t          j                            t                              }d}dt          j        |          dt          j        t          j        | j                            z  z
  |dz  |z  z   t          j        dt          j	        z            z   z  }|S )NrL   r          @r   )
rS   r[   r   r%   r   r?   rT   diagonalrX   pi)r   r   
x_whitenedlogdetsigmasigma2llikes         r   
logpdf_obsz!MultivariateNormalChol.logpdf_obsi   s    	M[[^^
 fRY]]51122rvbk$2C&D&DEEEF&M612 F1RU7OO, -
 r   c                 R    |                      |                              d          S rQ   )rd   sumr   s     r   r    zMultivariateNormalChol.logpdfy   s"    q!!%%b)))r   c                 P    t          j        |                     |                    S r   )r   r   r    r   s     r   r   zMultivariateNormalChol.pdf|   s    vdkk!nn%%%r   N)	r+   r,   r-   r.   rB   r[   rd   r    r   r/   r   r   rO   rO   P   sl        
 
A A A' ' '   * * *& & & & &r   rO   c                       e Zd Zd ZdS )MultivariateNormalc                 <    || _         t          |          | _        d S r   )rS   r   rT   rY   s      r   rB   zMultivariateNormal.__init__   s    	e__


r   N)r+   r,   r-   rB   r/   r   r   ri   ri      s#        % % % % %r   ri   c                    t          j        |           } t           j        | d         | dd         || dd         z  z
  f         }dd|dz  z
  z  }d|dz                      d           |z  t          j        d|dz  z
            z   | j        d         t          j        dt           j        z            t          j        |          z   z  z
  z  }|S )zxloglikelihood of AR(1) process, as a test case

    sigma_u partially hard coded

    Greene chapter 12 eq. (12-31)
    r   r   NrR   r   r   )r   asarrayr_rf   r%   r9   r_   )r   rhousigma_u2logliks        r   loglike_ar1rr      s     	
1A
adAabbEC!CRC&L(()A!CF(|HAqD::a==.8+bfQsAvX.>.>>GAJ"&25//BF84D4D"DEF GFMr   c                    |\  }}t          j        |           }t          j        d|z   d|z
  dz  |dz  z
  z  d|z
  z            | d         z  |d<   t          j        d|dz  z
            | d         z  |t          j        d|dz  z
            z  d|z
  z  | d         z  z
  |d<   | dd         || dd         z  z
  || dd         z  z
  |dd<   |S )z

    (Greene eq 12-30)
    r   r   r   NrR   )r   
zeros_likesqrt)r   arcoefsa1a2rI   s        r   ar2transformrz      s    
 FB
aA7AbDadQYQ./1R4899AaD@AaD71RU7ad"R"'!BE'*:*:%:AbD%AAaD%HHAaDabbEB1R4L 2#2#;.AabbEHr   c                 b   t          j        |          }t          j        t          j                             |                    }t          |           }t          j        | t          j        ||                      }||t          j        dt          j        z            z  z  }||z  }|dz  }|S )loglike multivariate normal

    assumes x is 1d, (nobs,) and sigma is 2d (nobs, nobs)

    brute force from formula
    no checking of correct inputs
    use of inv and log-det should be replace with something more efficient
    r   r   )r   r<   r   r%   r?   r6   rG   r_   )r   rT   rU   ra   nobsllfs         r   mvn_logliker      s     z%  H&u--..Kq66DF1bfXq))**
*C4"&RU####C;C3JCJr   c                    t          j        |          }t          j        |          }t          j        ||           }t          j        t          j                             |                    }d}dt          j        |          dt          j        t          j        |                    z  z
  |dz  |z  z   t          j        dt          j        z            z   z  }||dz  fS )r|   rL   r   r]   r   )	r   r<   rV   r   rG   r%   r?   r^   r_   )r   rT   rU   rX   r`   ra   rb   rc   s           r   mvn_nloglike_obsr      s     z%  H?8,,L a((J &u--..KFRVF^^b"&\1J1J*K*K&KK']F23VAbeG__- .E :q=!!r   
   g?rL   r   r]   zll.sum()zllike.sum()zstats whitened)scalezstats scaledF)lowerxSigmax)9mathnumpyr   scipyr   r   r   linalg_decomp_1r   rv   r_   r   r%   r   r
   r1   rO   ri   rr   rz   r   r   r}   aranger   autocovtoeplitzrT   rV   TrW   r<   rU   rX   rG   r`   r?   ra   rb   r^   rc   lllsrD   rf   norm_pdfr   diag	cho_solve
cho_factorzeros
normtransfr    mchr[   xwr/   r   r   <module>r      sJ        ( ( ( ( ( ( ( ( ( ( % % % % % %
 $)AI

TXg
               ,(I (I (I (I (I (I (I (IZ-& -& -& -& -& -& -& -&b% % % % % % % %  
 
 
  *" " "> 
BIdOO
C4 
    FOE""$	6:evx(( RVL!$$
 bfRY]]5))**	
"fbf[R[-F-F&G&G"GG#Q./"%) * 
	!U	#	#B bffhh
    eiikk= ! ! ! fbfUZ__Z(())--//#2CC E E E     fbfUZ^^AGBGGBGENN$;$;^<<==AACC E E E n    c626"&"$5F$5e5$I$I$I!$L$N$)$++,30 0124 4&"&25//!" L1122668889 : ; ; ; c626"&"$5F$5e$<$<Q$?$A5#I!#NNPQRRUYZ`Z\Z`abcechahZiZiUiikmouoqou  wBvx  wB  CO  wP  wP  pQ  pQ  pU  pU  pW  pW  lW  W  X  Y  Y  Y c626"&"#46#4U#;#;AC@@!DDtFBFSTUWUZSZOOG[[]_agacaghshjhs  uA  iB  iB  bC  bC  bG  bG  bI  bI  ^I  I  J  K  K  K kk!U    _XRXd^^Y8H8HII
 j
##'')) * * * kk!S   XRXd^^U33 cjjmm   
 	ZZ]] i2    i*&*+<6+<SY+G+GJJKK L L L i*&*CM5+A!DDEE F F F F Fr   