
    Xh##                        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 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   )_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         k/var/www/tools.fuzzalab.pt/emblema-extractor/venv/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                    |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    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  d|
dz  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  dd|
dz  z  z
  z            t          t          |dz            |          |          t          ||          |          S |||z  z   }|dz  dv rd	nd}||z  dk    rF|dk    r9t          t          |          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|z            t          t          |          |          |          t          ||          |          S |dk    s|dk    rt          j        |d          t          j        |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      	         @      )r      i@  r          )r   r   r   powr   r   r
   r   r   r   r   r   r   mathgcdr    _a)nkpreck1epk2vpimodmargjacobi3_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!q1u+.//!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%=!aQi-899!Q$..6 6 T""D* * * AIB&((""aq5A::AvvW%%Xa[[$//7 7 7 Lq!$$ 	L1q5z1q5!s3q!$$$!!Q**1-HQqSMM2t,,QKK  wQwYXa[[$''/ / C& & 	&
 	Avva"b!!48B#3#3B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   r-   )r   r   r   r   r   r   r   r
   )r<   r&   r>   sq23pisqrt8rD   abcchshDEs                r)   _drX   y   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   r0   r   r   r   )r<   prevrC   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   r1   
   r   g?d   ,      r0   K   gUUUUUU?c                     t           j        } ||          z   ||| dz
  z            z  t          j         ||           z  |z            z  z   S )Nr   )r9   sqrtsinh)r<   Nrh   c1c2c3s      r)   _Mz_partition.<locals>._M   sU    y$$q''zBttAq1uI.tyDDGGA/F/FFFFr+   r/   (   r   zInput too bigr.   2   )r_   cache_lengthglobalsr*   r!   r9   rD   loglog2rh   maxceil
ValueErrorr   r
   r   r   r   r   r"   r;   rX   r   r   absr	   r   )r<   pbitsr>   rA   rn   bigsmallrj   erMr^   rO   rP   qrQ   drk   rl   rm   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   residue_ntheoryr   r   sympy.utilities.decoratorr   sympy.utilities.memoizationr   r9   	itertoolsr   r*   r;   rX   r!   r_   r   r    r+   r)   <module>r      s  @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ D C C C C C C C 0 0 0 0 0 0 7 7 7 7 7 7       . . ..U= U= U=n  $ !Qc C    4J0# J0# J0 J0 J0 J0Z  tBD D D  	D D  r+   