Ë
    £�Djõ"  ã                   óx   — d Z ddlZddlmZ d„ Zefd„Zd„ Zdd„Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zy)zôhelper functions conversion between moments

contains:

* conversion between central and non-central moments, skew, kurtosis and
  cummulants
* cov2corr : convert covariance matrix to correlation matrix


Author: Josef Perktold
License: BSD-3

é    N)Úcombc                 óº   — t        t        | t        «      t        | t        «      g«      rt	        j
                  | «      S t        | t        j                  «      r| S | S )N)ÚanyÚ
isinstanceÚlistÚtupleÚnpÚarrayÚndarray)Úxs    údC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\statsmodels\stats\moment_helpers.pyÚ_convert_to_multidimr      sE   € Ü
ŒJ�qœ$Ó¤¨A¬uÓ!5Ð6Ô7Ü�x‰x˜‹{ÐÜ	�A”r—z‘zÔ	"Øˆð ˆó    c                 óZ   — t        | j                  «      dk  r || «      S | j                  S )Né   )ÚlenÚshapeÚT)r   Útotypes     r   Ú_convert_from_multidimr      s%   € Ü
ˆ1�7‰7ƒ|�aÒÙ�a‹yÐØ�3‰3€Jr   c                 ób   — t        | «      }d„ }t        j                  |d|«      }t        |«      S )zvconvert central to non-central moments, uses recursive formula
    optionally adjusts first moment to return mean
    c           
      ó  — | d   }dgt        | «      z   } d| d<   d|g}t        | dd  «      D ]V  \  }}|dz   }|j                  d«       t        |dz   «      D ]*  }||xx   t	        ||d¬«      | |   z  |||z
  z  z  z  cc<   Œ, ŒX |dd  S )Nr   é   r   T©Úexact©r   Ú	enumerateÚappendÚranger   )ÚmcÚmeanÚmncÚnnÚmÚnÚks          r   Ú_local_countszmc2mnc.<locals>._local_counts*   s³   € Ø�!‰uˆØˆS”4˜“8‰^ˆØˆˆ1‰Ø�$ˆiˆÜ˜r ! "˜vÓ&ò 	K‰EˆB�Ø�Q‘ˆAØ�J‰J�qŒMÜ˜1˜q™5“\ò K�Ø�A“œ$˜q !¨4Ô0°2°a±5Ñ8¸4ÀAÈÁE¹?ÑJÑJ”ñKð	Kð
 �1�2ˆwˆr   r   ©r   r	   Úapply_along_axisr   )r    r   r'   Úress       r   Úmc2mncr+   $   s4   € ô 	˜RÓ €Aò
ô ×
Ñ
˜m¨Q°Ó
2€Cä! #Ó&Ð&r   c                 óh   ‡— t        | «      }ˆfd„}t        j                  |d|«      }t        |«      S )zvconvert non-central to central moments, uses recursive formula
    optionally adjusts first moment to return mean
    c           	      ó  •— | d   }dgt        | «      z   } g }t        | «      D ]\  \  }}|j                  d«       t        |dz   «      D ]5  }d||z
  z  t	        ||d¬«      z  }||xx   || |   z  |||z
  z  z  z  cc<   Œ7 Œ^ ‰r||d<   |dd  S )Nr   r   éÿÿÿÿTr   r   )r"   r!   Úmur%   r$   r&   Úsgn_combÚwmeans          €r   r'   zmnc2mc.<locals>._local_countsA   s±   ø€ Ø�1‰vˆØˆc”D˜“I‰oˆØˆÜ˜c“Nò 	=‰DˆAˆqØ�I‰I�aŒLÜ˜1˜q™5“\ò =�Ø A¨¡E™?¬T°!°Q¸dÔ-CÑC�Ø�1“˜ C¨¡FÑ*¨T°a¸!±e©_Ñ<Ñ<”ñ=ð	=ñ
 ØˆBˆq‰EØ�!�"ˆvˆr   r   r(   )r"   r1   ÚXr'   r*   s    `   r   Úmnc2mcr3   ;   s5   ø€ ô 	˜SÓ!€Aôô ×
Ñ
˜m¨Q°Ó
2€Cä! #Ó&Ð&r   c                 ób   — t        | «      }d„ }t        j                  |d|«      }t        |«      S )zÉconvert non-central moments to cumulants
    recursive formula produces as many cumulants as moments

    References
    ----------
    Kenneth Lange: Numerical Analysis for Statisticians, page 40
    c           
      ó  — ddg}| d   }dgt        | «      z   } t        | dd  «      D ]Y  \  }}|dz   }|j                  d«       t        |dz
  «      D ]-  }||xx   t	        |dz
  |d¬«      | ||z
     z  ||   z  z  cc<   Œ/ Œ[ ||d<   |dd  S )Nr   g        r   r   Tr   r   )Úkappar    Úkappa0r#   r$   r%   r&   s          r   r'   zcum2mc.<locals>._local_counts]   s¸   € Ø�ˆXˆØ�q‘ˆØ�”d˜5“kÑ!ˆÜ˜u Q R˜yÓ)ò 	K‰EˆB�Ø�Q‘ˆAØ�I‰I�aŒLÜ˜1˜q™5“\ò K�Ø�1“œ˜a !™e Q¨dÔ3°e¸AÀ¹E±lÑBÀRÈÁUÑJÑJ”ñKð	Kð
 ˆˆ1‰Ø�!�"ˆvˆr   r   r(   )r6   r2   r'   r*   s       r   Úcum2mcr8   S   s4   € ô 	˜UÓ#€Aò
ô ×
Ñ
˜m¨Q°Ó
2€Cä! #Ó&Ð&r   c                 ób   — t        | «      }d„ }t        j                  |d|«      }t        |«      S )z«convert non-central moments to cumulants
    recursive formula produces as many cumulants as moments

    https://en.wikipedia.org/wiki/Cumulant#Cumulants_and_moments
    c           	      ó
  — dgt        | «      z   } dg}t        | dd  «      D ]\  \  }}|dz   }|j                  |«       t        d|«      D ]2  }t	        |dz
  |dz
  d¬«      }||xx   |||   z  | ||z
     z  z  cc<   Œ4 Œ^ |dd  S )Nr   Tr   r   )r"   r6   r#   r$   r%   r&   Únum_wayss          r   r'   zmnc2cum.<locals>._local_countsv   s§   € Øˆc”D˜“I‰oˆØ�ˆÜ˜s 1 2˜wÓ'ò 	=‰EˆB�Ø�Q‘ˆAØ�L‰L˜ŒOÜ˜1˜a“[ò =�Ü  A¡ q¨1¡u°DÔ9�Ø�a“˜H u¨Q¡xÑ/°#°a¸!±e±*Ñ<Ñ<”ñ=ð	=ð �Q�RˆyÐr   r   r(   )r"   r2   r'   r*   s       r   Úmnc2cumr<   n   s4   € ô 	˜SÓ!€Aò	ô ×
Ñ
˜m¨Q°Ó
2€Cä! #Ó&Ð&r   c                 óz   — t        | «      }t        |t        j                  «      r|j                  }t        |«      S )z9
    just chained because I have still the test case
    )r+   r   r	   r   r   r<   )r    Ú
first_steps     r   Úmc2cumr?   †   s/   € ô ˜“€JÜ�*œbŸj™jÔ)Ø—\‘\ˆ
Ü�:ÓÐr   c                 ól   — t        | «      }d„ }t        j                  |d|«      }t        |t        «      S )z9convert mean, variance, skew, kurtosis to central momentsc                 óx   — | \  }}}}d gdz  }||d<   ||d<   ||dz  z  |d<   |dz   |dz  z  |d<   t        |«      S )	Né   r   r   ç      ø?r   ç      @ç       @é   )r   )Úargsr/   Úsig2ÚskÚkurÚcnts         r   r'   zmvsk2mc.<locals>._local_counts•   s_   € Ø ÑˆˆD�"�cØˆf�q‰jˆØˆˆA‰ØˆˆA‰Ø�d˜c‘kÑ!ˆˆA‰Ø˜‘)˜t s™{Ñ*ˆˆA‰Ü�S‹zÐr   r   ©r   r	   r)   r   r   ©rG   r2   r'   r*   s       r   Úmvsk2mcrN   ‘   s4   € ä˜TÓ"€Aòô ×
Ñ
˜m¨Q°Ó
2€Cä! #¤uÓ-Ð-r   c                 ól   — t        | «      }d„ }t        j                  |d|«      }t        |t        «      S )z=convert mean, variance, skew, kurtosis to non-central momentsc                 ó²   — | \  }}}}|}|||z  z   }||dz  z  }|d|z  |z  z   |dz  z   }|dz   |dz  z  }	|	d|z  |z  z   d|z  |z  |z  z   |dz  z   }
||||
fS )NrC   rF   rD   rE   rB   é   © )rG   r    Úmc2ÚskewÚkurtr"   Úmnc2Úmc3Úmnc3Úmc4Úmnc4s              r   r'   zmvsk2mnc.<locals>._local_counts§   s™   € Ø"ÑˆˆC��tØˆØ�R˜"‘W‰}ˆØ�c˜S‘jÑ!ˆØ�Q˜‘V˜c‘\Ñ! B¨!¡GÑ+ˆØ�c‰z˜c S™jÑ)ˆØ�Q˜‘V˜c‘\Ñ! A¨¡F¨R¡K°#Ñ$5Ñ5¸¸a¹Ñ?ˆØ�T˜4 Ð&Ð&r   r   rL   rM   s       r   Úmvsk2mncr[   £   s4   € ä˜TÓ"€Aò'ô ×
Ñ
˜m¨Q°Ó
2€Cä! #¤uÓ-Ð-r   c                 ól   — t        | «      }d„ }t        j                  |d|«      }t        |t        «      S )z9convert central moments to mean, variance, skew, kurtosisc                 ó†   — | \  }}}}t        j                  ||dz  «      }t        j                  ||dz  «      dz
  }||||fS )NrC   rE   rD   )r	   Údivide)rG   r    rS   rW   rY   rT   rU   s          r   r'   zmc2mvsk.<locals>._local_countsº   sL   € Ø ÑˆˆC��cÜ�y‰y˜˜c S™jÓ)ˆÜ�y‰y˜˜c S™jÓ)¨CÑ/ˆØ�C˜˜tÐ$Ð$r   r   rL   rM   s       r   Úmc2mvskr_   ¶   s4   € ä˜TÓ"€Aò%ô ×
Ñ
˜m¨Q°Ó
2€Cä! #¤uÓ-Ð-r   c                 ól   — t        | «      }d„ }t        j                  |d|«      }t        |t        «      S )z>convert central moments to mean, variance, skew, kurtosis
    c                 óž   — | \  }}}}|}|||z  z
  }|d|z  |z  |dz  z   z
  }|d|z  |z  d|z  |z  |z  z   |dz  z   z
  }t        ||||f«      S )NrF   rB   rQ   )r_   )	rG   r"   rV   rX   rZ   r    rS   rW   rY   s	            r   r'   zmnc2mvsk.<locals>._local_countsÊ   s   € à $ÑˆˆT�4˜ØˆØ�S˜3‘YÑˆØ�a˜"‘f˜s‘l R¨1¡WÑ,Ñ-ˆØ�a˜"‘f˜s‘l Q¨¡V¨b¡[°3Ñ%6Ñ6¸¸q¹Ñ@ÑAˆÜ˜˜C  cÐ*Ó+Ð+r   r   rL   rM   s       r   Úmnc2mvskrb   Å   s6   € ô 	˜TÓ"€Aò,ô ×
Ñ
˜m¨Q°Ó
2€Cä! #¤uÓ-Ð-r   c                 ó¾   — t        j                  | «      } t        j                  t        j                  | «      «      }| t        j                  ||«      z  }|r||fS |S )a/  
    convert covariance matrix to correlation matrix

    Parameters
    ----------
    cov : array_like, 2d
        covariance matrix, see Notes

    Returns
    -------
    corr : ndarray (subclass)
        correlation matrix
    return_std : bool
        If this is true then the standard deviation is also returned.
        By default only the correlation matrix is returned.

    Notes
    -----
    This function does not convert subclasses of ndarrays. This requires that
    division is defined elementwise. np.ma.array and np.matrix are allowed.
    )r	   Ú
asanyarrayÚsqrtÚdiagÚouter)ÚcovÚ
return_stdÚstd_Úcorrs       r   Úcov2corrrl   ä   sO   € ô, �-‰-˜Ó
€CÜ�7‰7”2—7‘7˜3“<Ó €DØ”—‘˜$ Ó%Ñ%€DÙØ�TˆzÐàˆr   c                 óŒ   — t        j                  | «      } t        j                  |«      }| t        j                  ||«      z  }|S )aò  
    convert correlation matrix to covariance matrix given standard deviation

    Parameters
    ----------
    corr : array_like, 2d
        correlation matrix, see Notes
    std : array_like, 1d
        standard deviation

    Returns
    -------
    cov : ndarray (subclass)
        covariance matrix

    Notes
    -----
    This function does not convert subclasses of ndarrays. This requires
    that multiplication is defined elementwise. np.ma.array are allowed, but
    not matrices.
    )r	   rd   rg   )rk   Ústdrj   rh   s       r   Úcorr2covro     s:   € ô, �=‰=˜Ó€DÜ�=‰=˜Ó€DØ
”—‘˜$ Ó%Ñ
%€CØ€Jr   c                 óR   — t        j                  t        j                  | «      «      S )a  
    get standard deviation from covariance matrix

    just a shorthand function np.sqrt(np.diag(cov))

    Parameters
    ----------
    cov : array_like, square
        covariance matrix

    Returns
    -------
    std : ndarray
        standard deviation from diagonal of cov
    )r	   re   rf   )rh   s    r   Úse_covrq     s   € ô  �7‰7”2—7‘7˜3“<Ó Ð r   )T)F)Ú__doc__Únumpyr	   Úscipy.specialr   r   r   r   r+   r3   r8   r<   r?   rN   r[   r_   rb   rl   ro   rq   rR   r   r   ú<module>ru      s]   ðñó Ý òð &*ó ò'ó.'ò0'ò6'ò0ò.ò$.ò&.ò.ó>ò>ó8!r   