ó
    ˆ*£hÝ0  ã                   ó  • S r SSKJrJrJr  SSKJrJr  SSKJ	r	J
r
JrJrJrJr  SSKJr  SSKJrJrJrJr  SSKJrJrJrJrJrJr   " S S	5      r " S
 S5      r " S S5      rSS jrS r  " S S5      r! " S S5      r"g)a  
The classes used here are for the internal use of assumptions system
only and should not be used anywhere else as these do not possess the
signatures common to SymPy objects. For general use of logic constructs
please refer to sympy.logic classes And, Or, Not, etc.
é    )ÚcombinationsÚproductÚzip_longest)ÚAppliedPredicateÚ	Predicate)ÚEqÚNeÚGtÚLtÚGeÚLe)ÚS)ÚOrÚAndÚNotÚXnor)Ú
EquivalentÚITEÚImpliesÚNandÚNorÚXorc                   ób   ^ • \ rS rSrSrSU 4S jjr\S 5       rS rS r	S r
\
rS rS	 rS
rU =r$ )ÚLiteralé   a?  
The smallest element of a CNF object.

Parameters
==========

lit : Boolean expression

is_Not : bool

Examples
========

>>> from sympy import Q
>>> from sympy.assumptions.cnf import Literal
>>> from sympy.abc import x
>>> Literal(Q.even(x))
Literal(Q.even(x), False)
>>> Literal(~Q.even(x))
Literal(Q.even(x), True)
c                 óä   >• [        U[        5      (       a  UR                  S   nSnO,[        U[        [        [
        45      (       a  U(       a  U) $ U$ [        TU ]  U 5      nXl        X#l	        U$ )Nr   T)
Ú
isinstancer   ÚargsÚANDÚORr   ÚsuperÚ__new__ÚlitÚis_Not)Úclsr#   r$   ÚobjÚ	__class__s       €ÚR/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/assumptions/cnf.pyr"   ÚLiteral.__new__&   sb   ø€ Ü�cœ3×ÑØ—(‘(˜1‘+ˆCØ‰FÜ˜œc¤2¤wÐ/×0Ñ0Þ!�C�4Ð* sÐ*Ü‰g‰o˜cÓ"ˆØŒØŒ
Øˆ
ó    c                 ó   • U R                   $ ©N)r#   ©Úselfs    r(   ÚargÚLiteral.arg1   s   € à�x‰xˆr*   c                 óÆ   • [        U R                  5      (       a  U R                  U5      nOU R                  R                  U5      n[        U 5      " X R                  5      $ r,   )Úcallabler#   ÚapplyÚtyper$   )r.   Úexprr#   s      r(   ÚrcallÚLiteral.rcall5   sC   € Ü�D—H‘H×ÑØ—(‘(˜4“.‰Cà—(‘(—.‘. Ó&ˆCÜ�DŒz˜#Ÿ{™{Ó+Ð+r*   c                 óP   • U R                   (       + n[        U R                  U5      $ r,   )r$   r   r#   )r.   r$   s     r(   Ú
__invert__ÚLiteral.__invert__<   s   € Ø—[‘[”ˆÜ�t—x‘x Ó(Ð(r*   c                 óv   • SR                  [        U 5      R                  U R                  U R                  5      $ )Nz
{}({}, {}))Úformatr4   Ú__name__r#   r$   r-   s    r(   Ú__str__ÚLiteral.__str__@   s)   € Ø×"Ñ"¤4¨£:×#6Ñ#6¸¿¹À$Ç+Á+ÓNÐNr*   c                 ót   • U R                   UR                   :H  =(       a    U R                  UR                  :H  $ r,   )r/   r$   ©r.   Úothers     r(   Ú__eq__ÚLiteral.__eq__E   s'   € Ø�x‰x˜5Ÿ9™9Ñ$×D¨¯©¸¿¹Ñ)DÐDr*   c                 óp   • [        [        U 5      R                  U R                  U R                  45      nU$ r,   )Úhashr4   r=   r/   r$   )r.   Úhs     r(   Ú__hash__ÚLiteral.__hash__H   s*   € Ü”$�t“*×%Ñ% t§x¡x°·±Ð=Ó>ˆØˆr*   © )F)r=   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r"   Úpropertyr/   r6   r9   r>   Ú__repr__rC   rH   Ú__static_attributes__Ú__classcell__)r'   s   @r(   r   r      sH   ø† ñ÷,	ð ñó ðò,ò)òOð €HòE÷ð r*   r   c                   óP   • \ rS rSrSrS r\S 5       rS rS r	S r
S rS	 r\rS
rg)r    éM   z#
A low-level implementation for Or
c                 ó   • Xl         g r,   ©Ú_args©r.   r   s     r(   Ú__init__ÚOR.__init__Q   ó   € Ø�
r*   c                 ó2   • [        U R                  [        S9$ ©N)Úkey©ÚsortedrW   Ústrr-   s    r(   r   ÚOR.argsT   ó   € ä�d—j‘j¤cÑ*Ð*r*   c                 ó|   • [        U 5      " U R                   Vs/ s H  nUR                  U5      PM     sn6 $ s  snf r,   ©r4   rW   r6   ©r.   r5   r/   s      r(   r6   ÚOR.rcallX   ó?   € Ü�DŒzØ'+§z¢zóÚ'1 ð  ŸI™I džOÙ'1ñð ð 	ùò ó   š9c                 óR   • [        U R                   Vs/ s H  o) PM     sn6 $ s  snf r,   )r   rW   ©r.   r/   s     r(   r9   ÚOR.__invert__]   s#   € Ü T§Z¢ZÓ0¢Z˜c“T¡ZÑ0Ð1Ð1ùÒ0ó   ”$c                 ól   • [        [        U 5      R                  4[        U R                  5      -   5      $ r,   ©rF   r4   r=   Útupler   r-   s    r(   rH   ÚOR.__hash__`   ó(   € Ü”T˜$“Z×(Ñ(Ð*¬U°4·9±9Ó-=Ñ=Ó>Ð>r*   c                 ó4   • U R                   UR                   :H  $ r,   ©r   rA   s     r(   rC   Ú	OR.__eq__c   ó   € Ø�y‰y˜EŸJ™JÑ&Ð&r*   c           	      ó†   • SSR                  U R                   Vs/ s H  n[        U5      PM     sn5      -   S-   nU$ s  snf )NÚ(ú | Ú)©Újoinr   ra   ©r.   r/   Úss      r(   r>   Ú
OR.__str__f   s;   € Ø�%—*‘*°$·)²)Ó<²)¨3œc #žh±)Ñ<Ó=Ñ=ÀÑCˆØˆùò =ó   ›>
rV   N)r=   rK   rL   rM   rN   rY   rO   r   r6   r9   rH   rC   r>   rP   rQ   rJ   r*   r(   r    r    M   s@   † ñòð ñ+ó ð+òò
2ò?ò'òð ƒHr*   r    c                   óP   • \ rS rSrSrS rS r\S 5       rS r	S r
S rS	 r\rS
rg)r   ém   z$
A low-level implementation for And
c                 ó   • Xl         g r,   rV   rX   s     r(   rY   ÚAND.__init__q   r[   r*   c                 óR   • [        U R                   Vs/ s H  o) PM     sn6 $ s  snf r,   )r    rW   rk   s     r(   r9   ÚAND.__invert__t   s#   € Ü D§J¢JÓ/¢J˜S“D¡JÑ/Ð0Ð0ùÒ/rm   c                 ó2   • [        U R                  [        S9$ r]   r_   r-   s    r(   r   ÚAND.argsw   rc   r*   c                 ó|   • [        U 5      " U R                   Vs/ s H  nUR                  U5      PM     sn6 $ s  snf r,   re   rf   s      r(   r6   Ú	AND.rcall{   rh   ri   c                 ól   • [        [        U 5      R                  4[        U R                  5      -   5      $ r,   ro   r-   s    r(   rH   ÚAND.__hash__€   rr   r*   c                 ó4   • U R                   UR                   :H  $ r,   rt   rA   s     r(   rC   Ú
AND.__eq__ƒ   rv   r*   c           	      ó†   • SSR                  U R                   Vs/ s H  n[        U5      PM     sn5      -   S-   nU$ s  snf )Nrx   ú & rz   r{   r}   s      r(   r>   ÚAND.__str__†   s;   € Ø�—
‘
°·	²	Ó:²	¨œC žH±	Ñ:Ó;Ñ;¸CÑ?ˆØˆùò ;r€   rV   N)r=   rK   rL   rM   rN   rY   r9   rO   r   r6   rH   rC   r>   rP   rQ   rJ   r*   r(   r   r   m   s@   † ñòò1ð ñ+ó ð+òò
?ò'òð ƒHr*   r   Nc                 óÒ
  • SSK Jn  Uc  0 n[        UR                  [        UR
                  [        UR                  [        UR                  [        UR                  [        UR                  0n[        U 5      U;   a  U[        U 5         nU" U R                  6 n [!        U ["        5      (       a  U R                  S   n[%        XQ5      nU) $ [!        U [&        5      (       a6  [)        [&        R*                  " U 5       Vs/ s H  n[%        Xq5      PM     sn6 $ [!        U [,        5      (       a6  [/        [,        R*                  " U 5       Vs/ s H  n[%        Xq5      PM     sn6 $ [!        U [0        5      (       a/  [/        U R                   Vs/ s H  n[%        Xq5      PM     sn6 nU) $ [!        U [2        5      (       a/  [)        U R                   Vs/ s H  n[%        Xq5      PM     sn6 nU) $ [!        U [4        5      (       až  / n[7        S[9        U R                  5      S-   S5       Hm  n	[;        U R                  U	5       HP  n
U R                   Vs/ s H  nXº;   a  [%        X±5      ) O
[%        X±5      PM!     nnUR=                  [)        U6 5        MR     Mo     [/        U6 $ [!        U [>        5      (       aŸ  / n[7        S[9        U R                  5      S-   S5       Hm  n	[;        U R                  U	5       HP  n
U R                   Vs/ s H  nXº;   a  [%        X±5      ) O
[%        X±5      PM!     nnUR=                  [)        U6 5        MR     Mo     [/        U6 ) $ [!        U [@        5      (       a>  [%        U R                  S   U5      [%        U R                  S   U5      pí[)        U) U5      $ [!        U [B        5      (       av  / n[E        U R                  U R                  SS U R                  S   S9 H9  u  nn[%        Xñ5      n[%        UU5      nUR=                  [)        U) U5      5        M;     [/        U6 $ [!        U [F        5      (       ak  [%        U R                  S   U5      n[%        U R                  S   U5      n[%        U R                  S   U5      n[/        [)        U) U5      [)        XÞ5      5      $ [!        U [H        5      (       aF  U RJ                  U RL                  nnURO                  US5      nUb  [%        URP                  " U6 U5      $ [!        U [R        5      (       a!  URO                  U S5      nUb  [%        UU5      $ [U        U 5      $ s  snf s  snf s  snf s  snf s  snf s  snf )a6  
Generates the Negation Normal Form of any boolean expression in terms
of AND, OR, and Literal objects.

Examples
========

>>> from sympy import Q, Eq
>>> from sympy.assumptions.cnf import to_NNF
>>> from sympy.abc import x, y
>>> expr = Q.even(x) & ~Q.positive(x)
>>> to_NNF(expr)
(Literal(Q.even(x), False) & Literal(Q.positive(x), True))

Supported boolean objects are converted to corresponding predicates.

>>> to_NNF(Eq(x, y))
Literal(Q.eq(x, y), False)

If ``composite_map`` argument is given, ``to_NNF`` decomposes the
specified predicate into a combination of primitive predicates.

>>> cmap = {Q.nonpositive: Q.negative | Q.zero}
>>> to_NNF(Q.nonpositive, cmap)
(Literal(Q.negative, False) | Literal(Q.zero, False))
>>> to_NNF(Q.nonpositive(x), cmap)
(Literal(Q.negative(x), False) | Literal(Q.zero(x), False))
r   )ÚQNé   é   )Ú	fillvalue)+Úsympy.assumptions.askr“   r   Úeqr	   Úner
   Úgtr   Últr   Úger   Úler4   r   r   r   Úto_NNFr   r    Ú	make_argsr   r   r   r   r   ÚrangeÚlenr   Úappendr   r   r   r   r   r   ÚfunctionÚ	argumentsÚgetr6   r   r   )r5   Úcomposite_mapr“   ÚbinrelpredsÚpredr/   ÚtmpÚxÚcnfsÚiÚnegr~   ÚclauseÚLÚRÚaÚbÚMr   Únewpreds                       r(   rž   rž   �   sw  € õ: (àÑØˆô �q—t‘tœR §¡¤r¨1¯4©4´°Q·T±T¼2¸q¿t¹tÄRÈÏÉÐN€KÜˆDƒz�[Ó Øœ4 ›:Ñ&ˆÙ�T—Y‘YÐˆä�$œ×ÑØ�i‰i˜‰lˆÜ�SÓ(ˆØˆtˆä�$œ×ÑÜ´b·l²lÀ4Ô6HÓIÒ6H°”F˜1Ö,Ñ6HÑIÐJÐJä�$œ×ÑÜ´s·}²}ÀTÔ7JÓKÒ7J°!”V˜AÖ-Ñ7JÑKÐLÐLä�$œ×ÑÜ°d·i²iÓ@²i°”F˜1Ö,±iÑ@ÐAˆØˆtˆä�$œ×ÑÜ°T·Y²YÓ?²Y°”6˜!Ö+±YÑ?Ð@ˆØˆtˆä�$œ×ÑØˆÜ�qœ#˜dŸi™i›.¨1Ñ,¨aÖ0ˆAÜ# D§I¡I¨qÖ1�à#'§9¢9ó.Ú#,˜að 89³xœ6 !Ó3Ñ3ÄVÈAÓE]Ò]Ù#,ð ð .à—‘œB ˜KÖ(ó 2ñ 1ô
 �DˆzÐä�$œ×ÑØˆÜ�qœ#˜dŸi™i›.¨1Ñ,¨aÖ0ˆAÜ# D§I¡I¨qÖ1�à#'§9¢9ó.Ú#,˜að 89³xœ6 !Ó3Ñ3ÄVÈAÓE]Ò]Ù#,ð ð .à—‘œB ˜KÖ(ó 2ñ 1ô
 �T�
ˆ{Ðä�$œ× Ñ Ü�d—i‘i ‘l MÓ2´F¸4¿9¹9ÀQ¹<ÈÓ4Wˆ1Ü�1�"�a‹yÐä�$œ
×#Ñ#ØˆÜ §	¡	¨4¯9©9°Q°R¨=ÀDÇIÁIÈaÁLÔQ‰DˆAˆqÜ�qÓ(ˆAÜ�q˜-Ó(ˆAØ�K‰Kœ˜A˜2˜q›	Ö"ñ Rô �DˆzÐä�$œ×ÑÜ�4—9‘9˜Q‘< Ó/ˆÜ�4—9‘9˜Q‘< Ó/ˆÜ�4—9‘9˜Q‘< Ó/ˆÜ”2�q�b˜!“9œb ›hÓ'Ð'ä�$Ô(×)Ñ)Ø—]‘] D§N¡NˆdˆØ×#Ñ# D¨$Ó/ˆØÑÜ˜'Ÿ-š-¨Ð.°Ó>Ð>ä�$œ	×"Ñ"Ø×#Ñ# D¨$Ó/ˆØÑÜ˜' =Ó1Ð1ä�4‹=Ðùòy Jùò Lùò Aùò @ùò.ùò.s$   Ã>UÅ	UÆ
UÇUÉ&UÌ&U$c                 óÞ  • [        U [        [        45      (       d0  [        5       nUR	                  [        U 45      5        [        U5      $ [        U [        5      (       a7  [        R                  " U R                   Vs/ s H  n[        U5      PM     sn6 $ [        U [        5      (       a7  [        R                  " U R                   Vs/ s H  n[        U5      PM     sn6 $ gs  snf s  snf )z|
Distributes AND over OR in the NNF expression.
Returns the result( Conjunctive Normal Form of expression)
as a CNF object.
N)r   r   r    ÚsetÚaddÚ	frozensetÚCNFÚall_orrW   Údistribute_AND_over_ORÚall_and)r5   r©   r/   s      r(   r»   r»   ú   sÍ   € ô �dœS¤"˜I×&Ñ&Ü‹eˆØ�‰”	˜4˜'Ó"Ô#Ü�3‹xˆä�$œ×ÑÜ�zŠzØ'+§z¢zó3Ú'1 ô 3°3Ö7Ù'1ñ3ð 4ð 	4ô �$œ×ÑÜ�{Š{Ø(,¯
ª
ó4Ú(2 ô 4°CÖ8Ù(2ñ4ð 5ð 	5ð ùò3ùò4s   Á?C%ÃC*c                   ó´   • \ rS rSrSrSS jrS rS rS rS r	S	 r
\S
 5       rS rS rS rS rS rS r\S 5       r\S 5       r\S 5       r\S 5       rSrg)r¹   i  aÊ  
Class to represent CNF of a Boolean expression.
Consists of set of clauses, which themselves are stored as
frozenset of Literal objects.

Examples
========

>>> from sympy import Q
>>> from sympy.assumptions.cnf import CNF
>>> from sympy.abc import x
>>> cnf = CNF.from_prop(Q.real(x) & ~Q.zero(x))
>>> cnf.clauses
{frozenset({Literal(Q.zero(x), True)}),
frozenset({Literal(Q.negative(x), False),
Literal(Q.positive(x), False), Literal(Q.zero(x), False)})}
Nc                 ó2   • U(       d
  [        5       nXl        g r,   )r¶   Úclauses©r.   r¿   s     r(   rY   ÚCNF.__init__   s   € ÞÜ“eˆGØ�r*   c                 ód   • [         R                  U5      R                  nU R                  U5        g r,   )r¹   Úto_CNFr¿   Úadd_clauses)r.   Úpropr¿   s      r(   r·   ÚCNF.add%  s$   € Ü—*‘*˜TÓ"×*Ñ*ˆØ×Ñ˜Õ!r*   c                 óÖ   • SR                  U R                   VVs/ s H4  nSSR                  U Vs/ s H  n[        U5      PM     sn5      -   S-   PM6     snn5      nU$ s  snf s  snnf )Nr�   rx   ry   rz   )r|   r¿   ra   )r.   r®   r#   r~   s       r(   r>   ÚCNF.__str__)  sf   € Ø�J‰JàŸ,š,ô(Ú&�ð �5—:‘:±6Ó:²6¨Cœs 3žx±6Ñ:Ó;Ñ;¸SÔ@Ù&ò(ó
ˆð ˆùò ;ùó (s   ›A%
±A ÁA%
Á A%
c                 ó:   • U H  nU R                  U5        M     U $ r,   ©r·   )r.   ÚpropsÚps      r(   ÚextendÚ
CNF.extend0  s   € ÛˆAØ�H‰H�QŽKñ àˆr*   c                 ó>   • [        [        U R                  5      5      $ r,   )r¹   r¶   r¿   r-   s    r(   ÚcopyÚCNF.copy5  s   € Ü”3�t—|‘|Ó$Ó%Ð%r*   c                 ó.   • U =R                   U-  sl         g r,   ©r¿   rÀ   s     r(   rÄ   ÚCNF.add_clauses8  s   € Ø�Š˜ÑŽr*   c                 ó6   • U " 5       nUR                  U5        U$ r,   rÊ   )r%   rÅ   Úress      r(   Ú	from_propÚCNF.from_prop;  s   € á‹eˆØ�‰�ŒØˆ
r*   c                 ó<   • U R                  UR                  5        U $ r,   )rÄ   r¿   rA   s     r(   Ú__iand__ÚCNF.__iand__A  s   € Ø×Ñ˜Ÿ™Ô'Øˆr*   c                 ó†   • [        5       nU R                   H!  nX Vs1 s H  o3R                  iM     sn-  nM#     U$ s  snf r,   )r¶   r¿   r#   )r.   Ú
predicatesÚcr/   s       r(   Úall_predicatesÚCNF.all_predicatesE  s=   € Ü“Uˆ
Ø—”ˆAØ¨aÓ0ªa sŸ7œ7©aÑ0Ñ0ŠJñ àÐùò 1s   ž>c                 óê   • [        5       n[        U R                  UR                  5       H;  u  p4[        U5      nUR                  U5        UR	                  [        U5      5        M=     [        U5      $ r,   )r¶   r   r¿   Úupdater·   r¸   r¹   )r.   Úcnfr¿   r±   r²   r©   s         r(   Ú_orÚCNF._orK  sT   € Ü“%ˆÜ˜DŸL™L¨#¯+©+Ö6‰DˆAÜ�a“&ˆCØ�J‰J�qŒMØ�K‰Kœ	 #›Ö'ñ 7ô �7‹|Ðr*   c                 ób   • U R                   R                  UR                   5      n[        U5      $ r,   )r¿   Úunionr¹   )r.   rã   r¿   s      r(   Ú_andÚCNF._andS  s$   € Ø—,‘,×$Ñ$ S§[¡[Ó1ˆÜ�7‹|Ðr*   c                 ó   • [        U R                  5      nUS    Vs1 s H  n[        U) 45      iM     nn[        U5      nUS S  H:  nU Vs1 s H  n[        U) 45      iM     nnUR	                  [        U5      5      nM<     U$ s  snf s  snf )Néÿÿÿÿ)Úlistr¿   r¸   r¹   rä   )r.   Úclssrª   ÚllÚrestrÌ   s         r(   Ú_notÚCNF._notW  s‰   € Ü�D—L‘LÓ!ˆØ(,¨RªÓ1ª 1Œi˜!˜˜Ö©ˆÐ1Ü�‹Wˆà˜˜"“IˆDÙ+/Ó0ª4 a”˜Q˜B˜5Ö!©4ˆAÐ0Ø—‘œ˜A›“ŠBñ ð ˆ	ùò 2ùò 1s   �BÁBc                 óÊ   • / nU R                    H:  nU Vs/ s H  oDR                  U5      PM     nnUR                  [        U6 5        M<     [	        U6 n[        U5      $ s  snf r,   )r¿   r6   r¢   r    r   r»   )r.   r5   Úclause_listr®   r/   Úlitss         r(   r6   Ú	CNF.rcalla  s]   € ØˆØ—l”lˆFÙ/5Ó6ªv¨—I‘I˜d–O©vˆDÐ6Ø×Ñœr 4˜yÖ)ñ #ô �KÐ ˆÜ% dÓ+Ð+ùò 7s   –A c                 óf   • US   R                  5       nUSS   H  nUR                  U5      nM     U$ ©Nr   r”   )rÐ   rä   ©r%   r«   r²   rï   s       r(   rº   Ú
CNF.all_ori  s3   € à�‰G�L‰L‹NˆØ˜˜“HˆDØ—‘�d“ŠAñ àˆr*   c                 óf   • US   R                  5       nUSS   H  nUR                  U5      nM     U$ r÷   )rÐ   rè   rø   s       r(   r¼   ÚCNF.all_andp  s3   € à�‰G�L‰L‹NˆØ˜˜“HˆDØ—‘�t“ŠAñ àˆr*   c                 óH   • SSK Jn  [        X" 5       5      n[        U5      nU$ )Nr   )Úget_composite_predicates)Úsympy.assumptions.factsrý   rž   r»   )r%   r5   rý   s      r(   rÃ   Ú
CNF.to_CNFw  s$   € åDÜ�dÐ4Ó6Ó7ˆÜ% dÓ+ˆØˆr*   c                 óB   ^• S m[        U4S jUR                   5       6 $ )zU
Converts CNF object to SymPy's boolean expression
retaining the form of expression.
c                 óf   • U R                   (       a  [        U R                  5      $ U R                  $ r,   )r$   r   r#   )r/   s    r(   Úremove_literalÚ&CNF.CNF_to_cnf.<locals>.remove_literal„  s   € Ø#&§:§:”3�s—w‘w“<Ð:°3·7±7Ð:r*   c              3   óH   >#   • U  H  n[        U4S  jU 5       6 v •  M     g7f)c              3   ó4   >#   • U  H  nT" U5      v •  M     g 7fr,   rJ   )Ú.0r/   r  s     €r(   Ú	<genexpr>Ú+CNF.CNF_to_cnf.<locals>.<genexpr>.<genexpr>‡  s   øé € Ð@º°#™.¨×-Ð-ºùs   ƒN)r   )r  r®   r  s     €r(   r  Ú!CNF.CNF_to_cnf.<locals>.<genexpr>‡  s   øé € Ð\ÒP[Àf”RÔ@¹Ó@ÕAÒP[ùs   ƒ")r   r¿   )r%   rã   r  s     @r(   Ú
CNF_to_cnfÚCNF.CNF_to_cnf~  s"   ø€ ò	;ô Ô\ÐPS×P[ÒP[Ó\Ð]Ð]r*   rÓ   r,   )r=   rK   rL   rM   rN   rY   r·   r>   rÍ   rÐ   rÄ   Úclassmethodr×   rÚ   rß   rä   rè   rð   r6   rº   r¼   rÃ   r
  rQ   rJ   r*   r(   r¹   r¹     s©   † ñô"ò
"òòò
&ò ð ñó ðò
òòòòò,ð ñó ðð ñó ðð ñó ðð ñ^ó ó^r*   r¹   c                   óf   • \ rS rSrSrSS jrS r\S 5       r\S 5       r	S r
S	 rS
 rS rS rSrg)Ú
EncodedCNFiŠ  z(
Class for encoding the CNF expression.
Nc                 ó|   • U(       d  U(       d  / n0 nXl         X l        [        UR                  5       5      U l        g r,   )ÚdataÚencodingrì   ÚkeysÚ_symbols)r.   r  r  s      r(   rY   ÚEncodedCNF.__init__Ž  s-   € ÞžHØˆDØˆHØŒ	Ø ŒÜ˜XŸ]™]›_Ó-ˆ�r*   c           
      ó6  • [        UR                  5       5      U l        [        U R                  5      n[	        [        U R                  [        SUS-   5      5      5      U l        UR                   Vs/ s H  o0R                  U5      PM     snU l
        g s  snf ©Nr”   )rì   rß   r  r¡   ÚdictÚzipr    r  r¿   Úencoder  )r.   rã   Únr®   s       r(   Úfrom_cnfÚEncodedCNF.from_cnf–  sj   € Ü˜S×/Ñ/Ó1Ó2ˆŒÜ�—‘ÓˆÜœS §¡´°a¸¸Q¹³Ó@ÓAˆŒØ7:·{²{ÓC²{¨V—[‘[ Ö(±{ÑCˆ�	ùÒCs   Á3Bc                 ó   • U R                   $ r,   )r  r-   s    r(   ÚsymbolsÚEncodedCNF.symbolsœ  s   € à�}‰}Ðr*   c                 óF   • [        S[        U R                  5      S-   5      $ r  )r    r¡   r  r-   s    r(   Ú	variablesÚEncodedCNF.variables   s   € ä�Qœ˜DŸM™MÓ*¨QÑ.Ó/Ð/r*   c                 ó”   • U R                    Vs/ s H  n[        U5      PM     nn[        U[        U R                  5      5      $ s  snf r,   )r  r¶   r  r  r  )r.   r®   Únew_datas      r(   rÐ   ÚEncodedCNF.copy¤  s9   € Ø.2¯iªiÓ8ªi F”C˜–K©iˆÐ8Ü˜(¤D¨¯©Ó$7Ó8Ð8ùò 9s   �Ac                 óP   • [         R                  U5      nU R                  U5        g r,   )r¹   r×   Úadd_from_cnf)r.   rÅ   rã   s      r(   Úadd_propÚEncodedCNF.add_prop¨  s   € Ü�m‰m˜DÓ!ˆØ×Ñ˜#Õr*   c                 óŒ   • UR                    Vs/ s H  o R                  U5      PM     nnU =R                  U-  sl        g s  snf r,   )r¿   r  r  )r.   rã   r®   r¿   s       r(   r'  ÚEncodedCNF.add_from_cnf¬  s5   € Ø58·[²[ÓA²[¨6—;‘;˜vÖ&±[ˆÐAØ�	Š	�WÑŽ	ùò Bs   �Ac                 ó
  • UR                   nU R                  R                  US 5      nUcC  [        U R                  5      nU R                  R                  U5        US-   =o0R                  U'   UR                  (       a  U* $ U$ r  )r#   r  r¥   r¡   r  r¢   r$   )r.   r/   ÚliteralÚvaluer  s        r(   Ú
encode_argÚEncodedCNF.encode_arg°  sn   € Ø—'‘'ˆØ—‘×!Ñ! '¨4Ó0ˆØ‰=Ü�D—M‘MÓ"ˆAØ�M‰M× Ñ  Ô)Ø-.°©UÐ2ˆE—M‘M 'Ñ*Ø�:�:Ø�6ˆMàˆLr*   c                 óŽ   • U Vs1 s H3  o"R                   [        R                  :X  d  U R                  U5      OSiM5     sn$ s  snf )Nr   )r#   r   Úfalser/  )r.   r®   r/   s      r(   r  ÚEncodedCNF.encode¼  s7   € ÙQWÓXÒQWÈ#¯G©G´q·w±wÓ,>�—‘ Ô$ÀAÒEÑQWÑXÐXùÒXs   …:A)r  r  r  )NN)r=   rK   rL   rM   rN   rY   r  rO   r  r!  rÐ   r(  r'  r/  r  rQ   rJ   r*   r(   r  r  Š  sT   † ñô.òDð ñó ðð ñ0ó ð0ò9òòò
õYr*   r  r,   )#rN   Ú	itertoolsr   r   r   Úsympy.assumptions.assumer   r   Úsympy.core.relationalr   r	   r
   r   r   r   Úsympy.core.singletonr   Úsympy.logic.boolalgr   r   r   r   r   r   r   r   r   r   r   r    r   rž   r»   r¹   r  rJ   r*   r(   Ú<module>r9     sr   ðñ÷ 9Ñ 8ß @ß 8× 8Ý "ß 2Ó 2ß J× J÷;ñ ;÷|ñ ÷@ñ ô@jòZ5÷(y^ñ y^÷x3Yò 3Yr*   