
    "gr	                     r    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y)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y)	Sterling1z'Stirling numbers of the first kind
    c                     i | _         y N_cacheselfs    f/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/distributions/copula/_special.py__init__zSterling1.__init__   	        c                 :   t        |      dz   t        |      z   }|| j                  j                         v r| j                  |   S ||cxk(  rdk(  ry |dkD  r|dk(  ry||kD  ry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    !fslSV#$++""$$;;s##;Q; q5Q!Vq51q5!a%(AEYq1ua5H+HH!Cr   c                     i | _         y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      s    
r   r   c                   "    e Zd ZdZd Zd Zd Zy)	Sterling2z(Stirling numbers of the second kind
    c                     i | _         y r   r   r
   s    r   r   zSterling2.__init__3   r   r   c                 T   t        |      dz   t        |      z   }|| j                  j                         v r| j                  |   S ||cxk(  rdk(  ry |dkD  r|dk(  s
|dk(  r|dkD  ry||k(  ry||kD  ry|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    !fslSV#$++""$$;;s##;Q; Ea1f!q&QU6q5Yq1ua((9QUAE+BB!Cr   c                     i | _         yr   r   r
   s    r   r   zSterling2.clear_cacheG   r    r   Nr!   r&   r   r   r(   r(   -   s    
"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           
      |   t        j                  |      dkD  rt        j                  |      d   }t        j                  | dz         }t        j                  |D cg c]  }t	        | dz   |dz          c}      }d| dz   z  t        j
                  t        |      |z  dd|z
  z  |dz   z  z  d      z  }|S c c}w )zPolylogarithm for negative integer order -n

    Li(-n, z)

    https://en.wikipedia.org/wiki/Polylogarithm#Particular_values
    r   ).N)axis)npsizearrayaranger+   sumr   )r   r1   r   kist2ress         r   linrB   `   s     
wwqzA~HHQK	"
		!A#A
((q9Ia!eR!V,9
:C1+y|c1R1q5\QqS4II$&( (CJ :s   B9)r%   numpyr:   scipy.specialr   r   r   r(   r+   r2   r6   rB   r&   r   r   <module>rE      sH     # < K	 @ K	/:r   