§
    OŠtjÑ  ã                   ó.   — d dl mZ d„ Zd„ Zd„ Zefd„ZdS )é    )Úas_intc                 ó²   — t          | ¦  «        } d| fd| dfdi}d}t          d| dz  dz   ¦  «        D ]$}|| |z
  dz   z  |z  }|x||| |z
  f<   || |z
  |f<   Œ%|S )aÒ  Return a dictionary containing pairs :math:`{(k1,k2) : C_kn}` where
    :math:`C_kn` are binomial coefficients and :math:`n=k1+k2`.

    Examples
    ========

    >>> from sympy.ntheory import binomial_coefficients
    >>> binomial_coefficients(9)
    {(0, 9): 1, (1, 8): 9, (2, 7): 36, (3, 6): 84,
     (4, 5): 126, (5, 4): 126, (6, 3): 84, (7, 2): 36, (8, 1): 9, (9, 0): 1}

    See Also
    ========

    binomial_coefficients_list, multinomial_coefficients
    r   é   é   ©r   Úrange©ÚnÚdÚaÚks       úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/ntheory/multinomial.pyÚbinomial_coefficientsr      sŠ   € õ" 	ˆq‰	Œ	€AØ
ˆQˆ��Q˜�F˜AÐ€AØ	€AÝ�1�a˜‘d˜Q‘hÑÔð &ð &ˆØ�!�a‘%˜!‘)‰_˜qÑ ˆØ$%Ð%ˆˆ!ˆQ�‰Uˆ(‰�a˜˜A™˜q˜‘k�kØ€Hó    c                 ó¢   — t          | ¦  «        } dg| dz   z  }d}t          d| dz  dz   ¦  «        D ]}|| |z
  dz   z  |z  }|x||<   || |z
  <   Œ|S )aL   Return a list of binomial coefficients as rows of the Pascal's
    triangle.

    Examples
    ========

    >>> from sympy.ntheory import binomial_coefficients_list
    >>> binomial_coefficients_list(9)
    [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

    See Also
    ========

    binomial_coefficients, multinomial_coefficients
    r   r   r   r	   s       r   Úbinomial_coefficients_listr      sw   € õ  	ˆq‰	Œ	€AØ	
ˆˆq�1‰u‰€AØ	€AÝ�1�a˜‘d˜Q‘hÑÔð ð ˆØ�!�a‘%˜!‘)‰_˜qÑ ˆØÐˆˆ!‰ˆq��Q‘‰xˆxØ€Hr   c                 ó  — t          | ¦  «        } t          |¦  «        }| s|ri S ddiS | dk    rt          |¦  «        S | d|z  k    r#|dk    rt          t          | |¦  «        ¦  «        S |gdg| dz
  z  z   }t	          |¦  «        di}|rd}n| }|| dz
  k     rð||         }|r
d||<   ||d<   |dk    r||dz   xx         dz  cc<   d}d}d}n/|dz  }|dz   }|t	          |¦  «                 }||xx         dz  cc<   t          || ¦  «        D ]B}||         r8||xx         dz  cc<   ||t	          |¦  «                 z  }||xx         dz  cc<   ŒC|dxx         dz  cc<   ||z  ||d         z
  z  |t	          |¦  «        <   || dz
  k     °ð|S )aø  Return a dictionary containing pairs ``{(k1,k2,..,km) : C_kn}``
    where ``C_kn`` are multinomial coefficients such that
    ``n=k1+k2+..+km``.

    Examples
    ========

    >>> from sympy.ntheory import multinomial_coefficients
    >>> multinomial_coefficients(2, 5) # indirect doctest
    {(0, 5): 1, (1, 4): 5, (2, 3): 10, (3, 2): 10, (4, 1): 5, (5, 0): 1}

    Notes
    =====

    The algorithm is based on the following result:

    .. math::
        \binom{n}{k_1, \ldots, k_m} =
        \frac{k_1 + 1}{n - k_1} \sum_{i=2}^m \binom{n}{k_1 + 1, \ldots, k_i - 1, \ldots}

    Code contributed to Sage by Yann Laigle-Chapuy, copied with permission
    of the author.

    See Also
    ========

    binomial_coefficients_list, binomial_coefficients
    © r   r   r   )r   r   ÚdictÚ!multinomial_coefficients_iteratorÚtupler   )	Úmr
   ÚtÚrÚjÚtjÚstartÚvr   s	            r   Úmultinomial_coefficientsr   7   sþ  € õ: 	ˆq‰	Œ	€AÝˆq‰	Œ	€AØð Øð 	ØˆIØ�AˆwˆØˆA‚v€vÝ$ QÑ'Ô'Ð'ØˆAˆa‰C‚x€x�A˜’E�EÝÕ5°a¸Ñ;Ô;Ñ<Ô<Ð<Ø	
ˆˆqˆc�Q˜‘U‰mÑ€AÝ	ˆq‰Œ�1ˆ€AØð Øˆˆàˆà
ˆa�!‰eŠ)ˆ)àˆqŒTˆØð 	ØˆAˆa‰DØˆAˆa‰DØ�Š6ˆ6Øˆa�!‰eˆHˆHŒH˜‰MˆHˆH‰HØˆAØˆEØˆAˆAà�‰FˆAØ˜‘EˆEØ•%˜‘(”(”ˆAØˆaˆDˆDŒD�A‰IˆDˆD‰Dõ �u˜a‘”ð 	ð 	ˆAØ�Œtð Ø�!��”˜‘	��‘Ø�Q•u˜Q‘x”x”[Ñ �Ø�!��”˜‘	��‘øØ	ˆ!ˆˆŒ�‰	ˆˆ‰Ø˜2‘v 1 q¨¤t¡8Ñ,ˆ�%�‰(Œ(‰ð1 ˆa�!‰eŠ)ˆ)ð2 €Hr   c           	   #   ó
  K  — t          | ¦  «        } t          |¦  «        }| d|z  k     s|dk    r,t          | |¦  «        }|                     ¦   «         E d{V —† dS t          ||¦  «        }i }|                     ¦   «         D ]!\  }}|| |t          d|¦  «        ¦  «        <   Œ"|}|gdg| dz
  z  z   } ||¦  «        } |t          d|¦  «        ¦  «        }	|||	         fV — |rd}
n| }
|
| dz
  k     r�||
         }|
r
d||
<   ||d<   |dk    r||
dz   xx         dz  cc<   d}
n|
dz  }
||
xx         dz  cc<   |dxx         dz  cc<    ||¦  «        } |t          d|¦  «        ¦  «        }	|||	         fV — |
| dz
  k     °ŽdS dS )aq  multinomial coefficient iterator

    This routine has been optimized for `m` large with respect to `n` by taking
    advantage of the fact that when the monomial tuples `t` are stripped of
    zeros, their coefficient is the same as that of the monomial tuples from
    ``multinomial_coefficients(n, n)``. Therefore, the latter coefficients are
    precomputed to save memory and time.

    >>> from sympy.ntheory.multinomial import multinomial_coefficients
    >>> m53, m33 = multinomial_coefficients(5,3), multinomial_coefficients(3,3)
    >>> m53[(0,0,0,1,2)] == m53[(0,0,1,0,2)] == m53[(1,0,2,0,0)] == m33[(0,1,2)]
    True

    Examples
    ========

    >>> from sympy.ntheory.multinomial import multinomial_coefficients_iterator
    >>> it = multinomial_coefficients_iterator(20,3)
    >>> next(it)
    ((3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 1)
    r   r   Nr   )r   r   ÚitemsÚfilter)r   r
   Ú_tupleÚmcÚmc1r   r   r   Út1Úbr   r   s               r   r   r   �   sü  è è € õ, 	ˆq‰	Œ	€AÝˆq‰	Œ	€AØˆ1ˆQ‰3‚w€w�!�q’&�&Ý% a¨Ñ+Ô+ˆØ—8’8‘:”:ÐÐÐÐÐÐÐÐÐå% a¨Ñ+Ô+ˆØˆØ—H’H‘J”Jð 	-ð 	-‰DˆAˆqØ+,ˆC��•v˜d A‘”Ñ'Ô'Ñ(Ð(ØˆàˆC�1�#˜˜Q™‘-ÑˆØˆV�A‰YŒYˆØˆF•6˜$ Ñ#Ô#Ñ$Ô$ˆØ�2�a”5ˆkÐÐÐØð 	ØˆAˆAàˆAà�!�a‘%Šiˆià�1”ˆBØð Ø��!‘Ø��!‘Ø�AŠvˆvØ�!�a‘%��”˜A‘��‘Ø��à�Q‘�Ø�!��”˜‘	��‘àˆaˆDˆDŒD�A‰IˆDˆD‰DØ�˜‘”ˆBØ�•v˜d BÑ'Ô'Ñ(Ô(ˆAØ�r˜!”u�+ÐÐÐð! �!�a‘%Šiˆiˆiˆiˆiˆir   N)Úsympy.utilities.miscr   r   r   r   r   r   r   r   r   ú<module>r)      sk   ðØ 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð4ð ð ð2Gð Gð GðT 49ð ;ð ;ð ;ð ;ð ;ð ;r   