
    uki	                         d dl Zd dlmZ d dlmZ d dlm Z d dlmZmZ d dl	m
Z
mZ d dlmZmZ ded	ed
edefdZded	ed
edefdZy)    N)dtypes)lax)numpy)promote_args_inexactpromote_args_numeric)gammalnxlogy)Array	ArrayLikexnpreturnc                 h   t        d|      \  }t        d| |      \  } }t        j                  | j                  t
        j                        s%t        d| j                   d|j                         | j                  |j                        } |j                  |j                        }t        |dz         t        j                  t        | |      t        | dz         z
  d      z   }t        j                  t        j                  t        j                  |       |      |t
        j                         S )a  Multinomial log probability mass function.

  JAX implementation of :obj:`scipy.stats.multinomial` ``logpdf``.

  The multinomial probability distribution is given by

  .. math::

     f(x, n, p) = n! \prod_{i=1}^k \frac{p_i^{x_i}}{x_i!}

  with :math:`n = \sum_i x_i`.

  Args:
    x: arraylike, value at which to evaluate the PMF
    n: arraylike, distribution shape parameter
    p: arraylike, distribution shape parameter

  Returns:
    array of logpmf values.

  See Also:
    :func:`jax.scipy.stats.multinomial.pmf`
  zmultinomial.logpmfz-x and n must be of integer type; got x.dtype=z
, n.dtype=   )axis)r   r   r   
issubdtypedtypenpinteger
ValueErrorastyper   jnpsumr	   whereequalinf)r   r   r   logprobss       [/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/scipy/stats/multinomial.pylogpmfr!      s    0 0!4"!	2Aq	9$!Q			177BJJ	/
DQWWIZXYX_X_W`a
bbhhqww!hhqww!QU^cggeAqkGAEN&BLL(	399SWWQZ+Xw	??    c                 B    t        j                  t        | ||            S )a  Multinomial probability mass function.

  JAX implementation of :obj:`scipy.stats.multinomial` ``pmf``.

  The multinomial probability distribution is given by

  .. math::

     f(x, n, p) = n! \prod_{i=1}^k \frac{p_i^{x_i}}{x_i!}

  with :math:`n = \sum_i x_i`.

  Args:
    x: arraylike, value at which to evaluate the PMF
    n: arraylike, distribution shape parameter
    p: arraylike, distribution shape parameter

  Returns:
    array of pmf values

  See Also:
    :func:`jax.scipy.stats.multinomial.logpmf`
  )r   expr!   )r   r   r   s      r    pmfr%   ;   s    0 
1a	!!r"   )r   r   jax._srcr   r   r   jax._src.numpy.utilr   r   jax._src.scipy.specialr   r	   jax._src.typingr
   r   r!   r%    r"   r    <module>r+      sd       ! J 1 ,@i @I @) @ @D"9 " "y "U "r"   