§
    OŠtj«   ã                   óž   — 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dS )é   )ÚAdd©Ú	gcd_terms)ÚDefinedFunction)Ú
NumberKind)Ú	fuzzy_andÚ	fuzzy_not)ÚMul)Úequal_valued)Úis_leÚis_ltÚis_geÚis_gt)ÚSc                   óR   — e Zd ZdZeZed„ ¦   «         Zd„ Zd„ Z	d„ Z
d„ Zd„ Zdd	„Zd
S )Ú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          |‰ ¦  «        r>|j        d         }|‰z  dk    r ‰ |j        d         ‰¦  «        S |‰|z
  z  j        r|S �n�t          | ‰ ¦  «        rA| j        d         }|‰z  dk    r ‰ | j        d          ‰¦  «        S |‰|z   z  j        r|S �n;t          |t          ¦  «        r„g g fx}\  }}|j        D ]+}	|t          |	‰ ¦  «                                      |	¦  «         Œ,|rDt          ˆfd„|D ¦   «         ¦  «        r)t	          |Ž t	          d„ |D ¦   «         Ž z   }
 ‰ |
‰¦  «        S �n¢t          |t          ¦  «        �rŒg g fx}\  }}|j        D ]+}	|t          |	‰ ¦  «                                      |	¦  «         Œ,|r×t          ˆfd„|D ¦   «         ¦  «        r¼t          d„ |j        D ¦   «         ¦  «        rž‰j        r—ˆ ˆfd„|D ¦   «         }g }g }|D ]H}t          |‰ ¦  «        r!|                     |j        d         ¦  «         Œ3|                     |¦  «         ŒIt          |Ž }t          |Ž }t          d	„ |D ¦   «         Ž }||z  }
| ‰ |
‰¦  «        z  S ‰j	        rd‰t          j        urVt          d
„ |j        D ¦   «         ¦  «        r8ˆfd„|j        D ¦   «         }t          d„ |D ¦   «         ¦  «        rt          j        S t          ||z   Ž }ddlm} ddlm} 	  ||‰¦  «        Št%          ‰d¦  «        sˆfd„|‰fD ¦   «         \  }Šn# |$ r t          j        ŠY nw xY w|‰}}|j        r‘g }|j        D ]e} ‰ |‰¦  «        }|                     ‰ ¦  «        |                     ‰ ¦  «        k    r|                     |¦  «         ŒP|                     |¦  «         Œf|t+          |j        ¦  «        k    r	t	          |Ž }n{|                     ¦   «         \  }}‰                     ¦   «         \  }Šd}|j        r|j        s1||z  }t%          |d¦  «        r‰|z  Š|t1          ||z  ¦  «        z  }d}|s
||z  }|‰z  Š|                     ¦   «         r'‰                     ¦   «         rd„ ‰|‰fD ¦   «         \  Š}Š ||‰¦  «        }|�|‰z  S ‰j        r#t%          ‰d¦  «        r|‰z  } ‰ |‰d¬¦  «        S ‰j        r^‰j        d         j        rLt%          ‰j        d         d¦  «        r1‰j        d         |z  }t          j        ‰j        dd …         ¦  «        Š‰ ‰ |‰|‰f||fk    ¬¦  «        z  S )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        r8| j        r| |z  S |dk    r&| 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 n# t          $ r Y nw xY w|j        rt"          t$          }}n|j        rt(          t*          }}ndS d	|z  }| |z
  }t-          d
¦  «        D ])} ||| ¦  «        s dS  |||¦  «        r| |z
  c S ||z  }Œ*dS )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/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/core/mod.pyÚnumber_evalzMod.eval.<locals>.number_eval9   s7  € ð
 Œyð :Ý'Ð(8Ñ9Ô9Ð9Ø•A”Eˆzˆz˜Q¥!¤%˜Z˜Z¨1¬;¸%Ð+?Ð+?À1Ä;ÐRWÐCWÐCWÝ”u�Ø•A”Fˆ{ˆ{˜a A¨ r 7˜l˜l¨q¬|˜lÀÀQÂÀÝ”v�àŒ{ð %Ø”;ð Ø˜Q™3�JØ˜’6�6Ø”yð %Ý œv˜Øœð %Ý œu˜å�q˜+Ñ&Ô&ð Ø,•W˜Q Ñ,Ô,¨QÑ/Ô/�Ø�>Ø�Ið �!‘ˆAØŒ|ð Ý”v�ð	Ý˜‘F”F�õ ˜a¥Ñ%Ô%ð Ø˜Q˜q™S™�BØ˜1™˜qš TÒ)Ð)Ø˜a™˜Ø�Ið	øõ ð ð ð Ø�ðøøøð Œ}ð Ý$¥e�u��Ø”ð Ý$¥e�u��à�Ø�A‘ˆBØ�A‘ˆAÝ˜1‘X”Xð ð �Ø�u˜R ‘|”|ð Ø�F�FØ�5˜˜B‘<”<ð "Ø˜r™6�M�M�MØ�a‘��ðð s   ÄE Å
EÅEr   r   c              3   ó:   •K  — | ]}|j         d          ‰k    V — ŒdS ©r   N©Úargs©Ú.0Úinnerr-   s     €r5   ú	<genexpr>zMod.eval.<locals>.<genexpr>Œ   ó.   øè è € ÐCÐC°E˜UœZ¨œ]¨aÒ/ÐCÐCÐCÐCÐCÐCó    c                 ó(   — g | ]}|j         d          ‘ŒS ©r   r9   ©r<   Úis     r5   ú
<listcomp>zMod.eval.<locals>.<listcomp>�   s   € Ð-GÐ-GÐ-G¸A¨a¬f°Q¬iÐ-GÐ-GÐ-Gr@   c              3   ó:   •K  — | ]}|j         d          ‰k    V — ŒdS r8   r9   r;   s     €r5   r>   zMod.eval.<locals>.<genexpr>–   r?   r@   c              3   ó$   K  — | ]}|j         V — Œd S ©N©r   ©r<   Úts     r5   r>   zMod.eval.<locals>.<genexpr>–   s%   è è € ÐKiÐKiÐ]^ÈAÌLÐKiÐKiÐKiÐKiÐKiÐKir@   c                 ó(   •— g | ]} ‰|‰¦  «        ‘ŒS © rM   )r<   ÚxÚclsr-   s     €€r5   rE   zMod.eval.<locals>.<listcomp>˜   s#   ø€ Ð:Ð:Ð:¨1˜S˜S  A™YœYÐ:Ð:Ð:r@   c                 ó(   — g | ]}|j         d          ‘ŒS rB   r9   rC   s     r5   rE   zMod.eval.<locals>.<listcomp>¢   s   € Ð!;Ð!;Ð!;° !¤&¨¤)Ð!;Ð!;Ð!;r@   c              3   ó$   K  — | ]}|j         V — Œd S rH   rI   rJ   s     r5   r>   zMod.eval.<locals>.<genexpr>§   s$   è è € Ð4Ð4¨�q”|Ð4Ð4Ð4Ð4Ð4Ð4r@   c                 ó,   •— g | ]}|j         r|‰z  n|‘ŒS rM   )Ú
is_Integer)r<   rD   r-   s     €r5   rE   zMod.eval.<locals>.<listcomp>¨   s(   ø€ Ð NÐ NÐ NÀ!¨!¬,Ð!=  Q¡ ¸AÐ NÐ NÐ Nr@   c              3   ó2   K  — | ]}|t           j        u V — Œd S rH   )r   r   )r<   Úiqs     r5   r>   zMod.eval.<locals>.<genexpr>©   s(   è è € Ð<Ð<¨B˜2¥¤˜<Ð<Ð<Ð<Ð<Ð<Ð<r@   )ÚPolynomialError)Úgcdc                 ó:   •— g | ]}t          |‰z  d d ¬¦  «        ‘ŒS )F)ÚclearÚfractionr   )r<   rD   ÚGs     €r5   rE   zMod.eval.<locals>.<listcomp>·   s<   ø€ ð )ð )ð )Øõ " ! A¡#¨U¸UÐCÑCÔCð )ð )ð )r@   FTc                 ó   — g | ]}| ‘ŒS rM   rM   rC   s     r5   rE   zMod.eval.<locals>.<listcomp>Ý   s   € Ð-Ð-Ð-˜a˜�rÐ-Ð-Ð-r@   )Úevaluate)r'   r:   Úis_nonnegativeÚis_nonpositiver   ÚappendÚallr
   r   rS   r   r#   Úanyr   Úsympy.polys.polyerrorsrV   Úsympy.polys.polytoolsrW   r   Úis_AddÚcountÚlistÚas_coeff_MulÚis_Rationalr&   Úcould_extract_minus_signÚis_FloatÚis_MulÚ
_from_args)rO   r,   r-   r6   r.   ÚqinnerÚboth_lÚ	non_mod_lÚmod_lÚargÚnetÚmodÚnon_modÚjÚprod_modÚprod_non_modÚ	prod_mod1rV   rW   ÚpwasÚqwasr:   rD   ÚaÚcpÚcqÚokr/   r[   s   ` `                         @r5   ÚevalzMod.eval7   s¯  øøø€ ð8	ð 8	ð 8	ðt ˆ[˜˜AÑÔˆØˆ>ØˆIõ �a˜ÑÔð 4	*Ø”V˜A”YˆFØ˜‰z˜QŠˆØ�s˜1œ6 !œ9 aÑ(Ô(Ð(Ø˜!˜f™*Ñ%Ô5ð à�ñõ ˜˜˜CÑ Ô ð -	*Ø�b”Y˜q”\ˆFØ˜‰z˜QŠˆØ�s˜a˜RœI aœL˜=¨!Ñ,Ô,Ð,Ø˜!˜f™*Ñ%Ô5ð à�ñõ ˜�3ÑÔð &	*à(*¨B¨Ð.ˆFÑ%�Y Ø”vð 9ð 9�Ø•z # sÑ+Ô+Ô,×3Ò3°CÑ8Ô8Ð8Ð8àð #�ÐCÐCÐCÐC¸UÐCÑCÔCÑCÔCð #Ý˜9�o­Ð-GÐ-GÀÐ-GÑ-GÔ-GÐ(HÑH�Ø�s˜3 ‘{”{Ð"ùå˜�3ÑÔñ 	*à(*¨B¨Ð.ˆFÑ%�Y Ø”vð 9ð 9�Ø•z # sÑ+Ô+Ô,×3Ò3°CÑ8Ô8Ð8Ð8àð 0�ÐCÐCÐCÐC¸UÐCÑCÔCÑCÔCð 0ÍÐKiÐKiÐbcÔbhÐKiÑKiÔKiÑHiÔHið 0ÐnoÔnzð 0à:Ð:Ð:Ð:Ð:°	Ð:Ñ:Ô:�	Ø�Ø�Ø"ð *ð *�AÝ! ! SÑ)Ô)ð *ØŸ
š
 1¤6¨!¤9Ñ-Ô-Ð-Ð-àŸš qÑ)Ô)Ð)Ð)Ý ˜9�Ý" G˜}�ÝÐ!;Ð!;°UÐ!;Ñ!;Ô!;Ð<�	Ø Ñ(�Ø# C C¨¨Q¡K¤KÑ/Ð/àŒ|ð & ­¬  ÝÐ4Ð4¨Q¬VÐ4Ñ4Ô4Ñ4Ô4ð &Ø NÐ NÐ NÐ NÀqÄvÐ NÑ NÔ N�IÝÐ<Ð<°)Ð<Ñ<Ô<Ñ<Ô<ð &Ý œv˜å�i %Ñ'Ð)ˆAð 	;Ð:Ð:Ð:Ð:Ð:Ø-Ð-Ð-Ð-Ð-Ð-ð	Ø��A�q‘	”	ˆAÝ  1Ñ%Ô%ð )ð)ð )ð )ð )Ø"# Q ð)ñ )ô )‘��1øøàð 	ð 	ð 	Ý”ˆAˆAˆAð	øøøà˜ˆdˆð Œ8ð 	ØˆDØ”Vð #ð #�Ø�C˜˜1‘I”I�Ø—7’7˜3‘<”< !§'¢'¨#¡,¤,Ò.Ð.Ø—K’K ‘N”N�N�Nà—K’K ‘N”N�N�NØ•t˜Aœ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ð 	.Ø-Ð- A q¨! 9Ð-Ñ-Ô-‰GˆAˆq�!ð ˆ[˜˜AÑÔˆØˆ>Ø�a‘4ˆKð Œ:ð 	+�, q¨!Ñ,Ô,ð 	+Ø�‰FˆAØ�3�q˜! eÐ,Ñ,Ô,Ð,ØŒXð 	+˜!œ& œ)Ô,ð 	+µ¸a¼fÀQ¼iÈÑ1KÔ1Kð 	+Ø”�q”	˜!‘ˆAÝ”˜qœv a b bœzÑ*Ô*ˆAØ���Q˜ Q¨ F¨t°T¨lÒ$:Ð;Ñ;Ô;Ñ;Ð;s   Ë?/L/ Ì/MÍMc                 óz   — | j         \  }}t          |j        |j        t          |j        ¦  «        g¦  «        rdS d S )NT)r:   r   r   r	   r   )Úselfr,   r-   s      r5   Ú_eval_is_integerzMod._eval_is_integerí   sA   € ØŒy‰ˆˆ1Ý�a”l A¤Lµ)¸A¼IÑ2FÔ2FÐGÑHÔHð 	Ø�4ð	ð 	r@   c                 ó.   — | j         d         j        rdS d S ©Nr   T)r:   r)   ©r‚   s    r5   Ú_eval_is_nonnegativezMod._eval_is_nonnegativeò   ó"   € ØŒ9�QŒ<Ô#ð 	Ø�4ð	ð 	r@   c                 ó.   — | j         d         j        rdS d S r…   )r:   r*   r†   s    r5   Ú_eval_is_nonpositivezMod._eval_is_nonpositiveö   rˆ   r@   c                 ó6   — ddl m} || |||z  ¦  «        z  z
  S )Nr   ©Úfloor)Ú#sympy.functions.elementary.integersr�   )r‚   r|   ÚbÚkwargsr�   s        r5   Ú_eval_rewrite_as_floorzMod._eval_rewrite_as_floorú   s/   € Ø=Ð=Ð=Ð=Ð=Ð=Ø�1�U�U˜1˜Q™3‘Z”Z‘<ÑÐr@   c                 ód   — ddl m} |                      |¦  «                             |||¬¦  «        S ©Nr   rŒ   )ÚlogxÚcdir)rŽ   r�   ÚrewriteÚ_eval_as_leading_term)r‚   rN   r”   r•   r�   s        r5   r—   zMod._eval_as_leading_termþ   s;   € Ø=Ð=Ð=Ð=Ð=Ð=Ø�|Š|˜EÑ"Ô"×8Ò8¸ÀÈDÐ8ÑQÔQÐQr@   r   c                 óf   — ddl m} |                      |¦  «                             ||||¬¦  «        S r“   )rŽ   r�   r–   Ú_eval_nseries)r‚   rN   Únr”   r•   r�   s         r5   r™   zMod._eval_nseries  s=   € Ø=Ð=Ð=Ð=Ð=Ð=Ø�|Š|˜EÑ"Ô"×0Ò0°°A¸DÀtÐ0ÑLÔLÐLr@   NrB   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚkindÚclassmethodr€   rƒ   r‡   rŠ   r‘   r—   r™   rM   r@   r5   r   r      s«   € € € € € ð&ð &ðP €Dàðs<ð s<ñ „[ðs<ðjð ð ð
ð ð ðð ð ð ð  ð  ðRð Rð RðMð Mð Mð Mð Mð Mr@   r   N)Úaddr   Ú	exprtoolsr   Úfunctionr   rŸ   r   Úlogicr   r	   Úmulr
   Únumbersr   Ú
relationalr   r   r   r   Ú	singletonr   r   rM   r@   r5   ú<module>r©      s  ðØ Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð ðxMð xMð xMð xMð xMˆ/ñ xMô xMð xMð xMð xMr@   