
    Rie                     
   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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@mAZAmBZBmCZCmDZD ddlEmFZF ddlGmHZH ddlImJZJmKZKmLZL ddlMmNZN d  eH            D             \  ZOZPZQZRZSZTZU e eeOd	eL           eLd
d          d	eL          ZVd ZWd ZXd ZYd ZZd Z[d 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/ Zzd0 Z{d1 Z|d2 Z}d3 Z~d4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd?S )@z4Tests for dense recursive polynomials' arithmetics.     )
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)FFZZQQ)raisesc                 6    g | ]}|                                 S  )to_dense).0fs     Alib/python3.11/site-packages/sympy/polys/tests/test_densearith.py
<listcomp>rQ   /   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   rT   rS   rT   r   r   rT   rT   rT   )rT   rT   rS   )rT   rS   rT   )rS   rT   rT      )rT   rT   rT   rT      )rT   r   rT   rT   rT      )rT   r   r   rT   rT   rT      )rT   r   r   r   rT   rT   rT   )r   rH   r   rO   s    rP   test_dup_add_termr_   2   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CrR   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 NrT   rS   r   rY   )r   rH   r   f_0F_0rI   rL   rR   rP   test_dmp_add_termrd   J       A1r!uu-r!uuaB??beeRUUBqEE*BqEE1b99: : : :bT1a,,3333bT1a,,333333rR   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   rT   r]   rS   )r]   r   r   rX   )rT   rT   r]   )rT   r]   rT   )r]   rT   rT   rY   )r]   rT   rT   rT   rZ   )r]   r   rT   rT   rT   r[   )r]   r   r   rT   rT   rT   r\   )r]   r   r   r   rT   rT   rT   )r   rH   r   r^   s    rP   test_dup_sub_termrg   Q   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BrR   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 ra   )r   rH   r   rb   rc   rI   rL   rR   rP   test_dmp_sub_termri   i   re   rR   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 )
NrS   rY   rT   r   rT   rS   rY   rS   rZ   r\   )rS   rZ   r\   r   )rS   rZ   r\   r   r   )rS   rZ   r\   r   r   r   )r   rH   r	   r^   s    rP   test_dup_mul_termrm   p   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NrR   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 )	NrT   rS   rY   r   rZ   r\   r[      )r
   rH   r	   rI   rL   rR   rP   test_dmp_mul_termrp      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 6rR   c                      t          j        g d          } t          j        g d          }t          | t          d          t                     |k    sJ d S )NrT   rS   rY   rZ   )rT   rS   rY      rZ   )rH   mapr   rO   gs     rP   test_dup_add_groundrw      Q    
|||A
|||A!RUUB''1,,,,,,rR   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 )NrT   rS   rY   rZ   rs   )rH   rt   r   ru   s     rP   test_dmp_add_groundrz      sm    
aS1#s#$$A
aS1#s#$$A!RUUAr**a//////rR   c                      t          j        g d          } t          j        g d          }t          | t          d          t                     |k    sJ d S )Nrr   )rT   rS   rY   r   rZ   )rH   rt   r   ru   s     rP   test_dup_sub_groundr|      rx   rR   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 )NrT   rS   rY   rZ   )rH   rt   r   ru   s     rP   test_dmp_sub_groundr~      sk    
aS1#s#$$A
aS1#r"##A!RUUAr**a//////rR   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 )NrS   rk   r   rl   )r   rH   r   r^   s    rP   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DrR   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 )NrS   rZ   r\   rs   
      rT      rY   r[   )r   rb   rH   rc   rI   rL   rR   rP   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      rR   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 Nrk   r   )r   r   rH   rL   rR   rP   <lambda>z%test_dup_quo_ground.<locals>.<lambda>   s<    nZ A A A6 6qEE2' ' rR   rY   r\   rS   rs   rT   rS   rY   rT   rZ   )rS   r   rS   rZ   rU   r\   rs   )rJ   ZeroDivisionErrorr   rH   r   rI   r^   s    rP   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IrR   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   rH   rL   rR   rP   r   z'test_dup_exquo_ground.<locals>.<lambda>   s=    &6z C C C8 8!uub'" '" rR   c                  r    t          t          g dt                    t          d          t                    S )Nrk   rY   r   rL   rR   rP   r   z'test_dup_exquo_ground.<locals>.<lambda>   s=    (8 E E E: :!uub)" )" rR   rY   r   rT   rS   r   rZ   rU   r\   rs   )rJ   r   rE   r   rH   r   rI   r^   s    rP   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KrR   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 Nr\   rS   rs   rT   rY   rZ   )r   rH   r   r^   s    rP   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rR   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   rH   r   r^   s    rP   test_dmp_exquo_groundr      s    QC!qc?Ar**AAr!uua,,1111	2a55!R &aS1#2>>? ? ? ? ? ?rR   c                  |    t          g dt                    g k    sJ t          dgdt                    g dk    sJ d S )NrY   rT   rT   r   r   r   )r   rH   rL   rR   rP   test_dup_lshiftr     sH    b!R  B&&&&qc1b!!\\\111111rR   c                  |    t          g dt                    g k    sJ t          g ddt                    dgk    sJ d S )NrY   r   rT   )r   rH   rL   rR   rP   test_dup_rshiftr     sH    b!R  B&&&&lllAr**qc111111rR   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 )NrT   rU   r]   rS   rY   )r   rH   rI   rL   rR   rP   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rR   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 Nr]   r   rT   rS   r   rU   	   )r   rH   rI   rL   rR   rP   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<<<<<<rR   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 )
NrT   r]   r   rU   rS   rY   r   )r   rH   rI   rL   rR   rP   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rR   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   rH   rI   rL   rR   rP   test_dmp_negr   8  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<<<<<<rR   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 )NrT   rS   rY   rs   r   r         rZ   r[   rU   )r   rH   rI   rL   rR   rP   test_dup_addr   E  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rR   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 )NrT   rS   r   rY   rU   )r   rH   r   rI   rL   rR   rP   test_dmp_addr   _  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KrR   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 )NrT   r]   rS   rY   rs   r   r   r   rU   r[   )r   rH   rI   rL   rR   rP   test_dup_subr   r  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rR   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 )NrT   rS   r   rY   r]   rU   )r   rH   r   rI   rL   rR   rP   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LrR   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 )NrT   rS   rY   r   rU   r[   rZ   )r%   rH   r&   rL   rR   rP   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rR   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 )	NrT   rS   rY   r   r   r]   r   )r'   rH   r(   rL   rR   rP   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[ [ [ [ [ [rR   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 )NrT   r[   rU   #   rS   rZ   rY   ro   1   )rY   r   r   r\   rT   rS   )rZ   r   rT   r   )	r   r   rY      rZ   r   rT   rS   r   rS   r   r   rT   rU   	rZ   r   r   rZ      r   rT   r   r   r\   )O   r]   N   r       r   rS      I   *   U   M   S   r   _   %   r   r   C      L   rS   F   r   A   9   r   r   a   Y   !   r   Q   r   <   +      ,      r   r   r   rY   5      r   B   rT   r   b   r   r\   rs   r   r      r      r   7   r   D   r   T   ^   -   r   \   r  r  r   rs   K   r   [   r   "   r   r   r   r   r   r\   r      r   :   r      r   r   rU   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   r\   r  r   rY   rY   .   r  >   X   r   r'  r]   r   H   r   r  r+  r   r   r  r   r  r  r   r  r   d   r  r   r   r   r8  4   V   r   r   r!  r   r   r!  r   r   r&  (\  r   r   rT   Z   r   r   r      r  r   2   r   r      rT   r   r   r   J   P   r   r   r   )   r     r+  r   r   E   r   r  r  r   r   r   r  r   r   r   r  r.  r  r7  r  r   r   r   r8  r   r'  r   r   r(  r  r   r   r0  r[   r=  r  r   r'  r)  r  r   r  r  0   r   r   r   r   r   r   r  r   =   r   r4  r   rG  r   r   r   rS   r\   r   r#  r  rO  r  r  rQ  r]   rK  `   r   r   r   8   r   r5  r,  rU  r?  r+  r   r   r  r   r  r   r   r   rG  (   r   r   r   r8  r  r   r0  '   r%  r   r   W   @   r   r  r   ro   r-  r  r   r
  r   6   rV  r   r\   r<  r-  rQ  r   r\  r   r  r  r   r   r   r  r   rK  r	  $   r  r[   r?  r'  rG  r:  r>  r   ir   r  r   r  rZ   rX  r]  r   r   r   r   r   r  rK  r9  r   r   r*  r   r_  r   r   rM  r  r   r   rH  r$  r2  r5  rB  r   r6  r  r   r   r=  r#  r%  r<  r   r   rX  r  &   r   ra  r8  r   r   r\  r+  r(  r      r   r   r  r  r;  r   r  r   r   r   rC  r_  rN  r)  rB  rB  r=  r1  r   r4  r_  r!  r   r  r   r   r   r  r   rT   r   r  rs   rs   rT  r   r   r   rN  r   r  r'  r   r   rF  rF  r[   r   r   r)  rY  r   r[   r   r]  r   rE  r$  r_  r   r   rJ  r  r   rC  r  r  r   r.  r[  r  r#  r   r(  r0  r   r   r:  r  r=  r   r   r   rc  r   r   r.  r  r   r  r  rb  r  r   r  r  r&  r   r   r   r8  rs   r0  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%  re  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ߟirI  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rf  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%iWri  iU  ild  i   i  ii  iQ  iN  iX  i-  i3  i	  ii7iEii8i  iiiirii  i	  i  ii|)r   rJ  r  rK  r   r   r
  r   r   r  rY  rC  r   r  r   r  r   rZ   r  r\   r   r   r   r   i/   r)  r  r:  r   r   r   rA  rG  rK  rZ  r   r   r  r>  r]   rW  r   r   r  r  r   r4  rG  r   r
  r   r  rI  r.  r   r   r   ir   r  rS  rJ  r?  rT   G   rZ   r   rN  rZ   r  r=  r  r[   rN  r(  r3  r   r  r   r  r   rN  rJ  r	  rk  r   r   rY  r   r#  r   r!  r   r  r)  rc  r   r>  r*  r5  rU  r   r   rW  rT  r&  rM  r   r  r   r   r&  rc  r   r   r   rB  r   r   rY   r_  rN  r   rK  r   r   r  r   r   rI  r3  r;  r   rM  r  r7  r   r4  r[  r;  r  r   r3  r   r   r   r   r   ;   r   c   r   r   r  r1  r   r   rT   r$  r  rD  r   r=  r   r   r   rZ  r*  r   r   r   r  rV  r`  rH  rY  r   r   r.  r   r"  r	  r   r  rS  r[  rm  r5  r   r   rJ  r   r   r  rJ  rZ   r   r   rT  r.  r   r   r  r  r  r   r7  r  r  rM  r  r   r   r8  r<  r  rU  r   rY   rV  r   r   r0  r   r  r   rE  rX  r"  r   r   r(  r(  rS  r   r   rN  r   rN  r   r  r   (+  r9  r3  r   r  r   r4  r.  r   r  rI  r   rU  rb  r   r   r   r  r   r  r+  r   r   r?  r   rC  r  r#  rZ   rk  r   r   r   rm  rC  r2  rn  r#  rI  rZ  r   r1  r   rZ  rm  r   rM  r  r   rX  r  rZ   r  r4  r  r  rS  r   rY      rU  r^  r   r  r   r\   r   r   rW  r   r7  r]  r   rm  r   r   r\  r   r_  rF  r   r?  r   r  r   r   r   r   r   r   rl  r   r+  rR  rU  r"  rs   r]   rU  r   r  r  r   r_  rl  r   r   r   r6  rn  r9  r`  r[   r\  r   rM  rO  r   r  r8  r  r!  r;  rY  r
  r   rT   r   rd  r9  r   r  rY   r   r5  r   r,  rL  r   r   r  r   r   r   r[   r   r   ]   r   r  r?  rC  r   rr  rn  r<  r  r+  r   r   r  rT  r	  r   r  rr  r   r   r   rp  r   r   r/  r  r   ra  rF  r   r:  r  r?  r   r   rk  r  r-  r   r6  r   r<  r   r  r   r  r   r\   r  r   r   ro   r   rr  r   r$  r'  r7  r?  r   r>  rm  rZ  r   r   rp  r   r  rL  rP  rQ  r@  r   r[   r   ro  r  r   r.  r  r   r   r  r  r*  rb  r   r7  r<  rB  rT   r  r   r&  r   rN  r>  r2  r   r   r^  rb  r   rT  r  r   rB  r   r?  r  r   r   r%  rQ  r$  rY   r   r  rS   rO  r   r   r   r  r  r   r   r<  r   rZ   r;  r   r>  r9  r$  rc  r   rB  rm  r   rn  r+  r  rq  rL  r   r   r   r_  rd  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&iieiirj  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{rh  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  r<  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  iPrg  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   rH   rI   r   rG   )rO   rv   hKp1p2ress          rP   test_dup_mulrz    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#%%%%%%rR   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[   rU   r   rY   rS   rT   r   r\   rZ   )r    rH   r   rI   rG   rv  s    rP   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rR   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 )
NrS   rZ   rT   rY   r   r   r   r\   rU   )r!   rH   rI   r   rG   )rO   rv  s     rP   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3rR   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 )	NrT   rS   r   rZ   rY   r   r\   rU   )r"   rH   r!   rI   rG   r|  s    rP   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.>>>>>>>rR   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   rT   rU   rY      r   rS   r   )rs   r   r   r   r  r   r\   r  i&  rT   r      iW  )r#   rH   rI   r   r^   s    rP   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!? !? ? ? ? ? ? ?rR   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   rT   rU   rY   r  r  r   rS   )r$   rH   rI   r   r#   r^   s    rP   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4rR   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rY   rT   rT   r[   r[   r   rT   ro   r   r9  o   c                  0    t           t                    S N)r,   rH   ru   s   rP   r   ztest_dup_pdiv.<locals>.<lambda>      
1a(<(< rR   c                  0    t           t                    S r  )r,   rI   ru   s   rP   r   ztest_dup_pdiv.<locals>.<lambda>  r  rR   )r   rH   r)   r+   r*   rJ   rE   rI   qrrO   rv   s     @@rP   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"""""
 < < < < <=====rR   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 )NrT   rW   r]   r   rS   r   r   c                  2    t           dt                    S NrT   r0   rH   ru   s   rP   r   ztest_dmp_pdiv.<locals>.<lambda>"      
1aB(?(? rR   rS   r   )rs   r   r   c                  2    t           dt                    S r  r  ru   s   rP   r   ztest_dmp_pdiv.<locals>.<lambda>.  r  rR   )r   rH   r-   r/   r.   rJ   rE   r  s     @@rP   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%%%%
 ? ? ? ? ?@@@@@rR   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 Nrk   )r1   rH   rL   rR   rP   r   z!test_dup_rr_div.<locals>.<lambda>2      jB&C&C rR   r  r  )rJ   r   r   rH   r1   rO   rv   r  r  s       rP   test_dup_rr_divr  1  sm    
CCDDD<<<$$A:::r""AqqAaBAq6))))))rR   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 NrT   rS   rY   )r2   rH   rL   rR   rP   r   z!test_dmp_rr_div.<locals>.<lambda>=       j1a&1#a&L&L rR   rT   rW   r]   r   r  rS   r   )rJ   r   r   rH   r2   r  s       rP   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,,,,,,rR   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  )r3   rI   rL   rR   rP   r   z!test_dup_ff_div.<locals>.<lambda>X  r  rR   r  r  rY   r[   r   r?  r9  r  )rJ   r   r   rI   r3   r  s       rP   test_dup_ff_divr  W  s    
CCDDD<<<$$A:::r""A	Aq2b"::A	BRR[[!AaBAq6))))))rR   c                  0   	 ddl m}  n# t          $ r Y d S w xY w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 )Nr   )mpq)GMPYRationalFieldrT   rY   rS   r\   rZ   r[   r]   r   rU   r   r   r   )gmpy2r  ImportErrorsympy.polys.domainsr  r4   )r  r  rv  rO   rv   s        rP   test_dup_ff_div_gmpy2r  b  s       6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Ws   	 
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  )r4   rI   rL   rR   rP   r   z!test_dmp_ff_div.<locals>.<lambda>t  r  rR   rT   rW   r]   r   rS   r   )rJ   r   r   rI   r4   r  s       rP   test_dmp_ff_divr  s  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,,,,,,rR   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[   rZ   rY   rS   rT   rk   r[   r#  r   r  rT   c                  0    t           t                    S r  r8   rH   ru   s   rP   r   ztest_dup_div.<locals>.<lambda>      	!Q(;(; rR   )r[   rZ   rY   rS   rT   r   )rT   rS   r   r   r   r[   r#  )ro   rS   r   r^  c                  0    t           t                    S r  r  ru   s   rP   r   ztest_dup_div.<locals>.<lambda>  r  rR   )r5   rH   r7   r6   rJ   rE   r  s     @@rP   test_dup_divr    sM    )))ZZZ"a@JAq!Q1aA&&&&1a!!!!1a!!!!
 ; ; ; ; ;<<<###___q"g?O?O?OOJAq!Q1aA&&&&1a!!!!1a!!!!
 ; ; ; ; ;<<<<<rR   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  rk   r  r  rT   r   c                  2    t           dt                    S )Nr   r<   rH   ru   s   rP   r   ztest_dmp_div.<locals>.<lambda>      	!Q2(>(> rR   rS   c                  2    t           dt                    S )NrS   r  ru   s   rP   r   ztest_dmp_div.<locals>.<lambda>  r  rR   )r9   rH   r;   r:   rJ   rE   r  s     @@rP   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$$$$
 > > > > >?????rR   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   rT   rT   rZ   rS   rY   rZ   )r=   rH   rL   rR   rP   test_dup_max_normr    s_    B1$$$$R  A%%%%b))Q......rR   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 )NrS   r   rT   r\   )r>   rH   rb   rL   rR   rP   test_dmp_max_normr    si    "2&&!++++1#B''1,,,,Q##q((((((rR   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   rT   r  r   )r?   rH   rL   rR   rP   test_dup_l1_normr    s_    r2!####sB1$$$$|||R((B......rR   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 )NrS   r   rT   rB  )r@   rH   rb   rL   rR   rP   test_dmp_l1_normr    si    vq"%%****!w2&&!++++sAr""b((((((rR   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   rT   r  r   )rA   rH   rL   rR   rP   test_dup_l2_norm_squaredr    s_    r2&&!++++sB''1,,,,|||R00B666666rR   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 )NrS   r   rT   r  )rB   rH   rb   rL   rR   rP   test_dmp_l2_norm_squaredr    si    vq"--2222!w2..!3333sAr**c111111rR   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 )NrL   rT   rk   rS   )rU   r[   rZ   rY   )rC   rH   r   rL   rR   rP   test_dup_expandr    s    b"!$$$$yyy1a&,,,7<<			7Aq6<<<<<bAAB B B B B BrR   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 )NrL   rT   rS   rY   rU   r[   rZ   )rD   rH   r    rL   rR   rP   test_dmp_expandr    s    b!R  aSE))))aS1#!qc
aS1#sQC4HI1bQQ!qcA31#sqcA3AC6R"! "!"#R	) 	)) ) ) ) ) )rR   N)__doc__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.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   sympy.polys.polyerrorsrE   sympy.polys.specialpolysrF   r  rG   rH   rI   sympy.testing.pytestrJ   rb   f_1f_2f_3f_4f_5f_6rc   r_   rd   rg   ri   rm   rp   rw   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rL   rR   rP   <module>r     s   : :                                                                                                                                          >      - , , , , , * * * * * * * * * * ' ' ' ' ' '$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) ) ) ) )rR   