
    sg3&                        d dl 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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mZ d dlmZmZmZ d dlmZ d Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.y)    )prod)QQZZ)xtheta)	factorint)n_order)Polycyclotomic_poly)DomainMatrix)	round_two)StructureError)
PowerBasisto_col)prime_decomp_two_elt_rep*_check_formal_conditions_for_maximal_order)raisesc                     t        t        dt                    } t        |       }|j	                  dt        j                  dt              z        j	                  dt        j                  dt              z        |j	                  t        j                  dt              d d d df         t        t        fd       t        t        fd       t        t        fd       y )	N            c                      t               S Nr   )Bs   ]/var/www/html/venv/lib/python3.12/site-packages/sympy/polys/numberfields/tests/test_primes.py<lambda>z@test_check_formal_conditions_for_maximal_order.<locals>.<lambda>       #Ma#P     c                      t               S r   r   )Cs   r   r    z@test_check_formal_conditions_for_maximal_order.<locals>.<lambda>   r!   r"   c                      t               S r   r   )Ds   r   r    z@test_check_formal_conditions_for_maximal_order.<locals>.<lambda>   r!   r"   )
r
   r   r   r   submodule_from_matrixr   eyer   r   r   )TAr   r$   r&   s     @@@r   .test_check_formal_conditions_for_maximal_orderr+      s    _Q"#A1A	L$4$4Q$; ;<A	L$4$4Q$; ;<A	 0 0B 73B3 ?@A
>PQ
>PQ
>PQr"   c                  (   d} t        t        |             }t        |      \  }}dD ]i  }t        ||      }|D ]V  }||z  |j                  |z  z   }|j                         }t        |||      }	|	|j                  k7  sE||z  |	|z  z   }
|
|k(  rVJ  k y )N            r   )r
   r   r   r   alphabasis_element_pullbacksr   )ellr)   ZKdKpPPiHgensbH2s              r   test_two_elt_repr>   !   s    
C_S!"Aq\FB A 	B "rxx{"A,,.DT2q)ABHH}rTAbD[Qww	r"   c                     d} t        t        |             }t        |      \  }}t        | |||      }t	        |      dk(  sJ |d   }|j                  | |z        }||j                  k(  sJ |j                  d|z        dk(  sJ y )Nr-   r6   r5      r   r   )r
   r   r   r   len	valuatione)r7   r)   r5   r6   r8   P0vs          r   test_valuation_at_prime_idealrG   7   s    	A_Q Aq\FBQbR(Aq6Q;;	
1B
QrTA99<<""""r"   c                  >   t        t        d            } t        t        d        t	        d|       }t        |      dk(  sJ |d   }|j                  dk(  sJ |j                  dk(  sJ |dz  |j                  k(  sJ |dz  |k(  sJ |dz  d|j                  z  k(  sJ y )Nr-   c                      t        d      S )Nr-   )r    r"   r   r    ztest_decomp_1.<locals>.<lambda>I   s
    |A r"   rA   r      )	r
   r   r   
ValueErrorr   rB   rD   fr5   )r)   r8   rE   s      r   test_decomp_1rN   D   s     	_Q A
:./QAq6Q;;	
1B4419944199q5BEE>>q5B;;q5AIr"   c                      d} t        t        |             }dD ][  }t        ||       }| dz
  |z  }t        ||      }t	        |      |k(  sJ |D ]$  }|j
                  dk(  sJ |j                  |k(  r$J  ] y )Nr-   r.   rA   )r
   r   r	   r   rB   rD   rM   )r4   r)   r7   f_expg_expr8   r9   s          r   test_decomp_2rR   U   s    
C_S!"A !3qU"A1v 	!B44199445= =	!!r"   c            
         t        t        dz  dz
        } i }t        | |      \  }}dD ]U  }t        || |||j	                  |            }t        |      dk(  sJ |d   j                  dk(  sJ |d   dz  ||z  k(  rUJ  y )Nr   #   radicals)r   r   r-   r6   r5   radicalrA   r   r
   r   r   r   getrB   rD   r)   radr5   r6   r7   r8   s         r   test_decomp_3r]   c   s    Q!Vb[A
Cq3'FB  A"SWWQZ@1v{{tvv{{tQw!B$	r"   c            
         t        t        dz  dz
        } i }t        | |      \  }}dD ]U  }t        || |||j	                  |            }t        |      dk(  sJ |d   j                  dk(  sJ |d   dz  ||z  k(  rUJ  y )Nr      rU   )r   r-   rW   rA   r   rY   r[   s         r   test_decomp_4r`   p   s    Q!Vb[A
Cq3'FB  A"SWWQZ@1v{{tvv{{tQw!B$	r"   c            
         dD ]  } t        t        dz  | z
        }i }t        ||      \  }}d}t        |||||j	                  |            | dz  dk(  rJt              dk(  sJ t        fdt        d      D              sJ t        d D              ||z  k(  rJ | dz  d	k(  sJ t              dk(  sJ d
   j                  dk(  sJ d
   j                  dk(  sJ d
   j                         ||z  k(  rJ  y )N)ir   rU   rW      rA   c              3   j   K   | ]*  }|   j                   d k(  xr |   j                  d k(   , ywrA   NrD   rM   ).0ir8   s     r   	<genexpr>z test_decomp_5.<locals>.<genexpr>   s1     Eqqtvv{2qtvv{2Es   03c              3   :   K   | ]  }||j                   z    y wr   rD   rg   r9   s     r   ri   z test_decomp_5.<locals>.<genexpr>   s     -RBDD-   r   r   )r
   r   r   r   rZ   rB   allranger   rD   rM   as_submodule)dr)   r\   r5   r6   r7   r8   s         @r   test_decomp_5rr   }   s     1a!1s+BA"SWWQZ@q5A:q6Q;;EE!HEEEE-1--R777q5A::q6Q;;Q466Q;;Q466Q;;Q4$$&!b&0001r"   c            	      8   t        t        dz  t        dz  z   dt        z  z
  dz         } i }t        | |      \  }}d}t        || |||j	                  |            }t        |      dk(  sJ t        d |D              sJ t        d |D              ||z  k(  sJ y )Nr   r   rc   rU   rW   c              3   d   K   | ](  }|j                   |j                  cxk(  xr d k(  nc  * ywre   rf   rl   s     r   ri   z test_decomp_6.<locals>.<genexpr>   %     -Rrttrtt q  -   .0c              3   :   K   | ]  }||j                   z    y wr   rk   rl   s     r   ri   z test_decomp_6.<locals>.<genexpr>        %RBDD%rm   )r
   r   r   r   rZ   rB   rn   r   r[   s         r   test_decomp_6ry      s     	Q!Va1f_q1u$q()A
Cq3'FB	AQbR<Aq6Q;;-1----%1%%2---r"   c                  B   t        t        dz  t        dz  z   dt        z  z
  dz         } t        j                  |       }d}|j	                  |      }|j                         }t        |      dk(  sJ t        d |D              sJ t        d |D              ||z  k(  sJ y )Nr   r   rc   c              3   d   K   | ](  }|j                   |j                  cxk(  xr d k(  nc  * ywre   rf   rl   s     r   ri   z test_decomp_7.<locals>.<genexpr>   ru   rv   c              3   :   K   | ]  }||j                   z    y wr   rk   rl   s     r   ri   z test_decomp_7.<locals>.<genexpr>   rx   rm   )	r
   r   r   alg_field_from_polyprimes_abovemaximal_orderrB   rn   r   )r)   Kr7   r8   r5   s        r   test_decomp_7r      s    Q!Va1f_q1u$q()A
q!A	A	qA	
	Bq6Q;;-1----%1%%2---r"   c                  P   t         dz  dt         dz  z  z   dt         z  z
  dz   t         dz  dt         dz  z  z   dt         z  z   dz
  t         dz  dt         dz  z  z   t         z
  dz   t         dz  dt         dz  z  z   dt         z  z
  dz
  t         dz  dt         dz  z  z   dz   t         dz  dt         dz  z  z   dt         z  z   dz
  t         dz  dt         dz  z  z   dz   t         dz  dt         dz  z  z   dt         z  z   dz
  t         dz  dt         dz  z  z   t         z
  dz   t         dz  dt         dz  z  z   dt         z  z
  dz   t         dz  dt         dz  z  z   dt         z  z
  dz   t         dz  dt         dz  z  z   dt         z  z   dz
  t         dz  dt         dz  z  z   dt         z  z
  dz   t         dz  dt         dz  z  z   dt         z  z
  dz   t         dz  d	t         dz  z  z   dt         z  z   dz
  t         dz  d
t         dz  z  z   d	t         z  z
  dz   f} d }d}| D ]  }t        |      }i }t        ||      \  }}|j                         }||z  }	t	        |	      }
|
D ]P  }|j                  |      }t        |||||      }t        d |D              }||z  }|r |||||||       ||k(  rPJ   y )Nr   r   r   r   rK   rA   r-   rc   	      r0   c                     t        d       t        | ||       |D ]  }t        d|d        t        d|       t        d|       t        d||k(          y)z2Useful for inspection, when running test manually.z====================z  ()zI: zJ: zEqual: N)print)r)   r7   rX   r8   IJr9   s          r   displayztest_decomp_8.<locals>.display   sY    haG 	!BCvQ- 	!eQeQQx !r"   FrU   rW   c              3   :   K   | ]  }||j                   z    y wr   rk   rl   s     r   ri   z test_decomp_8.<locals>.<genexpr>   s     *"RX*rm   )r   r
   r   discriminantr   rZ   r   r   )casesr   inspectgr)   r\   r5   r6   dT	f_squaredFr7   rX   r8   r   r   s                   r   test_decomp_8r      s    	
QQ!Va!e#a'	QQ!Va!e#a'	QQ!Va!#	QQ!Va!e#a'	QQ!Va	QQ!Va!e#a'	QQ!Va	QQ!Va!e#a'	QQ!Va!#	QQ!Va!e#a'	QQ!Va!e#a'	QQ!Va!e#a'	QQ!Va!e#a'	QQ!Va!e#a'	QQ!Va!e#a'	Qa1fq1u$r)!E$" G G1s+B^^"H	i  	AggajGQbRAA***ABA1gq!Q/6M6	r"   c                      t        t        d            } t        d|       d   }|j                  dk(  sJ |j	                         d|j
                  z  k(  sJ |dk7  sJ y )Nr-   r   r   rK   )r
   r   r   rM   rp   r5   r)   rE   s     r   test_PrimeIdeal_eqr      s\     	_Q A	a	A	B44199??BEE	)))7N7r"   c                      t        t        d            } t        d|       d   }|d|j                  z  z   |j	                         k(  sJ y )Nr-   r   )r
   r   r   r5   rp   r   s     r   test_PrimeIdeal_addr      sE    _Q A	a	A	B BEE	>R__....r"   c                     t        j                  t        t        dz  dz               } | j	                  d      d   }t        |      dk(  sJ | j	                  d      d   }t        |      dk(  sJ t        j                  t        t        dz  dz         d      } | j	                  d      d   }t        |      d	k(  sJ | j	                  d      d   }t        |      dk(  sJ y )
Nr   r-   r   z(2, 3*_x/2 + 1/2)r   z(3)r2   )aliasz(2, 3*alpha/2 + 1/2))r   r}   r
   r   r~   str)kfrps     r   test_strr      s    
tAqD1H~.A
..
A
Cs8****
..
A
Cs8u 	tAFQJ/w?A
..
A
Cs8----
..
A
Cs8ur"   c                     t        t        dz  dz         } t        |       \  }}t        d| ||      }t	        |d         dk(  sJ |d   j	                  t
              dk(  sJ |d   j	                  t
        d	      d
k(  sJ y )Nr   r-   r@   r   z[ (2, (3*x + 1)/2) e=1, f=1 ])	field_genz![ (2, (3*theta + 1)/2) e=1, f=1 ]T)r   	just_gensz(2, (3*theta + 1)/2))r
   r   r   r   reprr   )r)   r5   r6   r8   s       r   	test_reprr     s    QTAXAq\FBQbR(A!:8888Q499u9%)LLLLQ499u959OOOOr"   c                     t        j                  t        t        dz  t        dz  z   dt        z  z
  dz               } | j	                         }| j                  d      }|d   }|j                  t        g d      d      }|j                  t        g d      d      }|j                  |      }||k(  sJ  | t        dd      t        d	d      t        d
d      g      } | t        dd      t        dd      t        dd      g      }|j                  |      }||k(  sJ | j                  |      }| j                  |      }|j                  |      }||k(  sJ y )Nr   r   rc   )      r1   rK   )denom)r1   r   r   r1   r   r   r   )r   r}   r
   r   r   r~   parentr   reduce_element
reduce_ANP
to_alg_numreduce_alg_num)r   Zkr8   r   aa_bar_expecteda_bars          r   test_PrimeIdeal_reducer     sA   
tAFQ!VOa!e$;a$?@AA	
	B	qA
A$C 			&&a	0AYYvj1Y;Nq!EN""" 	
2b!9bQiB
+,A1a"Q(Br1I67NNN1EN""" 	
QA\\.1Nq!EN"""r"   c                      t        j                  t        t        dz  t        dz  z   dt        z  z
  dz               } | j	                  d      }|d   j
                  j                  d      sJ y )Nr   r   rc   r   )r   r}   r
   r   r~   r2   equiv)r   r8   s     r   test_issue_23402r   %  s[    
tAFQ!VOa!e$;a$?@AA	qAQ4::Ar"   N)/mathr   sympyr   r   	sympy.abcr   r   sympy.ntheoryr   sympy.ntheory.residue_ntheoryr	   sympy.polysr
   r   sympy.polys.matricesr   sympy.polys.numberfields.basisr   #sympy.polys.numberfields.exceptionsr    sympy.polys.numberfields.modulesr   r   sympy.polys.numberfields.primesr   r   r   sympy.testing.pytestr   r+   r>   rG   rN   rR   r]   r`   rr   ry   r   r   r   r   r   r   r   r   rJ   r"   r   <module>r      s       # 1 - - 4 > ?  (R,
#"!

12
.	.-`/$P#2r"   