
    M/Phr	                         d Z ddlZddlmZ  G d d          Z e            Z G d d          Z e            Zd Z	d	 Z
d
 ZdS )zQ

Special functions for copulas not available in scipy

Created on Jan. 27, 2023
    N)	factorialc                   $    e Zd ZdZd Zd Zd ZdS )	Sterling1z'Stirling numbers of the first kind
    c                     i | _         d S N_cacheselfs    i/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/distributions/copula/_special.py__init__zSterling1.__init__           c                 ^   t          |          dz   t          |          z   }|| j                                        v r| j        |         S ||cxk    rdk    rn ndS |dk    r|dk    rdS ||k    rdS t          |dz
  |dz
            |dz
  t          |dz
  |          z  z   }|| j        |<   |S N,r      )strr	   keys	sterling1r   nkkeyresults        r   __call__zSterling1.__call__   s    !ffslSVV#$+""$$$$;s##;;;;Q;;;;;1q55Q!VV1q5511q5!a%((AEYq1ua5H5H+HH!Cr   c                     i | _         dS z(clear cache of Sterling numbers
        Nr   r
   s    r   clear_cachezSterling1.clear_cache$        r   N__name__
__module____qualname____doc__r   r   r    r   r   r   r      sK         
        r   r   c                   $    e Zd ZdZd Zd Zd ZdS )	Sterling2z(Stirling numbers of the second kind
    c                     i | _         d S r   r   r
   s    r   r   zSterling2.__init__3   r   r   c                    t          |          dz   t          |          z   }|| j                                        v r| j        |         S ||cxk    rdk    rn ndS |dk    r|dk    s|dk    r|dk    rdS ||k    rdS ||k    rdS |t          |dz
  |          z  t          |dz
  |dz
            z   }|| j        |<   |S r   )r   r	   r   	sterling2r   s        r   r   zSterling2.__call__6   s    !ffslSVV#$+""$$$$;s##;;;;Q;;;;;1EEa1ff!q&&QUU1661q551Yq1ua(((9QUAE+B+BB!Cr   c                     i | _         dS r   r   r
   s    r   r   zSterling2.clear_cacheG   r    r   Nr!   r&   r   r   r(   r(   -   sK         
    "    r   r(   c                 6    | dd| z  z   | dz  z   z  d| z
  dz  z  S )z?Polylogarithm for negative integer order -3

    Li(-3, z)
    r         r&   zs    r   li3r2   P   s-    
 AE	AqD !QUQJ..r   c                 B    | d| z   z  dd| z  z   | dz  z   z  d| z
  dz  z  S )z?Polylogarithm for negative integer order -4

    Li(-4, z)
    r   
   r/      r&   r0   s    r   li4r6   X   s5    
 A;!b1f*q!t+,Az99r   c                 V    t          j        |          dk    rt          j        |          d         }t          j         dz             }t          j         fd|D                       }d dz   z  t          j        t          |          |z  dd|z
  z  |dz   z  z  d          z  }|S )zPolylogarithm for negative integer order -n

    Li(-n, z)

    https://en.wikipedia.org/wiki/Polylogarithm#Particular_values
    r   ).Nc                 <    g | ]}t          d z   |d z             S )r   )r+   ).0kir   s     r   
<listcomp>zlin.<locals>.<listcomp>k   s+    999Ia!eR!V,,999r   )axis)npsizearrayarangesumr   )r   r1   r   st2ress   `    r   linrE   `   s     
wqzzA~~HQKK	"
	!A#A
(9999q999
:
:C1+y||c1R1q5\QqS4II$&( ( ( (CJr   )r%   numpyr>   scipy.specialr   r   r   r(   r+   r2   r6   rE   r&   r   r   <module>rH      s         # # # # # #       < IKK	       @ IKK	/ / /: : :    r   