
    sg5#                        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%y)    )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 ]:  }t         |   dk(  st        ||z  | |      D ]  }t         |   dk(  s|t         |<    < t        d|       D ]d  }t         |   dk(  r|t         |<   |dz
  t        |<   %t         |   }||z  }||z  dk(  rt        |   |z  t        |<   Ot        |   |dz
  z  t        |<   f y )N順 r   r         ?      )_factor_totientintrange)maxnlimijxys         L/var/www/html/venv/lib/python3.12/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-HQK"1+q1u-HQK
.    c                    |dk(  rt         S |}d}t        |   }||z  dk(  r||z  }|dz  }||z  dk(  r||z  }dd| z  z
  }t        |      }|dk(  r|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kD  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(  r>|dk(  r3t        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k7  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(  ryd| 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    	Av	
B	A
A
q&A+
q	Q q&A+ 
BB	BqDA	B	Qw6A#Ca#gA3q!a%%%,A%aAE215A'1r4)*23-?C7"qAq!112!d+T3 T"D* * 6A#Ca#gA1us2q!tax--4%aAE215A'(1Q3-T:t%C7B!a%=!Q78!Q$.6 T"D* * AIq5A:AvVAq\*Xa[$/7 7 Lq!$L1q5z1q5!s3q!$$!!Q*1-HQqSM2t,QK wQva|^$Xa[$'/ C& 	&
 	AvaRc"bkBBK!tAvQR'"R
HRL1,b12578!tAvQR'"R
HRL1,b12578r"b$'BD)94@@AvsQwC"!1266"<AERUQYN*RU3q88A=wRLr2td$ r2t 	 Q37CHRL1,b1
1R	7B
qBEAI>!Q&
&!	+B2b"d#RB%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>ADA71a=$/FBDq!2&	.A 	2At 4d;A1a=r.   r;   returnc                     d}d}t               D ]A  }|d|z  dz   z  }| |z
  }|dk  r |S ||   }||dz   z  }d|k  r|||   z  }||dz  r| n|z  }C |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W 
 1qY6 H H
a!e7bMA	1q5aRa
  Hr.   c           	         | dk  ry| dk  r| t         j                         z
  dk  st         j                         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kD  r# || |      dk  r|dz  }|dkD  r || |      dk  r|}|dz  }||z
  dkD  r)||z   dz  } || |      x}dk  r|}n|dk\  r|}||z
  dkD  r)|}	|	dkD  rt        d      t        }
t        t        t!        dd|      |      t#        |      |      }t        t%        d      |      }t'        d|	      D ]U  }t)        | ||      }t+        | ||||      }t-        |
t        ||      |      }
t/        t1        t3        |                  dz   }W t	        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   sJ    yy$q'zBtAq1uI.tyyDGA/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    	1u	W^88::R?'')Q.1v: a  	!1R#1	xx|$&'( ) 			"E 59s?##D1
 
DGGQJDIIaL(	)B	1	b	 B	3	BG a1c6"
#Ca:
(r!SzC'	 (r!SzC'E
'C
+/5[1Q(NBc!C3YE +/ 	A 	5y)) 	AXmAq!4a8&)QGFXa[!$E1a[ *q!QK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_targetc                     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!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 C 0 7  .0T=l$ !Qc C  4J0# J0# J0Z  tBD	Dr.   