a
    <bH                     @   s  d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ ddlmZ ddlmZmZ ddlmZmZ ddlmZmZ ddlmZ ddl m!Z" d	d
 Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)dd Z*dd Z+dd Z,dd Z-dd  Z.d!d" Z/d#d$ Z0ed%d& Z1d'd( Z2d)d* Z3d+d, Z4d-d. Z5d/d0 Z6d1d2 Z7d3d4 Z8d5d6 Z9d7d8 Z:d9d: Z;d;d< Z<d=d> Z=d?d@ Z>dAdB Z?dCdD Z@dES )FzTests for Groebner bases.     )groebnersigsig_keylbplbp_keycritical_paircp_keyis_rewritable_or_comparableSignPolynNums_poly	f5_reducegroebner_lcmgroebner_gcdis_groebner
is_reduced)_representing_matrices)lexgrlex)ringxring)ZZQQ)slow)
polyconfigc                  C   sz  t dtt\} }}|d d| |d   }|| d|d   d }t||g| ||d tdd gksjJ t dtt\} }}d|d  | |d  }d|d  ||  d }t||g| ||d tdd gksJ t dtt\} }}}||d  }||d  }t||g| ||gksJ t dtt\} }}|d d| |  }|d | | d|d   }t||g| |d || tdd | |d  gksJ t dtt\} }}}|d  | }|d  | }t||g| |d | || | || |d  |d |d  gksJ t dtt\} }}}|d  | }|d  | }t||g| |d |d  |d | || | || |d  gksJ t dtt\} }}}|d  | }|d  | }t||g| |d | || |d  || | |d |d  gks J t dtt\} }}}|d  | }|d  | }t||g| |d  |d  |d | || |d  || | gkszJ t dtt\} }}}||d  }|d  | }t||g| ||d  |d | gksJ t dtt\} }}}||d  }|d  | }t||g| |d ||  || | | |d  gks>J t dtt\} }}}||d  }||d  }t||g| ||d  ||d  gksJ t dtt\} }}}||d  }||d  }t||g| |d ||  || | | |d  gksJ t dtt\} }}}|d  | }||d  }t||g| |||  |d | gksXJ t dtt\} }}}|d  | }||d  }t||g| |d  |d  || |d  |d | | ||  gksJ t dtt\} }}}||d  }||d  }t||g| ||d  ||d  gks*J t dtt\} }}}||d  }||d  }t||g| |d  |d  || |d  | ||  | |d  gksJ t dtt\} }}}d|d  |d  d| |  d }|d |d  d }t||g| |d|d   d	|d
   d|d   d|  |d	 d|d   tdd|d   tdd|d   tdd gksvJ d S )Nx,y         zy,xx,y,z                  )r   r   r   r   r   )Rxyfgz r-   t/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/polys/tests/test_groebnertools.py_do_test_groebner   s    ((:HHHJ,<,<,L,N$.@r/   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S NZ
buchbergerr   configusingr/   r-   r-   r-   r.   test_groebner_buchberger   s    r5   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S NZf5br1   r2   r-   r-   r-   r.   test_groebner_f5b   s    r7   c                  C   sl  t dtt\} }}}|d | d |d | d || | |d |  g}|tdd|d   tdd	|d
   tdd|d   tdd	|d   tdd|  tdd |td
d|d   tdd|d
   tdd|d   tdd|d   tdd|  tdd |d d|d   d|d
   d|d   d|d   d|  d g}t|| |kshJ d S )Nr    r   r   r      i  r$   ic  i  r!   i  ig  i     5   [      i  i  i  i4  r%   r"   )   R   Y   .      )r   r   r   r   )r'   r(   r)   r,   FGr-   r-   r.   _do_test_benchmark_minpoly   s    6bbBrD   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S r0   r3   r4   rD   r-   r-   r-   r.   !test_benchmark_minpoly_buchberger   s    rF   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S r6   rE   r-   r-   r-   r.   test_benchmark_minpoly_f5b   s    rG   c                     s   t dd g d} tdd  D tt\}  fdd| D }  \}}}}}}}}	}
}}}dd  D }dd | D }|| }t|d d	 ||| | || || || || | || || |	| | |
| || | |d
 ||  |d
  |d d gksJ t||dgksJ d S )Nr   rA   ))r   r   )r   r   )r   r!   )r   r%   )r      )r   r$   )r   r"   )r   r#   )r   
   )r!      )r!   	   )r$   r%   )r%   r"   )r"   r#   )r#   rK   )rK   rI   )rI   rJ   )rJ   rH   )r$   rH   )r$   rK   )r%   rI   )r"   rJ   )r#   rH   )r   r!   c                 S   s   g | ]}d | qS )zx%dr-   ).0vr-   r-   r.   
<listcomp>       z+test_benchmark_coloring.<locals>.<listcomp>c                    s(   g | ] \}} |d    |d   fqS )r   r-   )rL   ijVr-   r.   rN      rO   c                 S   s   g | ]}|d  d qS )r   r   r-   )rL   r(   r-   r-   r.   rN      rO   c                 S   s(   g | ] \}}|d  ||  |d   qS )r   r-   )rL   r(   r)   r-   r-   r.   rN      rO   r   r   )ranger   r   r   r   )Er'   x1x2x3Zx4Zx5Zx6Zx7Zx8Zx9Zx10Zx11Zx12ZI3ZIgIr-   rR   r.   test_benchmark_coloring   s.    





r[   c                     s  t dtt\ } }}| d|  d|  d | d d|d   d|d   |  d|  | d| |  | g}t| dd|   d|  d|d   d|d	   d| d	|  d
|d   d|d	   ||d  d|d	   d|d   gksJ t dtt\ } }} fdd|D }t| d| d	|  d
|d   d|d	   | | d	|d   d|d   | d|  d| |  d|d   d|  d|  d|  gksJ d S )Nzx:3r   r   ir"   r#      i  r   O      (   T   r!   c                    s   g | ]}|  qS r-   Zset_ringrL   rP   r'   r-   r.   rN      rO   z0_do_test_benchmark_katsura_3.<locals>.<listcomp>r$   rI   rH   rT   r   r   r   r   r   )x0rW   rX   rZ   r-   rc   r.   _do_test_benchmark_katsura_3   s$    "*&"
& $rf   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S r0   r3   r4   rf   r-   r-   r-   r.   "test_benchmark_katsura3_buchberger   s    rh   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S r6   rg   r-   r-   r-   r.   test_benchmark_katsura3_f5b   s    ri   c                     s  t dtt\ } }}}| d|  d|  d|  d | d d|d   d|d   d|d   |  d|  | d| |  d| |  | |d d|  |  d| |  | g}t| d|  d|d   d|d   d	|d
   d|d   d|d   d|d   d|  d d| d|d   d|d   d|d
   d|d   d|d   d|d   d|  d| d|d   d|d   d|d
   d|d   d|d   d|d   d|  d |d!  d"|d   d#|d   d$|d
   d%|d   d&|d   d'|d   | gksJ t dtt\ } }}} fd(d)|D }t| d*| d+|d   d,| |  d-|  d.|d   d/|d   d0|d   d1|  | d2|d   d3|d   d4| |  d5|  d6|d   d7|d   d8|  d9| d:|d  |  d;|d   d<| |  d=|  d>|d   d?|d   d@|  dA| dB|d   dC| |d   dD| |  dE|  dF|d   dG|d   d|  d|d  | d|d   dH| |  d|  d'|d   d
|  dI| | | dI|d   d5| |  d|  d|d   d|  dI| | | d|d   d=| |  d|  dJ|d   d8|  | d|  d|  d|  d gksJ d S )KNzx:4r   r   i9Z l    '\ r"   l    = r%   l   :G r$   l   h2 r!   i0%2r   ieiFJ iQ l    BZ l   rD l   >% l   !I i|0i i l   kvYl   `A+ l   p l   \8_]
 iܮxi(i9i0 r#   il i<  iH  i`  $      c                    s   g | ]}|  qS r-   ra   rb   rc   r-   r.   rN      rO   z0_do_test_benchmark_katsura_4.<locals>.<listcomp>i  i6  in  ;   im iXd i  i        <         S   rK   iin     i      iv  9   3   !   ?   i     "   i	  iQ           rd   )re   rW   rX   rY   rZ   r-   rc   r.   _do_test_benchmark_katsura_4   s@    .&"ZVV.


RPVVBBBr~   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S r0   r3   r4   r~   r-   r-   r-   r.   #test_benchmark_kastura_4_buchberger   s    r   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S r6   r   r-   r-   r-   r.   test_benchmark_kastura_4_f5b   s    r   c                     s  t dtt\ } }d| d  d| d   d| d   d| d	   d
| d   d| d   d| d   d|   d dd|  | d  dd|  | d   dd|  | d	   dd|  | d   dd|  | d   d| | d   dd|  |   d d|  g}t| d|  d|d   d|d   d|d	   d |d   d!|d   d"|d   d#|  d$ d%|d  d&|d   d'|d   d(|d	   d)|d   d*|d   d+|d   d,|  d- gksJ t dtt\ } } fd.d/|D }t| d0|d  |  d1|d   d2|d  |   d3|d   d4| |   d5|  d6| d   d7|   d8 d9|d  d:|d   d;|d  |   d<|d   d=| |   d>|  d?| d   d@|   dA dB|d  dC|d  |   dD|d   dE| |   dF|  dG| d   dH| d   dI|   dJ dK|d  dL|d  |   dM|d   dN| | d   dO| |   dP|  dQ| d   dR|   dS gksJ d S )TNzx,trK   r#   rj   r"   rt   r%      r$   N   r!   i  r   i   r   l   iH   i    i   i  i8  ilii@  `   l     
RtJ)1~MCMgKbqcLel   ra2U!J'B\KW4Du+%B:N'/|,3D`N l    >C_=DmbgrVJ5n,O{-[8 D/7"l   *uQ!3'; PtSo"_ ;2g0PZwg
l   .S[_ik
8Cn|#	v*u0HtSl    5u3jx]L*(IIyL1iColat1:'6(l    Pg];meVq'%opZ "Mmt:%63l    P*71}<U1qq,+'cX0rVvQa; pA9l    @ir0@>/3,F%*;W@ {=5|o&(c_46l   :W]l   `k-@\K'l   ,8y'X^l    4C|	,Ydm l    Lo5Rs l     "#?Vq l    @otc?c l      t-JOl     Sz(Gc                    s   g | ]}|  qS r-   ra   rb   rc   r-   r.   rN     rO   z1_do_test_benchmark_czichowski.<locals>.<listcomp>l	   jP.qlj=Mj1l	   :q~\q,9D h`l
   \B{+9C0-f l
   n_Y\D&nb l
   jj9k${.ZGc l
   v^O1mDM( l	   |!gc]0t|- l
   @Nw*%iLM!6 l
    z *rpK0Z% l   4X\h@T:V%]yF= l    8bH(KKnEm?p@(8*. l   `'[%gQ Ce4
?XG l   `Abwc}{?Vq*qA l    .'l#8}(UU,7 l   8L*e?FRm & l    ^4O}P\X9T7cq!2l    &mu@IgG8H2GW l    m
Q<--:b8aoTV lkJX]JDh6,^%>a1R l   4cDHad,;T&~D!C0 l   3b!@+(#5;1l    aRz2y,vD l   [K0PR;Tze3Dlol
   ,'_wR$9M^Dr.l
   [66FWg^4Pw*
3l   @;k`n|)^&a l   Z(G2uj))gCZ lO]iMW
jVo5CU l
   D
K6
u^@_3 l
   |E}wB=`/k!l
     9)P9@II%N`; l
   VDqtRx
T,S) l
   ZDHbEV*x
5VGI2l
   @4e`2er1NX0y6 l
   4IDV!%v l
   _+YSYB&k'?%l rd   )r(   trZ   r-   rc   r.   _do_test_benchmark_czichowski   s    ^





	










	




	




	



r   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S r0   r3   r4   r   r-   r-   r-   r.   $test_benchmark_czichowski_buchbergerD  s    r   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S r6   r   r-   r-   r-   r.   test_benchmark_czichowski_f5bI  s    r   c                     s  t dtt\ } }}}| | | | | | | |  ||  ||  | | | | | |  | | |  || |  | | | | d g}t| d|  d|d   d|d   d|  d| d|  d|d   d|d   d|  d|d  d|d	   d|d
   d|d   d| |d  d|  |d  d|d   d|  |d |d  |d  d gkshJ t dtt\ } }}} fdd|D }t| d| | |d  |d
  d|d   | d|d  |d   | |d  d|  | d| |d   d|  d|d   d|  |d d|d  |d   |d  d |d | ||d   |d  d ||d  |d  |d |  d| |d   |d  |d |d  || |d  ||  |d  | | | | g	ksJ d S )Nza,b,c,dr   r!   r   rK   r$   r"   r   rI   r%   rH   r#   c                    s   g | ]}|  qS r-   ra   rb   rc   r-   r.   rN   ]  rO   z/_do_test_benchmark_cyclic_4.<locals>.<listcomp>rd   )abcdrZ   r-   rc   r.   _do_test_benchmark_cyclic_4M  s0    .&..L&,0&"6,r   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S r0   r3   r4   r   r-   r-   r-   r.   "test_benchmark_cyclic_4_buchbergerj  s    r   c                   C   s6   t jdd t  W d    n1 s(0    Y  d S r6   r   r-   r-   r-   r.   test_benchmark_cyclic_4_f5bn  s    r   c                  C   sR   t dd} t dd}t dd}t| tt|tks6J t|tt|tk sNJ d S )Nr   r   r   r   )r   r   r   r!   )r   r   r   )r   r   r   )s1s2Zs3r-   r-   r.   test_sig_keyr  s
    


r   c                  C   s~   t dtt\} }}}}ttdd| jd}ttdd| jd}ttdd| jd}t|t|ksfJ t|t|k szJ d S )Nx,y,z,tr   r   r   r   r   rH   r!   rA   )r   r   r   r   r   zeror   )r'   r(   r)   r,   r   p1p2Zp3r-   r-   r.   test_lbp_key{  s    r   c            	      C   s  t dtt\} }}}}d|| |d  |d |d   |d  d df}d|d  ||  ||  |d  df}d|d |d  |d |d   | | d	f}d
|| ||d	   ||  |d  df}t||| ddtddfd|d  ||  ||  |d  dfddtddfd|| |d  |d |d   |d  d dffksPJ t||| ddtddfd
|| ||d	   ||  |d  dfddtddfd|d |d  |d |d   | | d	ffksJ d S )Nr   r   r!   r   r!   r   r   r   )r   r   r   r   r   r   r$   )r   r   r   r   r   r%   rA   )r   r   r   r   r   r   rT   )r   r   r   r   r!   r   ))r   r   r!   r   r   )r   r   r   r   ))r   r   r   r$   r   )r   r   r   r   )r   r   r   r   )	r'   r(   r)   r,   r   r   q1r   q2r-   r-   r.   test_critical_pair  s    2(.*
4>
6:r   c                  C   s.  t dtt\} }}}}d|| |d  |d |d   |d  d df}d|d  ||  ||  |d  df}d|d |d  |d |d   | | d	f}d
|| ||d	   ||  |d  df}t||| }	t||| }
t|	| t|
| k sJ t||| }	t||| }
t|	| t|
| k s*J d S )Nr   r   r   r!   r   r   r   r   r$   r   r%   rA   )r   r   r   r   r   )r'   r(   r)   r,   r   r   r   r   r   Zcp1Zcp2r-   r-   r.   test_cp_key  s    2(.*r   c                  C   s  t dtt\} }}}}ttdd| jd}ttddtdd|d  tdd| |  tdd| |  |d |  td	d|d   td
d| |d   tdd| |  tdd|d   tdd|d   dg}tt|t||du sJ ttdd| jd}ttddtdd| | td	d| |  tdd|  d	|d   tdd| |  td	d|  d	|d   td	d|  dg}tt|t||du sJ d S )Nr   )r   r   r   r   r   )r   r   r   r   -   r   r$   rx   r!   L   #   rt   i   rA   r"   r   rn   r%   T)r   r   r   r   r   rI      )	r   r   r   r   r   r   r	   r
   r   )r'   r(   r)   r,   r   pBr-   r-   r.    test_is_rewritable_or_comparable  s    r   c               	   C   s  t dtt\} }}}d|d|  d|  d dfdd|d  d| |  d|  d|d   d|  dfdtd	d
| | tdd
|  d|d   tdd
|  d
fd|d|d
   tdd|d   td
d|  dfd|d td	d|d
   tdd|d   tdd|  dfg}t|d |d | }t|}t||d| jdfksTJ ttt	|d dt
|t|}t|||ksJ d S )Nr    )r   r   r   r   )r   r   r%   r#   )r   r   rI   r   r!   ))r   r   r   r      r]   r"   ))r   r   r   r   rn   r`   r$   r   ))r   r   r   r   d   )r   r   r   r   r   r   r   r   r   r
   r   r   )r'   r(   r)   r,   rB   cpsr-   r-   r.   test_f5_reduce  s    8>4>"r   c                  C   s  t dtt\} }}g d}|d | d|  d d| |d  | d g}t||| tddtddtdd tddgtddtddtddtdd gtddtddtddtd	dgtddtddtddtddggtddtddtddtdd gtddtdd tddtd	dgtddtddtddtddgtddtddtddtdd gggks~J d S )
Nr   ))r   r   )r   r   )r   r   )r   r   r   r   r   r   r!   r%   )r   r   r   r   )r'   r(   r)   ZbasisrB   r-   r-   r.   test_representing_matrices  s    0
$$""$$"$r   c                  C   s  t dt\} }}}t|d |d  || |d |d  ks@J td|d  d|d   d| d|  d|d  d|d   ksJ t dt\} }}}t|d |d  || |d |d  ksJ td|d  d|d   d| d|  d|d  d|d   ksJ t dt\} }}t|d | ||d  |d |d  ksNJ d| |d  d| |d   d| |d   d| |d   }|d d|d   | }d| |d  d| |d   d| |d   d| |d   d| |d   d| |d   }t|||ksJ |d d|d  |  d	| |d   d|d   }|d d|d  |  d
|d  |d   d| |d   d|d   }|d |d |  d|d  |d   d|d  |d   d| |d   d|d   }t|||ksJ d S )Nr    r   r   r$   r   r!   r"   r%   rK   rH   rI   rp   2   /   rk   )r   r   r   r   )r'   r(   r)   r,   r*   r+   hr-   r-   r.   test_groebner_lcm  s     .F.H0@`4HXr   c                  C   s   t dt\} }}}t|d |d  || || ks8J td|d  d|d   d| d|  d| d|  ksvJ t dt\} }}}t|d |d  || || ksJ td|d  d|d   d| d|  || ksJ d S )Nr    r   )r   r   r   r   )r'   r(   r)   r,   r-   r-   r.   test_groebner_gcd  s    &>&r   c                  C   s   t dtt\} }}|d || tdd | |d  g}|d || tdd | |d  g}t|| du spJ t|| du sJ d S )Nr   r   r   r   TF)r   r   r   r   )r'   r(   r)   Zvalid_groebnerZinvalid_groebnerr-   r-   r.   test_is_groebner  s
    &&r   c                  C   s|   t dtt\} }}|d d| |d   }|| d|d   d }t||g| dksXJ t||g| }t|| dksxJ d S )Nr   r   r   r   FT)r   r   r   r   r   )r'   r(   r)   r*   r+   rC   r-   r-   r.   test_is_reduced  s    r   N)A__doc__Zsympy.polys.groebnertoolsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   Zsympy.polys.fglmtoolsr   Zsympy.polys.orderingsr   r   Zsympy.polys.ringsr   r   Zsympy.polys.domainsr   r   Zsympy.testing.pytestr   Zsympy.polysr   r3   r/   r5   r7   rD   rF   rG   r[   rf   rh   ri   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r-   r-   r.   <module>   sL   L	j
"E
	