
    g                        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lImJZJ ddlKmLZLmMZMmNZN ddlOmPZP d	  eJ            D             \  ZQZRZSZTZUZVZW e eeQd
eN           eNdd          d
eN          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. Zzd/ Z{d0 Z|d1 Z}d2 Z~d3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@S )Az4Tests 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)FFZZQQ)raisesc                 6    g | ]}|                                 S  )to_dense).0fs     ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/polys/tests/test_densearith.py
<listcomp>rR   1   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   rU   rT   rU   r   r   rU   rU   rU   )rU   rU   rT   )rU   rT   rU   )rT   rU   rU      )rU   rU   rU   rU      )rU   r   rU   rU   rU      )rU   r   r   rU   rU   rU      )rU   r   r   r   rU   rU   rU   )r   rI   r   rP   s    rQ   test_dup_add_termr`   4   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CrS   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 NrU   rT   r   rZ   )r   rI   r   f_0F_0rJ   rM   rS   rQ   test_dmp_add_termre   L       A1r!uu-r!uuaB??beeRUUBqEE*BqEE1b99: : : :bT1a,,3333bT1a,,333333rS   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   rU   r^   rT   )r^   r   r   rY   )rU   rU   r^   )rU   r^   rU   )r^   rU   rU   rZ   )r^   rU   rU   rU   r[   )r^   r   rU   rU   rU   r\   )r^   r   r   rU   rU   rU   r]   )r^   r   r   r   rU   rU   rU   )r   rI   r   r_   s    rQ   test_dup_sub_termrh   S   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BrS   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 rb   )r	   rI   r   rc   rd   rJ   rM   rS   rQ   test_dmp_sub_termrj   k   rf   rS   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 )
NrT   rZ   rU   r   rU   rT   rZ   rT   r[   r]   )rT   r[   r]   r   )rT   r[   r]   r   r   )rT   r[   r]   r   r   r   )r   rI   r
   r_   s    rQ   test_dup_mul_termrn   r   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NrS   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 )	NrU   rT   rZ   r   r[   r]   r\      )r   rI   r
   rJ   rM   rS   rQ   test_dmp_mul_termrq      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 6rS   c                      t          j        g d          } t          j        g d          }t          | t          d          t                     |k    sJ d S )NrU   rT   rZ   r[   )rU   rT   rZ      r[   )rI   mapr   rP   gs     rQ   test_dup_add_groundrx      Q    
|||A
|||A!RUUB''1,,,,,,rS   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 )NrU   rT   rZ   r[   rt   )rI   ru   r   rv   s     rQ   test_dmp_add_groundr{      sm    
aS1#s#$$A
aS1#s#$$A!RUUAr**a//////rS   c                      t          j        g d          } t          j        g d          }t          | t          d          t                     |k    sJ d S )Nrs   )rU   rT   rZ   r   r[   )rI   ru   r   rv   s     rQ   test_dup_sub_groundr}      ry   rS   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 )NrU   rT   rZ   r[   )rI   ru   r   rv   s     rQ   test_dmp_sub_groundr      sk    
aS1#s#$$A
aS1#r"##A!RUUAr**a//////rS   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 )NrT   rl   r   rm   )r   rI   r   r_   s    rQ   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DrS   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 )NrT   r[   r]   rt   
      rU      rZ   r\   )r   rc   rI   rd   rJ   rM   rS   rQ   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      rS   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 Nrl   r   )r   r   rI   rM   rS   rQ   <lambda>z%test_dup_quo_ground.<locals>.<lambda>   s<    nZ A A A6 6qEE2' ' rS   rZ   r]   rT   rt   rU   rT   rZ   rU   r[   )rT   r   rT   r[   rV   r]   rt   )rK   ZeroDivisionErrorr   rI   r   rJ   r_   s    rQ   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IrS   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   rI   rM   rS   rQ   r   z'test_dup_exquo_ground.<locals>.<lambda>   s=    &6z C C C8 8!uub'" '" rS   c                  r    t          t          g dt                    t          d          t                    S )Nrl   rZ   r   rM   rS   rQ   r   z'test_dup_exquo_ground.<locals>.<lambda>   s=    (8 E E E: :!uub)" )" rS   rZ   r   rU   rT   r   r[   rV   r]   rt   )rK   r   rF   r   rI   r   rJ   r_   s    rQ   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KrS   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]   rT   rt   rU   rZ   r[   )r   rI   r   r_   s    rQ   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rS   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   rI   r   r_   s    rQ   test_dmp_exquo_groundr     s    QC!qc?Ar**AAr!uua,,1111	2a55!R &aS1#2>>? ? ? ? ? ?rS   c                  |    t          g dt                    g k    sJ t          dgdt                    g dk    sJ d S )NrZ   rU   rU   r   r   r   )r   rI   rM   rS   rQ   test_dup_lshiftr   	  sH    b!R  B&&&&qc1b!!\\\111111rS   c                  |    t          g dt                    g k    sJ t          g ddt                    dgk    sJ d S )NrZ   r   rU   )r   rI   rM   rS   rQ   test_dup_rshiftr     sH    b!R  B&&&&lllAr**qc111111rS   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 )NrU   rV   r^   rT   rZ   )r   rI   rJ   rM   rS   rQ   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rS   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   rU   rT   r   rV   	   )r   rI   rJ   rM   rS   rQ   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<<<<<<rS   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 )
NrU   r^   r   rV   rT   rZ   r   )r   rI   rJ   rM   rS   rQ   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rS   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   rI   rJ   rM   rS   rQ   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<<<<<<rS   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 )NrU   rT   rZ   rt   r   r         r[   r\   rV   )r   rI   rJ   rM   rS   rQ   test_dup_addr   G  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rS   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 )NrU   rT   r   rZ   rV   )r   rI   r   rJ   rM   rS   rQ   test_dmp_addr   a  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KrS   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 )NrU   r^   rT   rZ   rt   r   r   r   rV   r\   )r   rI   rJ   rM   rS   rQ   test_dup_subr   t  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rS   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 )NrU   rT   r   rZ   r^   rV   )r   rI   r   rJ   rM   rS   rQ   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LrS   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 )NrU   rT   rZ   r   rV   r\   r[   )r&   rI   r'   rM   rS   rQ   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rS   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 )	NrU   rT   rZ   r   r   r^   r   )r(   rI   r)   rM   rS   rQ   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[ [ [ [ [ [rS   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 )NrU   r\   rV   #   rT   r[   rZ   rp   1   )rZ   r   r   r]   rU   rT   )r[   r   rU   r   )	r   r   rZ      r[   r   rU   rT   r   rT   r   r   rU   rV   	r[   r   r   r[      r   rU   r   r   r]   )O   r^   N   r       r   rT      I   *   U   M   S   r   _   %   r   r   C      L   rT   F   r   A   9   r   r   a   Y   !   r   Q   r   <   +      ,      r   r   r   rZ   5      r   B   rU   r   b   r   r]   rt   r   r      r      r   7   r   D   r   T   ^   -   r   \   r  r  r   rt   K   r   [   r   "   r   r   r   r   r   r]   r      r   :   r      r   r   rV   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   rZ   rZ   .   r  >   X   r   r(  r^   r   H   r   r  r,  r   r   r  r   r  r  r   r  r   d   r  r   r   r   r9  4   V   r   r   r"  r   r   r"  r   r   r'  (\  r   r   rU   Z   r   r   r      r  r   2   r   r      rU   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  r8  r  r   r   r   r9  r   r(  r   r   r)  r  r   r   r1  r\   r>  r  r   r(  r*  r  r   r  r  0   r   r   r   r   r   r   r  r   =   r   r5  r   rH  r   r   r   rT   r]   r   r$  r  rP  r  r  rR  r^   rL  `   r   r   r   8   r!  r6  r-  rV  r@  r,  r   r   r  r   r  r   r   r   rH  (   r   r   r   r9  r  r   r1  '   r&  r   r   W   @   r   r  r   rp   r.  r  r   r  r   6   rW  r   r]   r=  r.  rR  r   r]  r   r  r  r   r   r   r  r   rL  r
  $   r  r\   r@  r(  rH  r;  r?  r   ir   r  r   r  r[   rY  r^  r   r   r   r   r   r  rL  r:  r   r   r+  r!  r`  r   r   rN  r  r   r   rI  r%  r3  r6  rC  r   r7  r  r   r   r>  r$  r&  r=  r   r   rY  r  &   r   rb  r9  r   r   r]  r,  r)  r      r   r   r  r  r<  r   r  r   r   r   rD  r`  rO  r*  rC  rC  r>  r2  r   r5  r`  r"  r   r  r   r   r   r  r   rU   r   r  rt   rt   rU  r   r   r   rO  r   r  r(  r   r   rG  rG  r\   r   r   r*  rZ  r   r\   r   r^  r   rF  r%  r`  r   r   rK  r  r   rD  r  r  r   r/  r\  r  r$  r   r)  r1  r   r   r;  r  r>  r   r   r   rd  r   r   r/  r  r   r  r  rc  r  r   r   r  r'  r   r   r   r9  rt   r1  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%  rf  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ߟirJ  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rg  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%iWrj  iU  ild  i   i  ii  iQ  iN  iX  i-  i3  i	  ii7iEii8i  iiiirii  i	  i  ii|)r   rK  r  rL  r   r   r  r   r   r  rZ  rD  r   r  r   r  r   r[   r  r]   r   r   r   r   i/   r*  r  r;  r   r   r   rB  rH  rL  r[  r   r   r  r?  r^   rX  r   r   r  r  r   r5  rH  r   r  r   r  rJ  r/  r   r   r   ir   r  rT  rK  r@  rU   G   r[   r   rO  r[   r  r>  r  r\   rO  r)  r4  r  r  r   r  r   rO  rK  r
  rl  r   r   rZ  r   r$  r   r"  r   r  r*  rd  r   r?  r+  r6  rV  r!  r   rX  rU  r'  rN  r   r  r!  r   r'  rd  r   r   r   rC  r   r   rZ   r`  rO  r   rL  r   r  r  r   r   rJ  r4  r<  r   rN  r  r8  r   r5  r\  r<  r  r   r4  r   r!  r   r   r   ;   r   c   r   r   r  r2  r   r   rU   r%  r  rE  r   r>  r   r   r   r[  r+  r   r   r   r  rW  ra  rI  rZ  r   r   r/  r   r#  r
  r   r  rT  r\  rn  r6  r   r   rK  r   r   r  rK  r[   r   r   rU  r/  r   r   r  r  r  r   r8  r  r  rN  r  r   r  r9  r=  r  rV  r   rZ   rW  r   r   r1  r   r  r   rF  rY  r#  r   r   r)  r)  rT  r   r   rO  r   rO  r   r  r   (+  r:  r4  r   r  r   r5  r/  r   r	  rJ  r   rV  rc  r   r   r   r  r   r  r,  r   r   r@  r   rD  r  r$  r[   rl  r   r   r   rn  rD  r3  ro  r$  rJ  r[  r   r2  r   r[  rn  r   rN  r  r   rY  r  r[   r  r5  r  r  rT  r   rZ      rV  r_  r   r  r   r]   r   r   rX  r   r8  r^  r   rn  r   r   r]  r   r`  rG  r   r@  r   r  r   r   r   r   r   r   rm  r   r,  rS  rV  r#  rt   r^   rV  r   r  r  r   r`  rm  r   r   r   r7  ro  r:  ra  r\   r]  r   rN  rP  r   r  r9  r  r"  r<  rZ  r  r   rU   r   re  r:  r   r  rZ   r   r6  r   r-  rM  r   r   r  r   r   r   r\   r   r   ]   r   r  r@  rD  r   rs  ro  r=  r  r,  r   r   r  rU  r
  r   r	  rs  r   r   r   rq  r   r   r0  r	  r   rb  rG  r   r;  r  r@  r   r   rl  r  r.  r   r7  r   r=  r!  r  r   r  r   r]   r  r   r   rp   r   rs  r   r%  r(  r8  r@  r   r?  rn  r[  r   r   rq  r   r  rM  rQ  rR  rA  r   r\   r   rp  r  r   r/  r  r   r   r  r  r+  rc  r   r8  r=  rC  rU   r  r   r'  r   rO  r?  r3  r   r   r_  rc  r   rU  r  r   rC  r   r@  r  r   r   r&  rR  r%  rZ   r   r  rT   rP  r   r   r   r  r  r   r   r=  r   r[   r<  r   r?  r:  r%  rd  r   rC  rn  r   ro  r,  r  rr  rM  r   r   r   r`  re  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&iieiirk  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{ri  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  iPrh  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    rI   rJ   r   rH   )rP   rw   hKp1p2ress          rQ   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#%%%%%%rS   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\   rV   r   rZ   rT   rU   r   r]   r[   )r!   rI   r    rJ   rH   rw  s    rQ   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rS   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 )
NrT   r[   rU   rZ   r   r   r   r]   rV   )r"   rI   rJ   r   rH   )rP   rw  s     rQ   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3rS   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 )	NrU   rT   r   r[   rZ   r   r]   rV   )r#   rI   r"   rJ   rH   r}  s    rQ   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.>>>>>>>rS   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   rU   rV   rZ      r   rT   r   )rt   r   r   r   r  r   r]   r  i&  rU   r      iW  )r$   rI   rJ   r   r_   s    rQ   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!? !? ? ? ? ? ? ?rS   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   rU   rV   rZ   r  r  r   rT   )r%   rI   rJ   r   r$   r_   s    rQ   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4rS   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rZ   rU   rU   r\   r\   r   rU   rp   r   r:  o   c                  0    t           t                    S N)r-   rI   rv   s   rQ   r   ztest_dup_pdiv.<locals>.<lambda>
      
1a(<(< rS   c                  0    t           t                    S r  )r-   rJ   rv   s   rQ   r   ztest_dup_pdiv.<locals>.<lambda>  r  rS   )r   rI   r*   r,   r+   rK   rF   rJ   qrrP   rw   s     @@rQ   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"""""
 < < < < <=====rS   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 )NrU   rX   r^   r   rT   r   r   c                  2    t           dt                    S NrU   r1   rI   rv   s   rQ   r   ztest_dmp_pdiv.<locals>.<lambda>$      
1aB(?(? rS   rT   r   )rt   r   r   c                  2    t           dt                    S r  r  rv   s   rQ   r   ztest_dmp_pdiv.<locals>.<lambda>0  r  rS   )r   rI   r.   r0   r/   rK   rF   r  s     @@rQ   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%%%%
 ? ? ? ? ?@@@@@rS   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 Nrl   )r2   rI   rM   rS   rQ   r   z!test_dup_rr_div.<locals>.<lambda>4      jB&C&C rS   r  r  )rK   r   r   rI   r2   rP   rw   r  r  s       rQ   test_dup_rr_divr  3  sm    
CCDDD<<<$$A:::r""AqqAaBAq6))))))rS   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 NrU   rT   rZ   )r3   rI   rM   rS   rQ   r   z!test_dmp_rr_div.<locals>.<lambda>?       j1a&1#a&L&L rS   rU   rX   r^   r   r  rT   r   )rK   r   r   rI   r3   r  s       rQ   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,,,,,,rS   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   rJ   rM   rS   rQ   r   z!test_dup_ff_div.<locals>.<lambda>Z  r  rS   r  r  rZ   r\   r   r@  r:  r  )rK   r   r   rJ   r4   r  s       rQ   test_dup_ff_divr  Y  s    
CCDDD<<<$$A:::r""A	Aq2b"::A	BRR[[!AaBAq6))))))rS   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)GMPYRationalFieldrU   rZ   rT   r]   r[   r\   r^   r   rV   r   r   r   )r   r  r  sympy.polys.domainsr  r5   )r  r  rw  rP   rw   s        rQ   test_dup_ff_div_gmpy2r  d  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WrS   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   rJ   rM   rS   rQ   r   z!test_dmp_ff_div.<locals>.<lambda>u  r  rS   rU   rX   r^   r   rT   r   )rK   r   r   rJ   r5   r  s       rQ   test_dmp_ff_divr  t  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,,,,,,rS   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[   rZ   rT   rU   rl   r\   r$  r   r   rU   c                  0    t           t                    S r  r9   rI   rv   s   rQ   r   ztest_dup_div.<locals>.<lambda>      	!Q(;(; rS   )r\   r[   rZ   rT   rU   r   )rU   rT   r   r   r   r\   r$  )rp   rT   r   r_  c                  0    t           t                    S r  r  rv   s   rQ   r   ztest_dup_div.<locals>.<lambda>  r  rS   )r6   rI   r8   r7   rK   rF   r  s     @@rQ   test_dup_divr    sM    )))ZZZ"a@JAq!Q1aA&&&&1a!!!!1a!!!!
 ; ; ; ; ;<<<###___q"g?O?O?OOJAq!Q1aA&&&&1a!!!!1a!!!!
 ; ; ; ; ;<<<<<rS   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  rl   r  r   rU   r   c                  2    t           dt                    S )Nr   r=   rI   rv   s   rQ   r   ztest_dmp_div.<locals>.<lambda>      	!Q2(>(> rS   rT   c                  2    t           dt                    S )NrT   r  rv   s   rQ   r   ztest_dmp_div.<locals>.<lambda>  r  rS   )r:   rI   r<   r;   rK   rF   r  s     @@rQ   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$$$$
 > > > > >?????rS   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   rU   rU   r[   rT   rZ   r[   )r>   rI   rM   rS   rQ   test_dup_max_normr    s_    B1$$$$R  A%%%%b))Q......rS   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 )NrT   r   rU   r]   )r?   rI   rc   rM   rS   rQ   test_dmp_max_normr    si    "2&&!++++1#B''1,,,,Q##q((((((rS   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   rU   r  r   )r@   rI   rM   rS   rQ   test_dup_l1_normr    s_    r2!####sB1$$$$|||R((B......rS   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 )NrT   r   rU   rC  )rA   rI   rc   rM   rS   rQ   test_dmp_l1_normr    si    vq"%%****!w2&&!++++sAr""b((((((rS   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   rU   r  r   )rB   rI   rM   rS   rQ   test_dup_l2_norm_squaredr    s_    r2&&!++++sB''1,,,,|||R00B666666rS   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 )NrT   r   rU   r  )rC   rI   rc   rM   rS   rQ   test_dmp_l2_norm_squaredr    si    vq"--2222!w2..!3333sAr**c111111rS   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 )NrM   rU   rl   rT   )rV   r\   r[   rZ   )rD   rI   r    rM   rS   rQ   test_dup_expandr    s    b"!$$$$yyy1a&,,,7<<			7Aq6<<<<<bAAB B B B B BrS   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 )NrM   rU   rT   rZ   rV   r\   r[   )rE   rI   r!   rM   rS   rQ   test_dmp_expandr    s    b!R  aSE))))aS1#!qc
aS1#sQC4HI1bQQ!qcA31#sqcA3AC6R"! "!"#R	) 	)) ) ) ) ) )rS   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   r  rH   rI   rJ   sympy.testing.pytestrK   rc   f_1f_2f_3f_4f_5f_6rd   r`   re   rh   rj   rn   rq   rx   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  rM   rS   rQ   <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) ) ) ) )rS   