Ë
    7^(h[%  ã                   óæ  — 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 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 defd„Zeej,                  ej.                  ej0                  ej2                  ej4                  ej6                  ej8                  ej:                  ej<                  ej:                  ej>                  ej@                  ejB                  hz  Z"d„ Z#d„ Z$d„ Z%ej8                  ej,                  ej:                  ej.                  ej<                  ej4                  ej:                  ej.                  ej>                  ej2                  ej@                  dejB                  diZ&d„ Z'd„ Z(y)é    )Úglobal_assumptions)ÚCNFÚ
EncodedCNF)ÚQ)Úsatisfiable)ÚUnhandledInputÚALLOWED_PRED)Ú
MatrixKind)Ú
NumberKind)ÚAppliedPredicate)ÚMul)ÚSTc                 ó.  — t        j                  | «      }t        j                  |  «      }t        j                  |«      }t        «       }|j                  |«       t        «       }|r|j	                  |«      }|j                  |«       t        |||«      S )aO  
    Function to evaluate the proposition with assumptions using SAT algorithm
    in conjunction with an Linear Real Arithmetic theory solver.

    Used to handle inequalities. Should eventually be depreciated and combined
    into satask, but infinity handling and other things need to be implemented
    before that can happen.
    )r   Ú	from_propr   Úfrom_cnfÚextendÚadd_from_cnfÚcheck_satisfiability)ÚpropositionÚassumptionsÚcontextÚpropsÚ_propsÚcnfÚcontext_cnfs          úZ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/assumptions/lra_satask.pyÚ
lra_sataskr      s|   € ô �M‰M˜+Ó&€EÜ�]‰]˜K˜<Ó(€Fä
�-‰-˜Ó
$€CÜ“,€KØ×Ñ˜Ôä“%€KÙØ!×(Ñ(¨Ó1ˆà×Ñ˜[Ô)ä  v¨{Ó;Ð;ó    c                 ó  — |j                  «       }|j                  «       }|j                  | «       |j                  |«       t        |«      \  }}|D ]A  }|j                  t        vsŒ|j                  t
        j                  k7  sŒ4t        d|› d�«      ‚ |D ]K  }|j                  t        t        «      k(  rt        d|› d�«      ‚|t        j                  k(  sŒBt        d«      ‚ t        |«      D ]¾  }	t        |j                  «      }
|	|j                  vr|
dz   |j                  |	<   |j                   j#                  |j                  |	   g«       t        |j                  «      }
|	|j                  vr|
dz   |j                  |	<   |j                   j#                  |j                  |	   g«       ŒÀ t%        |«      }t%        |«      }t'        |d¬«      du}t'        |d¬«      du}|r|ry |r|sy|s|ry|s|st)        d	«      ‚y y )
NúLRASolver: z is an unhandled predicatez is of MatrixKindzLRASolver: nané   T)Úuse_lra_theoryFzInconsistent assumptions)Úcopyr   Ú"get_all_pred_and_expr_from_enc_cnfÚfunctionÚ
WHITE_LISTr   Úner   Úkindr
   r   r   ÚNaNÚextract_pred_from_old_assumÚlenÚencodingÚdataÚappendÚ_preprocessr   Ú
ValueError)ÚpropÚ_propÚfactbaseÚsat_trueÚ	sat_falseÚall_predÚ	all_exprsÚpredÚexprÚassmÚnÚcan_be_trueÚcan_be_falses                r   r   r   .   sô  € Ø�}‰}‹€HØ—‘“€IØ×Ñ˜$ÔØ×Ñ˜5Ô!ä<¸XÓFÑ€Hˆiàò QˆØ�=‰=¤
Ò*¨t¯}©}ÄÇÁÓ/DÜ  ;¨t¨fÐ4NÐ!OÓPÐPðQð ò 3ˆØ�9‰9œ
¤:Ó.Ò.Ü  ;¨t¨fÐ4EÐ!FÓGÐGØ”1—5‘5‹=Ü Ð!1Ó2Ð2ð	3ô ,¨IÓ6ò 	:ˆÜ�×!Ñ!Ó"ˆØ�x×(Ñ(Ñ(Ø&'¨¡cˆH×Ñ˜dÑ#Ø�‰×Ñ˜h×/Ñ/°Ñ5Ð6Ô7ä�	×"Ñ"Ó#ˆØ�y×)Ñ)Ñ)Ø'(¨¡sˆI×Ñ˜tÑ$Ø�‰×Ñ˜y×1Ñ1°$Ñ7Ð8Õ9ð	:ô ˜8Ó$€HÜ˜IÓ&€Iä˜h°tÔ<ÀEÐI€KÜ˜y¸Ô>ÀeÐK€Lá‘|Øá™<Øá™<Øá™|ÜÐ3Ó4Ð4ð  ,ˆ;r   c                 óº  — | j                  «       } d}| j                  j                  «       D ��ci c]  \  }}||“Œ
 }}}i }g }| j                  D �]â  }g }|D �]Æ  }	|	dk(  r|j	                  |	«       d||	<   Œ |t        |	«         }
|	dk  }|	dkD  |	dk  z
  }t        |
«      }
t        |
t        «      s(|
|vr
|||
<   |dz  }||
   }	|j	                  ||	z  «       Œ�|r;|
j                  t        j                  k(  rd}t        j                  |
j                  Ž }
|
j                  t        j                  k(  r¦|
j                  \  }}|r<t        j                  ||«      }||vr
|||<   |dz  }||   }|j	                  |«       �Œ(t        j                  ||«      t        j                  ||«      f}|D ]&  }||vr
|||<   |dz  }||   }|j	                  |«       Œ( �Œ�|
j                  t        j                  k(  r|rJ ‚|
|vr
|||
<   |dz  }|j	                  ||
   |z  «       �ŒÉ |j	                  |«       �Œå t!        |«      |dz
  k\  sJ ‚t#        ||«      } | S c c}}w )a!  
    Returns an encoded cnf with only Q.eq, Q.gt, Q.lt,
    Q.ge, and Q.le predicate.

    Converts every unequality into a disjunction of strict
    inequalities. For example, x != 3 would become
    x < 3 OR x > 3.

    Also converts all negated Q.ne predicates into
    equalities.
    r!   r   F)r#   r,   Úitemsr-   r.   ÚabsÚ_pred_to_binrelÚ
isinstancer   r%   r   Úeqr'   Ú	argumentsÚgtÚltr+   r   )Úenc_cnfÚcur_encÚkeyÚvalueÚrev_encodingÚnew_encodingÚnew_dataÚclauseÚ
new_clauseÚlitr1   ÚnegatedÚsignÚarg1Úarg2Únew_propÚnew_encÚ	new_propss                     r   r/   r/   `   sŽ  € ð  �l‰l‹n€GØ€GØ18×1AÑ1A×1GÑ1GÓ1I×J¡: 3¨�E˜3‘JÐJ€LÑJà€LØ€HØ—,‘,ó 7$ˆØˆ
Øó 4	7ˆCØ�aŠxØ×!Ñ! #Ô&Ø$)�˜SÑ!ØØ¤ C£Ñ)ˆDØ˜A‘gˆGØ˜!‘G  a¡Ñ(ˆDä" 4Ó(ˆDä˜dÔ$4Ô5Ø˜|Ñ+Ø)0�L Ñ&Ø˜q‘L�GØ" 4Ñ(�Ø×!Ñ! $ s¡(Ô+Øñ ˜4Ÿ=™=¬A¯D©DÒ0Ø�Ü—t‘t˜TŸ^™^Ð,�à�}‰}¤§¡Ò$Ø!Ÿ^™^‘
��dÙÜ Ÿt™t D¨$Ó/�HØ |Ñ3Ø18˜ XÑ.Ø 1™˜à*¨8Ñ4�GØ×%Ñ% gÔ.Ùä!"§¡ d¨DÓ!1´1·4±4¸¸dÓ3CÐ D�IØ$-ò 3˜Ø#¨<Ñ7Ø5<˜L¨Ñ2Ø# q™L˜Gà".¨xÑ"8˜Ø"×)Ñ)¨'Õ2ð3ñ à�}‰}¤§¡Ò$©Ø�uà˜<Ñ'Ø%,�˜TÑ"Ø˜1‘�Ø×Ñ˜l¨4Ñ0°Ñ5Ö6ði4	7ðj 	�‰˜
Ö#ðo7$ôr ˆ|Ó ¨!¡Ò+Ð+Ð+ä˜ <Ó0€GØ€NùóA Ks   °Ic                 ó¼  — t        | t        «      s| S | j                  t        v r-t        | j                     }|du ry || j                  d   «      } | j                  t
        j                  k(  r%t        j                  | j                  d   d«      } | S | j                  t
        j                  k(  r%t        j                  | j                  d   d«      } | S | j                  t
        j                  k(  r%t        j                  | j                  d   d«      } | S | j                  t
        j                  k(  r%t        j                  | j                  d   d«      } | S | j                  t
        j                  k(  r%t        j                  | j                  d   d«      } | S | j                  t
        j                   k(  r#t        j"                  | j                  d   d«      } | S )NFr   )rB   r   r%   Úpred_to_pos_neg_zerorD   r   ÚpositiverE   ÚnegativerF   ÚzerorC   ÚnonpositiveÚleÚnonnegativeÚgeÚnonzeror'   )r8   Úfs     r   rA   rA   µ   sr  € Ü�dÔ,Ô-Øˆà‡}�}Ô,Ñ,Ü  §¡Ñ/ˆØ�‰:ØÙ�—‘ Ñ"Ó#ˆà‡}�}œŸ
™
Ò"Ü�t‰t�D—N‘N 1Ñ% qÓ)ˆð €Kð 
�‰œ!Ÿ*™*Ò	$Ü�t‰t�D—N‘N 1Ñ% qÓ)ˆð €Kð 
�‰œ!Ÿ&™&Ò	 Ü�t‰t�D—N‘N 1Ñ% qÓ)ˆð €Kð 
�‰œ!Ÿ-™-Ò	'Ü�t‰t�D—N‘N 1Ñ% qÓ)ˆð €Kð 
�‰œ!Ÿ-™-Ò	'Ü�t‰t�D—N‘N 1Ñ% qÓ)ˆð €Kð 
�‰œ!Ÿ)™)Ò	#Ü�t‰t�D—N‘N 1Ñ% qÓ)ˆà€Kr   Fc                 óê   — t        «       }t        «       }| j                  j                  «       D ]?  }t        |t        «      sŒ|j                  |«       |j                  |j                  «       ŒA ||fS )N)Úsetr,   ÚkeysrB   r   ÚaddÚupdaterD   )rG   r7   r6   r8   s       r   r$   r$   Ø   sd   € Ü“€IÜ‹u€HØ× Ñ ×%Ñ%Ó'ò -ˆÜ�dÔ,Õ-Ø�L‰L˜ÔØ×Ñ˜TŸ^™^Õ,ð-ð
 �YÐÐr   c                 óB  — g }| D �]  }t        |d«      sŒt        |j                  «      dk(  rŒ*|j                  durt	        d|› d�«      ‚t        |t        «      r+t        d„ |j                  D «       «      rt	        d|› d�«      ‚|j                  dk(  r|j                  dk7  rt	        d|› d�«      ‚|j                  dk(  rt	        d|› d	�«      ‚|j                  dk(  rt	        d|› d
�«      ‚|j                  r&|j                  t        j                  |«      «       �Œ|j                  r&|j                  t        j                   |«      «       �ŒO|j"                  r&|j                  t        j$                  |«      «       �Œ�|j&                  r&|j                  t        j(                  |«      «       �Œ³|j*                  r&|j                  t        j,                  |«      «       �Œå|j.                  s�Œó|j                  t        j0                  |«      «       �Œ |S )ar  
    Returns a list of relevant new assumption predicate
    based on any old assumptions.

    Raises an UnhandledInput exception if any of the assumptions are
    unhandled.

    Ignored predicate:
    - commutative
    - complex
    - algebraic
    - transcendental
    - extended_real
    - real
    - all matrix predicate
    - rational
    - irrational

    Example
    =======
    >>> from sympy.assumptions.lra_satask import extract_pred_from_old_assum
    >>> from sympy import symbols
    >>> x, y = symbols("x y", positive=True)
    >>> extract_pred_from_old_assum([x, y, 2])
    [Q.positive(x), Q.positive(y)]
    Úfree_symbolsr   Tr    z must be realc              3   ó8   K  — | ]  }|j                   d u–— Œ y­w)TN)Úis_real)Ú.0Úargs     r   ú	<genexpr>z.extract_pred_from_old_assum.<locals>.<genexpr>  s   è ø€ Ò(VÀS¨¯©¸DÔ)@Ñ(Vùs   ‚z is an integerFz can't be an integerz is irational)Úhasattrr+   ri   rk   r   rB   r   ÚanyÚargsÚ
is_integerÚis_zeroÚis_rationalr.   r   r\   Úis_positiverZ   Úis_negativer[   Ú
is_nonzerora   Úis_nonpositiver]   Úis_nonnegativer_   )r7   Úretr9   s      r   r*   r*   â   s®  € ð6 €CØó ,ˆÜ�t˜^Ô,ØÜˆt× Ñ Ó! QÒ&Øà�<‰<˜tÑ#Ü  ;¨t¨f°MÐ!BÓCÐCä�dœCÔ ¤SÑ(VÈDÏIÉIÔ(VÔ%VÜ  ;¨t¨f°MÐ!BÓCÐCà�?‰?˜dÒ" t§|¡|°tÒ';Ü  ;¨t¨f°NÐ!CÓDÐDØ�?‰?˜eÒ#Ü  ;¨t¨fÐ4HÐ!IÓJÐJØ×Ñ˜uÒ$Ü  ;¨t¨f°MÐ!BÓCÐCà�<Š<Ø�J‰J”q—v‘v˜d“|Ö$Ø×ÒØ�J‰J”q—z‘z $Ó'Ö(Ø×ÒØ�J‰J”q—z‘z $Ó'Ö(Ø�_Š_Ø�J‰J”q—y‘y “Ö'Ø× Ò Ø�J‰J”q—}‘} TÓ*Ö+Ø× Ô Ø�J‰J”q—}‘} TÓ*Ö+ð=,ð@ €Jr   N))Úsympy.assumptions.assumer   Úsympy.assumptions.cnfr   r   Úsympy.assumptions.askr   Úsympy.logic.inferencer   Ú!sympy.logic.algorithms.lra_theoryr   r	   Úsympy.matrices.kindr
   Úsympy.core.kindr   r   Úsympy.core.mulr   Úsympy.core.singletonr   r   rZ   r[   r\   ra   r]   r_   Úextended_positiveÚextended_negativeÚextended_nonpositiveÚextended_nonzeroÚnegative_infiniteÚpositive_infiniter&   r   r/   rA   rY   r$   r*   © r   r   ú<module>r‹      s.  ðÝ 7ß 1Ý #Ý -ß JÝ *Ý &Ý 5Ý Ý "ð )-Ð6Hó <ð6 ˜QŸZ™Z¨¯©°Q·V±V¸Q¿Y¹YÈÏÉÐWX×WdÑWdØ,-×,?Ñ,?À×ATÑATÐVW×VlÑVlØ,-×,?Ñ,?À×ASÑASÐUV×UhÑUhØ,-×,?Ñ,?ðAñ A€
ò/5òdRòjð4 ×Ñ˜Ÿ™Ø×Ñ˜Ÿ™Ø×Ñ˜AŸM™MØ×Ñ˜Ÿ™Ø×Ñ˜Ÿ	™	Ø×Ñ˜Ø×Ñ˜ðÐ òó<r   