o
    gGa                     @   s  d Z ddlmZmZ ddlmZmZmZmZ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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  e \Z!Z"Z#Z$Z%Z&Z'e \Z(Z)dd Z*dd Z+dd Z,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd  Z3d!d" Z4d#d$ Z5e d%d& Z6d'd( Z7d)d* Z8d+d, Z9d-d. Z:d/d0 Z;d1d2 Z<d3d4 Z=d5d6 Z>d7d8 Z?d9d: Z@d;d< ZAd=d> ZBd?S )@zDTools for polynomial factorization routines in characteristic zero.     )ringxring)FFZZQQZZ_IQQ_IRREX)
polyconfig)DomainError)ANP)f_polysw_polys)I)sqrt)sin)	nextprime)raisesXFAILc                  C   sz   t dt\} }| |d d|d   d|d   d|d   d	|  d |d
 |d f|d
 df|d dfgks;J d S )Nx               &            )r   r   dup_trial_divisionRr    r#   Y/var/www/visachat/venv/lib/python3.10/site-packages/sympy/polys/tests/test_factortools.pytest_dup_trial_division   s   lr%   c                  C   s|   t dt\} }}| |d d|d   d|d   d|d   d	|  d |d
 |d f|d
 df|d dfgks<J d S )Nx,yr   r   r   r   r   r   r   r   r   )r   r   dmp_trial_divisionr"   r   yr#   r#   r$   test_dmp_trial_division   s   lr*   c                  C   sf   t dt\} }| d|d  d|  d dksJ | |d d|d   d|  d d	ks1J d S )
Nr   r   r   r         8   @      )r   r   dup_zz_mignotte_boundr!   r#   r#   r$   test_dup_zz_mignotte_bound   s   &2r1   c                  C   s:   t dt\} }}| d|d  d|  d dksJ d S )Nr&   r   r   r       )r   r   dmp_zz_mignotte_boundr(   r#   r#   r$   test_dmp_zz_mignotte_bound%   s   *r4   c                  C   s   t dt\} }|d d }|d d|d   | d }|d }d}d|d  d|  d }| d|||||\}}}	}
||d d|d   | d ksMJ ||d ksUJ |	d	ks[J |
d
|d  d|  d kskJ d S )Nr   r   r   r   r   r      r   i   )r   r   dup_zz_hensel_step)r"   r   fghstGHSTr#   r#   r$   test_dup_zz_hensel_step*   s   $$rB   c                  C   sn   t dt\} }|d d }|d |d |d |d g}| td||d|d |d |d |d gks5J d S )Nr   r   r   r   r      )r   r   dup_zz_hensel_lift)r"   r   r9   Fr#   r#   r$   test_dup_zz_hensel_lift;   s   rF   c                  C   s
  t dt\} }| d|d  d|d   d|d   d|  d d u s&J | d|d  d|d   d|d   d|  d d u sEJ | d|d  d|d   d|d   d|  d d	u sdJ | d|d  d|d   d|d   d|  d
 d	u sJ d S )Nr   r   r   r   r+   r   r6   
   Tr,   )r   r   dup_zz_irreducible_pr!   r#   r#   r$   test_dup_zz_irreducible_pE   s
   >>>BrI   c                  C   s  t dt\} }| |d du sJ | |d du sJ | |d | d du s,J | |d d du s9J | |d |d  |d  | d du sPJ | |d | d du s_J | |d |d  |d  |d  |d  | d du s~J | |d d du sJ | |d |d  d du sJ | d	d
u sJ | dd
u sJ | |d
u sJ | |d d
u sJ | d| d d
u sJ | |d d d
u sJ |d |d  |d  |d  |d  |d  d }| |d
u sJ |d |d  |d  |d  |d  |d  d }| |du s#J t dt\} }| |d | d du s:J | tdd|d  | d d
u sOJ t dtd \} }| |d | d d
u shJ d S )Nr   r   Tr   r   r   r+   r   r   F   r,   rG   r   r)   )r   r   dup_cyclotomic_pr   )r"   r   r9   r:   r#   r#   r$   test_dup_cyclotomic_pO   s2   .>"44 *$rL   c                  C   s<  t dt\} }| d|d ksJ | d|d ksJ | d|d | d ks,J | d|d d ks9J | d|d |d  |d  | d ksPJ | d|d | d ks_J | d|d |d  |d  |d  |d  | d ks~J | d	|d d ksJ | d
|d |d  d ksJ d S )Nr   r   r   r   r   r   r+   r6   r   	   )r   r   dup_zz_cyclotomic_polyr!   r#   r#   r$   test_dup_zz_cyclotomic_polyq   s   .>&rO   c                  C   s  t dt\} }| dd u sJ | dd u sJ | d|d  d d u s(J | |d d d u s5J | |d |d  d d u sFJ | |d |d gksTJ | |d |d gksbJ | |d d |d d gkstJ | |d d |d |d gksJ | |d d |d |d | d |d	 |d  d |d
 |d  d gksJ | |d d |d |d | d |d	 |d  d |d
 |d  d gksJ d S )Nr   r   r   r   rG   r   r      r+      rM   )r   r   dup_zz_cyclotomic_factorr!   r#   r#   r$   test_dup_zz_cyclotomic_factor   s    "$&::rS   c            
   	   C   s2  t dt\} }| ddg fksJ | ddg fksJ | ddg fks(J | ddg fks3J | ddg fks>J | ddg fksIJ | d| d d|d dfgfks]J | d| d d|d gfksoJ |d | d }tddD ]}| |d|dfgfksJ q|| |d d|  d d|d d|  d dfgfksJ | d	|d  d
|  d dd| d dfgfksJ | d|d  d dd| d dfd| d dfgfksJ | d|d  d dd| d d| d gfksJ | |d d|d   d|  d \}}|dksJ t||d df|d df|d dfhks6J | |d d|d   d|  d d|d |d |d gfksYJ | d|d  d|d   d|  d d|d dfd|d  d|  d dfgfksJ | d|d  d|d   d|  d d|d d|d  d|  d gfksJ | |d  |d  \}}|dksJ t||df|d df|d df|d d dfhksJ d|d  d|d   d|d   d|d   d|d   d|d   d|d   d }| |dd|d  d|d   d|d   d
 dfd|d  d|d   d  dfgfks?J d!|d"  d#|d   d$|d%   d&|d   d'|d   d( }| |\}}|d)ksmJ t|d| d dfd*|d  d|  d dfd+|d  d,|d   d"|d   d|  d dfd-|d  d.|d   d/|d   d|  d dfd-|d  d0|d   d/|d   d1|  d dfhksJ |d d }td2d3 | |\}}td2d4 | |\}}	||  krdksJ  J t|t|	  krB|d df|d df|d |d  |d  | d df|d |d  |d  | d dfhksEJ  J td2 |d d }td2d3 | |}td2d4 | |}	||	  krd|d d df|d |d  |d  |d  d dfgfksJ  J td2 d S )5Nr   r   r6   r   r   r      rQ   r7   r   r+      rG      r   8  r   i@  i3  i  i
  i     D     rM         rP   l  "@]gk|5 r   l     j=7;I l    Gjy@Kz
+   l   Ln_2|OH++l   	#~ l   1VkZ l1VkZ d   iq  }   i'  i  i  i     USE_CYCLOTOMIC_FACTORTF)r   r   dup_zz_factordup_zz_factor_sqfrangesetconfigsetup)
r"   r   r9   icfactorsc0F_0c1F_1r#   r#   r$   test_dup_zz_factor   s   ($

*0$
(
(
:X,





222 

""


&rr   c                      s  t dt\}  }}t dt\}}tt| t}|dksJ |dtd}}}|dtd}	}
}|| dtd}}}|| dtd	}}}||	||g}||
||g}||||g}t fd
d|D |}tdtdg}| t|}||\}}|dkr||  krd|d  d|d   d|d   d|d   d|d   d|  d ksJ  J | ||tdg dksJ |	|r|
|| tksJ ||\}}d|d  d|  d }d|d  d|  d }d|d  d }||||gksJ  fddd| d|  | |d  |d |d  fD }| t|||||t||fks2J | t||||}| |tksEJ d S ) Nx,y,zr    ` r   r   r   iic                       g | ]}|  qS r#   drop).0r=   r   r#   r$   
<listcomp>      z$test_dmp_zz_wang.<locals>.<listcomp>i r+   i` r   i  r   i iC  ih  i  )r6   r   rX      ,   *   ~   rM   r         c                    rv   r#   rw   )ry   lcrz   r#   r$   r{   )  r|   )r   r   r   r3   w_1zipdmp_eval_taildup_primitivedmp_zz_wang_non_divisors	dup_sqf_p
dup_degree
dmp_degreerf   dmp_zz_wang_lead_coeffsdmp_zz_wang_hensel_lifting
dmp_expand) r"   r)   zUV_xpt_1k_1e_1t_2k_2e_2t_3k_3e_3t_4k_4e_4rA   KEAr@   csr<   _r?   h_1h_2h_3LCrm   r#   rz   r$   test_dmp_zz_wang  s:   F":$r   c                  C   s  t dt\} }}}t dt\}}tt| t}|dksJ d|d  d|  d d|d  d	|  d
 d|d  d g}d|d  | d|d   d| |  d d|d  | d	|  d|  |d |d  d	|d   | d	 g}d|d  | d|d   d| |  d d|d  | d	|  d|  |d |d  d	|d   | d	 g}	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&|d  |d  d|d  |  d'|d  |d   d(|d  |  d|d   d)|d  |d   d|d  |  d*| |d   d	|  d|  }| ||
g d|d+| d,dgksJ | ||td-gd|| | d+| d.gksJ | |	|td-gd|g d/ksJ d S )0Nrs   r   rt   r~   r   r   r   r   rM   r   r   r   r   r7   r   rV   ir   i  r   iE  i  i  J   -   l   r\   rQ   r^   i*     i   i  rc   i  6   Q   irP   $   r   r+   r5   ru   i)r   r   rW   )r   r   r   r3   r   dmp_zz_diophantine)r"   r   r)   r   r   r   r   H_1H_2H_3c_1c_2c_3r#   r#   r$   test_dmp_zz_wang_fail1  s   >nn<J &2*r   c                  C   sZ   g d} t dt\}}}}d|d  ||  | |d  | }|j|| d|gks+J d S )N)rW   rW   r   r   r   r   rW   rW   r   rW   r   rW   r   r   r   r   rW   r   rs   r   )seed)r   r   dmp_zz_wang)random_sequencer"   r   r)   r   r9   r#   r#   r$   test_issue_6355F  s   $r   c                  C   sP  t dt\} }| ddg fksJ | ddg fksJ | ddg fks(J | |d d d|d df|d dfgfksAJ t d	t\} }}| ddg fksTJ | ddg fks_J | ddg fksjJ | |d|dfgfksxJ | d
| d
|dfgfksJ | d
| d dd| d dfgfksJ | || d d|| d dfgfksJ | |d d d|d d dfgfksJ | |d d d|d df|d dfgfksJ | |d |d  d|d  |  d|d   d d|| d|  d df|| d|  d dfgfksJ | |d |d  d d|| d df|| d dfgfks=J t dt\} }}}| |d |d  |d  d d|| | d df|| | d dfgfkspJ t dt\} }}}}| |d |d  |d  |d  d d|| | | d df|| | | d dfgfksJ t dt\} }}}| td|||  d df|| | d df|| | d dfgfksJ | td|d |d  |d |d   | d df|d | |d |  | d dfgfksJ | td|d |d  ||d
   | | df|d || |  |d  ||d   dfgfksBJ | td||d  |d  df|d | |d
 |d   d df|d | |d  d df|d |d
  |d  dfgfksJ | td|| | dfgfksJ t dt\} }}}}| tdd| | |d |d   |d  dfd|d  d|d   |d  d|d   d| |  dfgfksJ t dt\} }}}| t	d|d |d  |d |d   | |d  df|d | |d  d| |  d|  dfd
|d  | d
|d  |  || |  d dfgfks7J t d	t\} }}d|d  | d|d  |d   d|d  |d
   d|d  |d   d|d  |d   d|d
  |d   d|d   }| |d|df|d | df|d
 d|d  |  |d  dfgfksJ d S )Nr   r   r6   rT   r   rM   r   r   r&   r   r+   rs   zx,y,z,urU   rG   rc   Z   rX   rW   r   zx,y,z,t/   r   irJ      r7   i   rZ   r   )
r   r   dmp_zz_factorf_1f_2f_3f_4f_5f_6r   )r"   r   r)   r   ur=   r9   r#   r#   r$   test_dmp_zz_factorQ  s   2 ,,,2pD 
(

,"
(*
"

(:
0*2
"r   c                  C   s  t dt\} }tdd}| |d d tdd|d d dfgfks%J | |d d tdd|d df|d dfgfksAJ | |d d tdd|| df|| dfgfks]J | |d d d ttddd|d|  df|d|  dfgfksJ | |d d tdd|d|  df|d|  dfgfksJ | |d d|  d tdd|d dfgfksJ | |d d| |  d tdd|| dfgfksJ d|d  |dd|    d	 d
|  }| |tdd|ttddtdd dfgfksJ d S )Nr   r   r   r   r       X  逬 H 鉲       iY  )r   r   dup_qq_i_factorr   r"   r   rk   r9   r#   r#   r$   test_dup_qq_i_factor  s*   
288.(((r   c                  C   sD  t dt\} }}tdd}| |d d|d   tdd|d d|d   dfgfks.J | |d |d  tdd|||  df|||  dfgfksPJ | |d |d d  tdd||| d  df||| d  dfgfksxJ | d|d  |d  tdd||| d  df||| d  dfgfksJ d S Nzx, yr   r   r   r   )r   r   dmp_qq_i_factorr"   r   r)   rk   r#   r#   r$   test_dmp_qq_i_factor  s   
"(00r   c                  C   s  t dt\} }tdd}| |d d tdd|d d dfgfks%J | |d d tdd|d df|d dfgfksAJ | |d d tdd|| df|| dfgfks]J | |d d tdd|d|  df|d|  dfgfks}J | |d d|  d tdd|d dfgfksJ | |d d| |  d tdd|| dfgfksJ d|d  |dd|    d	 d
|  }| |tdddd|  | dd|   dfgfksJ d S )Nr   r   r   r   r   r   r   r   r   r   r.   i  iT  )r   r   dup_zz_i_factorr   r#   r#   r$   test_dup_zz_i_factor  s$   
288((*r   c                  C   s   t dt\} }}tdd}| |d d|d   tdd|d d|d   dfgfks.J | |d |d  tdd|||  df|||  dfgfksPJ | d|d  |d  tddd| ||  dfd| ||  dfgfksxJ d S r   )r   r   dmp_zz_i_factorr   r#   r#   r$   test_dmp_zz_i_factor  s   
"(0r   c                  C   s  t dtt\} }dd }| d|g g fksJ |tdg| |tdg }| ||tdg|dfgfks>J |tdg| |tdg }| ||tdg|dfgfksaJ |tdg|d  |tddg }|tdg|d  |tddg }| ||tdg|dfgfksJ |tdg|d  |tdg }| ||tddg|tdg|d  |td	tdg df|tdg|d  |tdtdg dfgfksJ |tddg|d  |td
dg }| ||tddg|tddg| |tdd tddg df|tddg| |tddtddg dfgfks>J |tddg|d  |tddg|d   |tddg|d   |tddg|  |tddg }| ||tddg|tddg| |tdd tddg df|tddg| |tdd tddg df|tddg| |tddtddg df|tddg| |tddtddg dfgfksJ t dttd\} }dd }|tdg|d  |tddg }| ||tdg|tdg|d  |td	tdg|  |tdg df|tdg|d  |tdtdg|  |tdg dfgfksVJ |tddg|d  |tdtdg|  |tddg }| ||tddg|dg| |ddg dfgfksJ | |d |tddg|dg| |ddg dfgfksJ ||tddg9 }| ||tddg|dg| |ddg dfgfksJ | |d |tddg|dg| |ddg dfgfksJ d S )Nr   c                 S      t | tdtdtdgtS Nr   r   r   r   elementr#   r#   r$   anp     z test_dup_ext_factor.<locals>.anpr   r   r   r6   r   rW   rM   r   r   M   rQ      c                 S      t | tdtdtdgtS Nr   r   r5   r   r   r#   r#   r$   r     r   r+   )r   r   algebraic_fieldr   dup_ext_factorr   )r"   r   r   r9   r:   r#   r#   r$   test_dup_ext_factor  sh    & &&&&$:,(>.
l>0..
&J>
@.
.
.
.r   c                  C   s  t td} td| \}}}| j}dd }|d|g g fks#J |t dg| |t dg }|||t dg|dfgfksFJ |t dg| |t dg }|||t dg|dfgfksiJ |t dg|d  |t dg|d   }|||t dg|t dg| |t dt dg|  df|t dg| |t dt dg|  dfgfksJ |t dg|d  |t d	g|d   }|||t dg|t dg| |t dt dg|  df|t dg| |t dt dg|  dfgfksJ |d }|| }	|d | d d
|  }
|d |	d  |
d  }||| j|df|	df|
dfgfksDJ d S )Nr   r&   c                 S   r   r   r   rz   r#   r#   r$   r   9  r   z test_dmp_ext_factor.<locals>.anpr   r   r5   rW   r   r   )r   r   r   r   unitdmp_ext_factorone)r   r"   r   r)   sqrt2r   r9   r:   f1f2f3r#   r#   r$   test_dmp_ext_factor4  s4    & &,8,,8,
0r   c                     s0  t dt\ }  ddg fksJ  ddg fksJ t dt\ }  ddg fks/J  tddtddg fks@J t dtd \ }  ddg fksTJ  ddg fks_J t dtd \ }  ddg fkssJ  tddtddg fksJ t dt\ }  ddgksJ  ddgksJ  | d d|   d d| d dfgfksJ  | d d|   d | d dfgksJ  d	| d  d
|   d	 dd|  d dfd|  d dfgfksJ t dt\ }  tdd| d  |  tdd tdd| d dfgfksJ t dtd\ }  | d d d| d dfgfks7J t dt\ }  d| d  d|   d dd|  d dfgfks[J  d| d  d|   d dd|  d dfgfksxJ d| d  d|   d } |\}}|tdksJ t|dksJ |d d  tdksJ |d d dksJ t dt\}}t d|\ } d| | d  d|d  |   } |d| | df| | dfgfksJ t dt\}}t d|\ } tdd| | d  tdd|d  |   } |tdd| | df| | dfgfks(J t dt	t
\ } dd }|tddg| d  |tddg| d   } ||tddg|tddg|  df|tddg| d  |g |   |tddg dfgfksJ t dt\ } tt fdd d S )Nr   r   r6   r   r=   r   r   r6   r   r   r+   r   r         ?       @g      @w@ lJ%@k?r   c                 S   r   r   r   r   r#   r#   r$   r     r   z!test_dup_factor_list.<locals>.anpc                           ttdS Nr   )dup_factor_listr
   r   r#   r"   r#   r$   <lambda>      z&test_dup_factor_list.<locals>.<lambda>)r   r   r   r   dup_factor_list_includer   r	   lenmax_normr   r   r
   r   r   )r   r9   coeffrm   Rtr=   r   r#   r   r$   test_dup_factor_listY  sr   ""0,FD*:: 

,

0$6
r  c                     sH  t dt\  dtdg fksJ  ddg fks J t dt\  dtdg fks5J  tddtddg fksFJ t dt\} }t d| \  ddg fks`J  dtdg fksmJ t dt\} }t d| \  ddg fksJ  tddtddg fksJ t dt\  ddgksJ  ddgksJ tdt\ }|d d	 d	|d   d |d d }} |d|d	fgfksJ |d
 d	 d	|d
   d |d
 d }} |d|d	fgfksJ t dt\  d	 d	  d dd d	fgfks"J t dt\  tdd	d	   tdd	 tdd	d d	fgfksKJ t dt\  d	 d	  d dd d	fgfkslJ t dt\  tdd	d	   tdd	 tdd	d d	fgfksJ t dt\ dd	   d d	   } |ddfdf dfgfksJ  |d dfdf dfgksJ t dt\ tdd	d	   tdd	 d	   } |tdd	dfdf dfgfksJ t dt\ dd	  dd	   } |tdd  dfd  dfgfksDJ dd	  d	  d   d } |\}}|tdksfJ t|dksoJ |d d  tdks~J |d d dksJ t dt\} }t d| \ d| d	  d|d	    } |d| df| dfgfksJ t dt\} }t d| \ tdd	| d	  tdd	|d	    } |tdd	| df| dfgfksJ t dt	d	\ t
t fdd t dt\ t
t fdd d S )Nr&   r   r6   r   r=   r   r   zx:200r   rW   r   r   r   g       @g      ?r   r   r   r   c                      s     d d  S )Nr   )dmp_factor_listr#   r(   r#   r$   r     r|   z&test_dmp_factor_list.<locals>.<lambda>c                      r   r   )r  r
   r   r#   r   r#   r$   r     r   )r   r   r  r   dmp_factor_list_includer   r	   r   r  r   r   NotImplementedErrorr
   r   )r  r=   Xr9   r:   r  rm   r#   r(   r$   test_dmp_factor_list  s   ""**2D2D 




,


$ 

,

r	  c                  C   sR   t dt\} }| |d | d du sJ | |d d|  d du s'J d S )Nr   r   r   TF)r   r   dup_irreducible_pr!   r#   r#   r$   test_dup_irreducible_p  s   &r  c                  C   sT   t dt\} }}| |d | d du sJ | |d d|  d du s(J d S )Nr&   r   r   TF)r   r   dmp_irreducible_pr(   r#   r#   r$   test_dmp_irreducible_p  s   &r  N)C__doc__sympy.polys.ringsr   r   sympy.polys.domainsr   r   r   r   r   r	   r
   sympy.polysr   ri   sympy.polys.polyerrorsr   sympy.polys.polyclassesr   sympy.polys.specialpolysr   r   sympy.core.numbersr   (sympy.functions.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   sympy.ntheory.generater   sympy.testing.pytestr   r   f_0r   r   r   r   r   r   r   w_2r%   r*   r1   r4   rB   rF   rI   rL   rO   rS   rr   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r#   r#   r#   r$   <module>   sP    $


"o-
LC%Kc