Ë
    7^(hU  ã                   óh   — 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y)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y)Ú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                   r}|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 y y )	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/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/combinatorics/schur_number.pyÚevalzSchurNumber.eval'   sz   € à�;Š;Ø”A—J‘J‰Ü—z‘zÐ!Ø�yŠyÜ—v‘v�Ø—<’< 1§=¢=Ü Ð!AÓBÐBØ,-°!¸¸rÀcÑ(JÐ%Ø�AŠvÜÐ8¸Ñ;Ó<Ð<ð ð ó    c                 óÞ   — | j                   d   }|dk(  rt        d«      S |dk(  rt        d«      S |j                  r(d| j                  |dz
  «      j	                  «       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   sp   € Ø�Y‰Y�q‰\ˆà�Š7Ü˜3“<ÐØ�Š7Ü˜4“=Ð à�=Š=Ø�T—Y‘Y˜r A™vÓ&×2Ñ2Ó4Ñ4°qÑ8Ð8Ø�2‘˜‘	˜1‰}Ðr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r%   © r   r   r   r      s    „ ñð4 ñ
=ó ð
=ó
r   r   c                 óô   — | t         j                  u rt        d«      ‚| dk  rt        d«      ‚| dk  rd}t        |«      S 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   sq   € àŒA�J‰J�ÜÐ/Ó0Ð0ØˆA‚vÜÐAÓBÐBØ	
ˆaŠØˆô �5‹>Ðô —	‘	œ$Ÿ(™( 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  rYt        || «      }t        t        |«      | dz
  dz  dz   «      D �cg c]
  }d|z  dz   ‘Œ }}|dxx   |z  cc<   t        |«      |k  rŒY|S c c}w )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   éÿÿÿÿ)Ú
isinstancer   r   r   r4   ÚlenÚ_generate_next_listÚrange)r2   Únumber_of_subsetsÚsum_free_subsetsr   Úmissed_elementss        r   Úschur_partitionr>   O   sô   € ô^ �!”UÔ A§K¢KÜÐ7Ó8Ð8ä-¨aÓ0ÐØˆA‚vØ˜C˜5ÑØ	
ˆaŠØ ˜F˜8ÑØ	
ˆaŠÚ%˜;Ñà ˜F Q¨ FÐ+Ðä
ÐÓ
Ð"3Ò
3Ü.Ð/?ÀÓCÐÜ,1´#Ð6FÓ2GÈ!ÈAÉ#ÐPQÉÐTUÉÓ,VÖW q˜1˜Q™3 ›7ÐWˆÐWØ˜Ó Ñ/Óô ÐÓ
Ð"3Ó
3ð
 Ðùò Xs   ÂCc                 ól  — g }| D ]T  }|D �cg c]  }|dz  |k  sŒ|dz  ‘Œ }}|D �cg c]  }|dz  dz
  |k  sŒ|dz  dz
  ‘Œ }}||z   }|j                  |«       ŒV t        t        | «      dz   «      D �cg c]  }d|z  dz   |k  sŒd|z  dz   ‘Œ }	}|j                  |	«       |} | S c c}w c c}w c c}w )Nr   r
   )Úappendr:   r8   )
Úcurrent_listr2   Únew_listÚitemÚnumberÚtemp_1Útemp_2Únew_itemr   Ú	last_lists
             r   r9   r9   “   sÖ   € Ø€Hàò "ˆØ)-Ö?˜v°¸±¸Q³�&˜“(Ð?ˆÐ?Ø-1ÖG 6°V¸A±XÀ±\ÀQÓ5F�&˜‘(˜Q“,ÐGˆÐGØ˜F‘?ˆØ�‰˜Õ!ð	"ô #(¬¨LÓ(9¸!Ñ(;Ó"<ÖM˜QÀÀ!ÁÀaÁÈ1Ã��1‘�q“ÐM€IÐMØ‡O�O�IÔØ€LàÐùò @ùÚGùò Ns    ŒB'šB'§B,¸
B,Á5B1Â
B1)r+   r/   Ú
sympy.corer   Úsympy.core.basicr   Úsympy.core.functionr   Úsympy.core.numbersr   r   r4   r>   r9   r-   r   r   ú<module>rM      s9   ðñó Ý Ý "Ý (Ý &ô2�(ô 2òjòAóHr   