
    QiA                        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?dS )+    )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skip   皙?TFc                 p   |ffd	t          d| dz   z            }g }t          |          D ]}	t          fd|D                        d          }}
g }|s|t          |
|          gz  }|s||
|k    |
|k    gz  }|s||
|k     |
|k    gz  }|                    t          |                     |S )Nc                 
   t                      | k     rt          d          S r>d t          d          D             \  }}t          ||          t	          ddg          z  S t          dd          t	          ddg          z  S )Nr   c                 .    g | ]}t          d d          S )r   2   r   ).0_s     y/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/sympy/logic/tests/test_lra_theory.py
<listcomp>z5make_random_problem.<locals>.rand.<locals>.<listcomp>   s"    ===q)Ar**===    r&      
   )r   r   ranger   r   r   )sparsityint1int2rationals      r.   randz!make_random_problem.<locals>.rand   s    88h1:: 	4==E!HH===JD$D$''&"a//991b>>FB7OO33r0   zx1:%sr2   c              3   2   K   | ]}             |z  V  d S N )r,   r   r9   s     r.   	<genexpr>z&make_random_problem.<locals>.<genexpr>%   s-      55attvvz555555r0   r   )r5   )r   r4   sumr   appendr   )num_variablesnum_constraintsr5   r8   disable_strictdisable_nonstrictdisable_equality	variablesconstraintsr-   lhsrhsoptionsr9   s      `         @r.   make_random_problemrJ      s    4 4 4 4 4 4 =1#4566IK?## 
, 
,5555955555ttQ7G7G7GS 	&3~%G  	0s
C3J//G 	.c	39--G6'??++++r0   c                 <   ddl m} ddlm} ddlm}  ||  } |d          }|rw ||          }|                                }|                    |           t          |	                                          }|dk    rdS |dk    rd	S t          d
|           d S )Nr   r   )smtlib_coder   z3satTunsatFz/z3 was not able to check the satisfiability of )sympy.external.importtoolsr   sympy.printing.smtlibrL   sympy.logic.boolalgr   Solverfrom_stringstrcheck
ValueError)	rF   r   rL   r   boolean_formularM   smtlib_stringsress	            r.   check_if_satisfiable_with_z3r\   2   s    888888111111''''''c;'O	t		B	 
b#O44IIKK	m$$$!''))nn%<<4G^^5```aaa
b 
br0      c                     t          d          t          |          D ][}fd|                                D             }	 | D ]}|                    |          dk    sJ |c S # t          $ r dz  Y Xw xY wd S )Nr2   c                 @    i | ]\  }}||d          |d         z  z   S )r   r2   r<   )r,   keyvalepss      r.   
<dictcomp>z,find_rational_assignment.<locals>.<dictcomp>H   s0    NNNxsC#s1vAs
*NNNr0   Tr&   )r   r4   itemssubsAssertionError)constr
assignmentiterr-   assignconsrb   s         @r.   find_rational_assignmentrl   D   s    
!**C4[[  NNNN:;K;K;M;MNNN	 1 1yy((D00000MMM 	 	 	a%CCC	 4s   !A''A98A9c                 t    t          j        |           }t                      }|                    |           |S r;   )r   	from_propr   from_cnf)bfcnfencs      r.   boolean_formula_to_encoded_cnfrs   R   s1    
-

C
,,CLLJr0   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k    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 d |j                                        D             h dk    sJ d S )Nzs1 s2r   r&         Ttesting_mode)r&      z
[_s1, _s2]z	[x, y, z])r2   r2   r   r1   r   )r1   r2   r   r1   c                 h    h | ]/}t          |j                  |j        |j        |j        |j        f0S r<   )rU   varboundupperequalitystrict)r,   bs     r.   	<setcomp>z(test_from_encoded_cnf.<locals>.<setcomp>f   s3    gggQSZZ!'1:qx@gggr0   >   r   r   FFF_s1r&   NTFr   r&   TFF_s2TFFr   TFT)r   r   r   r   r   rs   r   from_encoded_cnfAshaperU   slacknonslackr	   enc_to_boundaryvalues)s1s2phirr   lrar-   s         r.   test_from_encoded_cnfr   Y   sh   WFB 6q1uza!a%i!mq&89
:bQllaRSVWRWiZ[m^_N_>`
aC
(
-
-C'$???FC5;&    sy>>\))))s|++++5F//////1 2 2 2 2 2 2gg#J]JdJdJfJfggg l# l# l# # # # # # #r0   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} |                                t          |           } |            }|	                    |            | j
        |          \  }}|                    d
           |                    d           |                    d           |                                \  }}	|du sJ d S )Nr   )r   r   rz   r&      r   ry   r2      T)!sympy.logic.algorithms.lra_theoryr   sympy.assumptions.cnfr   r   r   r   rn   r   ro   r   
assert_litrV   )
r   r   r   rk   rq   rr   r   r-   is_satrh   s
             r.   test_problemr   m   s    ;;;;;;55555555FQUNaa1b1fk:D
#%%//#t*
%
%C
*,,CLL'Y',,FCNN1NN1NN1FJT>>>>>>r0   c            
         t          d          } | t          d           g }t          d          \  }}}|                    |d|z  z
  dk    d|z  d|z  z   dk    d	|z  d|z  z   dk    g           |                    d
|z  dk    t	          d|z  d          g           |                    d|z  dk     d|z  dk    g           |                    d
|z  dk    d|z  dk    d
|z  dk    g           |                    t
          t          z   dk    t
          t          z   dk    g           |                    t
          dk    t
          t          z   dk    t
          dt          z  z   t          z
  dk    g           |                    d|z  d|z  z
  dk    d|z  dk    d|z  dk    g           |                    d|z  d
k    d|z  dk     d|z  dk    g           |                    d|z  dk     d|z  dk    g           |                    d|z  dk    d|z  |z   dk    d|z  d|z  z   dk     |dk    g           |                    t	          |d          t	          d|z  d          t	          d	|z  d          t	          d|z  d|z  z   d          g           |                    t	          d|z  d          t	          |d|z  z
  d          t	          d	|z  d|z  z   d          t	          d|z  d          g           |                    d|z  dk     d|z  dk    g           |                    d
|z  d|z  z   dk    d|z  dk    d|z  d|z  z
  dk     d|z  d|z  z
  dk    g           |                    |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           |                    d|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           |                    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          }ni|dz  dk    rt          ddddd          }nK|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                      }
|
                    |	           t!          d  |
j        D                       sJ t%          j        |
d!          \  }j        }d_        d" |                                D             d# |
j        D             }fd$|D             }t/          |d% &          }|D ]4\  }}j        rj        d         dk    r n                    |           5                                }|d         dk    r|dz  }t7          |          du sJ d' |D             }|d         }d( |                                D             }t8          |v sIt:          |v s@d) |                                D             }|D ]}|                    |          dk    sJ |t?          ||          }|J t7          |          du sJ |d         }t          |          dk    sJ fd*|D             }fd+|D             }t7          |          du sJ tA          j!        |t          |          dz
            D ]}t7          |          du sJ .d S ),NrM   zz3 is not installedzx1 x2 x3r   ru   rv   r   ir1   r   r   r   r&   r2   rz   r   ry   	   ir3      ir+   F)r@   rA   r8   T)r@   rA   r8   rD   rC   )r@   rA   r8   rB      c              3      K   | ]}d |vV  	dS r   Nr<   )r,   clauses     r.   r=   z'test_random_problems.<locals>.<genexpr>   s&      ::v1F?::::::r0   rw   c                     i | ]\  }}||	S r<   r<   r,   r`   values      r.   rc   z(test_random_problems.<locals>.<dictcomp>   s    BBBZS%eSBBBr0   c                     h | ]	}|D ]}|
S r<   r<   )r,   r   lits      r.   r   z'test_random_problems.<locals>.<setcomp>   s%    ===f==s====r0   c                 @    g | ]}|j         v j         |         |fS r<   )r   r,   lr   s     r.   r/   z(test_random_problems.<locals>.<listcomp>   s3    XXX!qCDW?W?W3&q)1-?W?W?Wr0   c                     t          | d         j                  | d         j        t          | d         j                  fS )Nr   )rU   r|   r}   r~   )r   s    r.   <lambda>z&test_random_problems.<locals>.<lambda>   s,    s1Q48}}adj#aPQdj//.Z r0   )r`   c                     g | ]	}|j         
S r<   )func)r,   rk   s     r.   r/   z(test_random_problems.<locals>.<listcomp>   s    <<<$)<<<r0   c                 $    i | ]\  }}|j         |S r<   )r|   r   s      r.   rc   z(test_random_problems.<locals>.<dictcomp>   s     OOOjc5#'EOOOr0   c                 &    i | ]\  }}||d          S )r   r<   r   s      r.   rc   z(test_random_problems.<locals>.<dictcomp>   s"    QQQ
Uc58QQQr0   c                 P    h | ]"}j         |                                          #S r<   )r   get_inequalityr   s     r.   r   z'test_random_problems.<locals>.<setcomp>   s/    SSSQ+QB/>>@@SSSr0   c                 :    h | ]}|                               S r<   )re   )r,   r   
s_subs_revs     r.   r   z'test_random_problems.<locals>.<setcomp>   s%    GGGFJ//GGGr0   )"r   r%   r   r?   r   r   r   r   r4   rJ   lenr   r   rn   r   ro   alldatar   r   s_subs
run_checksrd   sortedresultr   rV   r\   r!   r"   re   rl   	itertoolscombinations)rM   special_casesx1x2x3feasible_countirF   r   rq   rr   r-   r   litsboundsr   r   feasible
cons_funcsrh   rk   rat_assignmentconflictsubsetr   r   s                           @@r.   test_random_problemsr   |   s   	t		B	z"###MWZ%8%8
B"q2v++QVa"f_-A27QQSVCSWXCXYZZZ"r'Q,1r627888"r'A+q2v|4555"r'Q,B"b2gmDEEE!a%1*a!eqj1222!q&!a%1*a!a%i!mq.@ABBB"r'AF*a/bArBw!|LMMM!b&2+rBw|QVq[ABBB"R%"*adRi0111"R%2+r"urzQ2"q8H"q&QRRR"R))R"b\\2beR=="QrTBrE\STBUBUVWWW"QrT1++r"qt)R'8'8"RUQrT\1:M:MrRSTVRVXY{{[\\\"R%!)QrTRZ0111"R%!B$,",c"fqj!B$2+/2b5STUWSW<[]K]^___"qt)r/1R4!B$;"+<adQrTkC>OQSTVQVYZ[]Y]Q]`bQbcddd"R%!)RUQrT\B%6"qtaBQRSUQUXYIYZ[[[!B$2++QrTAbD[2-=r"uz2b5TV;WXXXN2YY DD DDq5A::-Aq[`aaaKKUaZZ-Aq[`sw@DF F FKKUaZZ-Aq[`quvvvKKUaZZ-Ar\abbbKK-Aq[`aaaKs=!!!!'*KK4;#6#6;%<<mC  
#S::::::::::+CdCCCQBB6<<>>BBB
==#(===XXXXtXXX$Z$Z[[[ 	 	DAqz cjmu44NN199;;A;$aN/<<DDDD<<<<<J!!JOOJ<L<L<N<NOOOJ"j004E4S4SQQj>N>N>P>PQQQ
' 9 9D99Z00D888889 ":+z!R!R%1111/<<EEEE{Hx==A%%%%SSSS(SSSHGGGGhGGGH/99UBBBB $03x==?KK D D3F;;tCCCCCDGDD DDr0   c                  |   t          j        t                    t          j        t                    z  t          j        t
                    z  } t          |           }t          j        |d          \  }}|j	        
                                D ]}|                    |           nt          |j                  dk    sJ |                                d         dk    sJ t          j        t                    t          j        t          d          z  } t          |           }t          j        |d          \  }}|j	        
                                D ]}|                    |           nt          |j                  dk    sJ |                                d         dk    sJ t          j        t                    t          j        t                    z  } t          |           }t          j        |d          \  }}|j	        
                                D ]}|                    |           nt          |j                  dk    sJ |                                d         dk    sJ t          j        t                    t          j        t
                    z  } t          |           }t          j        |d          \  }}|j	        
                                D ]}|                    |           nt          |j                  dk    sJ |                                d         dk    sJ d S )NTrw   r   r   Fr1   r&   )r   positiver   negativezeror   rs   r   r   encodingr   r   r   r   rV   ltrp   rr   r   r-   r   s        r.   test_pos_neg_zeror      s   	
AA	&	2B
(
,
,C'$???FC|""$$  >>#*E +s"##q((((99;;q>U""""	
Aa	$B
(
,
,C'$???FC|""$$  >>#*E +s"##q((((99;;q>U""""	
A	"B
(
,
,C'$???FC|""$$  >>#*E +s"##q((((99;;q>U""""	
A	"B
(
,
,C'$???FC|""$$  >>#*E +s"##q((((99;;q>T!!!!!!r0   c                  "   t          j        t                    t          j        t          d          z  t          j        t                    z  } t          |           }t          j        |d          \  }}|j        	                                D ]}|
                    |           nt          |j                  dk    sJ |                                d         dk    sJ t          j        t                    t          j        t          d          z  t          j        t                    z  } t          |           }t          j        |d          \  }}|j        	                                D ]}|
                    |           nt          |j                  dk    sJ |                                d         dk    sJ t          j        t                    t          j        t                    z  } t          |           }t          j        |d          \  }}|j        	                                D ]}|
                    |           nt          |j                  dk    sJ |                                d         dk    sJ d S )Ni Trw   r   r   Fr&   )r   positive_infiniter   r   r   rs   r   r   r   r   r   r   r   rV   gtnegative_infiniter   s        r.   test_pos_neg_infiniter     sR   	
	Q		!$q("3"3	3a6I!6L6L	LB
(
,
,C'$???FC|""$$  >>#*E +s"##q((((99;;q>U""""	
	Q		!$q("3"3	3a6I!6L6L	LB
(
,
,C'$???FC|""$$  >>#*E +s"##q((((99;;q>T!!!!	
	Q		!"5a"8"8	8B
(
,
,C'$???FC|""$$  >>#*E +s"##q((((99;;q>U""""""r0   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 d S )Nr   r&   Trw   r   r2   r1   )r   r   rs   r   r   r   r   r   )rp   rr   r   	conflictss       r.   test_binrel_evaluationr   !  s    	
aB
(
,
,C/$GGGNCs"##q((((!	
aB
(
,
,C/$GGGNCs"##q(((("r0   c                     t           du sJ t          j        t          d          t          j        t          d           z  } t	          |           }t          j        |d          \  }}|j        D ]}|D ]}|                    |           t          |j
                  dk    sJ |                                d         dk    sJ t          |                                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 ]}|                    |           t          |j
                  dk    sJ |                                d         dk    sJ t          j        t          d           t          j        t          d           z  } t	          |           }t          j        |d          \  }}|j        D ]}|D ]}|                    |           t          |j
                  dk    sJ |                                d         dk    sJ t          j        t          d           t          j        t          d           z  } t	          |           }t          j        |d          \  }}|j        D ]}|D ]}|                    |           t          |j
                  dk    s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 ]}|                    |           t          |j
                  d	k    sJ |                                d         dk    sJ t          |                                d                   d	k    sJ t#          d
 |                                d         D                       sJ d S )NTr2   r   rw   r&   Fr1   rz   r   c              3   "   K   | ]
}|d k    V  dS r   r<   )r,   r   s     r.   r=   z test_negation.<locals>.<genexpr>_  s&      --q1u------r0   )r   r   r   r   rs   r   r   r   r   r   r   rV   r   r   ler   ger   )rp   rr   r   r-   r   r   s         r.   test_negationr   /  s]   d""""	
aqtAqzzk	!B
(
,
,C'$???FC(     	  	 CNN3	 s"##q((((99;;q>U""""#))++a.!!r1gAw%7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~!####--ciikk!n----------r0   c                  x   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	           d S )
Nr   c                  0    t          j         d          S NTrw   r   r   rr   s   r.   r   z&test_unhandled_input.<locals>.<lambda>f  s    y9#DQQQ r0   c                  0    t          j         d          S r   r   r   s   r.   r   z&test_unhandled_input.<locals>.<lambda>j      9#=cPT#U#U#U r0   infc                  0    t          j         d          S r   r   r   s   r.   r   z&test_unhandled_input.<locals>.<lambda>n  r   r0   c                  0    t          j         d          S r   r   r   s   r.   r   z&test_unhandled_input.<locals>.<lambda>r  r   r0   r&   c                  0    t          j         d          S r   r   r   s   r.   r   z&test_unhandled_input.<locals>.<lambda>w  r   r0   c                  0    t          j         d          S r   r   r   s   r.   r   z&test_unhandled_input.<locals>.<lambda>{  r   r0   )r   NaNr   r   r   rs   r#   rW   r   r   floatr   r   )nanrp   rr   s     @r.   test_unhandled_inputr   b  s   
%C	
aQ	$B
(
,
,C
:QQQQRRR	
aad1ajj	 B
(
,
,C
>UUUUVVV	
au		au!6!6	6B
(
,
,C
>UUUUVVV	
aqtAr{{	"B
(
,
,C
>UUUUVVV 
adQh		B
(
,
,C
>UUUUVVV	
c!ffqj!		B
(
,
,C
>UUUUVVVVVr0   c                     t            t          z
  t          d           k    t           dk    z  t          t          d          k    z  } t          |           }t	          j        |d          \  }}t          |j                                                  D ]}|	                    |           nt          |j                  dk    sJ |                                d         dk    sJ d S )Nr   r   Trw   r   )r   r   r   rs   r   r   r   r   r   r   r   r   rV   r   s        r.   !test_infinite_strict_inequalitiesr   }  s     "q&U5\\M
!a!e	,U5\\0A	BB
(
,
,C'$???FCcl))++,,  >>#*E +s"##q((((99;;q>T!!!!!!r0   c                  L   t          d          D ]} t          d          }|                                }t          d          D ]^} t          dd          t          dd          }}|||f         dk    r.t	          j        |||                                          |k    sJ _d S )Nr3   ry   r   rv   )r4   r
   rrefr   r   _pivot)r-   mr   r   js        r.   
test_pivotr     s    2YY @ @qMMvvxxq 	@ 	@A1a=='!Q--qAAw!|| '1a0055774????	@@ @r0   c                  \   t          j        t          d          t          j        t          d          z  } t	          |           }t          j        |d          \  }}|j        D ]}|D ]}|                    |           t          |j
                  dk    sJ |                                d         dk    s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 |j        J d S )Nr2   Trw   r&   r   Fr   )r   r   r   r   rs   r   r   r   r   r   r   rV   reset_boundsall_varr~   r   r   upper_from_equpper_from_neglowerlower_from_eqlower_from_negrj   r|   col_idx)rp   rr   r   r-   r   r   r|   s          r.   test_reset_boundsr	    s   	
aad1ajj	 B
(
,
,C'$???FC(     	  	 CNN3	 s"##q((((99;;q>U""""99;;q>T!!!!{ 	' 	'yKea888888 E))))!U****yKuq999999 E))))!U****z[A......w"""{&&&&	' 	'r0   c                      t                      } t                      }|                    |            t          j        |          \  }}t          |          dk    sJ |                                di fk    sJ d S )Nr   T)r   r   ro   r   r   r   rV   )rq   rr   r   r   s       r.   test_empty_cnfr    st    
%%C
,,CLL.s33MCx==A99;;4*$$$$$$r0   )r&   r&   r'   TFFF)r]   )@sympy.core.numbersr   r   r   sympy.core.relationalr   sympy.core.symbolr   sympy.core.singletonr   sympy.matrices.denser	   r
   sympy.assumptions.askr   rR   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%   rJ   r\   rl   rs   r   r   r   r   r   r   r   r   r   r   r	  r  r<   r0   r.   <module>r     s   . . . . . . . . . . $ $ $ $ $ $ % % % % % % " " " " " " ' ' ' ' ' ' + + + + + + # # # # # # # # # # # #           1 1 1 1 1 1 1 1 8 8 8 8 8 8 ( ( ( ( ( ( e e e e e e e e e e e e 5 5 5 5 5 5 5 5 5 5 & & & & & & , , , , , , C C C C C C C C     4 4 4 4 4 4 4 4 4 4RVZ_   6b b b$     # # #(  ]D ]D ]D@ #" #" #"L # # #:  0. 0. 0.fW W W6 " " "$@ @ @' ' '0% % % % %r0   