ó
    ‰*£h«   ã                   ó–   • S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	J
r
  S SKJr  S SKJr  S SKJrJrJrJr  S S	KJr   " S
 S\5      rg)é   )ÚAdd)Ú	gcd_terms)ÚDefinedFunction)Ú
NumberKind)Ú	fuzzy_andÚ	fuzzy_not)ÚMul)Úequal_valued)Úis_leÚis_ltÚis_geÚis_gt)ÚSc                   óT   • \ rS rSrSr\r\S 5       rS r	S r
S rS rS rSS	 jrS
rg)ÚModé   aù  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           	      óR  ^• S nU" UT5      nUb  U$ [        X5      (       aI  UR                  S   nUT-  S:X  a  U " UR                  S   T5      $ UTU-
  -  R                  (       a  U$ GOù[        U* U 5      (       aL  U* R                  S   nUT-  S:X  a  U " U* R                  S   * T5      $ UTU-   -  R                  (       a  U$ GO›[        U[        5      (       a’  / / 4=nu  pxUR                   H   n	U[        X�5         R                  U	5        M"     U(       aQ  [        U4S jU 5       5      (       a7  [	        U6 [	        U V
s/ s H  oªR                  S   PM     sn
6 -   nU " UT5      $ GOô[        U[        5      (       GaÞ  / / 4=nu  pxUR                   H   n	U[        X�5         R                  U	5        M"     U(       aø  [        U4S jU 5       5      (       aÞ  [        S UR                   5       5      (       a½  TR                  (       a¬  U Vs/ s H  oÀ" UT5      PM     nn/ n/ nU HD  n[        Xð5      (       a   UR                  UR                  S   5        M3  UR                  U5        MF     [        U6 n[        U6 n[        U V
s/ s H  oªR                  S   PM     sn
6 nUU-  nUU " UT5      -  $ TR                  (       aŒ  T[        R                  Lay  [        S UR                   5       5      (       aX  UR                   V
s/ s H  oªR                  (       a  U
T-  OU
PM     nn
[        S U 5       5      (       a  [        R                  $ [        Xx-   6 nSS	KJn  SS
KJn   U" UT5      n[%        US5      (       d$  UT4 V
s/ s H  n
['        U
U-  SSS9PM     sn
u  nmUTnnUR(                  (       aˆ  / nUR                   HT  n
U " U
T5      nUR+                  U 5      U
R+                  U 5      :”  a  UR                  U
5        MC  UR                  U5        MV     U[-        UR                  5      :w  a  [	        U6 nO‰UR/                  5       u  nnTR/                  5       u  nmSnUR0                  (       a  UR0                  (       d.  UU-  n[%        US5      (       a  UU-  nU[3        UU-  5      -  nSnU(       d
  UU-  nUT-  mUR5                  5       (       a/  TR5                  5       (       a  UUT4 V
s/ s H  oª* PM     sn
u  nnmU" UT5      nUb  UU-  $ UR6                  (       a  [%        US5      (       a  UU-  nU " UTSS9$ UR8                  (       aq  UR                  S   R6                  (       aS  [%        UR                  S   S5      (       a5  UR                  S   U-  n[        R:                  " UR                  SS  5      nUU " UTUT4UU4:g  S9-  $ s  sn
f s  snf s  sn
f s  sn
f s  sn
f ! U a    [        R                  n GNpf = fs  sn
f )Nc                 ój  • UR                   (       a  [        S5      eU [        R                  L d1  U[        R                  L d  U R                  SL d  UR                  SL a  [        R                  $ U [        R
                  L d  XU* 4;   d  U R                  (       a  US:X  a  [        R
                  $ UR                  (       a]  U R                  (       a  X-  $ US:X  aB  U R                  (       a  [        R
                  $ U R                  (       a  [        R                  $ [        U S5      (       a  [        U S5      " U5      nUb  U$ X-  nUR                  (       a  [        R
                  $  [        U5      n[        U[        5      (       a  XU-  -
  nX!-  S:  S:X  a  X!-  nU$  UR                   (       a  ["        [$        peOUR&                  (       a  [(        [*        peOgS	U-  nX-
  n[-        S
5       H)  nU" Xp5      (       d    gU" X75      (       a  X-
  s  $ Xq-  nM+     g! [         a     N‰f = f)zUTry 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	            ÚK/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/core/mod.pyÚnumber_evalÚ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¨ r 7›l¨q¯|¯|ÀÀQÃÜ—v‘v�à�{�{Ø—;—;Ø™3�JØ˜“6Ø—y—yÜ Ÿv™v˜ØŸŸÜ Ÿu™u˜ä�q˜+×&Ñ&Ü˜Q Ô,¨QÓ/�Ø‘>Ø�Ið ‘ˆAØ�|�|Ü—v‘v�ð	Ü˜“F�ô ˜a¤×%Ñ%Ø˜q™S™�BØ™˜q™ TÓ)Ø™˜Ø�Ið	 &ð �}�}Ü$¤e‘uØ——Ü$¤e‘uàØ�A‘ˆBØ‘ˆAÜ˜1–X�Ù˜R—|‘|ÙÙ˜—<‘<Ø™6’MØ‘’ò øô' ó Ùðús   Å/H% È%
H2È1H2r   r   c              3   óF   >#   • U  H  oR                   S    T:H  v •  M     g7f©r   N©Úargs©Ú.0Úinnerr-   s     €r5   Ú	<genexpr>ÚMod.eval.<locals>.<genexpr>Œ   ó   øé € ÐCºU°EŸZ™Z¨™]¨aÖ/ºUùó   ƒ!c              3   óF   >#   • U  H  oR                   S    T:H  v •  M     g7fr9   r:   r<   s     €r5   r?   r@   –   rA   rB   c              3   ó8   #   • U  H  oR                   v •  M     g 7f©N©r   ©r=   Úts     r5   r?   r@   –   s   é € ÐKiÒbhÐ]^ÏLÎLÒbhùó   ‚c              3   ó8   #   • U  H  oR                   v •  M     g 7frE   rF   rG   s     r5   r?   r@   §   s   é € Ð4ªV¨—|–|ªVùrI   c              3   óD   #   • U  H  o[         R                  L v •  M     g 7frE   )r   r   )r=   Úiqs     r5   r?   r@   ©   s   é € Ð<²)¨B¤§¡�<²)ùs   ‚ )ÚPolynomialError)ÚgcdF)ÚclearÚfractionT)Úevaluate)r'   r;   Úis_nonnegativeÚis_nonpositiver   ÚappendÚallr	   r   Ú
is_Integerr   r#   Úanyr   Úsympy.polys.polyerrorsrM   Úsympy.polys.polytoolsrN   r
   r   Úis_AddÚcountÚlistÚas_coeff_MulÚis_Rationalr&   Úcould_extract_minus_signÚis_FloatÚis_MulÚ
_from_args)Úclsr,   r-   r6   r.   ÚqinnerÚboth_lÚ	non_mod_lÚmod_lÚargÚiÚnetÚxÚmodÚnon_modÚjÚprod_modÚprod_non_modÚ	prod_mod1rM   rN   ÚGÚpwasÚqwasr;   ÚaÚcpÚcqÚokr/   s     `                           r5   ÚevalÚMod.eval7   s€  ø€ ò8	ñt ˜˜AÓˆØ‰>ØˆIô �a×ÑØ—V‘V˜A‘YˆFØ˜‰z˜Q‹Ù˜1Ÿ6™6 !™9 aÓ(Ð(Ø˜!˜f™*Ñ%×5×5à�ñ 6ô ˜˜˜C× Ñ Ø�b—Y‘Y˜q‘\ˆFØ˜‰z˜Q‹Ù˜a˜RŸI™I a™L˜=¨!Ó,Ð,Ø˜!˜f™*Ñ%×5×5à�ñ 6ô ˜œ3×Ñà(*¨B¨Ð.ˆFÑ%�YØ—v”v�Ø”z #Ó+Ñ,×3Ñ3°CÖ8ñ ö œÔC¹UÓC×CÑCÜ˜9�o¬ÁÓ-GÂ¸A¯f©f°Q¬iÁÑ-GÐ(HÑH�Ù˜3 “{Ð"ùä˜œ3×Òà(*¨B¨Ð.ˆFÑ%�YØ—v”v�Ø”z #Ó+Ñ,×3Ñ3°CÖ8ñ ö œÔC¹UÓC×CÑCÌÑKiÐbc×bhÒbhÓKi×HiÑHiÐno×nz×nzá09Ó:²	¨1˜S  AžY±	�	Ð:Ø�Ø�Û"�AÜ! !×)Ñ)ØŸ
™
 1§6¡6¨!¡9Ö-àŸ™ qÖ)ñ	 #ô
  ˜9�Ü" G˜}�Ü±UÓ!;²U°§&¡&¨¤)±UÑ!;Ð<�	Ø Ñ(�Ø#¡C¨¨Q£KÑ/Ð/à�|�| ¬¯©¢ÜÑ4¨Q¯VªVÓ4×4Ñ4ØGHÇvÂvÓ NÂvÀ!¯,¯,  Q¢¸AÒ!=Áv�IÐ NÜÑ<±)Ó<×<Ñ<Ü Ÿv™v˜ä�iÑ'Ð)ˆAõ 	;Ý-ð	Ù�A�q“	ˆAÜ  1×%Ñ%à"# Q¡ó)Ú!'˜Aô " ! 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Ñ,HØ$% q¨!¡9Ó-¢9˜a“r¡9Ñ-‰GˆAˆq�!ñ ˜˜AÓˆØ‰>Ø�a‘4ˆKð �:�:œ, q¨!×,Ñ,Ø�‰FˆAÙ�q˜! eÑ,Ð,Ø�X�X˜!Ÿ&™& ™)×,×,´¸a¿f¹fÀQ¹iÈ×1KÑ1KØ—‘�q‘	˜!‘ˆAÜ—’˜qŸv™v a b˜zÓ*ˆAØ‘�Q˜ Q¨ F¨t°T¨lÑ$:Ñ;Ñ;Ð;ùò} .Hùò ;ùò "<ùò !Oùò)øàó 	Ü—‘‹Að	üòH .sB   ÅW.
ÈW3ÊW8Ì!W=Í2 X ÎXÎ*X ÔX$ØX ØX!Ø X!c                 ó–   • U R                   u  p[        UR                  UR                  [        UR                  5      /5      (       a  gg )NT)r;   r   r   r   r   )Úselfr,   r-   s      r5   Ú_eval_is_integerÚMod._eval_is_integerí   s9   € Ø�y‰y‰ˆÜ�a—l‘l A§L¡L´)¸A¿I¹IÓ2FÐG×HÑHØð Ió    c                 óB   • U R                   S   R                  (       a  gg ©Nr   T)r;   r)   ©r|   s    r5   Ú_eval_is_nonnegativeÚMod._eval_is_nonnegativeò   ó   € Ø�9‰9�Q‰<×#×#Øð $r   c                 óB   • U R                   S   R                  (       a  gg r�   )r;   r*   r‚   s    r5   Ú_eval_is_nonpositiveÚMod._eval_is_nonpositiveö   r…   r   c                 ó,   • SSK Jn  XU" X-  5      -  -
  $ )Nr   ©Úfloor)Ú#sympy.functions.elementary.integersr‹   )r|   ru   ÚbÚkwargsr‹   s        r5   Ú_eval_rewrite_as_floorÚMod._eval_rewrite_as_floorú   s   € Ý=Ø‘U˜1™3“Z‘<ÑÐr   c                 óL   • SSK Jn  U R                  U5      R                  XUS9$ ©Nr   rŠ   )ÚlogxÚcdir)rŒ   r‹   ÚrewriteÚ_eval_as_leading_term)r|   rk   r“   r”   r‹   s        r5   r–   ÚMod._eval_as_leading_termþ   s$   € Ý=Ø�|‰|˜EÓ"×8Ñ8¸ÈDÐ8ÐQÐQr   c                 óL   • SSK Jn  U R                  U5      R                  XX4S9$ r’   )rŒ   r‹   r•   Ú_eval_nseries)r|   rk   Únr“   r”   r‹   s         r5   r™   ÚMod._eval_nseries  s$   € Ý=Ø�|‰|˜EÓ"×0Ñ0°¸DÐ0ÐLÐLr   © N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚkindÚclassmethodry   r}   rƒ   r‡   r�   r–   r™   Ú__static_attributes__rœ   r   r5   r   r      sD   † ñ&ðP €Dàñs<ó ðs<òjò
òò òR÷Mr   r   N)Úaddr   Ú	exprtoolsr   Úfunctionr   r¢   r   Úlogicr   r   Úmulr	   Únumbersr
   Ú
relationalr   r   r   r   Ú	singletonr   r   rœ   r   r5   Ú<module>r­      s3   ðÝ Ý  Ý %Ý ß 'Ý Ý !ß 2Ó 2Ý ôxMˆ/õ xMr   