
    !g!                        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j4                  e      Z ej8                  e      j:                  Z ej>                  e      Z  ej8                  e       Z! ejD                  e!e      Z# ej                  ej                  jI                  e            Z%dZ&d ej                  e&      d ej                   ejN                  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)jY                         d        e+e(jY                         d        e+ ej                  ejZ                  j]                  e#            jY                         de%z  z
          e+d        e+ ej                  ejZ                  j_                  e ej                   ej`                  e                        jY                                 e+d        e+d ejD                   ejb                   ejd                  ed      d    j:                  dfej:                        e      e ej                  dej                  z        z  z   d ej                   ejN                  e!            jY                         z  z
  z          e+d ejD                   ejb                   ejd                  e      d    j:                  dfej:                        e      e ej                  dej                  z        z  z   d ej                   ejN                  e!            jY                         z  z
  z          e+d ejD                   ejb                   ejd                  e      ej:                        e      e ej                  dej                  z        z  z   d ej                   ejN                  e!            jY                         z  z
  z          e+ eee              e ejf                  e      e e             Z4 e+e4jk                  e#      jY                                 e+ eed              e ejf                  e      e      Z6 e+e6jk                  e             e6jo                  e      Z8 e+d ejD                  e8e8              e+d ejD                  e ejb                   ejd                  e6j6                        e                    e+d ejD                  e ejb                  e6j<                  dfe                   y)    N)linalgstatsspecial   )SvdArray   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	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                  j                  |      S N)nprandomstandard_normalselfsizes     f/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/sandbox/archive/linalg_covmat.pyrvszStandardNormal.rvs   s    yy((..    c                 H    t        j                  |dz   dz        t        z  S Nr         ?)r   expsqrt2pir   xs     r   pdfzStandardNormal.pdf   s     vvq!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                 R    t        j                  t        j                  |            S r   )r   logr   r"   r   s     r   _logcdfzStandardNormal._logcdf   s    vvgll1o&&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
      s%    /-(' r   r
   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	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                 J   || _         || _        || _        t        |      | _        t        j                  | j                  |j                        j                         st        d      t        j                  |      | _        t        j                  t
        j                  j                  | j                              | _        t        j                   t        j                  t
        j                  j                  | j                                    | _        | j                   y )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:xx$**-113GHH zz$'ffRYY]]49956ryy}}TYY'? @A		r   c                     t        |f| j                  fz          | j                  | j                  j	                  |f| j                  fz               S )N)r   )printr7   	transformr5   r   r   s     r   r   zAffineTransform.rvs;   sB    tgtxxk!"~~diimm$$((1DmEFFr   c                 \    t        j                  || j                        | j                  z   S r   )r   dotr4   r3   r   s     r   rE   zAffineTransform.transform@   s     vva#djj00r   c                 \    t        j                  | j                  || j                  z
        S r   )r   rG   r=   r3   )r   ys     r   invtransformzAffineTransform.invtransformD   s    vvdllA

N33r   c                 v    d| j                   z  | j                  j                  | j                  |            z  S )N      ?)r@   r5   r   rJ   r   s     r   r   zAffineTransform.pdfG   s.    DKK$))--0A0A!0D"EEEr   c                 r    | j                    | j                  j                  | j                  |            z   S r   )rA   r5   r    rJ   r   s     r   r    zAffineTransform.logpdfJ   s.    $))"2"243D3DQ3G"HHHr   N)
r+   r,   r-   r.   rB   r   rE   rJ   r   r    r/   r   r   r1   r1   #   s(    G
14FIr   r1   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)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   | _        y N)meansigmasigmainvr   cholesky	cholsigmacholsigmainvr   rS   rT   s      r   rB   zMultivariateNormalChol.__init__]   sI    	
 /"OOH5dd4R4i@r   c                 6    t        j                  t        |      S r   )r   rG   rX   r   s     r   whitenzMultivariateNormalChol.whitenf   s    vvlA&&r   c                    || j                   z
  }| j                  |      }t        j                  t        j                  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[[^
 ffRYY]]512rvvbkk$2C2C&DEEF&M612 FF1RUU7O, -
 r   c                 B    | j                  |      j                  d      S rQ   )rd   sumr   s     r   r    zMultivariateNormalChol.logpdfy   s    q!%%b))r   c                 J    t        j                  | j                  |            S r   )r   r   r    r   s     r   r   zMultivariateNormalChol.pdf|   s    vvdkk!n%%r   N)	r+   r,   r-   r.   rB   r[   rd   r    r   r/   r   r   rO   rO   P   s!    
A' *&r   rO   c                       e Zd Zd Zy)MultivariateNormalc                 2    || _         t        |      | _        y 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  j                  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dAabEC!CR&L(()A!CF(|HAqD::a=.8+bffQsAvX.>>GGAJ"&&255/BFF84D"DEF GFMr   c                 x   |\  }}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77AbDadQYQ./1R489AaD@AaD771RU7ad"R"''!BE'*:%:AbD%AAaD%HHAaDabEB1RL 2#2;.AabEHr   c                 l   t        j                  |      }t        j                  t        j                   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     zz% H&&u-.Kq6DFF1bffXq)*
*C4"&&RUU###C;C3JCJr   c                    t        j                  |      }t        j                  |      }t        j                  ||       }t        j
                  t        j                   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     zz% H??8,L a(J &&u-.KFRVVF^b"&&\1J*K&KK']F23VVAbeeG_- .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      s     ( ( %
 $))AI
TXXg
   ,(I (IZ-& -&b% %
*"> 
BIIdO
C4 
   FOOE"$$	6::evx( RVVL!$
 bffRYY]]5)*	
"fbff[R[[-F&G"GG#Q./"%%) * 
!U	#B bffh
  eiik= ! fbffUZZ__Z()--/#2CC E   fbffUZZ^^AGBGGGBGGEN$;^<=AAC E n  c6266"&""$5F$5$5e5$I!$L$N$N$)$++,330124&"&&255/!" L1266889 : ; c6266"&""$5F$5$5e$<Q$?$A$A5#I!##NPQRUYZ`Z\Z`Z`abcechchahZiUiikmouoqouou  wBvx  wB  wB  CO  wP  pQ  pU  pU  pW  lW  W  X  Y c6266"&""#46#4#4U#;ACC@!DtFBFFSTUWUZUZSZOG[[]_agacagaghshjhshs  uA  iB  bC  bG  bG  bI  ^I  I  J  K k!U  XRXXd^Y8HI
 j
#'') * k!S XRXXd^U3 cjjm 
 	ZZ] i2  i*&**+<6+<+<SYY+GJK L i*&**CMM5+A!DE Fr   