§
    OŠtjÝ0  ã                   ó"  — d Z ddlmZmZmZ ddlmZmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZ  G d„ d	¦  «        Z G d
„ d¦  «        Z G d„ d¦  «        Zdd„Zd„ Z  G d„ d¦  «        Z! G d„ d¦  «        Z"dS )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                   ó\   ‡ — e Zd ZdZd
ˆ fd„	Zed„ ¦   «         Zd„ Zd„ Zd„ Z	e	Z
d„ Zd	„ Zˆ xZS )ÚLiterala{  
    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)
    Fc                 ó  •— t          |t          ¦  «        r|j        d         }d}n)t          |t          t          t
          f¦  «        r|r| n|S t          ¦   «                              | ¦  «        }||_        ||_	        |S )Nr   T)
Ú
isinstancer   ÚargsÚANDÚORr   ÚsuperÚ__new__ÚlitÚis_Not)Úclsr"   r#   ÚobjÚ	__class__s       €úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/assumptions/cnf.pyr!   zLiteral.__new__&   sy   ø€ Ý�c�3ÑÔð 	+Ø”(˜1”+ˆCØˆFˆFÝ˜�c¥2¥wÐ/Ñ0Ô0ð 	+Ø!Ð*�C�4�4 sÐ*Ý‰gŒg�oŠo˜cÑ"Ô"ˆØˆŒØˆŒ
Øˆ
ó    c                 ó   — | j         S ©N©r"   ©Úselfs    r'   ÚargzLiteral.arg1   s	   € àŒxˆr(   c                 óÆ   — t          | j        ¦  «        r|                      |¦  «        }n| j                             |¦  «        } t          | ¦  «        || j        ¦  «        S r*   )Úcallabler"   ÚapplyÚtyper#   )r-   Úexprr"   s      r'   ÚrcallzLiteral.rcall5   sR   € Ý�D”HÑÔð 	'Ø—(’(˜4‘.”.ˆCˆCà”(—.’. Ñ&Ô&ˆCØ�t�D‰zŒz˜#˜tœ{Ñ+Ô+Ð+r(   c                 ó<   — | j          }t          | j        |¦  «        S r*   )r#   r   r"   )r-   r#   s     r'   Ú
__invert__zLiteral.__invert__<   s   € Ø”[�ˆÝ�t”x Ñ(Ô(Ð(r(   c                 óh   — d                      t          | ¦  «        j        | j        | j        ¦  «        S )Nz
{}({}, {}))Úformatr2   Ú__name__r"   r#   r,   s    r'   Ú__str__zLiteral.__str__@   s'   € Ø×"Ò"¥4¨¡:¤:Ô#6¸¼À$Ä+ÑNÔNÐNr(   c                 óB   — | j         |j         k    o| j        |j        k    S r*   )r.   r#   ©r-   Úothers     r'   Ú__eq__zLiteral.__eq__E   s   € ØŒx˜5œ9Ò$ÐD¨¬¸¼Ò)DÐDr(   c                 ób   — t          t          | ¦  «        j        | j        | j        f¦  «        }|S r*   )Úhashr2   r9   r.   r#   )r-   Úhs     r'   Ú__hash__zLiteral.__hash__H   s(   € Ý•$�t‘*”*Ô% t¤x°´Ð=Ñ>Ô>ˆØˆr(   )F)r9   Ú
__module__Ú__qualname__Ú__doc__r!   Úpropertyr.   r4   r6   r:   Ú__repr__r>   rB   Ú__classcell__)r&   s   @r'   r   r      sº   ø€ € € € € ðð ð,	ð 	ð 	ð 	ð 	ð 	ð ðð ñ „Xðð,ð ,ð ,ð)ð )ð )ðOð Oð Oð €HðEð Eð Eðð ð ð ð ð ð r(   r   c                   óP   — e Zd ZdZd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Z	d„ Z
d„ ZeZd	S )
r   z+
    A low-level implementation for Or
    c                 ó   — || _         d S r*   ©Ú_args©r-   r   s     r'   Ú__init__zOR.__init__Q   ó   € ØˆŒ
ˆ
ˆ
r(   c                 ó8   — t          | j        t          ¬¦  «        S ©N)Úkey©ÚsortedrL   Ústrr,   s    r'   r   zOR.argsT   ó   € å�d”j¥cÐ*Ñ*Ô*Ð*r(   c                 óJ   ‡—  t          | ¦  «        ˆfd„| j        D ¦   «         Ž S )Nc                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS © ©r4   ©Ú.0r.   r3   s     €r'   ú
<listcomp>zOR.rcall.<locals>.<listcomp>Y   ó3   ø€ ð ð ð Ø #ð  ŸIšI d™OœOð ð ð r(   ©r2   rL   ©r-   r3   s    `r'   r4   zOR.rcallX   ó@   ø€ Ø�t�D‰zŒzð ð ð ð Ø'+¤zðñ ô ð ð 	r(   c                 ó2   — t          d„ | j        D ¦   «         Ž S )Nc                 ó   — g | ]}| ‘ŒS rY   rY   ©r\   r.   s     r'   r]   z!OR.__invert__.<locals>.<listcomp>^   s   € Ð0Ð0Ð0˜c�c�TÐ0Ð0Ð0r(   )r   rL   r,   s    r'   r6   zOR.__invert__]   s   € ÝÐ0Ð0 T¤ZÐ0Ñ0Ô0Ð1Ð1r(   c                 óp   — t          t          | ¦  «        j        ft          | j        ¦  «        z   ¦  «        S r*   ©r@   r2   r9   Útupler   r,   s    r'   rB   zOR.__hash__`   ó+   € Ý•T˜$‘Z”ZÔ(Ð*­U°4´9Ñ-=Ô-=Ñ=Ñ>Ô>Ð>r(   c                 ó"   — | j         |j         k    S r*   ©r   r<   s     r'   r>   z	OR.__eq__c   ó   € ØŒy˜EœJÒ&Ð&r(   c                 óZ   — dd                      d„ | j        D ¦   «         ¦  «        z   dz   }|S )Nú(ú | c                 ó,   — g | ]}t          |¦  «        ‘ŒS rY   ©rU   rd   s     r'   r]   zOR.__str__.<locals>.<listcomp>g   s   € Ð<Ð<Ð<¨3�c #™hœhÐ<Ð<Ð<r(   ú)©Újoinr   ©r-   Úss     r'   r:   z
OR.__str__f   s3   € Ø�%—*’*Ð<Ð<°$´)Ð<Ñ<Ô<Ñ=Ô=Ñ=ÀÑCˆØˆr(   N)r9   rC   rD   rE   rN   rF   r   r4   r6   rB   r>   r:   rG   rY   r(   r'   r   r   M   s”   € € € € € ðð ðð ð ð ð+ð +ñ „Xð+ðð ð ð
2ð 2ð 2ð?ð ?ð ?ð'ð 'ð 'ðð ð ð €H€H€Hr(   r   c                   óP   — e Zd ZdZd„ Zd„ Zed„ ¦   «         Zd„ Zd„ Z	d„ Z
d„ ZeZd	S )
r   z,
    A low-level implementation for And
    c                 ó   — || _         d S r*   rK   rM   s     r'   rN   zAND.__init__q   rO   r(   c                 ó2   — t          d„ | j        D ¦   «         Ž S )Nc                 ó   — g | ]}| ‘ŒS rY   rY   rd   s     r'   r]   z"AND.__invert__.<locals>.<listcomp>u   s   € Ð/Ð/Ð/˜S�S�DÐ/Ð/Ð/r(   )r   rL   r,   s    r'   r6   zAND.__invert__t   s   € ÝÐ/Ð/ D¤JÐ/Ñ/Ô/Ð0Ð0r(   c                 ó8   — t          | j        t          ¬¦  «        S rQ   rS   r,   s    r'   r   zAND.argsw   rV   r(   c                 óJ   ‡—  t          | ¦  «        ˆfd„| j        D ¦   «         Ž S )Nc                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rY   rZ   r[   s     €r'   r]   zAND.rcall.<locals>.<listcomp>|   r^   r(   r_   r`   s    `r'   r4   z	AND.rcall{   ra   r(   c                 óp   — t          t          | ¦  «        j        ft          | j        ¦  «        z   ¦  «        S r*   rf   r,   s    r'   rB   zAND.__hash__€   rh   r(   c                 ó"   — | j         |j         k    S r*   rj   r<   s     r'   r>   z
AND.__eq__ƒ   rk   r(   c                 óZ   — dd                      d„ | j        D ¦   «         ¦  «        z   dz   }|S )Nrm   ú & c                 ó,   — g | ]}t          |¦  «        ‘ŒS rY   rp   rd   s     r'   r]   zAND.__str__.<locals>.<listcomp>‡   s   € Ð:Ð:Ð:¨�C ™HœHÐ:Ð:Ð:r(   rq   rr   rt   s     r'   r:   zAND.__str__†   s3   € Ø�—
’
Ð:Ð:°´	Ð:Ñ:Ô:Ñ;Ô;Ñ;¸CÑ?ˆØˆr(   N)r9   rC   rD   rE   rN   r6   rF   r   r4   rB   r>   r:   rG   rY   r(   r'   r   r   m   s”   € € € € € ðð ðð ð ð1ð 1ð 1ð ð+ð +ñ „Xð+ðð ð ð
?ð ?ð ?ð'ð 'ð 'ðð ð ð €H€H€Hr(   r   Nc                 óÄ	  ‡‡— ddl m} ‰€i Št          |j        t          |j        t          |j        t          |j	        t          |j        t          |j        i}t          | ¦  «        |v r|t          | ¦  «                 } || j        Ž } t!          | t"          ¦  «        r | j        d         }t%          |‰¦  «        }| S t!          | t&          ¦  «        r't)          ˆfd„t'          j        | ¦  «        D ¦   «         Ž S t!          | t,          ¦  «        r't/          ˆfd„t-          j        | ¦  «        D ¦   «         Ž S t!          | t0          ¦  «        rt/          ˆfd„| j        D ¦   «         Ž }| S t!          | t2          ¦  «        rt)          ˆfd„| j        D ¦   «         Ž }| S t!          | t4          ¦  «        r|g }t7          dt9          | j        ¦  «        dz   d	¦  «        D ]J}t;          | j        |¦  «        D ]2Šˆˆfd
„| j        D ¦   «         }	|                     t)          |	Ž ¦  «         Œ3ŒKt/          |Ž S t!          | t>          ¦  «        r}g }t7          dt9          | j        ¦  «        dz   d	¦  «        D ]J}t;          | j        |¦  «        D ]2Šˆˆfd„| j        D ¦   «         }	|                     t)          |	Ž ¦  «         Œ3ŒKt/          |Ž  S t!          | t@          ¦  «        rGt%          | j        d         ‰¦  «        t%          | j        d         ‰¦  «        }}
t)          |
 |¦  «        S t!          | tB          ¦  «        r„g }tE          | j        | j        dd…         | j        d         ¬¦  «        D ]I\  }}t%          |‰¦  «        }t%          |‰¦  «        }|                     t)          | |¦  «        ¦  «         ŒJt/          |Ž S t!          | tF          ¦  «        r~t%          | j        d         ‰¦  «        }
t%          | j        d         ‰¦  «        }t%          | j        d	         ‰¦  «        }t/          t)          |
 |¦  «        t)          |
|¦  «        ¦  «        S t!          | tH          ¦  «        r>| j%        | j&        }}‰ '                    |d¦  «        }|�t%           |j(        |Ž ‰¦  «        S t!          | tR          ¦  «        r(‰ '                    | d¦  «        }|�t%          |‰¦  «        S tU          | ¦  «        S )aŠ  
    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   )ÚQNc                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS rY   ©Úto_NNF©r\   ÚxÚcomposite_maps     €r'   r]   zto_NNF.<locals>.<listcomp>»   s#   ø€ ÐIÐIÐI°•F˜1˜mÑ,Ô,ÐIÐIÐIr(   c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS rY   r…   r‡   s     €r'   r]   zto_NNF.<locals>.<listcomp>¾   s#   ø€ ÐKÐKÐK°!•V˜A˜}Ñ-Ô-ÐKÐKÐKr(   c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS rY   r…   r‡   s     €r'   r]   zto_NNF.<locals>.<listcomp>Á   s#   ø€ Ð@Ð@Ð@°•F˜1˜mÑ,Ô,Ð@Ð@Ð@r(   c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS rY   r…   r‡   s     €r'   r]   zto_NNF.<locals>.<listcomp>Å   s#   ø€ Ð?Ð?Ð?°•6˜!˜]Ñ+Ô+Ð?Ð?Ð?r(   é   é   c                 óZ   •— g | ]'}|‰v rt          |‰¦  «         nt          |‰¦  «        ‘Œ(S rY   r…   ©r\   ru   r‰   Únegs     €€r'   r]   zto_NNF.<locals>.<listcomp>Ì   óM   ø€ ð .ð .ð .Øð 89¸C°x°x�6 ! ]Ñ3Ô3Ð3Ð3ÅVÈAÈ}ÑE]ÔE]ð .ð .ð .r(   c                 óZ   •— g | ]'}|‰v rt          |‰¦  «         nt          |‰¦  «        ‘Œ(S rY   r…   r�   s     €€r'   r]   zto_NNF.<locals>.<listcomp>Õ   r’   r(   )Ú	fillvalue)+Úsympy.assumptions.askrƒ   r   Úeqr	   Úner
   Úgtr   Últr   Úger   Úler2   r   r   r   r†   r   r   Ú	make_argsr   r   r   r   r   ÚrangeÚlenr   Úappendr   r   r   r   r   r   ÚfunctionÚ	argumentsÚgetr4   r   r   )r3   r‰   rƒ   ÚbinrelpredsÚpredr.   ÚtmpÚcnfsÚiÚclauseÚLÚRÚaÚbÚMr   Únewpredr‘   s    `               @r'   r†   r†   �   sô  øø€ ð: (Ð'Ð'Ð'Ð'Ð'àÐØˆõ �q”t�R ¤¥r¨1¬4µ°Q´T½2¸q¼tÅRÈÌÐN€KÝˆD�z„z�[Ð Ð Ø�4 ™:œ:Ô&ˆØˆt�T”YÐˆå�$�ÑÔð ØŒi˜ŒlˆÝ�S˜-Ñ(Ô(ˆØˆtˆå�$�ÑÔð KÝÐIÐIÐIÐIµb´lÀ4Ñ6HÔ6HÐIÑIÔIÐJÐJå�$�ÑÔð MÝÐKÐKÐKÐKµs´}ÀTÑ7JÔ7JÐKÑKÔKÐLÐLå�$�ÑÔð ÝÐ@Ð@Ð@Ð@°d´iÐ@Ñ@Ô@ÐAˆØˆtˆå�$�ÑÔð ÝÐ?Ð?Ð?Ð?°T´YÐ?Ñ?Ô?Ð@ˆØˆtˆå�$�ÑÔð ØˆÝ�q�#˜dœi™.œ.¨1Ñ,¨aÑ0Ô0ð 	)ð 	)ˆAÝ# D¤I¨qÑ1Ô1ð )ð )�ð.ð .ð .ð .ð .Ø#'¤9ð.ñ .ô .�à—’�B ˜KÑ(Ô(Ð(Ð(ð)õ �DˆzÐå�$�ÑÔð ØˆÝ�q�#˜dœi™.œ.¨1Ñ,¨aÑ0Ô0ð 	)ð 	)ˆAÝ# D¤I¨qÑ1Ô1ð )ð )�ð.ð .ð .ð .ð .Ø#'¤9ð.ñ .ô .�à—’�B ˜KÑ(Ô(Ð(Ð(ð)õ �T�
ˆ{Ðå�$�Ñ Ô ð Ý�d”i ”l MÑ2Ô2µF¸4¼9ÀQ¼<ÈÑ4WÔ4Wˆ1ˆÝ�1�"�a‰yŒyÐå�$�
Ñ#Ô#ð ØˆÝ ¤	¨4¬9°Q°R°R¬=ÀDÄIÈaÄLÐQÑQÔQð 	#ð 	#‰DˆAˆqÝ�q˜-Ñ(Ô(ˆAÝ�q˜-Ñ(Ô(ˆAØ�KŠK�˜A˜2˜q™	œ	Ñ"Ô"Ð"Ð"Ý�DˆzÐå�$�ÑÔð (Ý�4”9˜Q”< Ñ/Ô/ˆÝ�4”9˜Q”< Ñ/Ô/ˆÝ�4”9˜Q”< Ñ/Ô/ˆÝ•2�q�b˜!‘9”9�b  A™hœhÑ'Ô'Ð'å�$Õ(Ñ)Ô)ð ?Ø”] D¤NˆdˆØ×#Ò# D¨$Ñ/Ô/ˆØÐÝ˜-˜'œ-¨Ð.°Ñ>Ô>Ð>å�$�	Ñ"Ô"ð 2Ø×#Ò# D¨$Ñ/Ô/ˆØÐÝ˜' =Ñ1Ô1Ð1å�4‰=Œ=Ðr(   c                 ó†  — t          | t          t          f¦  «        s@t          ¦   «         }|                     t          | f¦  «        ¦  «         t          |¦  «        S t          | t          ¦  «        rt          j        d„ | j        D ¦   «         Ž S t          | t          ¦  «        rt          j	        d„ | j        D ¦   «         Ž S dS )zŒ
    Distributes AND over OR in the NNF expression.
    Returns the result( Conjunctive Normal Form of expression)
    as a CNF object.
    c                 ó,   — g | ]}t          |¦  «        ‘ŒS rY   ©Údistribute_AND_over_ORrd   s     r'   r]   z*distribute_AND_over_OR.<locals>.<listcomp>  s0   € ð 3ð 3ð 3Ø #õ 3°3Ñ7Ô7ð 3ð 3ð 3r(   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rY   r±   rd   s     r'   r]   z*distribute_AND_over_OR.<locals>.<listcomp>
  s0   € ð 4ð 4ð 4Ø!$õ 4°CÑ8Ô8ð 4ð 4ð 4r(   N)
r   r   r   ÚsetÚaddÚ	frozensetÚCNFÚall_orrL   Úall_and)r3   r¥   s     r'   r²   r²   ú   sÔ   € õ �d�S¥"˜IÑ&Ô&ð Ý‰eŒeˆØ�Š•	˜4˜'Ñ"Ô"Ñ#Ô#Ð#Ý�3‰xŒxˆå�$�ÑÔð 4ÝŒzð 3ð 3Ø'+¤zð3ñ 3ô 3ð 4ð 	4õ �$�ÑÔð 5ÝŒ{ð 4ð 4Ø(,¬
ð4ñ 4ô 4ð 5ð 	5ð5ð 5r(   c                   óÊ   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	e
d	„ ¦   «         Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Ze
d„ ¦   «         Ze
d„ ¦   «         Ze
d„ ¦   «         Ze
d„ ¦   «         ZdS )r·   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                 ó4   — |st          ¦   «         }|| _        d S r*   ©r´   Úclauses©r-   r½   s     r'   rN   zCNF.__init__   s   € Øð 	Ý‘e”eˆGØˆŒˆˆr(   c                 ón   — t                                |¦  «        j        }|                      |¦  «         d S r*   )r·   Úto_CNFr½   Úadd_clauses)r-   Úpropr½   s      r'   rµ   zCNF.add%  s0   € Ý—*’*˜TÑ"Ô"Ô*ˆØ×Ò˜Ñ!Ô!Ð!Ð!Ð!r(   c                 óN   — d                      d„ | j        D ¦   «         ¦  «        }|S )Nr€   c                 óX   — g | ]'}d d                      d„ |D ¦   «         ¦  «        z   dz   ‘Œ(S )rm   rn   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rY   rp   )r\   r"   s     r'   r]   z*CNF.__str__.<locals>.<listcomp>.<listcomp>+  s   € Ð:Ð:Ð:¨C�s 3™xœxÐ:Ð:Ð:r(   rq   )rs   ©r\   r¨   s     r'   r]   zCNF.__str__.<locals>.<listcomp>+  sM   € ð (ð (ð (Øð �5—:’:Ð:Ð:°6Ð:Ñ:Ô:Ñ;Ô;Ñ;¸SÑ@ð (ð (ð (r(   )rs   r½   rt   s     r'   r:   zCNF.__str__)  s:   € Ø�JŠJð(ð (Øœ,ð(ñ (ô (ñ
ô 
ˆð ˆr(   c                 ó:   — |D ]}|                       |¦  «         Œ| S r*   ©rµ   )r-   ÚpropsÚps      r'   Úextendz
CNF.extend0  s'   € Øð 	ð 	ˆAØ�HŠH�Q‰KŒKˆKˆKØˆr(   c                 óD   — t          t          | j        ¦  «        ¦  «        S r*   )r·   r´   r½   r,   s    r'   ÚcopyzCNF.copy5  s   € Ý•3�t”|Ñ$Ô$Ñ%Ô%Ð%r(   c                 ó&   — | xj         |z  c_         d S r*   )r½   r¾   s     r'   rÁ   zCNF.add_clauses8  s   € ØˆŒ˜ÑˆŒˆˆr(   c                 óD   —  | ¦   «         }|                      |¦  «         |S r*   rÈ   )r$   rÂ   Úress      r'   Ú	from_propzCNF.from_prop;  s!   € àˆc‰eŒeˆØ�Š�‰ŒˆØˆ
r(   c                 ó:   — |                       |j        ¦  «         | S r*   )rÁ   r½   r<   s     r'   Ú__iand__zCNF.__iand__A  s   € Ø×Ò˜œÑ'Ô'Ð'Øˆr(   c                 óT   — t          ¦   «         }| j        D ]}|d„ |D ¦   «         z  }Œ|S )Nc                 ó   — h | ]	}|j         ’Œ
S rY   r+   rd   s     r'   ú	<setcomp>z%CNF.all_predicates.<locals>.<setcomp>H  s   € Ð0Ð0Ð0 s˜3œ7Ð0Ð0Ð0r(   r¼   )r-   Ú
predicatesÚcs      r'   Úall_predicateszCNF.all_predicatesE  s=   € Ý‘U”Uˆ
Ø”ð 	1ð 	1ˆAØÐ0Ð0¨aÐ0Ñ0Ô0Ñ0ˆJˆJØÐr(   c                 ó  — t          ¦   «         }t          | j        |j        ¦  «        D ]K\  }}t          |¦  «        }|                     |¦  «         |                     t          |¦  «        ¦  «         ŒLt          |¦  «        S r*   )r´   r   r½   Úupdaterµ   r¶   r·   )r-   Úcnfr½   r«   r¬   r¥   s         r'   Ú_orzCNF._orK  sm   € Ý‘%”%ˆÝ˜DœL¨#¬+Ñ6Ô6ð 	(ð 	(‰DˆAˆqÝ�a‘&”&ˆCØ�JŠJ�q‰MŒMˆMØ�KŠK�	 #™œÑ'Ô'Ð'Ð'Ý�7‰|Œ|Ðr(   c                 ó^   — | j                              |j         ¦  «        }t          |¦  «        S r*   )r½   Úunionr·   ©r-   rÜ   r½   s      r'   Ú_andzCNF._andS  s%   € Ø”,×$Ò$ S¤[Ñ1Ô1ˆÝ�7‰|Œ|Ðr(   c                 óæ   — t          | j        ¦  «        }d„ |d         D ¦   «         }t          |¦  «        }|d d…         D ]0}d„ |D ¦   «         }|                     t          |¦  «        ¦  «        }Œ1|S )Nc                 ó0   — h | ]}t          | f¦  «        ’ŒS rY   ©r¶   ©r\   rˆ   s     r'   rÖ   zCNF._not.<locals>.<setcomp>Y  s$   € Ð1Ð1Ð1 1�i˜!˜˜ÑÔÐ1Ð1Ð1r(   éÿÿÿÿc                 ó0   — h | ]}t          | f¦  «        ’ŒS rY   rä   rå   s     r'   rÖ   zCNF._not.<locals>.<setcomp>]  s$   € Ð0Ð0Ð0 a•˜Q˜B˜5Ñ!Ô!Ð0Ð0Ð0r(   )Úlistr½   r·   rÝ   )r-   ÚclssÚllÚrestrÊ   s        r'   Ú_notzCNF._notW  sy   € Ý�D”LÑ!Ô!ˆØ1Ð1¨¨R¬Ð1Ñ1Ô1ˆÝ�‰WŒWˆà˜˜"˜”Ið 	 ð 	 ˆDØ0Ð0¨4Ð0Ñ0Ô0ˆAØ—’�˜A™œ‘”ˆBˆBØˆ	r(   c                 ó    ‡— g }| j         D ],}ˆfd„|D ¦   «         }|                     t          |Ž ¦  «         Œ-t          |Ž Št	          ‰¦  «        S )Nc                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rY   rZ   r[   s     €r'   r]   zCNF.rcall.<locals>.<listcomp>d  s#   ø€ Ð6Ð6Ð6¨�C—I’I˜d‘O”OÐ6Ð6Ð6r(   )r½   rŸ   r   r   r²   )r-   r3   Úclause_listr¨   Úlitss    `   r'   r4   z	CNF.rcalla  se   ø€ ØˆØ”lð 	*ð 	*ˆFØ6Ð6Ð6Ð6¨vÐ6Ñ6Ô6ˆDØ×Ò�r 4˜yÑ)Ô)Ð)Ð)Ý�KÐ ˆÝ% dÑ+Ô+Ð+r(   c                 ó~   — |d                               ¦   «         }|dd …         D ]}|                     |¦  «        }Œ|S ©Nr   r�   )rÍ   rÝ   ©r$   r¦   r¬   rë   s       r'   r¸   z
CNF.all_ori  s@   € à�ŒG�LŠL‰NŒNˆØ˜˜˜”Hð 	ð 	ˆDØ—’�d‘”ˆAˆAØˆr(   c                 ó~   — |d                               ¦   «         }|dd …         D ]}|                     |¦  «        }Œ|S rò   )rÍ   rá   ró   s       r'   r¹   zCNF.all_andp  s@   € à�ŒG�LŠL‰NŒNˆØ˜˜˜”Hð 	ð 	ˆDØ—’�t‘”ˆAˆAØˆr(   c                 ó`   — ddl m} t          | |¦   «         ¦  «        }t          |¦  «        }|S )Nr   )Úget_composite_predicates)Úsympy.assumptions.factsrö   r†   r²   )r$   r3   rö   s      r'   rÀ   z
CNF.to_CNFw  s?   € àDÐDÐDÐDÐDÐDÝ�dÐ4Ð4Ñ6Ô6Ñ7Ô7ˆÝ% dÑ+Ô+ˆØˆr(   c                 ó>   ‡— d„ Št          ˆfd„|j        D ¦   «         Ž S )zm
        Converts CNF object to SymPy's boolean expression
        retaining the form of expression.
        c                 óF   — | j         rt          | j        ¦  «        n| j        S r*   )r#   r   r"   )r.   s    r'   Úremove_literalz&CNF.CNF_to_cnf.<locals>.remove_literal„  s   € Ø#&¤:Ð:•3�s”w‘<”<�<°3´7Ð:r(   c              3   óB   •K  — | ]}t          ˆfd „|D ¦   «         Ž V — ŒdS )c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r*   rY   )r\   r.   rú   s     €r'   ú	<genexpr>z+CNF.CNF_to_cnf.<locals>.<genexpr>.<genexpr>‡  s-   øè è € Ð@Ð@°#˜.˜.¨Ñ-Ô-Ð@Ð@Ð@Ð@Ð@Ð@r(   N)r   )r\   r¨   rú   s     €r'   rý   z!CNF.CNF_to_cnf.<locals>.<genexpr>‡  s=   øè è € Ð\Ð\Àf•RÐ@Ð@Ð@Ð@¸Ð@Ñ@Ô@ÐAÐ\Ð\Ð\Ð\Ð\Ð\r(   )r   r½   )r$   rÜ   rú   s     @r'   Ú
CNF_to_cnfzCNF.CNF_to_cnf~  s8   ø€ ð	;ð 	;ð 	;õ Ð\Ð\Ð\Ð\ÐPSÔP[Ð\Ñ\Ô\Ð]Ð]r(   r*   )r9   rC   rD   rE   rN   rµ   r:   rË   rÍ   rÁ   ÚclassmethodrÑ   rÓ   rÙ   rÝ   rá   rì   r4   r¸   r¹   rÀ   rþ   rY   r(   r'   r·   r·     sc  € € € € € ðð ð"ð ð ð ð
"ð "ð "ðð ð ðð ð ð
&ð &ð &ð ð  ð  ð ðð ñ „[ðð
ð ð ðð ð ðð ð ðð ð ðð ð ð,ð ,ð ,ð ðð ñ „[ðð ðð ñ „[ðð ðð ñ „[ðð ð^ð ^ñ „[ð^ð ^ð ^r(   r·   c                   ój   — e Zd ZdZdd„Zd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	d„ Z
d	„ Zd
„ Zd„ ZdS )Ú
EncodedCNFz0
    Class for encoding the CNF expression.
    Nc                 ó~   — |s|sg }i }|| _         || _        t          |                     ¦   «         ¦  «        | _        d S r*   )ÚdataÚencodingrè   ÚkeysÚ_symbols)r-   r  r  s      r'   rN   zEncodedCNF.__init__Ž  sD   € Øð 	˜Hð 	ØˆDØˆHØˆŒ	Ø ˆŒÝ˜XŸ]š]™_œ_Ñ-Ô-ˆŒˆˆr(   c           
      ó  ‡ — t          |                     ¦   «         ¦  «        ‰ _        t          ‰ j        ¦  «        }t	          t          ‰ j        t          d|dz   ¦  «        ¦  «        ¦  «        ‰ _        ˆ fd„|j        D ¦   «         ‰ _	        d S )Nr�   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rY   ©Úencode©r\   r¨   r-   s     €r'   r]   z'EncodedCNF.from_cnf.<locals>.<listcomp>š  s%   ø€ ÐCÐCÐC¨V�T—[’[ Ñ(Ô(ÐCÐCÐCr(   )
rè   rÙ   r  rž   ÚdictÚzipr�   r  r½   r  )r-   rÜ   Úns   `  r'   Úfrom_cnfzEncodedCNF.from_cnf–  su   ø€ Ý˜S×/Ò/Ñ1Ô1Ñ2Ô2ˆŒÝ�”ÑÔˆÝ�S ¤µ°a¸¸Q¹±´Ñ@Ô@ÑAÔAˆŒØCÐCÐCÐC°s´{ÐCÑCÔCˆŒ	ˆ	ˆ	r(   c                 ó   — | j         S r*   )r  r,   s    r'   ÚsymbolszEncodedCNF.symbolsœ  s
   € àŒ}Ðr(   c                 óL   — t          dt          | j        ¦  «        dz   ¦  «        S ©Nr�   )r�   rž   r  r,   s    r'   Ú	variableszEncodedCNF.variables   s!   € å�Q�˜DœMÑ*Ô*¨QÑ.Ñ/Ô/Ð/r(   c                 óh   — d„ | j         D ¦   «         }t          |t          | j        ¦  «        ¦  «        S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS rY   )r´   rÆ   s     r'   r]   z#EncodedCNF.copy.<locals>.<listcomp>¥  s   € Ð8Ð8Ð8 F•C˜‘K”KÐ8Ð8Ð8r(   )r  r  r  r  )r-   Únew_datas     r'   rÍ   zEncodedCNF.copy¤  s1   € Ø8Ð8¨d¬iÐ8Ñ8Ô8ˆÝ˜(¥D¨¬Ñ$7Ô$7Ñ8Ô8Ð8r(   c                 ód   — t                                |¦  «        }|                      |¦  «         d S r*   )r·   rÑ   Úadd_from_cnf)r-   rÂ   rÜ   s      r'   Úadd_propzEncodedCNF.add_prop¨  s-   € Ý�mŠm˜DÑ!Ô!ˆØ×Ò˜#ÑÔÐÐÐr(   c                 óN   ‡ — ˆ fd„|j         D ¦   «         }‰ xj        |z  c_        d S )Nc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rY   r	  r  s     €r'   r]   z+EncodedCNF.add_from_cnf.<locals>.<listcomp>­  s%   ø€ ÐAÐAÐA¨6�4—;’;˜vÑ&Ô&ÐAÐAÐAr(   )r½   r  rà   s   `  r'   r  zEncodedCNF.add_from_cnf¬  s2   ø€ ØAÐAÐAÐA°S´[ÐAÑAÔAˆØˆ	Œ	�WÑˆ	Œ	ˆ	ˆ	r(   c                 óÜ   — |j         }| j                             |d ¦  «        }|€=t          | j        ¦  «        }| j                             |¦  «         |dz   x}| j        |<   |j        r| S |S r  )r"   r  r¢   rž   r  rŸ   r#   )r-   r.   ÚliteralÚvaluer  s        r'   Ú
encode_argzEncodedCNF.encode_arg°  su   € Ø”'ˆØ”×!Ò! '¨4Ñ0Ô0ˆØˆ=Ý�D”MÑ"Ô"ˆAØŒM× Ò  Ñ)Ô)Ð)Ø-.°©UÐ2ˆE�D”M 'Ñ*ØŒ:ð 	Ø�6ˆMàˆLr(   c                 ó    ‡ — ˆ fd„|D ¦   «         S )Nc                 óh   •— h | ].}|j         t          j        k    s‰                     |¦  «        nd ’Œ/S )r   )r"   r   Úfalser   )r\   r.   r-   s     €r'   rÖ   z$EncodedCNF.encode.<locals>.<setcomp>½  s8   ø€ ÐXÐXÐXÈ#¨C¬Gµq´wÒ,>Ð,>�—’ Ñ$Ô$Ð$ÀAÐXÐXÐXr(   rY   )r-   r¨   s   ` r'   r
  zEncodedCNF.encode¼  s   ø€ ØXÐXÐXÐXÐQWÐXÑXÔXÐXr(   )NN)r9   rC   rD   rE   rN   r  rF   r  r  rÍ   r  r  r   r
  rY   r(   r'   r  r  Š  sÊ   € € € € € ðð ð.ð .ð .ð .ðDð Dð Dð ðð ñ „Xðð ð0ð 0ñ „Xð0ð9ð 9ð 9ðð ð ðð ð ð
ð 
ð 
ðYð Yð Yð Yð Yr(   r  r*   )#rE   Ú	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  rY   r(   r'   ú<module>r)     sõ  ððð ð 9Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø "Ð "Ð "Ð "Ð "Ð "Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jð;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ð|ð ð ð ð ñ ô ð ð@ð ð ð ð ñ ô ð ð@jð jð jð jðZ5ð 5ð 5ð(y^ð y^ð y^ð y^ð y^ñ y^ô y^ð y^ðx3Yð 3Yð 3Yð 3Yð 3Yñ 3Yô 3Yð 3Yð 3Yð 3Yr(   