Ë
    7^(h«   ã                   ó–   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZ  G d
„ de«      Zy)é   )ÚAdd)Ú	gcd_terms)ÚDefinedFunction)Ú
NumberKind)Ú	fuzzy_andÚ	fuzzy_not)ÚMul)Úequal_valued)Úis_leÚis_ltÚis_geÚis_gt)ÚSc                   óJ   — e Zd ZdZeZed„ «       Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd
d„Zy	)ÚModai  Represents a modulo operation on symbolic expressions.

    Parameters
    ==========

    p : Expr
        Dividend.

    q : Expr
        Divisor.

    Notes
    =====

    The convention used is the same as Python's: the remainder always has the
    same sign as the divisor.

    Many objects can be evaluated modulo ``n`` much faster than they can be
    evaluated directly (or at all).  For this, ``evaluate=False`` is
    necessary to prevent eager evaluation:

    >>> from sympy import binomial, factorial, Mod, Pow
    >>> Mod(Pow(2, 10**16, evaluate=False), 97)
    61
    >>> Mod(factorial(10**9, evaluate=False), 10**9 + 9)
    712524808
    >>> Mod(binomial(10**18, 10**12, evaluate=False), (10**5 + 3)**2)
    3744312326

    Examples
    ========

    >>> from sympy.abc import x, y
    >>> x**2 % y
    Mod(x**2, y)
    >>> _.subs({x: 5, y: 6})
    1

    c                 óþ
  ‡— d„ } ||‰«      }|�|S t        || «      rB|j                  d   }|‰z  dk(  r | |j                  d   ‰«      S |‰|z
  z  j                  �r¢|S t        | | «      rE| j                  d   }|‰z  dk(  r | | j                  d    ‰«      S |‰|z   z  j                  �rP|S t        |t        «      r…g g fx}\  }}|j                  D ]   }	|t        |	| «         j                  |	«       Œ" |�rt        ˆfd„|D «       «      �rît	        |Ž t	        |D �
cg c]  }
|
j                  d   ‘Œ c}
Ž z   } | |‰«      S t        |t        «      �r¨g g fx}\  }}|j                  D ]   }	|t        |	| «         j                  |	«       Œ" |rÝt        ˆfd„|D «       «      rÉt        d„ |j                  D «       «      r­‰j                  r¡|D �cg c]  } | |‰«      ‘Œ }}g }g }|D ]>  }t        || «      r|j                  |j                  d   «       Œ.|j                  |«       Œ@ t        |Ž }t        |Ž }t        |D �
cg c]  }
|
j                  d   ‘Œ c}
Ž }||z  }| | |‰«      z  S ‰j                  rz‰t        j                  urht        d„ |j                  D «       «      rL|j                  D �
cg c]  }
|
j                  r|
‰z  n|
‘Œ }}
t        d„ |D «       «      rt        j                  S t        ||z   Ž }dd	lm} dd
lm} 	  ||‰«      }t%        |d«      s$|‰fD �
cg c]  }
t'        |
|z  dd¬«      ‘Œ c}
\  }Š|‰}}|j(                  rƒg }|j                  D ]Q  }
 | |
‰«      }|j+                  | «      |
j+                  | «      kD  r|j                  |
«       ŒA|j                  |«       ŒS |t-        |j                  «      k7  r~t	        |Ž }nu|j/                  «       \  }}‰j/                  «       \  }Šd}|j0                  r|j0                  s)||z  }t%        |d«      r||z  }|t3        ||z  «      z  }d}|s
||z  }|‰z  Š|j5                  «       r(‰j5                  «       r||‰fD �
cg c]  }
|
 ‘Œ c}
\  }}Š ||‰«      }|�||z  S |j6                  rt%        |d«      r||z  } | |‰d¬«      S |j8                  rf|j                  d   j6                  rMt%        |j                  d   d«      r4|j                  d   |z  }t        j:                  |j                  dd  «      }| | |‰|‰f||fk7  ¬«      z  S c c}
w c c}w c c}
w c c}
w c c}
w # |$ r t        j                  }Y �Œ0w xY wc c}
w )Nc                 óä  — |j                   rt        d«      ‚| t        j                  u s.|t        j                  u s| j                  du s|j                  du rt        j                  S | t        j
                  u s| || fv s| j                  r|dk(  rt        j
                  S |j                  rN| j                  r| |z  S |dk(  r8| j                  rt        j
                  S | j                  rt        j                  S t        | d«      r t        | d«      |«      }|�|S | |z  }|j                  rt        j
                  S 	 t        |«      }t        |t        «      r| ||z  z
  }||z  dk  dk(  r||z  }|S |j                   rt"        t$        }}n|j&                  rt(        t*        }}nyd	|z  }| |z
  }t-        d
«      D ]"  } ||| «      s y |||«      r| |z
  c S ||z  }Œ$ y# t        $ r Y Œyw xY w)zmTry to return p % q if both are numbers or +/-p is known
            to be less than or equal q.
            zModulo by zeroFr   é   Ú	_eval_ModNé    Téþÿÿÿé   )Úis_zeroÚZeroDivisionErrorr   ÚNaNÚ	is_finiteÚZeroÚ
is_integerÚ	is_NumberÚis_evenÚis_oddÚOneÚhasattrÚgetattrÚintÚ
isinstanceÚ	TypeErrorÚis_positiver   r   Úis_negativer   r   Úrange)	ÚpÚqÚrvÚrÚdÚcomp1Úcomp2ÚlsÚ_s	            úL/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/core/mod.pyÚnumber_evalzMod.eval.<locals>.number_eval9   sÂ  € ð
 �yŠyÜ'Ð(8Ó9Ð9Ø”A—E‘E‰z˜Q¤!§%¡%™Z¨1¯;©;¸%Ñ+?À1Ç;Á;ÐRWÑCWÜ—u‘u�Ø”A—F‘F‰{˜a A¨ r 7™l¨q¯|ª|ÀÀQÂÜ—v‘v�à�{Š{Ø—;’;Ø˜Q™3�JØ˜’6Ø—y’yÜ Ÿv™v˜ØŸšÜ Ÿu™u˜ä�q˜+Ô&Ø,”W˜Q Ó,¨QÓ/�Ø�>Ø�Ið �!‘ˆAØ�|Š|Ü—v‘v�ð	Ü˜“F�ô ˜a¤Ô%Ø˜Q˜q™S™�BØ˜1™˜q™ TÒ)Ø˜a™˜Ø�Ið �}Š}Ü$¤e�u‘Ø—’Ü$¤e�u‘àØ�A‘ˆBØ�A‘ˆAÜ˜1“Xò �Ù˜R ”|ÙÙ˜˜B”<Ø˜r™6’MØ�a‘‘ñøô' ò Ùðús   Å G# Ç#	G/Ç.G/r   r   c              3   óB   •K  — | ]  }|j                   d    ‰k(  –— Œ y­w©r   N©Úargs©Ú.0Úinnerr,   s     €r4   ú	<genexpr>zMod.eval.<locals>.<genexpr>Œ   ó   øè ø€ ÒC°E˜UŸZ™Z¨™]¨aÕ/ÑCùó   ƒc              3   óB   •K  — | ]  }|j                   d    ‰k(  –— Œ y­wr7   r8   r:   s     €r4   r=   zMod.eval.<locals>.<genexpr>–   r>   r?   c              3   ó4   K  — | ]  }|j                   –— Œ y ­w©N©r   ©r;   Úts     r4   r=   zMod.eval.<locals>.<genexpr>–   s   è ø€ ÒKiÐ]^ÈAÏLÍLÑKiùó   ‚c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrB   rC   rD   s     r4   r=   zMod.eval.<locals>.<genexpr>§   s   è ø€ Ò4¨�q—|•|Ñ4ùrF   c              3   ó@   K  — | ]  }|t         j                  u –— Œ y ­wrB   )r   r   )r;   Úiqs     r4   r=   zMod.eval.<locals>.<genexpr>©   s   è ø€ Ò<¨B˜2¤§¡œ<Ñ<ùs   ‚)ÚPolynomialError)ÚgcdF)ÚclearÚfractionT)Úevaluate)r&   r9   Úis_nonnegativeÚis_nonpositiver   ÚappendÚallr	   r   Ú
is_Integerr   r"   Úanyr   Úsympy.polys.polyerrorsrJ   Úsympy.polys.polytoolsrK   r
   r   Úis_AddÚcountÚlistÚas_coeff_MulÚis_Rationalr%   Úcould_extract_minus_signÚis_FloatÚis_MulÚ
_from_args)Úclsr+   r,   r5   r-   ÚqinnerÚboth_lÚ	non_mod_lÚmod_lÚargÚiÚnetÚxÚmodÚnon_modÚjÚprod_modÚprod_non_modÚ	prod_mod1rJ   rK   ÚGÚpwasÚqwasr9   ÚaÚcpÚcqÚokr.   s     `                           r4   ÚevalzMod.eval7   sW  ø€ ò8	ñt ˜˜AÓˆØˆ>ØˆIô �a˜ÔØ—V‘V˜A‘YˆFØ˜‰z˜QŠÙ˜1Ÿ6™6 !™9 aÓ(Ð(Ø˜!˜f™*Ñ%×5Ó5à�Ü˜˜˜CÔ Ø�b—Y‘Y˜q‘\ˆFØ˜‰z˜QŠÙ˜a˜RŸI™I a™L˜=¨!Ó,Ð,Ø˜!˜f™*Ñ%×5Ó5à�Ü˜œ3Ôà(*¨B¨Ð.ˆFÑ%�Y Ø—v‘vò 9�Ø”z # sÓ+Ñ,×3Ñ3°CÕ8ð9ò œÓC¸UÔCÕCÜ˜9�o¬ÀÖ-G¸A¨a¯f©f°Q«iÒ-GÐ(HÑH�Ù˜3 “{Ð"ä˜œ3Õà(*¨B¨Ð.ˆFÑ%�Y Ø—v‘vò 9�Ø”z # sÓ+Ñ,×3Ñ3°CÕ8ð9ñ œÓC¸UÔCÔCÌÑKiÐbc×bhÑbhÔKiÔHiÐno×nzÒnzà09Ö:¨1™S  A�YÐ:�	Ð:Ø�Ø�Ø"ò *�AÜ! ! SÔ)ØŸ
™
 1§6¡6¨!¡9Õ-àŸ™ qÕ)ð	*ô
  ˜9�Ü" G˜}�Ü°UÖ!;° !§&¡&¨£)Ò!;Ð<�	Ø Ñ(�Ø#¡C¨¨Q£KÑ/Ð/à�|Š| ¬¯©¡ÜÑ4¨Q¯V©VÔ4Ô4ØGHÇvÁvÖ NÀ!¨!¯,ª,  Q¢¸AÑ!=Ð N�IÐ NÜÑ<°)Ô<Ô<Ü Ÿv™v˜ä�i %Ñ'Ð)ˆAõ 	;Ý-ð	Ù�A�q“	ˆAÜ  1Ô%à"# Q ö)Øô " ! A¡#¨U¸UÖCò )‘��1ð ˜ˆdˆð �8Š8ØˆDØ—V‘Vò #�Ù˜˜1“I�Ø—7‘7˜3“< !§'¡'¨#£,Ò.Ø—K‘K •Nà—K‘K •Nð#ð ”t˜AŸF™F“|Ò#Ü˜�J‘ð —N‘NÓ$‰EˆB�Ø—N‘NÓ$‰EˆB�ØˆBØ—>’>¨¯ªØ˜‘G�Ü  1Ô%Ø˜‘G�AØœ˜R ™U›‘O�AØ�BÙØ�q‘D�Ø�q‘D�ð ×%Ñ%Ô'¨A×,FÑ,FÔ,HØ$% q¨! 9Ö-˜a˜’rÒ-‰GˆAˆq�!ñ ˜˜AÓˆØˆ>Ø�a‘4ˆKð �:Š:œ, q¨!Ô,Ø�‰FˆAÙ�q˜! eÔ,Ð,Ø�XŠX˜!Ÿ&™& ™)×,Ò,´¸a¿f¹fÀQ¹iÈÔ1KØ—‘�q‘	˜!‘ˆAÜ—‘˜qŸv™v a b˜zÓ*ˆAØ‘�Q˜ Q¨ F¨t°T¨lÑ$:Ô;Ñ;Ð;ùò} .Hùò ;ùò "<ùò !Oùò)øàò 	Ü—‘‹Að	üòH .sB   Ä"U
ÇU
ÉUÊ7UÌU Ì(UÍ U Ñ5
U:ÕU ÕU7Õ6U7c                 óŽ   — | j                   \  }}t        |j                  |j                  t        |j                  «      g«      ryy )NT)r9   r   r   r   r   )Úselfr+   r,   s      r4   Ú_eval_is_integerzMod._eval_is_integerí   s8   € Ø�y‰y‰ˆˆ1Ü�a—l‘l A§L¡L´)¸A¿I¹IÓ2FÐGÔHØð Ió    c                 ó8   — | j                   d   j                  ryy ©Nr   T)r9   r(   ©rx   s    r4   Ú_eval_is_nonnegativezMod._eval_is_nonnegativeò   ó   € Ø�9‰9�Q‰<×#Ò#Øð $rz   c                 ó8   — | j                   d   j                  ryy r|   )r9   r)   r}   s    r4   Ú_eval_is_nonpositivezMod._eval_is_nonpositiveö   r   rz   c                 ó0   — ddl m} || |||z  «      z  z
  S )Nr   ©Úfloor)Ú#sympy.functions.elementary.integersr„   )rx   rr   ÚbÚkwargsr„   s        r4   Ú_eval_rewrite_as_floorzMod._eval_rewrite_as_floorú   s   € Ý=Ø�1‘U˜1˜Q™3“Z‘<ÑÐrz   c                 óT   — ddl m} | j                  |«      j                  |||¬«      S ©Nr   rƒ   )ÚlogxÚcdir)r…   r„   ÚrewriteÚ_eval_as_leading_term)rx   rh   r‹   rŒ   r„   s        r4   rŽ   zMod._eval_as_leading_termþ   s&   € Ý=Ø�|‰|˜EÓ"×8Ñ8¸ÀÈDÐ8ÓQÐQrz   c                 óV   — ddl m} | j                  |«      j                  ||||¬«      S rŠ   )r…   r„   r�   Ú_eval_nseries)rx   rh   Únr‹   rŒ   r„   s         r4   r�   zMod._eval_nseries  s(   € Ý=Ø�|‰|˜EÓ"×0Ñ0°°A¸DÀtÐ0ÓLÐLrz   N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚkindÚclassmethodrv   ry   r~   r�   rˆ   rŽ   r�   © rz   r4   r   r      sD   „ ñ&ðP €Dàñs<ó ðs<òjò
òò òRôMrz   r   N)Úaddr   Ú	exprtoolsr   Úfunctionr   r–   r   Úlogicr   r   Úmulr	   Únumbersr
   Ú
relationalr   r   r   r   Ú	singletonr   r   r˜   rz   r4   ú<module>r¡      s3   ðÝ Ý  Ý %Ý ß 'Ý Ý !ß 2Ó 2Ý ôxMˆ/õ xMrz   