§
    OŠtjU  ã                   óp   — d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	  G d„ de¦  «        Z
d	„ Zd
„ Zd„ ZdS )z¦
The Schur number S(k) is the largest integer n for which the interval [1,n]
can be partitioned into k sum-free sets.(https://mathworld.wolfram.com/SchurNumber.html)
é    N)ÚS)ÚBasic)ÚFunction)ÚIntegerc                   ó.   — e Zd ZdZed„ ¦   «         Zd„ ZdS )ÚSchurNumbera\  
    This function creates a SchurNumber object
    which is evaluated for `k \le 5` otherwise only
    the lower bound information can be retrieved.

    Examples
    ========

    >>> from sympy.combinatorics.schur_number import SchurNumber

    Since S(3) = 13, hence the output is a number
    >>> SchurNumber(3)
    13

    We do not know the Schur number for values greater than 5, hence
    only the object is returned
    >>> SchurNumber(6)
    SchurNumber(6)

    Now, the lower bound information can be retrieved using lower_bound()
    method
    >>> SchurNumber(6).lower_bound()
    536

    c                 óò   — |j         rm|t          j        u rt          j        S |j        rt          j        S |j        r|j        rt          d¦  «        ‚ddddddœ}|dk    rt          ||         ¦  «        S d S d S )	Nzk should be a positive integeré   é   é   é,   é    )r
   é   é   r   é   r   )	Ú	is_Numberr   ÚInfinityÚis_zeroÚZeroÚ
is_integerÚis_negativeÚ
ValueErrorr   )ÚclsÚkÚfirst_known_schur_numberss      ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/combinatorics/schur_number.pyÚevalzSchurNumber.eval'   s–   € àŒ;ð 		=Ø•A”JˆˆÝ”zÐ!ØŒyð Ý”v�Ø”<ð C 1¤=ð CÝ Ð!AÑBÔBÐBØ,-°!¸¸rÀcÐ(JÐ(JÐ%Ø�AŠvˆvÝÐ8¸Ô;Ñ<Ô<Ð<ð		=ð 		=ð ˆvó    c                 óô   — | j         d         }|dk    rt          d¦  «        S |dk    rt          d¦  «        S |j        r0d|                      |dz
  ¦  «                             ¦   «         z  dz
  S d|z  dz
  dz  S )	Nr   é   i  é   i�  r   r
   r   )Úargsr   Ú
is_IntegerÚfuncÚlower_bound)ÚselfÚf_s     r   r%   zSchurNumber.lower_bound4   s   € ØŒY�qŒ\ˆà�Š7ˆ7Ý˜3‘<”<ÐØ�Š7ˆ7Ý˜4‘=”=Ð àŒ=ð 	9Ø�T—Y’Y˜r A™vÑ&Ô&×2Ò2Ñ4Ô4Ñ4°qÑ8Ð8Ø�2‘˜‘	˜1‰}Ðr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r%   © r   r   r   r      sH   € € € € € ðð ð4 ð
=ð 
=ñ „[ð
=ð
ð 
ð 
ð 
ð 
r   r   c                 óð   — | t           j        u rt          d¦  «        ‚| dk    rt          d¦  «        ‚| dk    rd}n-t          j        t          j        d| z  dz   d¦  «        ¦  «        }t          |¦  «        S )NzInput must be finiter   z&n must be a non-zero positive integer.r   r
   r   )r   r   r   ÚmathÚceilÚlogr   )ÚnÚmin_ks     r   Ú_schur_subsets_numberr4   A   ss   € à�AŒJ€€ÝÐ/Ñ0Ô0Ð0ØˆA‚v€vÝÐAÑBÔBÐBØ	
ˆaŠˆØˆˆå”	�$œ( 1 Q¡3¨¡7¨AÑ.Ô.Ñ/Ô/ˆå�5‰>Œ>Ðr   c                 ó¼  — t          | t          ¦  «        r| j        st          d¦  «        ‚t	          | ¦  «        }| dk    rdgg}n | dk    rddgg}n| dk    rg d¢g}nddgddgg}t          |¦  «        |k     rct          || ¦  «        }d„ t          t          |¦  «        | dz
  dz  dz   ¦  «        D ¦   «         }|dxx         |z  cc<   t          |¦  «        |k     °c|S )	a�  

    This function returns the partition in the minimum number of sum-free subsets
    according to the lower bound given by the Schur Number.

    Parameters
    ==========

    n: a number
        n is the upper limit of the range [1, n] for which we need to find and
        return the minimum number of free subsets according to the lower bound
        of schur number

    Returns
    =======

    List of lists
        List of the minimum number of sum-free subsets

    Notes
    =====

    It is possible for some n to make the partition into less
    subsets since the only known Schur numbers are:
    S(1) = 1, S(2) = 4, S(3) = 13, S(4) = 44.
    e.g for n = 44 the lower bound from the function above is 5 subsets but it has been proven
    that can be done with 4 subsets.

    Examples
    ========

    For n = 1, 2, 3 the answer is the set itself

    >>> from sympy.combinatorics.schur_number import schur_partition
    >>> schur_partition(2)
    [[1, 2]]

    For n > 3, the answer is the minimum number of sum-free subsets:

    >>> schur_partition(5)
    [[3, 2], [5], [1, 4]]

    >>> schur_partition(8)
    [[3, 2], [6, 5, 8], [1, 4, 7]]
    zInput value must be a numberr
   r   r   )r
   r   r   r   c                 ó   — g | ]
}d |z  dz   ‘ŒS ©r   r
   r-   )Ú.0r   s     r   ú
<listcomp>z#schur_partition.<locals>.<listcomp>�   s    € ÐWÐWÐW q˜1˜Q™3 ™7ÐWÐWÐWr   éÿÿÿÿ)Ú
isinstancer   r   r   r4   ÚlenÚ_generate_next_listÚrange)r2   Únumber_of_subsetsÚsum_free_subsetsÚmissed_elementss       r   Úschur_partitionrB   O   s+  € õ^ �!•UÑÔð 9 A¤Kð 9ÝÐ7Ñ8Ô8Ð8å-¨aÑ0Ô0ÐØˆA‚v€vØ˜C˜5ÐÐØ	
ˆaŠˆØ ˜F˜8ÐÐØ	
ˆaŠˆØ%˜I˜I˜;ÐÐà ˜F Q¨ FÐ+Ðå
ÐÑ
Ô
Ð"3Ò
3Ð
3Ý.Ð/?ÀÑCÔCÐØWÐW­Eµ#Ð6FÑ2GÔ2GÈ!ÈAÉ#ÐPQÉÐTUÉÑ,VÔ,VÐWÑWÔWˆØ˜ÐÐÔ Ñ/ÐÐÑõ ÐÑ
Ô
Ð"3Ò
3Ð
3ð
 Ðr   c                 ó  ‡— g }| D ]8}ˆfd„|D ¦   «         }ˆfd„|D ¦   «         }||z   }|                      |¦  «         Œ9ˆfd„t          t          | ¦  «        dz   ¦  «        D ¦   «         }|                      |¦  «         |} | S )Nc                 ó,   •— g | ]}|d z  ‰k    ¯|d z  ‘ŒS )r   r-   ©r8   Únumberr2   s     €r   r9   z'_generate_next_list.<locals>.<listcomp>—   s&   ø€ Ð?Ð?Ð?˜v°¸±¸Q²°�&˜‘(°°°r   c                 ó8   •— g | ]}|d z  dz
  ‰k    ¯|d z  dz
  ‘ŒS r7   r-   rE   s     €r   r9   z'_generate_next_list.<locals>.<listcomp>˜   s3   ø€ ÐGÐGÐG 6°V¸A±XÀ±\ÀQÒ5FÐ5F�&˜‘(˜Q‘,Ð5FÐ5FÐ5Fr   c                 ó8   •— g | ]}d |z  dz   ‰k    ¯d |z  dz   ‘ŒS r7   r-   )r8   r   r2   s     €r   r9   z'_generate_next_list.<locals>.<listcomp>œ   s.   ø€ ÐMÐMÐM˜QÀÀ!ÁÀaÁÈ1ÂÀ��1‘�q‘ÀÀÀr   r
   )Úappendr>   r<   )Úcurrent_listr2   Únew_listÚitemÚtemp_1Útemp_2Únew_itemÚ	last_lists    `      r   r=   r=   “   s²   ø€ Ø€Hàð "ð "ˆØ?Ð?Ð?Ð?¨Ð?Ñ?Ô?ˆØGÐGÐGÐG¨TÐGÑGÔGˆØ˜F‘?ˆØ�Š˜Ñ!Ô!Ð!Ð!àMÐMÐMÐM¥%­¨LÑ(9Ô(9¸!Ñ(;Ñ"<Ô"<ÐMÑMÔM€IØ‡O‚O�IÑÔÐØ€LàÐr   )r+   r/   Ú
sympy.corer   Úsympy.core.basicr   Úsympy.core.functionr   Úsympy.core.numbersr   r   r4   rB   r=   r-   r   r   ú<module>rU      sÈ   ððð ð €€€Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø (Ð (Ð (Ð (Ð (Ð (Ø &Ð &Ð &Ð &Ð &Ð &ð2ð 2ð 2ð 2ð 2�(ñ 2ô 2ð 2ðjð ð ðAð Að AðHð ð ð ð r   