
    shA                        S SK JrJrJr  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  S SKJr  S SKJr  S S	KJrJr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"J#r#J$r$  S SK%J&r&  S SK'J(r(  S SKJ)r)J*r*  S SK+r+S SK,J-r-J.r.J/r/    S$S jr0S r1S%S jr2S r3S r4S r5S r6\.S 5       r7\.S 5       r8S r9S r:S r;\.S  5       r<S! r=S" r>S# r?g)&    )RationalIoo)Eq)symbols)S)Matrix)
randMatrix)QAnd)xyzCNF
EncodedCNF)cosimport_module)	LRASolverUnhandledInputLRARationalHANDLE_NEGATION)randomchoicerandint)sympify)	randprime)StrictLessThanStrictGreaterThanN)raisesXFAILskipc                 F  ^^ U4U4S jjm[        SU S-   -  5      n/ n[        U5       Hs  n	[        U4S jU 5       5      T" SS9p/ nU(       d  U[        X5      /-  nU(       d  XU:*  X:  /-  nU(       d  XU:  X:  /-  nUR	                  [        U5      5        Mu     U$ )Nc                   > [        5       U :  a  [        S5      $ T(       aA  [        S5       Vs/ s H  n[        SS5      PM     snu  p#[	        X#5      [        SS/5      -  $ [        SS5      [        SS/5      -  $ s  snf )Nr      2      
   )r   r   ranger   r   r   r   )sparsity_int1int2rationals       u/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/sympy/logic/tests/test_lra_theory.pyrand!make_random_problem.<locals>.rand   sq    8h1:49!H=Hq)Ar*H=JDD'&"a/991b>FB7O33 >s   A=zx1:%sr*   c              3   8   >#    U  H  nT" 5       U-  v   M     g 7fN ).0r   r3   s     r2   	<genexpr>&make_random_problem.<locals>.<genexpr>%   s     59atvz9s   r   )r-   )r   r,   sumr   appendr   )num_variablesnum_constraintsr-   r1   disable_strictdisable_nonstrictdisable_equality	variablesconstraintsr.   lhsrhsoptionsr3   s      `         @r2   make_random_problemrG      s     4 =1#456IK?#5955tQ7GS3~%G s
CJ//Gc	39--G6'?+ $     c                    SSK Jn  SSKJn  SSKJn  U" U 6 nU" S5      nU(       a^  U" U5      nUR                  5       nUR                  U5        [        UR                  5       5      nUS:X  a  gUS:X  a  g	[        S
U 35      eg )Nr   r   )smtlib_coder   z3satTunsatFz/z3 was not able to check the satisfiability of )sympy.external.importtoolsr   sympy.printing.smtlibrJ   sympy.logic.boolalgr   Solverfrom_stringstrcheck
ValueError)	rC   r   rJ   r   boolean_formularK   smtlib_stringsress	            r2   check_if_satisfiable_with_z3rZ   2   s    81';'O	t	B	#O4IIK	m$!'')n%<G^NN_`aa 
rH   c           	         [        S5      n[        U5       HV  nUR                  5        VVs0 s H  u  pVXVS   US   U-  -   _M     nnn U  H  nUR                  U5      S:X  a  M   e   Us  $    g s  snnf ! [         a	    US-  n Ms  f = f)Nr*   r   Tr'   )r   r,   itemssubsAssertionError)	constr
assignmentiterepsr.   keyvalassignconss	            r2   find_rational_assignmentrg   D   s    
!*C4[;E;K;K;MN;Mxs#1vAs
**;MN	yy(D000 M   O
  	a%C	s   A2A8'A88B
Bc                 h    [         R                  " U 5      n[        5       nUR                  U5        U$ r6   )r   	from_propr   from_cnf)bfcnfencs      r2   boolean_formula_to_encoded_cnfrn   R   s(    
--
C
,CLLJrH   c                     [        S5      u  p[        S:  [        [        -   S:*  [        S[        -  -   [        -
  S:  -  -  [	        [        [        -   S5      [        S[        -  -   [        -
  S:  -  -  n[        U5      n[        R                  " USS9u  pEUR                  R                  S:X  d   e[        UR                  5      S	:X  d   e[        UR                  5      S
:X  d   eUR                  [        / SQ/ SQ/5      :X  d   eUR                  R                  5        Vs1 s HE  n[        UR                   5      UR"                  UR$                  UR&                  UR(                  4iMG     sn1 Sk:X  d   eg s  snf )Nzs1 s2r   r'         Ttesting_mode)r'      z
[_s1, _s2]z	[x, y, z])r*   r*   r   r)   r   )r)   r*   r   r)   >   r   r   FFF_s1r'   NTFrx   r'   TFF_s2TFFr{   TFT)r   r   r   r   r   rn   r   from_encoded_cnfAshaperS   slacknonslackr	   enc_to_boundaryvaluesvarboundupperequalitystrict)s1s2phirm   lrar.   bs          r2   test_from_encoded_cnfr   Y   sM   WFB 6q1uza!a%i!mq&89
:bQlaRSVWRWiZ[m^_N_>`
aC
(
-C''$?FC55;;&   syy>\)))s||+++55F//1 2 2 2 2JMJ]J]JdJdJfgJfQSZ!''1::qxx@Jfg l# # # #gs   'AE?c                     SSK Jn   SSKJnJn  S[
        -  S[        -  -
  S:  S[        -  S:  S[        -  S	:  /nU" 5       R                  [        U6 5      nU" 5       nUR                  U5        U R                  " U5      u  pgUR                  S
5        UR                  S5        UR                  S5        UR                  5       u  pUSL d   eg )Nr   )r   r   ru   r'      r|   rt   r*      T)!sympy.logic.algorithms.lra_theoryr   sympy.assumptions.cnfr   r   r   r   ri   r   rj   r   
assert_litrT   )
r   r   r   rf   rl   rm   r   r.   is_satr`   s
             r2   test_problemr   m   s    ;5FQUNaa1b1fk:D
%//#t*
%C
,CLL'',FCNN1NN1NN1FT>>rH   c            
         [        S5      n U c  [        S5        / n[        S5      u  p#nUR                  USU-  -
  S:*  SU-  SU-  -   S:*  S	U-  SU-  -   S:*  /5        UR                  S
U-  S:  [	        SU-  S5      /5        UR                  SU-  S:  SU-  S:*  /5        UR                  S
U-  S:  SU-  S:*  S
U-  S:*  /5        UR                  [
        [        -   S:  [
        [        -   S:*  /5        UR                  [
        S:  [
        [        -   S:*  [
        S[        -  -   [        -
  S:  /5        UR                  SU-  SU-  -
  S:  SU-  S:  SU-  S:  /5        UR                  SU-  S
:  SU-  S:  SU-  S:*  /5        UR                  SU-  S:  SU-  S:  /5        UR                  SU-  S:  SU-  U-   S:  SU-  SU-  -   S:  US:  /5        UR                  [	        US5      [	        SU-  S5      [	        S	U-  S5      [	        SU-  SU-  -   S5      /5        UR                  [	        SU-  S5      [	        USU-  -
  S5      [	        S	U-  SU-  -   S5      [	        SU-  S5      /5        UR                  SU-  S:  SU-  S:*  /5        UR                  S
U-  SU-  -   S:  SU-  S:  SU-  SU-  -
  S:  SU-  SU-  -
  S:  /5        UR                  USU-  -   S:  SU-  SU-  -
  S:  SU-  SU-  -   S:  S
U-  SU-  -   S	:  /5        UR                  SU-  S:  SU-  SU-  -
  S:  SU-  SU-  -   S:  SU-  SU-  -
  S:  /5        UR                  SU-  SU-  -
  S	:  SU-  SU-  -   S:  S	U-  S:*  SU-  S	:*  /5        Sn[        S5       GH  nUS-  S:X  a  [        SSSS9nOMUS-  S:X  a  [        SSSSSS9nO6US-  S:X  a  [        SSSSS9nO US-  S:X  a  [        SSSS9nO[        SSSS9nU[        U5      :  a  X   nSU;   d  SU;   a  M  [        U6 nUS:X  a  M  [        R                  " U5      n	[        5       n
U
R                  U	5        [!        S  U
R"                   5       5      (       d   e[$        R&                  " U
SS!9u  pUR(                  nSUl        UR-                  5        VVs0 s H  u  pX_M	     nnnU
R"                   VVs1 s H  nU  H  nUiM     M     nnnU Vs/ s H&  nUUR.                  ;   d  M  UR.                  U   U4PM(     nn[1        US" S#9nU H=  u  nnUR2                  (       a  UR2                  S   S:X  a    OUR5                  U5        M?     UR7                  5       nUS   S:X  a  US-  n[9        U5      SL d   eU Vs/ s H  nUR:                  PM     nnUS   nUR-                  5        VVs0 s H  u  pUR<                  U_M     nnn[>        U;   dT  [@        U;   dJ  UR-                  5        VVs0 s H
  u  pXS   _M     nnnU H  nURC                  U5      S:X  a  M   e   GM  [E        UU5      nUc   eGM  [9        U5      SL d   eUS   n[        U5      S:  d   eU Vs1 s H!  nUR.                  U*    RG                  5       iM#     nnU Vs1 s H  nURC                  U5      iM     nn[9        U5      SL d   e[H        RJ                  " U[        U5      S-
  5       H  n[9        U5      SL a  M   e   GM     g s  snnf s  snnf s  snf s  snf s  snnf s  snnf s  snf s  snf )$NrK   zz3 is not installedzx1 x2 x3r   rp   rq   r   ir)   r~   r|   r   r'   r*   ru   r   rt   	   ir+      ir(   F)r=   r>   r1   T)r=   r>   r1   rA   r@   )r=   r>   r1   r?      c              3   ,   #    U  H
  nS U;  v   M     g7fr   Nr7   )r8   clauses     r2   r9   'test_random_problems.<locals>.<genexpr>   s     :v1F?s   rr   c                 ~    [        U S   R                  5      U S   R                  [        U S   R                  5      4$ )Nr   )rS   r   r   r   )r   s    r2   <lambda>&test_random_problems.<locals>.<lambda>   s,    s1Q488}adjj#aPQdjj/.ZrH   )rc   )&r   r$   r   r<   r   r   r   r   r,   rG   lenr   r   ri   r   rj   alldatar   r   s_subs
run_checksr\   r   sortedresultr   rT   rZ   funcr   r    r!   r]   rg   get_inequality	itertoolscombinations)rK   special_casesx1x2x3feasible_countirC   r   rl   rm   r   r.   r   rc   value
s_subs_revr   litlitslboundsr   feasiblerf   
cons_funcsr`   rat_assignmentconflictsubsets                                 r2   test_random_problemsr   |   s   	t	B	z"#MWZ%8
"q2v++QVa"f_-A27QQSVCSWXCXYZ"r'Q,1r6278"r'A+q2v|45"r'Q,B"b2gmDE!a%1*a!eqj12!q&!a%1*a!a%i!mq.@AB"r'AF*a/bArBw!|LM!b&2+rBw|QVq[AB"R%"*adRi01"R%2+r"urzQ2"q8H"q&QR"R)R"b\2beR="QrTBrE\STBUVW"QrT1+r"qt)R'8"RUQrT\1:MrRSTVRVXY{[\"R%!)QrTRZ01"R%!B$,",c"fqj!B$2+/2b5STUWSW<[]K]^_"qt)r/1R4!B$;"+<adQrTkC>OQSTVQVYZ[]Y]Q]`bQbcd"R%!)RUQrT\B%6"qtaBQRSUQUXYIYZ[!B$2++QrTAbD[2-=r"uz2b5TV;WXN2Yq5A:-Aq[`aKUaZ-Aq[`sw@DFKUaZ-Aq[`quvKUaZ-Ar\abK-Aq[`aKs=!!'*KK4;#6;%<mmC 
#S::::::++CdC39<<>B>ZSej>
B"%((=(fsf(=7;Xt!qCDWDW?W-3&&q)1-tX$Z[DAqzzcjjmu4NN1 
 99;A;$aN/<DDD0;<$))J<!!J<F<L<L<NO<Njc#''E/<NJO"j04E4S>H>N>N>PQ>P
c8m>P
Q'D99Z0D888 ( ":+z!R%111/<EEE{Hx=A%%%JRS(Q++QB/>>@(HS>FGhFJ/hHG/9UBBB $003x=?K3F;tCCC LG < C=X =OQ TGs6   	\8)\>]]5]	%](](]]c                  <   [         R                  " [        5      [         R                  " [        5      -  [         R                  " [
        5      -  n [        U 5      n[        R                  " USS9u  p#UR                  R                  5        H  nUR                  U5      c  M    O   [        UR                  5      S:X  d   eUR                  5       S   S:X  d   e[         R                  " [        5      [         R                  " [        S5      -  n [        U 5      n[        R                  " USS9u  p#UR                  R                  5        H  nUR                  U5      c  M    O   [        UR                  5      S:X  d   eUR                  5       S   S:X  d   e[         R                  " [        5      [         R                  " [        5      -  n [        U 5      n[        R                  " USS9u  p#UR                  R                  5        H  nUR                  U5      c  M    O   [        UR                  5      S:X  d   eUR                  5       S   S:X  d   e[         R                  " [        5      [         R                  " [
        5      -  n [        U 5      n[        R                  " USS9u  p#UR                  R                  5        H  nUR                  U5      c  M    O   [        UR                  5      S:X  d   eUR                  5       S   S:X  d   eg )NTrr   r   r   Fr)   r'   )r   positiver   negativezeror   rn   r   r   encodingr   r   r   r   rT   ltrk   rm   r   r.   r   s        r2   test_pos_neg_zeror      sa   	
AA	&	2B
(
,C''$?FC||""$>>#* % s""#q(((99;q>U"""	
Aa	$B
(
,C''$?FC||""$>>#* % s""#q(((99;q>U"""	
A	"B
(
,C''$?FC||""$>>#* % s""#q(((99;q>U"""	
A	"B
(
,C''$?FC||""$>>#* % s""#q(((99;q>T!!!rH   c                     [         R                  " [        5      [         R                  " [        S5      -  [         R                  " [        5      -  n [        U 5      n[        R                  " USS9u  p#UR                  R                  5        H  nUR                  U5      c  M    O   [        UR                  5      S:X  d   eUR                  5       S   S:X  d   e[         R                  " [        5      [         R                  " [        S5      -  [         R                  " [        5      -  n [        U 5      n[        R                  " USS9u  p#UR                  R                  5        H  nUR                  U5      c  M    O   [        UR                  5      S:X  d   eUR                  5       S   S:X  d   e[         R                  " [        5      [         R                  " [        5      -  n [        U 5      n[        R                  " USS9u  p#UR                  R                  5        H  nUR                  U5      c  M    O   [        UR                  5      S:X  d   eUR                  5       S   S:X  d   eg )Ni Trr   r   r   Fr'   )r   positive_infiniter   r   r   rn   r   r   r   r   r   r   r   rT   gtnegative_infiniter   s        r2   test_pos_neg_infiniter     s   	
		Q	!$$q("3	3a6I6I!6L	LB
(
,C''$?FC||""$>>#* % s""#q(((99;q>U"""	
		Q	!$$q("3	3a6I6I!6L	LB
(
,C''$?FC||""$>>#* % s""#q(((99;q>T!!!	
		Q	!"5"5a"8	8B
(
,C''$?FC||""$>>#* % s""#q(((99;q>U"""rH   c                  |   [         R                  " SS5      n [        U 5      n[        R                  " USS9u  p#[        UR                  5      S:X  d   eUS//:X  d   e[         R                  " SS5      n [        U 5      n[        R                  " USS9u  p#[        UR                  5      S:X  d   eUS//:X  d   eg )Nr   r'   Trr   r   r*   r)   )r   r   rn   r   r   r   r   r   )rk   rm   r   	conflictss       r2   test_binrel_evaluationr   !  s    	
aB
(
,C//$GNCs""#q(((!	
aB
(
,C//$GNCs""#q((("rH   c                     [         SL d   e[        R                  " [        S5      [        R                  " [        S5      ) -  n [	        U 5      n[
        R                  " USS9u  p#UR                   H  nU H  nUR                  U5        M     M     [        UR                  5      S:X  d   eUR                  5       S   S:X  d   e[        UR                  5       S   5      SS/SS/4;   d   e[        R                  " [        S5      ) [        R                  " [        S5      ) -  n [	        U 5      n[
        R                  " USS9u  p#UR                   H  nU H  nUR                  U5        M     M     [        UR                  5      S:X  d   eUR                  5       S   S:X  d   e[        R                  " [        S5      ) [        R                  " [        S5      ) -  n [	        U 5      n[
        R                  " USS9u  p#UR                   H  nU H  nUR                  U5        M     M     [        UR                  5      S:X  d   eUR                  5       S   S:X  d   e[        R                  " [        S5      ) [        R                  " [        S5      ) -  n [	        U 5      n[
        R                  " USS9u  p#UR                   H  nU H  nUR                  U5        M     M     [        UR                  5      S:X  d   eUR                  5       S   S:X  d   e[        R                  " [        [        -   S5      ) [        R                   " [        [        -
  S5      ) -  [        R                   " [        S5      ) -  n [	        U 5      n[
        R                  " USS9u  p#UR                   H  nU H  nUR                  U5        M     M     [        UR                  5      S	:X  d   eUR                  5       S   S:X  d   e[        UR                  5       S   5      S	:X  d   e[#        S
 UR                  5       S    5       5      (       d   eg )NTr*   r   rr   r'   Fr)   ru   r   c              3   *   #    U  H	  oS :  v   M     g7fr   r7   )r8   r   s     r2   r9    test_negation.<locals>.<genexpr>_  s     -n1uns   )r   r   r   r   rn   r   r   r   r   r   r   rT   r   r   ler   ger   )rk   rm   r   r.   r   r   s         r2   test_negationr   /  s   d"""	
aqttAqzk	!B
(
,C''$?FC((CNN3   s""#q(((99;q>U"""#))+a.!r1gAw%7777
$$q!*Q
{	"B
(
,C''$?FC((CNN3   s""#q(((99;q>T!!!
$$q!*Q
{	"B
(
,C''$?FC((CNN3   s""#q(((99;q>U"""
$$q!*Q
{	"B
(
,C''$?FC((CNN3   s""#q(((99;q>U"""
$$qsA,!$$qsA,	&!$$q!*	4B
(
,C''$?FC((CNN3   s""#q(((99;q>U"""syy{1~!###-ciik!n-----rH   c                    ^ [         R                  n [        R                  " SU 5      [        R                  " [        U 5      -  n[        U5      m[        [        U4S j5        [        R                  " S[        5      [        R                  " [        [        5      -  n[        U5      m[        [        U4S j5        [        R                  " S[        S5      5      [        R                  " [        [        S5      5      -  n[        U5      m[        [        U4S j5        [        R                  " S[        5      [        R                  " [        [        5      -  n[        U5      m[        [        U4S j5        [        R                  " [        S-  [        -   S5      n[        U5      m[        [        U4S j5        [        R                  " [        [        5      [        -   S5      n[        U5      m[        [        U4S	 j5        g )
Nr   c                  .   > [         R                  " T SS9$ NTrr   r   r   rm   s   r2   r   &test_unhandled_input.<locals>.<lambda>f  s    y99#DQrH   c                  .   > [         R                  " T SS9$ r   r   r   s   r2   r   r   j      9#=#=cPT#UrH   infc                  .   > [         R                  " T SS9$ r   r   r   s   r2   r   r   n  r   rH   c                  .   > [         R                  " T SS9$ r   r   r   s   r2   r   r   r  r   rH   r'   c                  .   > [         R                  " T SS9$ r   r   r   s   r2   r   r   w  r   rH   c                  .   > [         R                  " T SS9$ r   r   r   s   r2   r   r   {  r   rH   )r   NaNr   r   r   rn   r"   rU   r   r   floatr   r   )nanrk   rm   s     @r2   test_unhandled_inputr   b  s>   
%%C	
aQ	$B
(
,C
:QR	
aadd1aj	 B
(
,C
>UV	
au	au!6	6B
(
,C
>UV	
aqttAr{	"B
(
,C
>UV 
adQh	B
(
,C
>UV	
c!fqj!	B
(
,C
>UVrH   c                     [         * [        -
  [        S5      * :  [         S:  -  [        [        S5      :  -  n [        U 5      n[        R
                  " USS9u  p#[        UR                  R                  5       5       H  nUR                  U5      c  M    O   [        UR                  5      S:X  d   eUR                  5       S   S:X  d   eg )Nr   r   Trr   r   )r   r   r   rn   r   r   r   r   r   r   r   r   rT   r   s        r2   !test_infinite_strict_inequalitiesr   }  s     "q&U5\M
!a!e	,U5\0A	BB
(
,C''$?FCcll))+,>>#* - s""#q(((99;q>T!!!rH   c                     [        S5       H~  n [        S5      nUR                  5       n[        S5       HQ  n [        SS5      [        SS5      pCXU4   S:w  d  M&  [        R
                  " XU5      R                  5       U:X  a  MQ   e   M     g )Nr+   rt   r   rq   )r,   r
   rrefr   r   _pivot)r.   mr   r   js        r2   
test_pivotr     sv    2YqMvvxqA1a='!Q-qAw!| ''a05574???  rH   c                     [         R                  " [        S5      [         R                  " [        S5      -  n [	        U 5      n[
        R                  " USS9u  p#UR                   H  nU H  nUR                  U5        M     M     [        UR                  5      S:X  d   eUR                  5       S   S:X  d   eUR                  5         UR                  5       S   S:X  d   eUR                   H  nUR                  [        [!        S5      S5      :X  d   eUR"                  S:X  d   eUR$                  S:X  d   eUR&                  [        [!        S5      * S5      :X  d   eUR(                  S:X  d   eUR*                  S:X  d   eUR,                  [        SS5      :X  d   eUR.                  c   eUR0                  b  M   e   g )Nr*   Trr   r'   r   Fr   )r   r   r   r   rn   r   r   r   r   r   r   rT   reset_boundsall_varr   r   r   upper_from_equpper_from_neglowerlower_from_eqlower_from_negre   r   col_idx)rk   rm   r   r.   r   r   r   s          r2   test_reset_boundsr     s   	
aadd1aj	 B
(
,C''$?FC((CNN3   s""#q(((99;q>U"""99;q>T!!!{{yyKea8888  E)))!!U***yyKuq9999  E)))!!U***zz[A....ww"""{{&&& rH   c                      [        5       n [        5       nUR                  U 5        [        R                  " U5      u  p#[        U5      S:X  d   eUR                  5       S0 4:X  d   eg )Nr   T)r   r   rj   r   r   r   rT   )rl   rm   r   r   s       r2   test_empty_cnfr     sX    
%C
,CLL..s3MCx=A99;4*$$$rH   )r'   r'   g?TFFF)   )@sympy.core.numbersr   r   r   sympy.core.relationalr   sympy.core.symbolr   sympy.core.singletonr   sympy.matrices.denser	   r
   sympy.assumptions.askr   rP   r   	sympy.abcr   r   r   r   r   r   (sympy.functions.elementary.trigonometricr   sympy.externalr   r   r   r   r   r   sympy.core.randomr   r   r   sympy.core.sympifyr   sympy.ntheory.generater   r    r!   r   sympy.testing.pytestr"   r#   r$   rG   rZ   rg   rn   r   r   r   r   r   r   r   r   r   r   r   r   r7   rH   r2   <module>r     s    . . $ % " ' + # #   1 8 ( e e 5 5 & , C  4 4RVZ_6b$#(]D@ #" #"L # #:0.fW6 " "$@'0%rH   