
    sgA                        d dl mZ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 dlmZ d dlmZ d d	lmZmZ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"m#Z#m$Z$ d dl%m&Z& d dl'm(Z( d dlm)Z)m*Z* d dl+Z+d dl,m-Z-m.Z.m/Z/ 	 	 d$dZ0d Z1d%dZ2d Z3d Z4d Z5d Z6e.d        Z7e.d        Z8d Z9d Z:d Z;e.d         Z<d! Z=d" Z>d# Z?y)&    )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                 0   |ffd	t        d| dz   z        }g }t        |      D ]k  }	t        fd|D               d      }}
g }|s|t        |
|      gz  }|s||
|k  |
|k\  gz  }|s||
|k  |
|kD  gz  }|j	                  t        |             m |S )Nc                     t               | k  rt        d      S r@t        d      D cg c]  }t        dd       c}\  }}t	        ||      t        ddg      z  S t        dd      t        ddg      z  S c c}w )Nr      2      
   )r   r   ranger   r   r   r   )sparsity_int1int2rationals       T/var/www/html/venv/lib/python3.12/site-packages/sympy/logic/tests/test_lra_theory.pyrandz!make_random_problem.<locals>.rand   sq    8h1:49!H=q)Ar*=JD$D$'&"a/991b>FB7O33 >s   A6zx1:%sr*   c              3   2   K   | ]  }        |z    y wN ).0r   r3   s     r2   	<genexpr>z&make_random_problem.<locals>.<genexpr>%   s     5atvz5s   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_problemrE      s     4 =1#456IK?# 
,5955tQ7GS3~%G s
C3J//Gc	39--G6'?+
,     c                     ddl m} ddlm} ddlm}  ||  } |d      }|r\ ||      }|j                         }|j                  |       t        |j                               }|dk(  ry|dk(  ry	t        d
|       y )Nr   r   )smtlib_coder   z3satTunsatFz/z3 was not able to check the satisfiability of )sympy.external.importtoolsr   sympy.printing.smtlibrH   sympy.logic.boolalgr   Solverfrom_stringstrcheck
ValueError)	rA   r   rH   r   boolean_formularI   smtlib_stringsress	            r2   check_if_satisfiable_with_z3rX   2   s    81';'O	t	B	#O4IIK	m$!'')n%<G^NN_`aa 
rF   c           	         t        d      }t        |      D ]R  }|j                         D ci c]  \  }}||d   |d   |z  z    }}}	 | D ]  }|j                  |      dk(  rJ  |c S  y c c}}w # t        $ r |dz  }Y lw xY w)Nr*   r   Tr'   )r   r,   itemssubsAssertionError)	constr
assignmentiterepsr.   keyvalassignconss	            r2   find_rational_assignmentre   D   s    
!*C4[ ;E;K;K;MNxsC#s1vAs
**NN	 1yy(D0001M  O
  	a%C	s   A-
A3$A33BBc                 f    t        j                  |       }t               }|j                  |       |S r5   )r   	from_propr   from_cnf)bfcnfencs      r2   boolean_formula_to_encoded_cnfrl   R   s(    
--
C
,CLLJrF   c                      t        d      \  } }t        dk\  t        t        z   dk  t        dt        z  z   t        z
  dk\  z  z  t	        t        t        z   d      t        dt        z  z   t        z
  dkD  z  z  }t        |      }t        j                  |d      \  }}|j                  j                  dk(  sJ t        |j                        d	k(  sJ t        |j                        d
k(  sJ |j                  t        g dg dg      k(  sJ |j                  j                         D ch c]D  }t        |j                         |j"                  |j$                  |j&                  |j(                  fF c}h dk(  sJ y c c}w )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rv   r'   TFF_s2TFFry   TFT)r   r   r   r   r   rl   r   from_encoded_cnfAshaperQ   slacknonslackr	   enc_to_boundaryvaluesvarboundupperequalitystrict)s1s2phirk   lrar.   bs          r2   test_from_encoded_cnfr   Y   sK   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gQSZ!''1::qxx@g l# # # #gs   'A	E;c                     ddl m}  ddlm}m} dt
        z  dt        z  z
  dk\  dt        z  dk\  dt        z  d	k\  g} |       j                  t        |       } |       }|j                  |        | j                  |      \  }}|j                  d
       |j                  d       |j                  d       |j                         \  }}	|du sJ y )Nr   )r   r   rs   r'      rz   rr   r*      T)!sympy.logic.algorithms.lra_theoryr   sympy.assumptions.cnfr   r   r   r   rg   r   rh   r}   
assert_litrR   )
r   r   r   rd   rj   rk   r   r.   is_satr^   s
             r2   test_problemr   m   s    ;5FQUNaa1b1fk:D
%//#t*
%C
,CLL'Y'',FCNN1NN1NN1FJT>>rF   c            
      d   t        d      } | t        d       g }t        d      \  }}}|j                  |d|z  z
  dk  d|z  d|z  z   dk  d	|z  d|z  z   dk  g       |j                  d
|z  dk\  t	        d|z  d      g       |j                  d|z  dk  d|z  dk  g       |j                  d
|z  dk\  d|z  dk  d
|z  dk  g       |j                  t
        t        z   dk\  t
        t        z   dk  g       |j                  t
        dk\  t
        t        z   dk  t
        dt        z  z   t        z
  dk\  g       |j                  d|z  d|z  z
  dk\  d|z  dk\  d|z  dk\  g       |j                  d|z  d
kD  d|z  dk  d|z  dk  g       |j                  d|z  dk  d|z  dkD  g       |j                  d|z  dk\  d|z  |z   dk\  d|z  d|z  z   dk  |dkD  g       |j                  t	        |d      t	        d|z  d      t	        d	|z  d      t	        d|z  d|z  z   d      g       |j                  t	        d|z  d      t	        |d|z  z
  d      t	        d	|z  d|z  z   d      t	        d|z  d      g       |j                  d|z  dk  d|z  dk  g       |j                  d
|z  d|z  z   dk\  d|z  dkD  d|z  d|z  z
  dk  d|z  d|z  z
  dk\  g       |j                  |d|z  z   dk\  d|z  d|z  z
  dk\  d|z  d|z  z   dk  d
|z  d|z  z   d	k  g       |j                  d|z  dk  d|z  d|z  z
  dk  d|z  d|z  z   dkD  d|z  d|z  z
  dkD  g       |j                  d|z  d|z  z
  d	k\  d|z  d|z  z   dk  d	|z  dk  d|z  d	k  g       d}t        d      D ]`  }|dz  dk(  rt        ddd      }nV|dz  dk(  rt        ddddd      }n=|dz  dk(  rt        dddd      }n%|dz  dk(  rt        ddd      }nt        ddd      }|t        |      k  r||   }d|v sd|v rt        | }|dk(  rt        j                  |      }	t               }
|
j                  |	       t!        d  |
j"                  D              sJ t%        j&                  |
d!      \  }}|j(                  }d|_        |j-                         D ci c]  \  }}||
 }}}|
j"                  D ch c]  }|D ]  }|  }}}|D cg c]"  }||j.                  v s|j.                  |   |f$ }}t1        |d" #      }|D ]6  \  }}|j2                  r|j2                  d   dk(  r n|j5                  |       8 |j7                         }|d   dk(  r|dz  }t9        |      du sJ |D cg c]  }|j:                   }}|d   }|j-                         D ci c]  \  }}|j<                  | }}}t>        |v sMt@        |v sE|j-                         D ci c]  \  }}||d    }}}|D ]  }|jC                  |      dk(  rJ  tE        ||      }|J t9        |      du sJ |d   }t        |      dk\  sJ |D ch c]   }|j.                  |    jG                         " }}|D ch c]  }|jC                  |       }}t9        |      du sJ tI        jJ                  |t        |      dz
        D ]  }t9        |      du rJ  c y c c}}w c c}}w c c}w c c}w c c}}w c c}}w c c}w c c}w )$NrI   zz3 is not installedzx1 x2 x3r   rn   ro   r   ir)   r|   rz   r   r'   r*   rs   r   rr   	   ir+      ir(   F)r;   r<   r1   T)r;   r<   r1   r?   r>   )r;   r<   r1   r=      c              3   $   K   | ]  }d |v 
 ywr   Nr6   )r7   clauses     r2   r8   z'test_random_problems.<locals>.<genexpr>   s     :v1F?:s   rp   c                 ~    t        | d   j                        | d   j                  t        | d   j                        fS )Nr   )rQ   r   r   r   )r   s    r2   <lambda>z&test_random_problems.<locals>.<lambda>   s.    s1Q488}adjj#aPQdjj/.Z rF   )ra   )&r   r$   r   r:   r   r   r   r   r,   rE   lenr   r   rg   r   rh   alldatar   r}   s_subs
run_checksrZ   r   sortedresultr   rR   rX   funcr   r    r!   r[   re   get_inequality	itertoolscombinations)rI   special_casesx1x2x3feasible_countirA   r   rj   rk   r   r.   r   ra   value
s_subs_revr   litlitslboundsr   feasiblerd   
cons_funcsr^   rat_assignmentconflictsubsets                                 r2   test_random_problemsr   |   s   	t	B	z"#MWZ%8
B"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 DD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Q39<<>BZS%eSjB
B"%((=f=s===7;X!qCDWDW?W3&&q)1-XX$Z[ 	DAqzzcjjmu4NN1	
 99;A;$aN/<DDD0;<$))<J<!!J<F<L<L<NOjc5#''E/OJO"j04E4S>H>N>N>PQ
Uc58mQ
Q' 9D99Z0D8889 ":+z!R%111/<EEE{Hx=A%%%JRSQ++QB/>>@SHS>FGFJ/GHG/9UBBB $003x=?K D3F;tCCCDGDD< C=X =OQ TGs6   
\)\ \\"\\\"8%\(#\-c                     t        j                  t              t        j                  t              z  t        j                  t
              z  } t        |       }t        j                  |d      \  }}|j                  j                         D ]  }|j                  |       n t        |j                        dk(  sJ |j                         d   dk(  sJ t        j                  t              t        j                  t        d      z  } t        |       }t        j                  |d      \  }}|j                  j                         D ]  }|j                  |       n t        |j                        dk(  sJ |j                         d   dk(  sJ t        j                  t              t        j                  t              z  } t        |       }t        j                  |d      \  }}|j                  j                         D ]  }|j                  |       n t        |j                        dk(  sJ |j                         d   dk(  sJ t        j                  t              t        j                  t
              z  } t        |       }t        j                  |d      \  }}|j                  j                         D ]  }|j                  |       n t        |j                        dk(  sJ |j                         d   dk(  sJ y )NTrp   r   r   Fr)   r'   )r   positiver   negativezeror   rl   r   r}   encodingr   r   r   r   rR   ltri   rk   r   r.   r   s        r2   test_pos_neg_zeror      s}   	
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!!!rF   c                     t        j                  t              t        j                  t        d      z  t        j                  t              z  } t        |       }t        j                  |d      \  }}|j                  j                         D ]  }|j                  |       n t        |j                        dk(  sJ |j                         d   dk(  sJ t        j                  t              t        j                  t        d      z  t        j                  t              z  } t        |       }t        j                  |d      \  }}|j                  j                         D ]  }|j                  |       n t        |j                        dk(  sJ |j                         d   dk(  sJ t        j                  t              t        j                  t              z  } t        |       }t        j                  |d      \  }}|j                  j                         D ]  }|j                  |       n t        |j                        dk(  sJ |j                         d   dk(  sJ y )Ni Trp   r   r   Fr'   )r   positive_infiniter   r   r   rl   r   r}   r   r   r   r   r   rR   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"""rF   c                  |   t        j                  dd      } t        |       }t        j                  |d      \  }}t        |j                        dk(  sJ |dggk(  sJ t        j                  dd      } t        |       }t        j                  |d      \  }}t        |j                        dk(  sJ |dggk(  sJ y )Nr   r'   Trp   r   r*   r)   )r   r   rl   r   r}   r   r   r   )ri   rk   r   	conflictss       r2   test_binrel_evaluationr   !  s    	
aB
(
,C//$GNCs""#q(((!	
aB
(
,C//$GNCs""#q((("rF   c                  h   t         du sJ t        j                  t        d      t        j                  t        d       z  } t	        |       }t        j                  |d      \  }}|j                  D ]  }|D ]  }|j                  |         t        |j                        dk(  sJ |j                         d   dk(  sJ t        |j                         d         ddgddgfv sJ t        j                  t        d       t        j                  t        d       z  } t	        |       }t        j                  |d      \  }}|j                  D ]  }|D ]  }|j                  |         t        |j                        dk(  sJ |j                         d   dk(  sJ t        j                  t        d       t        j                  t        d       z  } t	        |       }t        j                  |d      \  }}|j                  D ]  }|D ]  }|j                  |         t        |j                        dk(  sJ |j                         d   dk(  sJ t        j                  t        d       t        j                  t        d       z  } t	        |       }t        j                  |d      \  }}|j                  D ]  }|D ]  }|j                  |         t        |j                        dk(  sJ |j                         d   dk(  sJ t        j                  t        t        z   d       t        j                   t        t        z
  d       z  t        j                   t        d       z  } t	        |       }t        j                  |d      \  }}|j                  D ]  }|D ]  }|j                  |         t        |j                        d	k(  sJ |j                         d   dk(  sJ t        |j                         d         d	k(  sJ t#        d
 |j                         d   D              sJ y )NTr*   r   rp   r'   Fr)   rs   r   c              3   &   K   | ]	  }|d kD    ywr   r6   )r7   r   s     r2   r8   z test_negation.<locals>.<genexpr>_  s     -q1u-s   )r   r   r   r   rl   r   r}   r   r   r   r   rR   r   r   ler   ger   )ri   rk   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----rF   c                     t         j                  } t        j                  d|       t        j                  t        |       z  }t        |      t        t        fd       t        j                  dt              t        j                  t        t              z  }t        |      t        t        fd       t        j                  dt        d            t        j                  t        t        d            z  }t        |      t        t        fd       t        j                  dt              t        j                  t        t              z  }t        |      t        t        fd       t        j                  t        dz  t        z   d      }t        |      t        t        fd       t        j                  t        t              t        z   d      }t        |      t        t        fd	       y )
Nr   c                  2    t        j                   d      S NTrp   r   r}   rk   s   r2   r   z&test_unhandled_input.<locals>.<lambda>f  s    y99#DQ rF   c                  2    t        j                   d      S r   r   r   s   r2   r   z&test_unhandled_input.<locals>.<lambda>j      9#=#=cPT#U rF   infc                  2    t        j                   d      S r   r   r   s   r2   r   z&test_unhandled_input.<locals>.<lambda>n  r   rF   c                  2    t        j                   d      S r   r   r   s   r2   r   z&test_unhandled_input.<locals>.<lambda>r  r   rF   r'   c                  2    t        j                   d      S r   r   r   s   r2   r   z&test_unhandled_input.<locals>.<lambda>w  r   rF   c                  2    t        j                   d      S r   r   r   s   r2   r   z&test_unhandled_input.<locals>.<lambda>{  r   rF   )r   NaNr   r   r   rl   r"   rS   r   r   floatr   r   )nanri   rk   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VrF   c                     t          t        z
  t        d       k\  t         dkD  z  t        t        d      k\  z  } t        |       }t	        j
                  |d      \  }}t        |j                  j                               D ]  }|j                  |       n t        |j                        dk(  sJ |j                         d   dk(  sJ y )Nr   r   Trp   r   )r   r   r   rl   r   r}   r   r   r   r   r   r   rR   r   s        r2   !test_infinite_strict_inequalitiesr   }  s     "q&U5\M
!a!e	,U5\0A	BB
(
,C''$?FCcll))+, >>#* s""#q(((99;q>T!!!rF   c                     t        d      D ]z  } t        d      }|j                         }t        d      D ]O  } t        dd      t        dd      }}|||f   dk7  s&t	        j
                  |||      j                         |k(  rOJ  | y )Nr+   rr   r   ro   )r,   r
   rrefr   r   _pivot)r.   mr   r   js        r2   
test_pivotr     s    2Y @qMvvxq 	@A1a='!Q-qAAw!| ''1a05574???	@@rF   c                  h   t        j                  t        d      t        j                  t        d      z  } t	        |       }t        j                  |d      \  }}|j                  D ]  }|D ]  }|j                  |         t        |j                        dk(  sJ |j                         d   dk(  sJ |j                          |j                         d   dk(  sJ |j                  D ]  }|j                  t        t!        d      d      k(  sJ |j"                  dk(  sJ |j$                  dk(  sJ |j&                  t        t!        d       d      k(  sJ |j(                  dk(  sJ |j*                  dk(  sJ |j,                  t        dd      k(  sJ |j.                  J |j0                  J  y )Nr*   Trp   r'   r   Fr   )r   r   r   r   rl   r   r}   r   r   r   r   rR   reset_boundsall_varr   r   r   upper_from_equpper_from_neglowerlower_from_eqlower_from_negrc   r   col_idx)ri   rk   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"""{{&&&	'rF   c                      t               } t               }|j                  |        t        j                  |      \  }}t        |      dk(  sJ |j                         di fk(  sJ y )Nr   T)r   r   rh   r   r}   r   rR   )rj   rk   r   r   s       r2   test_empty_cnfr     sZ    
%C
,CLL..s3MCx=A99;4*$$$rF   )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   rN   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$   rE   rX   re   rl   r   r   r   r   r   r   r   r   r   r   r   r   r6   rF   r2   <module>r     s    . . $ % " ' + # #   1 8 ( e e 5 5 & , C  4 4RVZ_6b$#(]D@ #" #"L # #:0.fW6 " "$@'0%rF   