
    Xh{                     >   d Z ddlm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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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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF ddlGmHZH ddlImJZJmKZKmLZL ddlMmNZNmOZOmPZPmQZQ ddlRmSZS  eKd	          ZTd
  eJ            D             \  ZUZVZWZXZYZZZ[ e eeUdeP           ePdd          deP          Z\d Z]d Z^d Z_d Z`d Zad Zbd Zcd Zdd Zed Zfd Zgd Zhd Zid Zjd Zkd Zld Zmd Znd  Zod! Zpd" Zqd# Zrd$ Zsd% Ztd& Zud' Zvd( Zwd) Zxd* Zyd+ Zzd, Z{d- Z|d. Z}d/ Z~d0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdBS )Cz4Tests for dense recursive polynomials' arithmetics.     )GROUND_TYPES)
dup_normal
dmp_normal)@dup_add_termdmp_add_termdup_sub_termdmp_sub_termdup_mul_termdmp_mul_termdup_add_grounddmp_add_grounddup_sub_grounddmp_sub_grounddup_mul_grounddmp_mul_grounddup_quo_grounddmp_quo_grounddup_exquo_grounddmp_exquo_ground
dup_lshift
dup_rshiftdup_absdmp_absdup_negdmp_negdup_adddmp_adddup_subdmp_subdup_muldmp_muldup_sqrdmp_sqrdup_powdmp_powdup_add_muldmp_add_muldup_sub_muldmp_sub_muldup_pdivdup_premdup_pquo
dup_pexquodmp_pdivdmp_premdmp_pquo
dmp_pexquo
dup_rr_div
dmp_rr_div
dup_ff_div
dmp_ff_divdup_divdup_remdup_quo	dup_exquodmp_divdmp_remdmp_quo	dmp_exquodup_max_normdmp_max_normdup_l1_normdmp_l1_normdup_l2_norm_squareddmp_l2_norm_squared
dup_expand
dmp_expand)ExactQuotientFailed)f_polysSymbolPoly)FFZZQQCC)raisesxc                 6    g | ]}|                                 S  )to_dense).0fs     s/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/polys/tests/test_densearith.py
<listcomp>rV   3   s     $G$G$Gqajjll$G$G$G             c                  @   t          g t                    } t          | t          d          dt                    t          g t                    k    sJ t          | t          d          dt                    t          dgt                    k    sJ t          | t          d          dt                    t          ddgt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          g dt                    } t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          d	t                    t          g d
t                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          ddgt                    k    sJ d S )Nr   rY   rX   rY   r   r   rY   rY   rY   )rY   rY   rX   )rY   rX   rY   )rX   rY   rY      )rY   rY   rY   rY      )rY   r   rY   rY   rY      )rY   r   r   rY   rY   rY      )rY   r   r   r   rY   rY   rY   )r   rK   r   rT   s    rU   test_dup_add_termrd   6   s   2rA2a55!R((Jr2,>,>>>>>2a55!R((JsB,?,?????2a55!R((J1vr,B,BBBBB2a55!R((Jyyy",E,EEEEE999b!!A2a55!R((Jyyy",E,EEEEE2a55!R((Jyyy",E,EEEEE2a55!R((Jyyy",E,EEEEE2a55!R((J|||R,H,HHHHH2a55!R((J,K,KKKKK2a55!R((J7I7I7I2,N,NNNNN	2a55!R &'<'<'<bAAB B B B 2b661b))ZA-C-CCCCCCCrW   c                     t          t          d          t          d          t          d          gt          d          ddt                    t          t          d          t          d          t          d          gt          d          dt                    k    sJ t          t          g gddt                    t          k    sJ t          t          g gddt
                    t          k    sJ d S NrY   rX   r   r^   )r   rK   r   f_0F_0rL   rQ   rW   rU   test_dmp_add_termri   N       A1r!uu-r!uuaB??beeRUUBqEE*BqEE1b99: : : :bT1a,,3333bT1a,,333333rW   c                  @   t          g t                    } t          | t          d          dt                    t          g t                    k    sJ t          | t          d          dt                    t          dgt                    k    sJ t          | t          d          dt                    t          ddgt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          g dt                    } t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g d	t                    k    sJ t          | t          d          d
t                    t          g dt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          ddgt                    k    sJ d S )Nr   rY   rb   rX   )rb   r   r   r]   )rY   rY   rb   )rY   rb   rY   )rb   rY   rY   r^   )rb   rY   rY   rY   r_   )rb   r   rY   rY   rY   r`   )rb   r   r   rY   rY   rY   ra   )rb   r   r   r   rY   rY   rY   )r   rK   r   rc   s    rU   test_dup_sub_termrl   U   s   2rA2a55!R((Jr2,>,>>>>>2a55!R((JtR,@,@@@@@2a55!R((JAw,C,CCCCC2a55!R((Jzzz2,F,FFFFF999b!!A2a55!R((J{{{B,G,GGGGG2a55!R((J{{{B,G,GGGGG2a55!R((Jzzz2,F,FFFFF2a55!R((J}}}b,I,IIIII2a55!R((J7G7G7G,L,LLLLL2a55!R((J7J7J7JB,O,OOOOO	2a55!R &'='='=rBBC C C C 2a55!R((J1vr,B,BBBBBBBrW   c                     t          t          d          t          d          t          d          gt          d          ddt                    t          t          d          t          d          t          d          gt          d          dt                    k    sJ t          t          g gddt                    t          k    sJ t          t          g gddt
                    t          k    sJ d S rf   )r	   rK   r   rg   rh   rL   rQ   rW   rU   test_dmp_sub_termrn   m   rj   rW   c                  x   t          g t                    } t          | t          d          dt                    t          g t                    k    sJ t          ddgt                    } t          | t          d          dt                    t          g t                    k    sJ t          g dt                    } t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g dt                    k    sJ t          | t          d          dt                    t          g d	t                    k    sJ d S )
NrX   r^   rY   r   rY   rX   r^   rX   r_   ra   )rX   r_   ra   r   )rX   r_   ra   r   r   )rX   r_   ra   r   r   r   )r   rK   r
   rc   s    rU   test_dup_mul_termrr   t   sj   2rA2a55!R((Jr2,>,>>>>>Aq62A2a55!R((Jr2,>,>>>>>999b!!A2a55!R((Jyyy",E,EEEEE2a55!R((J|||R,H,HHHHH2a55!R((J,K,KKKKK2a55!R((J7I7I7I2,N,NNNNNNNrW   c                     t          t          d          t          d          t          d          gt          d          ddt                    t          t          d          t          d          t          d          gt          d          dt                    k    sJ t          g gt          d          gddt                    g gk    sJ t          t          d          ggg ddt                    g gk    sJ t          t          d          t          d          gt          d          ggt          d          gddt                    t          d          t          d          gt          d          gg g gk    sJ t          g gt          dd          gddt                    g gk    sJ t          t          dd          ggg ddt                    g gk    sJ t          t          dd          t          dd          gt          dd          ggt          dd          gddt                    t          dd          t          dd          gt          dd          gg g gk    sJ d S )	NrY   rX   r^   r   r_   ra   r`      )r   rK   r
   rL   rQ   rW   rU   test_dmp_mul_termru      s.   A1r!uu-r!uuaB??beeRUUBqEE*BqEE1b99: : : : r!uugq!R00RD8888"Q%%	2q!R00RD8888"Q%%A"Q%%1BqEE7Aq"EE
Q%%A"Q%%"b)* * * * r!Qxxj!Q33t;;;;"Q((b!Q33t;;;;"Q((Bq!HH-1az:R1XXJ1bQQ
Q))R2YY	"Q))b"56 6 6 6 6 6rW   c                      t          j        g d          } t          j        g d          }t          | t          d          t                     |k    sJ d S )NrY   rX   r^   r_   )rY   rX   r^      r_   )rK   mapr   rT   gs     rU   test_dup_add_groundr|      Q    
|||A
|||A!RUUB''1,,,,,,rW   c                      t          j        dgdgdgdgg          } t          j        dgdgdgdgg          }t          | t          d          dt                     |k    sJ d S )NrY   rX   r^   r_   rx   )rK   ry   r   rz   s     rU   test_dmp_add_groundr      sm    
aS1#s#$$A
aS1#s#$$A!RUUAr**a//////rW   c                      t          j        g d          } t          j        g d          }t          | t          d          t                     |k    sJ d S )Nrw   )rY   rX   r^   r   r_   )rK   ry   r   rz   s     rU   test_dup_sub_groundr      r}   rW   c                      t          j        dgdgdgdgg          } t          j        dgdgdgg g          }t          | t          d          dt                     |k    sJ d S )NrY   rX   r^   r_   )rK   ry   r   rz   s     rU   test_dmp_sub_groundr      sk    
aS1#s#$$A
aS1#r"##A!RUUAr**a//////rW   c                     t          g t                    } t          | t          d          t                    t          g t                    k    sJ t          g dt                    } t          | t          d          t                    t          g t                    k    sJ t          | t          d          t                    t          g dt                    k    sJ d S )NrX   rp   r   rq   )r   rK   r   rc   s    rU   test_dup_mul_groundr      s    2rA!RUUB'':b"+=+=====999b!!A!RUUB'':b"+=+=====!RUUB'':iii+D+DDDDDDDrW   c            
         t          t          t          d          dt                    t          d          t          d          t          d          gt          d          ggt          d          ggt          d          t          d          t          d          gt          d          t          d          t          d          gt          d          gggk    sJ t          t          t	          dd          dt                    t	          dd          t	          dd          t	          d	d          gt	          dd          ggt	          d	d          ggt	          dd          t	          d
d          t	          dd          gt	          dd          t	          dd          t	          dd          gt	          dd          gggk    sJ d S )NrX   r_   ra   rx   
      rY      r^   r`   )r   rg   rK   rh   rL   rQ   rW   rU   test_dmp_mul_groundr      s   #r!uua,,
Q%%A1	A(
Q%%	
Q%%BB	 2a55"Q%%A"7"Q%%A1     #r!QxxB//
Q))R2YY1b			*R2YYK8
Q))
Q))R2YY1b			*R2YY1b		2YY-Q))	&4      rW   c                     t          t          d            t          g t                    } t	          | t          d          t                    t          g t                    k    sJ t          g dt                    } t	          | t          d          t                    | k    sJ t	          | t          d          t                    t          g dt                    k    sJ t	          | t          d          t                    t          g dt                    k    sJ t          g dt
                    } t	          | t          d          t
                    | k    sJ t	          | t          d          t
                    t          d          t          d          t          d          gk    sJ t	          | t          d	          t
                    t          d
d	          t          dd	          t          dd	          gk    sJ d S )Nc                  r    t          t          g dt                    t          d          t                    S Nrp   r   )r   r   rK   rQ   rW   rU   <lambda>z%test_dup_quo_ground.<locals>.<lambda>   s<    nZ A A A6 6qEE2' ' rW   r^   ra   rX   rx   rY   rX   r^   rY   r_   )rX   r   rX   r_   rZ   ra   rx   )rN   ZeroDivisionErrorr   rK   r   rL   rc   s    rU   test_dup_quo_groundr      s   
         	2rA!RUUB'':b"+=+=====999b!!A!RUUB''1,,,,!RUUB'':iii+D+DDDDD!RUUB'':iii+D+DDDDD999b!!A!RUUB''1,,,,!RUUB''BqEE2a55"Q%%+@@@@@!RUUB''Bq!HHbAhh1a+IIIIIIIrW   c                     t          t          d            t          t          d            t          g t                    } t          | t	          d          t                    t          g t                    k    sJ t          g dt                    } t          | t	          d          t                    | k    sJ t          | t	          d          t                    t          g dt                    k    sJ t          g dt                    } t          | t          d          t                    | k    sJ t          | t          d          t                    t          d          t          d          t          d          gk    sJ t          | t          d	          t                    t          d
d	          t          dd	          t          dd	          gk    sJ d S )Nc                  r    t          t          g dt                    t          d          t                    S r   r   r   rK   rQ   rW   rU   r   z'test_dup_exquo_ground.<locals>.<lambda>   s=    &6z C C C8 8!uub'" '" rW   c                  r    t          t          g dt                    t          d          t                    S )Nrp   r^   r   rQ   rW   rU   r   z'test_dup_exquo_ground.<locals>.<lambda>   s=    (8 E E E: :!uub)" )" rW   r^   r   rY   rX   r   r_   rZ   ra   rx   )rN   r   rF   r   rK   r   rL   rc   s    rU   test_dup_exquo_groundr      s   
 " " # # #
 !" !" # # # 	2rAAr!uub))ZB-?-?????999b!!AAr!uub))Q....Ar!uub))Z			2-F-FFFFF999b!!AAr!uub))Q....Ar!uub))beeRUUBqEE-BBBBBAr!uub))bAhh1a"Q((-KKKKKKKrW   c                     t          dgdgdggdt                    } t          | t          d          dt                    | k    sJ t          | t          d          dt                    t          dgdgdggdt                    k    sJ t          t          | t          d          dt                    dt                    t          dgg dggdt                    k    sJ d S Nra   rX   rx   rY   r^   r_   )r   rK   r   rc   s    rU   test_dmp_quo_groundr      s    QC!qc?Ar**A!RUUAr**a////	2a55!R &aS1#2>>? ? ? ? n	2a55!R R! !$.R!~q"$E$EF F F F F FrW   c                     t          dgdgdggdt                    } t          | t          d          dt                    | k    sJ t          | t          d          dt                    t          dgdgdggdt                    k    sJ d S r   )r   rK   r   rc   s    rU   test_dmp_exquo_groundr     s    QC!qc?Ar**AAr!uua,,1111	2a55!R &aS1#2>>? ? ? ? ? ?rW   c                  |    t          g dt                    g k    sJ t          dgdt                    g dk    sJ d S )Nr^   rY   rY   r   r   r   )r   rK   rQ   rW   rU   test_dup_lshiftr     sH    b!R  B&&&&qc1b!!\\\111111rW   c                  |    t          g dt                    g k    sJ t          g ddt                    dgk    sJ d S )Nr^   r   rY   )r   rK   rQ   rW   rU   test_dup_rshiftr     sH    b!R  B&&&&lllAr**qc111111rW   c                     t          g t                    g k    sJ t          t          d          gt                    t          d          gk    sJ t          t          d          gt                    t          d          gk    sJ t          t          d          t          d          t          d          gt                    t          d          t          d          t          d          gk    sJ t          g t                    g k    sJ t          t          dd          gt                    t          dd          gk    sJ t          t          dd          gt                    t          dd          gk    sJ t          t          dd          t          dd          t          dd          gt                    t          dd          t          dd          t          dd          gk    sJ d S )NrY   rZ   rb   rX   r^   )r   rK   rL   rQ   rW   rU   test_dup_absr     s   2r??b    BFF8R  RUUG++++BrFF8R  RUUG++++BrFFBqEE2a55)2..2a55"Q%%A2GGGGG2r??b    B1II;##1az1111Br1II;##1az1111	BBq!HHbAhh'- -13Aq2a88R1XX0NO O O O O OrW   c                  R   t          t          d          gdt                    t          d          gk    sJ t          t          dd          gdt                    t          dd          gk    sJ t          g ggdt                    g ggk    sJ t          t          d          gggdt                    t          d          gggk    sJ t          t          d          gggdt                    t          d          gggk    sJ t          g ggdt                    g ggk    sJ t          t          dd          gggdt                    t          dd          gggk    sJ t          t          dd          gggdt                    t          dd          gggk    sJ d S Nrb   r   rY   rX   r   rZ   	   )r   rK   rL   rQ   rW   rU   test_dmp_absr   "  s   BrFF8Q##1w....Br1II;2&&2a88*4444RD61b!!rdV++++beeWI;2&&RUUG9+5555bffXJ<B''beeWI;6666RD61b!!rdV++++bAhhZL>1b))1azl^;;;;bQii[M?Ar**Aq
|n<<<<<<rW   c                     t          g t                    g k    sJ t          t          d          gt                    t          d          gk    sJ t          t          d          gt                    t          d          gk    sJ t          t          d          t          d          t          d          gt                    t          d          t          d          t          d          gk    sJ t          g t                    g k    sJ t          t          dd          gt                    t          dd          gk    sJ t          t          dd	          gt                    t          dd	          gk    sJ t          t          dd          t          dd          t          dd          gt                    t          dd          t          dd          t          dd          gk    sJ d S )
NrY   rb   r   rZ   rX   r^   r   )r   rK   rL   rQ   rW   rU   test_dup_negr   /  s   2r??b    BqEE7BBrFF8++++BrFF8R  RUUG++++BrFFBqEE2a55)2..2a55"R&&"R&&2IIIII2r??b    Bq!HH:r""r"ayyk1111Br1II;##1az1111B
A 1a"Q(($%') )-/1XXr"ayy"R)),LM M M M M MrW   c                  R   t          t          d          gdt                    t          d          gk    sJ t          t          dd          gdt                    t          dd          gk    sJ t          g ggdt                    g ggk    sJ t          t          d          gggdt                    t          d          gggk    sJ t          t          d          gggdt                    t          d          gggk    sJ t          g ggdt                    g ggk    sJ t          t          dd          gggdt                    t          dd          gggk    sJ t          t          dd          gggdt                    t          dd          gggk    sJ d S r   )r   rK   rL   rQ   rW   rU   test_dmp_negr   <  s   BrFF8Q##1w....Br1II;2&&2a88*4444RD61b!!rdV++++beeWI;2&&RVVH:,6666bffXJ<B''beeWI;6666RD61b!!rdV++++bAhhZL>1b))2q		{m_<<<<bQii[M?Ar**Aq
|n<<<<<<rW   c            	      
   t          g g t                    g k    sJ t          t          d          gg t                    t          d          gk    sJ t          g t          d          gt                    t          d          gk    sJ t          t          d          gt          d          gt                    t          d          gk    sJ t          t          d          gt          d          gt                    t          d          gk    sJ t          t          d          t          d          gt          d          gt                    t          d          t          d          gk    sJ t          t          d          gt          d          t          d          gt                    t          d          t          d          gk    sJ t          t          d          t          d          t          d          gt          d          t          d          t          d          gt                    t          d          t          d          t          d          gk    sJ t          g g t                    g k    sJ t          t          dd          gg t                    t          dd          gk    sJ t          g t          dd          gt                    t          dd          gk    sJ t          t          dd	          gt          dd	          gt                    t          dd          gk    sJ t          t          dd	          gt          dd          gt                    t          dd	          gk    sJ t          t          dd          t          dd          gt          d          gt                    t          dd          t          d
d          gk    sJ t          t          d          gt          dd          t          dd          gt                    t          dd          t          d
d          gk    sJ t          t          dd          t          dd          t          dd          gt          dd          t          dd          t          dd          gt                    t          dd          t          dd          t          dd          gk    sJ d S )NrY   rX   r^   rx   r   r         r_   r`   rZ   )r   rK   rL   rQ   rW   rU   test_dup_addr   I  s(   2r2"$$$$BqEE7B##1w....21w##1w....BqEE7RUUGR((RUUG3333BqEE7RUUGR((RUUG3333BqEE2a55>BqEE7B//BqEE2a55>AAAABqEE7RUUBqEENB//BqEE2a55>AAAABqEE2	 qEEUUBqEE2b66*B0 046qEE2b662b663JK K K K 2r2"$$$$Bq!HH:r2&&2a88*444421az2&&2a88*4444Bq!HH:1az2..2a88*<<<<Bq!HH:1az2..2a88*<<<<Bq!HHbAhh'"Q%%"55"Q((Bq!HH9MMMMMBqEE7R1XXr!Qxx0"55"Q((Bq!HH9MMMMMBq!HHbAhh1a1B	15 5!QxxB4$%') )-/1XXr"ayy"R)),LM M M M M MrW   c                  "   t          t          d          t          d          gt          d          gdt                    t          t          d          t          d          gt          d          gt                    k    sJ t          t          dd          t          dd          gt          d          gdt                    t          t          dd          t          dd          gt          d          gt                    k    sJ t          g ggg ggdt                    g ggk    sJ t          t          d          gggg ggdt                    t          d          gggk    sJ t          g ggt          d          gggdt                    t          d          gggk    sJ t          t          d          gggt          d          gggdt                    t          d          gggk    sJ t          t          d          gggt          d          gggdt                    t          d          gggk    sJ t          g ggg ggdt                    g ggk    sJ t          t          dd          gggg ggdt                    t          dd          gggk    sJ t          g ggt          dd          gggdt                    t          dd          gggk    sJ t          t          dd          gggt          dd          gggdt                    t          dd          gggk    sJ t          t          dd          gggt          dd          gggdt                    t          dd          gggk    sJ d S )NrY   rX   r   r^   rZ   )r   rK   r   rL   rQ   rW   rU   test_dmp_addr   c  s>   BqEE2a55>BqEE7Ar22A1A,,- - - -Bq!HHbAhh'"Q%%!R88Aq2a88$r!uugr223 3 3 3 RD6RD61b))rdV3333beeWI;"2..RUUG9+====RD6beeWI;2..RUUG9+====beeWI;2a55'Q33"Q%%	{BBBBbeeWI;2a55'Q33"Q%%	{BBBBRD6RD61b))rdV3333bAhhZL>RD61b111azl^CCCCRD6bAhhZL>1b111azl^CCCCbAhhZL>bAhhZL>1b991azl^KKKKbAhhZL>bAhhZL>1b991azl^KKKKKKrW   c            	      	   t          g g t                    g k    sJ t          t          d          gg t                    t          d          gk    sJ t          g t          d          gt                    t          d          gk    sJ t          t          d          gt          d          gt                    g k    sJ t          t          d          gt          d          gt                    t          d          gk    sJ t          t          d          t          d          gt          d          gt                    t          d          t          d          gk    sJ t          t          d          gt          d          t          d          gt                    t          d          t          d          gk    sJ t          t          d          t          d          t          d          gt          d          t          d          t          d          gt                    t          d          t          d	          t          d
          gk    sJ t          g g t                    g k    sJ t          t          dd          gg t                    t          dd          gk    sJ t          g t          dd          gt                    t          dd          gk    sJ t          t          dd          gt          dd          gt                    g k    sJ t          t          dd          gt          dd          gt                    t          dd          gk    sJ t          t          dd          t          dd          gt          d          gt                    t          dd          t          dd          gk    sJ t          t          d          gt          dd          t          dd          gt                    t          dd          t          dd          gk    sJ t          t          dd          t          dd          t          dd          gt          dd          t          dd          t          dd          gt                    t          dd          t          d	d          t          d
d          gk    sJ d S )NrY   rb   rX   r^   rx   r   r   r   rZ   r`   )r   rK   rL   rQ   rW   rU   test_dup_subr   v  s   2r2"$$$$BqEE7B##1w....21w##2x////BqEE7RUUGR((B....BqEE7RUUGR((RVVH4444BqEE2a55>BqEE7B//BqEE2a55>AAAABqEE7RUUBqEENB//BrFFBrFF3CCCCCBqEE2	 qEEUUBqEE2b66*B0 046rFFBrFFBrFF3KL L L L 2r2"$$$$Bq!HH:r2&&2a88*444421az2&&2b!99+5555Bq!HH:1az2.."4444Bq!HH:1az2..2b!99+====Bq!HHbAhh'"Q%%"55"Q((Br1II9NNNNNBqEE7R1XXr!Qxx0"55"R))R1XX9NNNNNBq!HHbAhh1a1B	15 5!QxxB4$%') )-/AYY2q		2b!99,MN N N N N NrW   c                  "   t          t          d          t          d          gt          d          gdt                    t          t          d          t          d          gt          d          gt                    k    sJ t          t          dd          t          dd          gt          d          gdt                    t          t          dd          t          dd          gt          d          gt                    k    sJ t          g ggg ggdt                    g ggk    sJ t          t          d          gggg ggdt                    t          d          gggk    sJ t          g ggt          d          gggdt                    t          d          gggk    sJ t          t          d          gggt          d          gggdt                    t          d          gggk    sJ t          t          d          gggt          d          gggdt                    t          d          gggk    sJ t          g ggg ggdt                    g ggk    sJ t          t          dd          gggg ggdt                    t          dd          gggk    sJ t          g ggt          dd          gggdt                    t          dd          gggk    sJ t          t          dd          gggt          dd          gggdt                    t          dd          gggk    sJ t          t          dd          gggt          dd          gggdt                    t          dd          gggk    sJ d S )NrY   rX   r   r^   rb   rZ   )r   rK   r   rL   rQ   rW   rU   test_dmp_subr     s>   BqEE2a55>BqEE7Ar22A1A,,- - - -Bq!HHbAhh'"Q%%!R88Aq2a88$r!uugr223 3 3 3 RD6RD61b))rdV3333beeWI;"2..RUUG9+====RD6beeWI;2..RVVH:,>>>>beeWI;2a55'Q33"Q%%	{BBBBbeeWI;2a55'Q33"R&&
|CCCCRD6RD61b))rdV3333bAhhZL>RD61b111azl^CCCCRD6bAhhZL>1b112q		{m_DDDDbAhhZL>bAhhZL>1b991azl^KKKKbAhhZL>bAhhZL>1b992q		{m_LLLLLLrW   c                  J   t          t          d          t          d          t          d          gt          d          t          d          t          d          gt          d          t          d          gt                    t          d          t          d          t          d          t          d          gk    sJ t          t          d          t          d          gt          d          ggt          d          gt          d          t          d          ggt          d          gt          d          ggdt                    t          d          gt          d          t          d          gt          d          t          d          ggk    sJ d S )NrY   rX   r^   r   rZ   r`   r_   )r&   rK   r'   rQ   rW   rU   test_dup_add_mulr     sT   1r!uubee,r!uubeeRUU.C1r!uu~r# #')!uubeeRUUBqEE&BC C C CA1A0BqEE7RUUBqEEN2KA"Q%%!1b* */1!uug1r!uu~1rRSuu~-VW W W W W WrW   c                  J   t          t          d          t          d          t          d          gt          d          t          d          t          d          gt          d          t          d          gt                    t          d          t          d          t          d          t          d          gk    sJ t          t          d          t          d          gt          d          ggt          d          gt          d          t          d          ggt          d          gt          d          ggdt                    t          d          gt          d          t          d          gt          d          t          d          ggk    sJ d S )	NrY   rX   r^   r   r   rb   r   )r(   rK   r)   rQ   rW   rU   test_dup_sub_mulr     sX   1r!uubee,r!uubeeRUU.C1r!uu~r# #')"vvr"vvr"vvr!uu&EF F F FA1A0BqEE7RUUBqEEN2KA"Q%%!1b* */1"vvhBB8H2b66SUVWSXSX/-Z[ [ [ [ [ [rW   c                     t          g g t                    g k    sJ t          g t          d          gt                    g k    sJ t          t          d          gg t                    g k    sJ t          t          d          gt          d          gt                    t          d          gk    sJ t          t          d          gt          d          gt                    t          d          gk    sJ t          g g t                    g k    sJ t          g t          dd          gt                    g k    sJ t          t          dd          gg t                    g k    sJ t          t          dd          gt          dd          gt                    t          dd          gk    sJ t          t          dd          gt          dd          gt                    t          dd	          gk    sJ t          g d
t                    } t          g dt                    }t          g dt                    }t          | |t                    |k    sJ t          || t                    |k    sJ t          g dt                    } t          g dt                    }t          | | t                    |k    sJ t	          d          }t           |d           |d          g |d           |d          g|           |d           |d          gk    sJ t          g dt                    }t          g dt                    }t          g dt                    }t          ||t                    |k    sJ t          g dt                    }t          g dt                    }t          g dt                    }t          ||t                    |k    sJ d S )NrY   r`   rZ   #   rX   r_   r^   rt   1   )r^   r   r   ra   rY   rX   )r_   r   rY   r   )	r   r   r^      r_   r   rY   rX   r   rX   r   r   rY   rZ   	r_   r   r   r_      r   rY   r   r   ra   )O   rb   N   r       r   rX      I   *   U   M   S   r   _   %   r   r   C      L   rX   F   r   A   9   r   r   a   Y   !   r   Q   r   <   +      ,      r   r   r   r^   5      r   B   rY   r   b   r  ra   rx   r   r      r      r   7   r   D   r   T   ^   -   r   \   r  r  r   rx   K   r   [   r   "   r   r   r   r   r   ra   r      r   :   r      r   r   rZ   r   r   r  r   r   r   r   r`   3   r   r'  r   r   r   r   R   r   r   r
  r  r   r*  r  r  r,  ?   r   r   ra   r  r   r^   r^   .   r  >   X   r   r,  rb   r   H   r   r#  r0  r   r   r  r   r!  r  r   r  r   d   r   r  r   r   r=  4   V   r   r   r&  r   r  r&  r   r   r+  (\  r   r   rY   Z   r   r   r      r  r   2   r   r      rY   r   r   r   J   P   r   r   r   )   r     r0  r   r   E   r   r  r  r   r   r   r  r   r   r   r  r3  r  r<  r   r   r   r   r=  r   r,  r   r   r-  r#  r   r   r5  r`   rB  r  r   r,  r.  r  r   r  r	  0   r   r   r   r  r   r   r"  r   =   r   r9  r   rL  r   r   r   rX   ra   r   r(  r  rT  r  r  rV  rb   rP  `   r   r   r   8   r%  r:  r1  rZ  rD  r0  r   r   r  r   r  r   r   r  rL  (   r   r   r   r=  r   r   r5  '   r*  r   r   W   @   r   r  r   rt   r2  r  r  r  r   6   r[  r   ra   rA  r2  rV  r   ra  r   r  r  r   r   r   r  r   rP  r  $   r  r`   rD  r,  rL  r?  rC  r   ir   r  r   r  r_   r]  rb  r   r   r   r   r   r  rP  r>  r   r   r/  r%  rd  r   r   rR  r  r   r  rM  r)  r7  r:  rG  r   r;  r!  r   r   rB  r(  r*  rA  r   r   r]  r  &   r   rf  r=  r   r   ra  r0  r-  r      r   r  r  r  r@  r   r  r   r   r   rH  rd  rS  r.  rG  rG  rB  r6  r   r9  rd  r&  r   r  r   r   r   r  r   rY   r   r  rx   rx   rY  r   r   r   rS  r   r  r,  r   r   rK  rK  r`   r   r   r.  r^  r   r`   r   rb  r   rJ  r)  rd  r   r  rO  r  r   rH  r  r  r   r3  r`  r  r(  r   r-  r5  r   r   r?  r  rB  r   r   r   rh  r   r   r3  r!  r   r  r  rg  r	  r   r$  r  r+  r   r   r   r=  rx   r5  r   r  r   (C  i  ii`  ii  i-  iA  iigiiY  ii_  iOi.  iin%  i0$  io  i[  i	J  i5'  i\ii*  ii?i  i*  iizi?  iDz  i`  i|  i  i  ii  i=  is  i  i|  i  ivki}i%  rj  iQi  i`iHii4  iw  i%  i3Uii,  ii  ii  iY  i}i|idi"li޷iiti\ioiiiNb  iiM  i2  iMiiKl  i#iiiiwN  i$iZi  iQ  i9i%}  5ig  ivF  i;if|  ii4ii0  ib  i&Mi^  i'iHi>iiTiߟirN  iuii'  ixiciL  iilg  iiU  i  ip  iXi  i  i0  i5i,  i iCi7  i  ibi/ i_  iYir  i  iM6  iiS  ii|d i  iY ii ii  iPi#i<  iii  i+  ii  i  iiii9i0|iiibiE  itiy  ii:  id  i ii iii  iwi% iW i  iiiiHxii*Fi[iiuUi+iieiy;  izi+  ii<i  i  i/8  iiihihsi  ii, iPi  i#  ibcii3  i*  iI6i&  i6/  iij ioiiѶiI  i?  i)  iii)  iii  iN  ii i߷  i  iϱ  ii<D  i!i1 iiwiix  isw i!  i]  ii}  i[  i  iiyai  io  i1zi'aidaimiVi  iiԔ i iiiIviJ
  i/  i iVK  ixii&i$c  iy`i"i4i  iOij  ii  i}i3  i4i\i i i  iri^ialiH
ii  ii i]  i.  iv  i  i  ii  i!ii  i^N iii
igi!  ivrk  iZ  i'  i  iZiini2 i~  i  iRiorili  iiia  i  iii71  i\ih  i  iiƺ  ii0  ii(ioifi  ii+i i3i" i+G  i8 ii_ iD  i%}ii  imi i9  i=Ri0*  ii2i  iYV  it  ii5  i  i  i.!  i$  ii>{  ii  i1iiK  iO  i'ii{i}i  i_ii	i;  i  iiI  ig  iI  iifiDii  i2  i!陏iE  iiiiii`  is  i* i  iJiiWii.i]  iiܧ  i  i(q  iizi"_  i\ih  i  iiSiiOQii/iii{  iY  iiii4  i"  iw iI  i  i i  i.  iM\iO  ii  (iDie  i  iat  iz  iIio  iF  iO  i$  iS  iƔiOii^iYii*  iiSif  i9  iy  ini&  iii3.  i*iiw i_  iiwii	OiA#  [ioui]+  iv-  iq  i  i\i$  io5  i  i6  ii?  i   iWisiziAi&  iw  io  i7O  iiiyiii^  iC  ie  i'ii9i<i$X  ii  i-  in  iiiiix}  iiK,  i{ii  i i%iWrn  iU  ild  i   i  ii  iQ  iN  iX  i-  i3  i	  ii7iEii8i  iiiirii  i	  i  ii|)r   rO  r  rP  r   r   r  r   r   r  r^  rH  r   r	  r   r  r  r_   r  ra   r   r   r   r   i/   r.  r"  r?  r   r   r   rF  rL  rP  r_  r   r   r  rC  rb   r\  r   r   r  r  r   r9  rL  r   r  r   r  rN  r3  r   r   r   ir   r!  rX  rO  rD  rY   G   r_   r   rS  r_   r  rB  r  r`   rS  r-  r8  r  r  r   r"  r   rS  rO  r  rp  r   r   r^  r   r(  r  r&  r   r  r.  rh  r   rC  r/  r:  rZ  r%  r   r\  rY  r+  rR  r   r	  r%  r   r+  rh  r   r   r   rG  r   r   r^   rd  rS  r   rP  r   r  r  r   r   rN  r8  r@  r   rR  r  r<  r   r9  r`  r@  r  r   r8  r   r%  r   r   r   ;   r   c   r   r   r
  r6  r   r   rY   r)  r"  rI  r   rB  r   r   r   r_  r/  r   r  r   r  r[  re  rM  r^  r   r   r3  r  r'  r  r   r
  rX  r`  rr  r:  r   r   rO  r   r   r
  rO  r_   r   r   rY  r3  r   r   r  r  r  r   r<  r  r  rR  r  r   r  r=  rA  r  rZ  r   r^   r[  r   r   r5  r   r  r   rJ  r]  r'  r   r   r-  r-  rX  r   r   rS  r   rS  r   r  r   (+  r>  r8  r   r  r   r9  r3  r   r  rN  r   rZ  rg  r   r   r   r  r   r  r0  r   r   rD  r   rH  r  r(  r_   rp  r   r   r   rr  rH  r7  rs  r(  rN  r_  r   r6  r   r_  rr  r   rR  r  r   r]  r"  r_   r  r9  r  r  rX  r   r^      rZ  rc  r   r  r   ra   r   r   r\  r   r<  rb  r   rr  r   r   ra  r   rd  rK  r   rD  r   r  r   r   r   r   r   r   rq  r   r0  rW  rZ  r'  rx   rb   rZ  r   r  r  r   rd  rq  r   r  r   r;  rs  r>  re  r`   ra  r   rR  rT  r   r  r=  r  r&  r@  r^  r  r   rY   r   ri  r>  r   r   r^   r   r:  r  r1  rQ  r   r  r  r   r   r   r`   r   r  ]   r   r  rD  rH  r   rw  rs  rA  r  r0  r   r   r  rY  r  r   r  rw  r   r   r  ru  r   r   r4  r  r   rf  rK  r   r?  r  rD  r   r   rp  r  r2  r   r;  r   rA  r%  r  r   r  r   ra   r  r  r   rt   r   rw  r   r)  r,  r<  rD  r   rC  rr  r_  r   r  ru  r   r  rQ  rU  rV  rE  r   r`   r   rt  r  r   r3  r  r   r   r	  r  r/  rg  r   r<  rA  rG  rY   r  r  r+  r   rS  rC  r7  r   r   rc  rg  r   rY  r  r   rG  r   rD  r  r   r   r*  rV  r)  r^   r   r  rX   rT  r   r   r   r"  r	  r   r   rA  r   r_   r@  r   rC  r>  r)  rh  r   rG  rr  r   rs  r0  r  rv  rQ  r   r  r   rd  ri  r   r   (  i  i$  i4iiiil  iii6  iA  i?,  idiiC  i+R  iii>  i  iis"  iD  i'  i  ii!  ii  ic  i5&  i/     i=I  iiik  i;ii1  i  ii/L  ii  ivi  i$\  iƐiu  i  ii[.i?iir  i  iV  iii8  iwii<  i  iS;  i:iiibi  i\  iViiA  ibI  i/  i^`  iy  i  ikii  ivii)Q  iL  iP  iڃ  iiUi}  i  iяi0ii5  i|-  iD  i(i\  ii  iQ  i  ii  iix`i`M  iHiZ  i  iqb  iG$  il  ii%  i6i3  i<  i  i_N  i  i-  ij  ivimi6  iʀ  i2ik  ios  iv igiXli(i   i  iˎi(i  iPiSi  iŒ  iii{iiU|igiizD  i  i
  iU$ib  iiiMiC ii\Ri i9  iia(  iN  iuiS)i  i  i8H  ir  i%  iid  i0 iii  i	  i5iiA iei  i  i  i0iʷ  i	f  i![i4 ii	  iipq  i]iHix[  ii?Si@YiiM  i  iw=  i,  i ifiJ  i9  i  ii@  ih i  i  i i  i iiiFiwi'  in i"  iG  iJ  iBr  iR!  i  ii<iiiT  i   izsi5 iii{  iiii**  iia  i  i6i wiy it  iM  i+ioiWiDid ihijisii.  iv  iS\i/]iNz  iNm  iH  i@  iJ  i(iۂ  iu  ii]  iz  ii\  i=i&iieiiro  i%i9iyw  i!  iJ  iiY iH   i-ci_i i
2  ii ii  i\i i^  i: i4  i&  i  i@i  iiiS i.i  iJo  i= iT  i i
  ivi  ip  ibi=  i6  i/  iPi9  iw  i;@iiGq  i  i  iiii)  imGi,  i*  iiiW  ii&  isiaiiu  i  i  i;  i iT  i
iS3 iUi5  i,  i6i.i-ii  iXi~iii  i1i8  ikin  iWdi{rm  i|D i:iǙifIi1  i  isiqiu  i2i  iX  iӉi3iVii  i9ig7  ii-i  i7i  ii i.  i  i`  i  i  i  iR  iii§i{  im i^  iiiiH  iYF  ii1  iiisO  i  ii.iiG  i=  i  i;  iLb  iHip(  iqi  iT  ii)i i}iiˁ  i  iR  i,i^h  iݯi)  i  rA  i^  iuiii  i  iABicC  i>in  iii  iim  iib  iii  ii[n  iitiiѝiI  iiyi5iC  iio~ip  iiiDB  i	i[i"7  i7ii  ii-i  iD  iPrl  iL&  iiu
  io  iii\  ii  i0  i4"  itiwii  iR  iiO  iii	  i{.  i  i
iX  iQ   is+  i\i  iniv/  iti  is  iJi	  i)r    rK   rL   r   rJ   )rT   r{   hKp1p2ress          rU   test_dup_mulr    s   2r2"$$$$21w##r))))BqEE7B##r))))BqEE7RUUGR((RUUG3333BqEE7RUUGR((RVVH44442r2"$$$$21az2&&",,,,Bq!HH:r2&&",,,,Bq!HH:1az2..2a88*<<<<Bq!HH:1az2..2b"::,>>>>%%%r**A<<<$$A111266A1a!!!!1a!!!!???B''A111266A1a!!!!
1AAAaDD!!A$$<!!A$$!q11aaddAAaDD\AAAA	 ; ; ; =?
@ 
@B 
 I I I* KM+
N 
NB,  = = =z {= =C~ 2r2#%%%%	 8 8 8 :<
= 
=B  
 A A A$ CE%
F 
FB&  8/ 8/ 8/p 13q84 84Ct 2r2#%%%%%%rW   c                     t          t          d          gt          d          gdt                    t          t          d          gt          d          gt                    k    sJ t          t          dd          gt          dd          gdt                    t          t          dd          gt          dd          gt                    k    sJ t          g ggg ggdt                    g ggk    sJ t          t          d          gggg ggdt                    g ggk    sJ t          g ggt          d          gggdt                    g ggk    sJ t          t          d          gggt          d          gggdt                    t          d          gggk    sJ t          t          d          gggt          d          gggdt                    t          d          gggk    sJ t          g ggg ggdt                    g ggk    sJ t          t          dd          gggg ggdt                    g ggk    sJ t          g ggt          dd          gggdt                    g ggk    sJ t          t          dd          gggt          dd          gggdt                    t          dd          gggk    sJ t          t          dd          gggt          dd          gggdt                    t          dd          gggk    sJ t	          d          } t           | d          g | d          gg | d          g | d	          ggd|            | d          g | d	          ggk    sJ d S )
Nr`   rZ   r   r^   rX   rY   r   ra   r_   )r!   rK   r    rL   rJ   r{  s    rU   test_dmp_mulr    s   BqEE7RUUGQ++A"Q%%"%%& & & &Bq!HH:1az1b11Aq
R1XXJ++, , , , RD6RD61b))rdV3333beeWI;"2..B4&8888RD6beeWI;2..B4&8888beeWI;2a55'Q33"Q%%	{BBBBbeeWI;2a55'Q33"Q%%	{BBBBRD6RD61b))rdV3333bAhhZL>RD61b11rdV;;;;RD6bAhhZL>1b11rdV;;;;bAhhZL>bAhhZL>1b991b		{m_LLLLbAhhZL>bAhhZL>1b991b		{m_LLLL
1A
!A$$!!A$$AAaDD6AAaDD6*Aq2 278qttfqqttf5EF F F F F FrW   c                     t          g t                    g k    sJ t          t          d          gt                    t          d          gk    sJ t          t          d          t          d          gt                    t          d          t          d          t          d          gk    sJ t          g t                    g k    sJ t          t          dd          gt                    t          dd          gk    sJ t          t          dd          t          dd          gt                    t          dd          t          dd          t          dd          gk    sJ t          g dt                    } t          | t                    t          g dt                    k    sJ t	          d          }t           |d           |d          g|           |d           |d	          gk    sJ d S )
NrX   r_   rY   r^   r   r   r   ra   rZ   )r"   rK   rL   r   rJ   )rT   r{  s     rU   test_dup_sqrr    s   2r??b    BqEE7BBqEE7****BqEE2a55>2&&2a55"Q%%A*?????2r??b    Bq!HH:r""r!Qxxj0000Bq!HHbAhh',,Aq2a88R1XX0NNNNN???B''A1b>>Z(F(F(FKKKKKK
1AAAaDD!!A$$<##!aadd|333333rW   c                     t          t          d          t          d          gdt                    t          t          d          t          d          gt                    k    sJ t          g ggdt                    g ggk    sJ t          t          d          gggdt                    t          d          gggk    sJ t          g ggdt                    g ggk    sJ t          t          dd          gggdt                    t          dd          gggk    sJ t	          d          } t           | d          g | d          ggd|            | d          g | d          ggk    sJ d S )	NrY   rX   r   r_   r^   r   ra   rZ   )r#   rK   r"   rL   rJ   r  s    rU   test_dmp_sqrr    sl   BqEE2a55>1b))A1##$ $ $ $ RD61b!!rdV++++beeWI;2&&RUUG9+5555RD61b!!rdV++++bAhhZL>1b))1azl^;;;;
1AQQqTTFQQqTTF#Q**!v!v.>>>>>>>rW   c                  *   t          g dt                    t          d          gk    sJ t          g dt                    t          d          gk    sJ t          g dt                    g k    sJ t          g dt                    g k    sJ t          t          d          gdt                    t          d          gk    sJ t          t          d          gdt                    t          d          gk    sJ t          t          d          gdt                    t          d          gk    sJ t          t          d          gdt                    t          d          gk    sJ t          t          d          gdt                    t          d          gk    sJ t          t          d          gdt                    t          d          gk    sJ t          t          dd          gdt                    t          dd          gk    sJ t          t          dd          gdt                    t          dd          gk    sJ t          t          dd          gdt                    t          dd          gk    sJ t          t          dd          gdt                    t          dd          gk    sJ t          t          dd          gdt                    t          dd          gk    sJ t          t          dd          gdt                    t          dd          gk    sJ t          g dt                    } t          | dt                    t          dgt                    k    sJ t          | dt                    t          g dt                    k    sJ t          | dt                    t          g d	t                    k    sJ t          | dt                    t          g d
t                    k    sJ d S )Nr   rY   rZ   r^      r   rX   r   )rx   r   r   r   r  r   ra   r  i&  rY   r      iW  )r$   rK   rL   r   rc   s    rU   test_dup_powr    s   2q""Q%%((((2q""Q%%((((2q"####2q"####BqEE7Ar""r!uug----BqEE7Ar""r!uug----BqEE7Ar""r!uug----BqEE7Ar""r!uug----BqEE7Ar""r!uug----BqEE7Ar""r$xxj0000Bq!HH:q"%%"Q((3333Bq!HH:q"%%"Q((3333Bq!HH:q"%%"Q((3333Bq!HH:q"%%"Q((3333Bq!HH:q"%%"Q((3333Bq!HH:q"%%"T6*:*:);;;;;???B''A1a
A3 3 333331a
???B ? ?????1a
+I+I+I2 N NNNNN1a
9992!? !? ? ? ? ? ? ?rW   c                     t          g gddt                    t          d          ggk    sJ t          g gddt                    t          d          ggk    sJ t          g gddt                    g gk    sJ t          g gddt                    g gk    sJ t          t          d          ggddt                    t          d          ggk    sJ t          t          d          ggddt                    t          d          ggk    sJ t          t          d          ggddt                    t          d          ggk    sJ t          t          dd          ggddt                    t          dd          ggk    sJ t          t          dd          ggddt                    t          dd          ggk    sJ t          t          dd          ggddt                    t          dd          ggk    sJ t          g dt                    } t          | ddt                    t	          | dt                    k    sJ d S )	Nr   rY   rZ   r^   r  r  r   rX   )r%   rK   rL   r   r$   rc   s    rU   test_dmp_powr    s$   B4Ar""1wi////B4Ar""1wi////B4Ar""rd****B4Ar""rd****RUUG9aB''RUUG94444RUUG9aB''RUUG94444RUUG9aB''RUUG94444R1XXJ<Ar**1azl::::R1XXJ<Ar**1azl::::R1XXJ<Ar**40@0@/A.BBBBB???B''A1aB71a#4#4444444rW   c                  6   t          g dt                    t          g dt                    t          ddgt                    } t          ddgt                    }t          t                    | |fk    sJ t          t                    | k    sJ t	          t                    |k    sJ t          t          fd           t          g dt                    t          g dt                    t          ddgt                    } t          ddgt                    }t          t                    | |fk    sJ t          t                    | k    sJ t	          t                    |k    sJ t          t          fd           d S )	Nr^   rY   rY   r`   r`   r   rY   rt   r   r>  o   c                  0    t           t                    S N)r-   rK   rz   s   rU   r   ztest_dup_pdiv.<locals>.<lambda>      
1a(<(< rW   c                  0    t           t                    S r  )r-   rL   rz   s   rU   r   ztest_dup_pdiv.<locals>.<lambda>  r  rW   )r   rK   r*   r,   r+   rN   rF   rL   qrrT   r{   s     @@rU   test_dup_pdivr    s   <<<$$A:::r""AB8R  AB9b!!AAq"!Q''''Aq"""""Aq"""""
 < < < < <===<<<$$A:::r""AB8R  AB9b!!AAq"!Q''''Aq"""""Aq"""""
 < < < < <=====rW   c                  ~   t          dgg g dgdt                    t          dgddggdt                    t          dgddggdt                    } t          g dgdt                    }t          dt                    | |fk    sJ t          dt                    | k    sJ t	          dt                    |k    sJ t          t          fd           t          dgg g dgdt                    t          dgddggdt                    t          dgddggdt                    } t          g d	gdt                    }t          dt                    | |fk    sJ t          dt                    | k    sJ t	          dt                    |k    sJ t          t          fd
           d S )NrY   r\   rb   r   rX   r   r   c                  2    t           dt                    S NrY   r1   rK   rz   s   rU   r   ztest_dmp_pdiv.<locals>.<lambda>&      
1aB(?(? rW   rX   r   )rx   r   r   c                  2    t           dt                    S r  r  rz   s   rU   r   ztest_dmp_pdiv.<locals>.<lambda>2  r  rW   )r   rK   r.   r0   r/   rN   rF   r  s     @@rU   test_dmp_pdivr    s   QCYYY'B//AQC"a>1b))AQC!Q=!R((AIII;2&&AAq!R  QF****Aq!R  A%%%%Aq!R  A%%%%
 ? ? ? ? ?@@@QCYYY'B//AQC"a>1b))AQC!Q=!R((AIII;2&&AAq!R  QF****Aq!R  A%%%%Aq!R  A%%%%
 ? ? ? ? ?@@@@@rW   c                      t          t          d            t          g dt                    } t          g dt                    }g | }}t	          | |t                    ||fk    sJ d S )Nc                  2    t          g dg t                    S Nrp   )r2   rK   rQ   rW   rU   r   z!test_dup_rr_div.<locals>.<lambda>6      jB&C&C rW   r  r  )rN   r   r   rK   r2   rT   r{   r  r  s       rU   test_dup_rr_divr  5  sm    
CCDDD<<<$$A:::r""AqqAaBAq6))))))rW   c                     t          t          d            t          dgg g dgdt                    } t          dgddggdt                    }t          dgddggdt                    }t          g dgdt                    }t	          | |dt                    ||fk    sJ t          dgg g dgdt                    } t          dgddggdt                    }t          dgddggdt                    }t          g dgdt                    }t	          | |dt                    ||fk    sJ t          dgg g dgdt                    } t          dgddggdt                    }g g| }}t	          | |dt                    ||fk    sJ d S )	Nc                  <    t          ddgdggg gdt                    S NrY   rX   r^   )r3   rK   rQ   rW   rU   r   z!test_dmp_rr_div.<locals>.<lambda>A       j1a&1#a&L&L rW   rY   r\   rb   r   r  rX   r   )rN   r   r   rK   r3   r  s       rU   test_dmp_rr_divr  @  s   
LLMMMQCYYY'B//AQC"a>1b))AQC!Q=!R((AIII;2&&AaAr""q!f,,,,QCYYY'B//ARD1a&>1b))ARD2q'?Ar**AIII;2&&AaAr""q!f,,,,QCYYY'B//AQC"a>1b))A4qAaAr""q!f,,,,,,rW   c                  J   t          t          d            t          g dt                    } t          g dt                    }t          dd          t          dd          g}t          dd          t          d	d          g}t	          | |t                    ||fk    sJ d S )
Nc                  2    t          g dg t                    S r  )r4   rL   rQ   rW   rU   r   z!test_dup_ff_div.<locals>.<lambda>\  r  rW   r  r  r^   r`   r   rD  r>  r  )rN   r   r   rL   r4   r  s       rU   test_dup_ff_divr  [  s    
CCDDD<<<$$A:::r""A	Aq2b"::A	BRR[[!AaBAq6))))))rW   c                  $   t           dk    rd S ddlm}  ddlm}  |            } | dd           | dd          g} | dd          g}t          ||d|           | dd           | dd	          gg fk    sJ  | dd           | dd           | dd	           | dd
          g} | dd           | dd           | dd          g}t          ||d|           | dd           | dd          g | dd           | dd          gfk    sJ d S )Ngmpy2r   )mpq)GMPYRationalFieldrY   r^   rX   ra   r_   r`   rb   r   rZ   r   r   r   )r   r  r  sympy.polys.domainsr  r5   )r  r  r{  rT   r{   s        rU   test_dup_ff_div_gmpy2r  f  sm   w555555A	Qq33q88A	Qq
AaAq!!ss1QxxQq&:B%?????	Qq33q88SS1XXss1Qxx0A	RCC!HHcc"Qii(AaAq!!ss2ayy##b))&<ss1Ryy##cRT++>V%WWWWWWWrW   c                  |   t          t          d            t          dgg g dgdt                    } t          dgddggdt                    }t          dd          gt          dd          t          dd          gg}t          dd          t          dd          t          dd          gg}t	          | |dt                    ||fk    sJ t          dgg g dgdt                    } t          dgddggdt                    }t          dd          gt          dd          t          dd          gg}t          dd          t          dd          t          dd          gg}t	          | |dt                    ||fk    sJ t          dgg g dgdt                    } t          dgddggdt                    }t          dd          gt          dd          t          dd          gg}t          dd          t          dd          t          dd          gg}t	          | |dt                    ||fk    sJ d S )Nc                  <    t          ddgdggg gdt                    S r  )r5   rL   rQ   rW   rU   r   z!test_dmp_ff_div.<locals>.<lambda>w  r  rW   rY   r\   rb   r   rX   r   )rN   r   r   rL   r5   r  s       rU   test_dmp_ff_divr  v  s!   
LLMMMQCYYY'B//AQC"a>1b))A
Q((bAhh1a)*A
Q((Bq!HHbAhh	'(AaAr""q!f,,,,QCYYY'B//ARD1a&>1b))A
R))r"ayy"Q((+,A
Q((Bq!HHbAhh	'(AaAr""q!f,,,,QCYYY'B//AQC"a>1b))A
Q((bAhh1a)*A
Q((Bq!HHbAhh	'(AaAr""q!f,,,,,,rW   c                     g dg dg dddgf\  } }t          t                    | |fk    sJ t          t                    | k    sJ t          t                    |k    sJ t	          t
          fd           g dg dd	d
gg df\  } }t          t                    | |fk    sJ t          t                    | k    sJ t          t                    |k    sJ t	          t
          fd           d S )Nr`   r_   r^   rX   rY   rp   r`   r(  r   r$  rY   c                  0    t           t                    S r  r9   rK   rz   s   rU   r   ztest_dup_div.<locals>.<lambda>      	!Q(;(; rW   )r`   r_   r^   rX   rY   r   )rY   rX   r   r   r   r`   r(  )rt   rX   r   rc  c                  0    t           t                    S r  r  rz   s   rU   r   ztest_dup_div.<locals>.<lambda>  r  rW   )r6   rK   r8   r7   rN   rF   r  s     @@rU   test_dup_divr    sM    )))ZZZ"a@JAq!Q1aA&&&&1a!!!!1a!!!!
 ; ; ; ; ;<<<###___q"g?O?O?OOJAq!Q1aA&&&&1a!!!!1a!!!!
 ; ; ; ; ;<<<<<rW   c                  (   g dg dg dddgf\  } }t          dt                    | |fk    sJ t          dt                    | k    sJ t          dt                    |k    sJ t	          t
          fd           dgggdggdggg ggdgggf\  } }t          dt                    | |fk    sJ t          dt                    | k    sJ t          dt                    |k    sJ t	          t
          fd	           d S )
Nr  rp   r  r$  rY   r   c                  2    t           dt                    S )Nr   r=   rK   rz   s   rU   r   ztest_dmp_div.<locals>.<lambda>      	!Q2(>(> rW   rX   c                  2    t           dt                    S )NrX   r  rz   s   rU   r   ztest_dmp_div.<locals>.<lambda>  r  rW   )r:   rK   r<   r;   rN   rF   r  s     @@rU   test_dmp_divr    s^    )))ZZZ"a@JAq!Q1aBAq6))))1aB1$$$$1aB1$$$$
 > > > > >???3%QC51#,"1#7JAq!Q1aBAq6))))1aB1$$$$1aB1$$$$
 > > > > >?????rW   c                      t          g t                    dk    sJ t          dgt                    dk    sJ t          g dt                    dk    sJ d S )Nr   rY   rY   r_   rX   r^   r_   )r>   rK   rQ   rW   rU   test_dup_max_normr    s_    B1$$$$R  A%%%%b))Q......rW   c                      t          g ggdt                    dk    sJ t          dgggdt                    dk    sJ t          t          dt                    dk    sJ d S )NrX   r   rY   ra   )r?   rK   rg   rQ   rW   rU   test_dmp_max_normr    si    "2&&!++++1#B''1,,,,Q##q((((((rW   c                      t          g t                    dk    sJ t          dgt                    dk    sJ t          g dt                    dk    sJ d S )Nr   rY   r  r   )r@   rK   rQ   rW   rU   test_dup_l1_normr    s_    r2!####sB1$$$$|||R((B......rW   c                      t          g ggdt                    dk    sJ t          dgggdt                    dk    sJ t          t          dt                    dk    sJ d S )NrX   r   rY   rG  )rA   rK   rg   rQ   rW   rU   test_dmp_l1_normr    si    vq"%%****!w2&&!++++sAr""b((((((rW   c                      t          g t                    dk    sJ t          dgt                    dk    sJ t          g dt                    dk    sJ d S )Nr   rY   r  r   )rB   rK   rQ   rW   rU   test_dup_l2_norm_squaredr    s_    r2&&!++++sB''1,,,,|||R00B666666rW   c                      t          g ggdt                    dk    sJ t          dgggdt                    dk    sJ t          t          dt                    dk    sJ d S )NrX   r   rY   r  )rC   rK   rg   rQ   rW   rU   test_dmp_l2_norm_squaredr    si    vq"--2222!w2..!3333sAr**c111111rW   c            	          t          dt                    dgk    sJ t          g dddgg dft                    t          g dt          ddgg dt                    t                    k    sJ d S )NrQ   rY   rp   rX   )rZ   r`   r_   r^   )rD   rK   r    rQ   rW   rU   test_dup_expandr    s    b"!$$$$yyy1a&,,,7<<			7Aq6<<<<<bAAB B B B B BrW   c                     t          ddt                    dggk    sJ t          dgdgdggdgdggdgdgdgdggfdt                    t          dgdgdggt          dgdggdgdgdgdggdt                    dt                    k    sJ d S )NrQ   rY   rX   r^   rZ   r`   r_   )rE   rK   r!   rQ   rW   rU   test_dmp_expandr    s    b!R  aSE))))aS1#!qc
aS1#sQC4HI1bQQ!qcA31#sqcA3AC6R"! "!"#R	) 	)) ) ) ) ) )rW   c                     t          dt          dz  z  dt          dz  z  z   t          d          } t          dt          dz  z  dt          dz  z  z   t          d          }| t          z  |k    sJ |                     t                    t          z  |                    t                    k    sJ |                     t                    t          z  |                    t                    k    sJ d S )	Ng     B   ge$]`Fr-  RR)domain   r   )rI   rO   
set_domainrL   rM   )ppxs     rU   test_dup_mul_polyr    s    af$';ArE'AA1TRRRA	q#v%(<QU(BBAd	S	S	SBq5B;;;;<<a2==#4#44444<<a2==#4#4444444rW   N)__doc__sympy.external.gmpyr   sympy.polys.densebasicr   r   sympy.polys.densearithr   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(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   sympy.polys.polyerrorsrF   sympy.polys.specialpolysrG   rH   rI   r  rJ   rK   rL   rM   sympy.testing.pytestrN   rO   rg   f_1f_2f_3f_4f_5f_6rh   rd   ri   rl   rn   rr   ru   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  r  r  r  r  r  r  r  r  r  r  r  r  rQ   rW   rU   <module>r     s   : : , , , , , ,                                                                                                                                          >      ; : : : : : : : : : . . . . . . . . . . . . ' ' ' ' ' '
F3KK$G$GGGII$G$G$G !S#sCcnZZQ++RR1XXq"==D D D04 4 4C C C04 4 4O O O"6 6 6"- - -0 0 0- - -0 0 0E E E  J J J,L L L,F F F? ? ?2 2 2
2 2 2

O 
O 
O
= 
= 
=
M 
M 
M
= 
= 
=M M M4L L L&N N N4M M M&W W W[ [ [`& `& `&FF F F04 4 4$? ? ?? ? ?@5 5 5(> > >4A A A4* * *- - -6	* 	* 	*X X X - - -8= = =$@ @ @$/ / /) ) )/ / /) ) )7 7 72 2 2B B B) ) )5 5 5 5 5rW   