
    g5#                     &   d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZmZmZ ddlmZmZ d dlmZ d dlmZ d dlZd dlmZ d	 Zd
 Z d Z! eddg          de"de"fd            Z#de"de"fdZ$ eddd          dd            Z%dS )    )fzerofrom_intfrom_rationalfonefhalfbitcountto_intmpf_mulmpf_divmpf_submpf_addmpf_sqrtmpf_pimpf_cosh_sinhmpf_cosmpf_sin)gcdlegendrejacobi   )_sqrt_mod_prime_poweris_quad_residue)
deprecated)recurrence_memoNcountc                     d} dg| z  a dg| z  at          | dz            dz   }t          d|          D ]E}t           |         dk    r2t          ||z  | |          D ]}t           |         dk    r
|t           |<   Ft          d|           D ]z}t           |         dk    r|t           |<   |dz
  t          |<   +t           |         }||z  }||z  dk    rt          |         |z  t          |<   _t          |         |dz
  z  t          |<   {d S )N順 r   r         ?      )_factor_totientintrange)maxnlimijxys         U/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/ntheory/partitions_.py_prer-      s   D c$hGs4xH
dCi..1
C1c]] # #1:??1Q3a(( # #1:??!"GAJ1d^^ 
. 
.1:??GAJA#HQKAJqDq5A::"1+a-HQKK"1+q1u-HQKK
. 
.    c                 4   |dk    rt           S |}d}t          |         }||z  dk    r||z  }|dz  }||z  dk    ||z  }dd| z  z
  }t          |          }|dk    rM|dk    rd|z  }	|	||	z  z   }|t          d|dz
  |	          z  |	z  }t	          |d|dz             d         }
t          t          t          d|
z            ||          t          |	          |          }t          t          t          d	|z  t          |
dz
  |
          z            t          t          |          |          |          t          ||          |          S |dk    rd|z  }	|	||	z  z   }|dk    r|t          d
|dz  dz
  |	          z  |	z  }t	          |d|dz             d         }
t          t          t          d|
z            ||          t          |	          |          }t          t          t          dd	|dz   z  z  t          |
d          z            t          t          |dz            |          |          t          ||          |          S |||z  z   }||z  dk    rT|dk    rGt          t          t          d|                    t          t          |          |          |          S t          S t          ||          st          S ||dz
  z  |dz
  z  }|t          d|dz
  |          z  }t	          |||          d         }
t          t          t          d|
z            ||          t          |          |          }t          t          t          dt          d|          z            t          t          |          |          |          t          ||          |          S |dk    s|dk    rt          |d          t          |d          }}d||z  z  }||z  | z  |dz  dz
  |z  z   t          ||z  |z  |z  t           |         dz
  |          z  |z  }||z  | z  |dz  dz
  |z  z   t          ||z  |z  |z  t           |         dz
  |          z  |z  }t          t#          |||          t#          |||          |          S |dk    rd| z  dz   t          dt           |         dz
  |          z  |z  }d| dz
  |dz  dz
  dz  z
  |dz  z  dz  z   dz  }t          t          t          d	          t#          |||          |          t#          |||                    S d| z  dz   t          dt           |         dz
  |          z  |z  }d| |dz  dz
  dz  z
  dz  z   dz  }t          t#          |||          t#          |||          |          S )z Compute the inner sum in HRR formula [1]_

    References
    ==========

    .. [1] https://msp.org/pjm/1956/6-1/pjm-v6-n1-p18-p.pdf

    r   r      r!      	         @   i@  r           )r   r"   r   powr   r   r
   r   r   r   r   r   r   r   r   r   r#   _a)nkpreck1epk2vpimodmarg_phid1d2n1n2s                    r,   r:   r:   $   s    	Avv	
B	A
A
q&A++
q	Q q&A++ 
BB	BqDA	B	Qww66A#Ca#gA3q!a%%%%,A%aAE2215A'1r4) )*23--? ?C7"qAq!1!1122!d++T3 3 T""D* * * 66A#Ca#gA1uus2q!tax---4%aAE2215A'(1Q3--T::t% %C7B!a%=!Q788!Q$..6 6 T""D* * * AIq5A::AvvVAq\\**Xa[[$//7 7 7 Lq!$$ 	L1q5z1q5!s3q!$$$!!Q**1-HQqSMM2t,,QKK  wQva||^$$Xa[[$''/ / C& & 	&
 	AvvaRc"bkkBBK!tAvQR'"R
HRL1,b112578!tAvQR'"R
HRL1,b112578r"b$''BD)9)94@@@AvvsQwC"!12666"<AERUQYN*RU3q88A=wRLLr2td$ $ r2t  	 Q37CHRL1,b11
1R	7B
qBEAI>!Q&
&!	+B2b"d##RB%5%5t<<<r.   c           	         t          |          }t          |          }t          |||          }t          t          |           t	          dd|          |          }t          ||          }t          t          ||          |          \  }	}
t          t          ||          t          t          ||          |          |          }t          t          ||	          t          |
||          |          }t          ||          S )z
    Compute the sinh term in the outer sum of the HRR formula.
    The constants sqrt(2/3*pi) and sqrt(8) must be precomputed.
    r   r0   )r   r   r   r   r   r   r   r
   )r;   r)   r=   sq23pisqrt8rC   abcchshDEs                r,   _drV   z   s    
 	A	B4  A]1b$77>>ADA71a==$//FBDq!!2&&	. 	.A 	2At 4 4d;;A1a==r.   r;   returnc                     d}d}t                      D ]H}|d|z  dz   z  }| |z
  }|dk     r n/||         }||dz   z  }d|k    r|||         z  }||dz  r| n|z  }I|S )zt Calculate the partition function P(n)

    Parameters
    ==========

    n : int
        nonnegative integer

    r   r3   r   r!   r   )r;   prevrB   pentar(   npss          r,   _partition_recr]      s     	
AEWW 
  
 1qY66EH
a!e77bMA	1q5aRRaHr.   c           	         | dk     rdS | dk    r | t                                           z
  dk     s#t                                           dk    r| dk     rt          |           S dt                      vrt                       t	          t
          j        d| z  dz  dz  z  t          j        d	| z            z
  t          j        d
          z  dz             t          j        d
          z  }t	          |dz  dz             x}}dt
          j        dz  z  dt          j	        d          z  z  t
          j        t          j	        d          z  dz  t
          j        t          j	        d          z  fd}t          dt          j        | dz                      } || |          dk     sJ |dk    r+ || |          dk     r|dz  }|dk    r || |          dk     |}|dz  }||z
  dk    r.||z   dz  } || |          x}dk     r|}n|dk    r|}||z
  dk    .|}	|	dk    rt          d          t          }
t          t          t!          dd|          |          t#          |          |          }t          t%          d          |          }t'          d|	          D ]q}t)          | ||          }t+          | ||||          }t-          |
t          ||          |          }
t/          t1          t3          |                              dz   }rt	          t3          t-          |
t4          |                              S )zX Calculate the partition function P(n)

    Parameters
    ==========

    n : int

    r   i@ F   r!   i@8  r"   g      @r   r4   
   r   g?d   ,      r3   K   gUUUUUU?c                     t           j        } ||          z   ||| dz
  z            z  t          j         ||           z  |z            z  z   S )Nr   )mathsqrtsinh)r;   Nrg   c1c2c3s      r,   _Mz_partition.<locals>._M   sU    y$$q''zBttAq1uI.tyDDGGA/F/FFFFr.   r2   (   r   zInput too bigr1   2   )r]   cache_lengthglobalsr-   r$   rf   rC   loglog2rg   maxceil
ValueErrorr   r
   r   r   r   r   r%   r:   rV   r   r   absr	   r   )r;   pbitsr=   r@   rm   bigsmallri   erMr\   rM   rN   qrO   drj   rk   rl   s                   @@@r,   
_partitionr      s_    	1uuq	W^88:::R??''))Q..1v:: a   		!!1R#1	x||$&'( ) ) 		"E 59s?###D1
 
DGQJDIaLL(	)B	1	b	 B	3	BG G G G G G G a1c6""
#
#C2a::
((rr!SzzC''	 ((rr!SzzC''E
'C
+//5[1"Q((NBc!!CC3YYE +// 	A 	5yy))) 	AXmAq!44a88&))QGGFXa[[!$$E1a[[ * *q!QKKq!Q&&Awq!}}d++ S^^$$r)vga--..///r.   zpThe `sympy.ntheory.partitions_.npartitions` has been moved to `sympy.functions.combinatorial.numbers.partition`.z1.13z%deprecated-ntheory-symbolic-functions)deprecated_since_versionactive_deprecations_targetFc                 $    ddl m}  ||           S )a
  
    Calculate the partition function P(n), i.e. the number of ways that
    n can be written as a sum of positive integers.

    .. deprecated:: 1.13

        The ``npartitions`` function is deprecated. Use :class:`sympy.functions.combinatorial.numbers.partition`
        instead. See its documentation for more information. See
        :ref:`deprecated-ntheory-symbolic-functions` for details.

    P(n) is computed using the Hardy-Ramanujan-Rademacher formula [1]_.


    The correctness of this implementation has been tested through $10^{10}$.

    Examples
    ========

    >>> from sympy.functions.combinatorial.numbers import partition
    >>> partition(25)
    1958

    References
    ==========

    .. [1] https://mathworld.wolfram.com/PartitionFunctionP.html

    r   )	partition)%sympy.functions.combinatorial.numbersr   )r;   verbosefunc_partitions      r,   npartitionsr      s(    B RQQQQQ>!r.   )F)&mpmath.libmpr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   sympy.external.gmpyr   r   r   residue_ntheoryr   r   sympy.utilities.decoratorr   sympy.utilities.memoizationr   rf   	itertoolsr   r-   r:   rV   r$   r]   r   r    r.   r,   <module>r      s:  @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 6 5 5 5 5 5 5 5 5 5 C C C C C C C C 0 0 0 0 0 0 7 7 7 7 7 7       . . .0T= T= T=l  $ !Qc C    4J0# J0# J0 J0 J0 J0Z  tBD D D  	D D  r.   