U
    L?hVT                     @   sF  d 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,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZDmEZE ddlFmGZG ddlHmIZI ddlJmKZK ddlLmMZM d	d
 eB D \ZNZOZPZQZRZSZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd  Z_d!d" Z`d#d$ Zad%d& Zbd'd( Zcd)d* Zdd+d, Zed-d. Zfd/d0 Zgd1d2 Zhd3d4 Zid5d6 Zjd7d8 Zkd9d: Zld;d< Zmd=d> Znd?d@ ZodAdB ZpdCdD ZqdEdF ZrdGdH ZsdIdJ ZtdKdL ZudMdN ZvdOdP ZwdQdR ZxdSdT ZydUdV ZzdWdX Z{dYdZ Z|d[d\ Z}d]d^ Z~d_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl Zdmdn Zdodp Zdqdr Zdsdt Zdudv Zdwdx Zdydz Zd{d| Zd}d~ ZdS )z4Tests for dense recursive polynomials' basic tools.     )?ninfdup_LCdmp_LCdup_TCdmp_TCdmp_ground_LCdmp_ground_TCdmp_true_LT
dup_degree
dmp_degreedmp_degree_indmp_degree_list	dup_strip	dmp_stripdmp_validatedup_reversedup_copydmp_copy
dup_normal
dmp_normaldup_convertdmp_convertdup_from_sympydmp_from_sympydup_nthdmp_nthdmp_ground_nth
dmp_zero_pdmp_zero	dmp_one_pdmp_onedmp_ground_p
dmp_grounddmp_negative_pdmp_positive_p	dmp_zerosdmp_groundsdup_from_dictdup_from_raw_dictdup_to_dictdup_to_raw_dictdmp_from_dictdmp_to_dictdmp_swapdmp_permutedmp_nest	dmp_raisedup_deflatedmp_deflatedup_multi_deflatedmp_multi_deflatedup_inflatedmp_inflatedmp_excludedmp_include
dmp_inject	dmp_ejectdup_terms_gcddmp_terms_gcddmp_list_termsdmp_apply_pairs	dup_slice
dup_random)f_polys)ZZQQ)ring)S)raises)ooc                 C   s   g | ]}|  qS  )Zto_dense).0frH   rH   S/var/www/html/venv/lib/python3.8/site-packages/sympy/polys/tests/test_densebasic.py
<listcomp>1   s     rL   c                   C   s0   t g tdkstt ddddgtdks,td S Nr               )r   rB   AssertionErrorrH   rH   rH   rK   test_dup_LC3   s    rS   c                   C   s0   t g tdkstt ddddgtdks,td S rM   )r   rB   rR   rH   rH   rH   rK   test_dup_TC8   s    rT   c                   C   s   t g gtg kstt dddgdggtdddgks8tt g ggtg gksPtt dgddggdgggtdgddggks~td S NrN   rO   rP   rQ   )r   rB   rR   rH   rH   rH   rK   test_dmp_LC=   s    $rV   c                   C   sx   t g gtg kstt dddgdggtdgks4tt g ggtg gksLtt dgddggdgggtdggksttd S rU   )r   rB   rR   rH   rH   rH   rK   test_dmp_TCD   s     rW   c                   C   sx   t g gdtdkstt dddgdggdtdks6tt g ggdtdksNtt dgddggdgggdtdksttd S N   r   rN   rO   rP   rQ   )r   rB   rR   rH   rH   rH   rK   test_dmp_ground_LCK   s     rZ   c                   C   sx   t g gdtdkstt dddgdggdtdks6tt g ggdtdksNtt dgddggdgggdtdksttd S rX   )r   rB   rR   rH   rH   rH   rK   test_dmp_ground_TCR   s     r[   c                   C   s   t g gdtdkstt dggdtdks.tt ddggdtdksHtt dgg gdtdksbtt ddgg gdtdks~td S )	NrY   )r   r   r      )r\   r]   r   )r   rY   rY   )rY   r   rY   )rY   rY   rY   )r	   rB   rR   rH   rH   rH   rK   test_dmp_true_LTY   s
    ra   c                   C   sd   t tdksttg t ks ttdgdks2ttddgdksFttdddddgdks`td S )Nz-infrY   r   rP   )r   floatrR   r
   rH   rH   rH   rK   test_dup_degreeb   s
    rc   c                   C   s^   t g gdtkstt g ggdtks*tt dggddks@tt dgdggddksZtd S NrY   rN   r   )r   r   rR   rH   rH   rH   rK   test_dmp_degreej   s    re   c                   C   s8  t g ggddtkstt g ggddtks0tt g ggddtksHtt dgggdddksbtt dgggdddks|tt dgggdddkstt tdddkstt tdddkstt tdddkstt tdddkstt tdddkstt tdddkstt td	d	d	ks&tttd
d  d S )Nr   rN   rY   	         rP      rO   c                   S   s   t dggddS )NrY   )r   rH   rH   rH   rK   <lambda>       z$test_dmp_degree_in.<locals>.<lambda>)r   r   rR   f_4f_6rF   
IndexErrorrH   rH   rH   rK   test_dmp_degree_inr   s    rp   c                   C   s   t g gggdt t t t fks(tt dggggddksBtt tddksTtt tddksftt tddksxtt tddkstt tdd	kstt tddkstt t	dd
kstd S )NrO   rY   )r   r   r   r   rN   )rN   rN   rN   )rO   rO   rO   )rQ   rO   rO   )rQ   rP   r]   )rf   rg   rh   )rP   rP   ri   rO   )
r   rG   rR   f_0f_1f_2f_3rm   f_5rn   rH   rH   rH   rK   test_dmp_degree_list   s    (rv   c                   C   s   t g g kstt dgg ks"tt dddgg ks8tt dgdgksLtt ddgdgksbtt ddddgdgks|tt dddgdddgkstt ddddgdddgkstt ddddddgdddgkstd S Nr   rY   rN   )r   rR   rH   rH   rH   rK   test_dup_strip   s    rx   c                   C   s.  t dddgdddgkstt g gdg gks2tt g g gdg gksJtt g g g gdg gksdtt g ggdg ggks~tt g gg ggdg ggkstt g gg gg ggdg ggkstt dgggddgggkstt g gdgggddgggkstt g gdggg ggddggg ggks*td S rw   )r   rR   rH   rH   rH   rK   test_dmp_strip   s    ""ry   c                   C   s   t g g dfkstt dddddgddgdfks6tt g ggg ggdfksRtt dgg dgdgdggdgg gdfks~tttdd  d S )Nr   rY   rN   c                   S   s   t dgddgdgdggS Nr   rY   )r   rH   rH   rH   rK   rk      rl   z#test_dmp_validate.<locals>.<lambda>)r   rR   rF   
ValueErrorrH   rH   rH   rK   test_dmp_validate   s
    ",r|   c                   C   sB   t ddddgddddgks tt ddddgdddgks>td S )NrY   rN   r   rO   )r   rR   rH   rH   rH   rK   test_dup_reverse   s     r}   c                  C   sH   t dt dt dg} t| }t dt d |d< |d< | |ksDtd S )NrY   r   rN   r]   )rB   r   rR   rJ   grH   rH   rK   test_dup_copy   s    r   c                  C   sV   t dgt dt dgg} t| d}t dt d |d d< |d d< | |ksRtd S )NrY   rN   r   r]   )rB   r   rR   r~   rH   rH   rK   test_dmp_copy   s    
"r   c                   C   sB   t dddddddgttdtdtdtdtdgks>td S Nr   rN   rY      )r   rB   rR   rH   rH   rH   rK   test_dup_normal   s     r   c                   C   sJ   t dgg dddgdgdgg gdttdtdgg tdgg gksFtd S r   )r   rB   rR   rH   rH   rH   rK   test_dmp_normal   s    "r   c                  C   sZ   t d t  } }| d| d| d| dg}t|| |t dt dt dt dgksVtd S )NxrY   rN   r   rO   )rB   r   rR   ZK0ZK1rJ   rH   rH   rK   test_dup_convert   s
    
r   c                  C   s`   t d t  } }| dg| dgg | dgg}t|d| |t dgt dgg t dggks\td S )Nr   rY   rN   rO   )rB   r   rR   r   rH   rH   rK   test_dmp_convert   s
    r   c                   C   sX   t tjtdgttdtdgks(tt tjtdgttddtddgksTtd S )NrN   rY   rO   )r   rE   OnerB   rR   HalfrC   rH   rH   rH   rK   test_dup_from_sympy   s    r   c                   C   sl   t tjtdgtjggdttdtdgg gks6tt tjtdggdttddtddggkshtd S )NrN   rY   )r   rE   r   ZZerorB   rR   r   rC   rH   rH   rH   rK   test_dmp_from_sympy   s    r   c                   C   sz   t dddgdtdkstt dddgdtdks4tt dddgdtdksNtt dddgdtdkshtttdd  d S )NrY   rN   rO   r   rf   c                   S   s   t dddgdtS )NrO   rP   rQ   )r   rB   rH   rH   rH   rK   rk     rl   ztest_dup_nth.<locals>.<lambda>)r   rB   rR   rF   ro   rH   rH   rH   rK   test_dup_nth   s
    r   c                   C   s   t dgdgdggddtdgks$tt dgdgdggddtdgksHtt dgdgdggddtdgksltt dgdgdggddtg kstttdd  d S )NrY   rN   rO   r   rf   c                   S   s   t dgdgdggddtS )NrO   rP   rQ   r   rY   )r   rB   rH   rH   rH   rK   rk     rl   ztest_dmp_nth.<locals>.<lambda>)r   rB   rR   rF   ro   rH   rH   rH   rK   test_dmp_nth  s
    $$$"r   c                   C   s   t g gddtdkstt dgdgdggddtdks:tt dgdgdggddtdks\tt dgdgdggddtdks~tt dgdgdggddtdkstt dgdgdggd	dtdkstttd
d  d S )Nr\   rY   r   rN   rO   r_   rN   r   rN   rY   )rO   r   c                   S   s   t dgdgdggddtS )NrO   rP   rQ   )rN   r   rY   )r   rB   rH   rH   rH   rK   rk     rl   z%test_dmp_ground_nth.<locals>.<lambda>)r   rB   rR   rF   ro   rH   rH   rH   rK   test_dmp_ground_nth  s    """""r   c                   C   sX   t g ddkstt g gddks&tt g ggddks<tt dgggddksTtd S )Nr   TrY   rN   F)r   rR   rH   rH   rH   rK   test_dmp_zero_p  s    r   c                   C   s(   t dg kstt dg ggks$td S )Nr   rN   )r   rR   rH   rH   rH   rK   test_dmp_zero%  s    r   c                   C   sf   t dgdtdkstt dggdtdks.tt dgggdtdksHtt dgggdtdksbtd S )NrY   r   TrN   rg   F)r   rB   rR   rH   rH   rH   rK   test_dmp_one_p*  s    r   c                   C   s8   t dttdgkstt dttdgggks4td S rw   )r    rB   rR   rH   rH   rH   rK   test_dmp_one1  s    r   c                   C   sB  t g dddkstt g gdddks*tt g gdddks@tt tdggdddks\tt tdgggdddksztt tdgggdddkstt tdgg ggdddkstt g d ddkstt g gd ddkstt tdgd ddkstt tdgggd ddkstt tdgg ggd ddks>td S )Nr   TrY   FrN   rO   )r!   rR   rB   rH   rH   rH   rK   test_dmp_ground_p6  s      r   c                   C   st   t tddg ggkstt tddtdks4tt tddtdgksPtt tddtdgggksptd S )Nr   rN   r]   r   )r"   rB   rR   rH   rH   rH   rK   test_dmp_groundJ  s    r   c                   C   s   t ddtg g g g gkstt ddtg ks0tt ddtg gggksJtt ddtg ggg gggksjtt ddtg ggg ggg gggkstt ddtdddgkstd S )NrP   r   rN   rY   rO   r   )r%   rB   rR   rH   rH   rH   rK   test_dmp_zerosR  s     &r   c                   C   s   t tdddg kstt tddddggggks8tt tddddgggdggggks`tt tddddgggdgggdggggkstt tddddddgkstd S )Nr]   r   rN   rY   rO   r   )r&   rB   rR   rH   rH   rH   rK   test_dmp_grounds]  s
     (0r   c                   C   sX   t g ggdtdkstt dgdgggdtdks6tt dgdgggdtdksTtd S )NrN   FrY   r   T)r#   rB   rR   rH   rH   rH   rK   test_dmp_negative_pg  s    r   c                   C   sX   t g ggdtdkstt dgdgggdtdks6tt dgdgggdtdksTtd S )NrN   FrY   Tr   )r$   rB   rR   rH   rH   rH   rK   test_dmp_positive_pm  s    r   c               	   C   s  t i tg kstti tg ks$ttg i ks4ttg i ksDttg tdddtdiksbttg tdddtdikstdddddddddg	} dddd}dddd	}t |t| kstt|t| kstt| |kstt| |ksttd
t\}}}| }|d|d|d|d|d|dg} |d|d|dd}|d|d|dd}t ||| ksvtt||| kstt| |kstt| |kstd S )NTzeror   r   rO   rN   rh   )rh   rQ   r   ))rh   rQ   r   x,y)rQ   rO   r   )r   rO   r   )r(   rB   rR   r'   r*   r)   rD   	to_domain)rJ   r   hRr   yKrH   rH   rK   test_dup_from_to_dicts  s,    (r   c               	   C   s   t i dtg gksttg gdi ks*ttg dtdddtdiksJttg gdtdddtdiksltdgg g dgg g g g d	gg	} ddd	d
}t |dt| kstt| d|kstd S )NrY   r   Tr   r   r\   rO   rN   rh   ))rh   r   )rQ   r   r\   )r+   rB   rR   r,   r~   rH   rH   rK   test_dmp_from_to_dict  s     "r   c                     s   t dddgg ddgg dggdt t dddddgdddgdggdt} t dddt ks^tt dddt| ksvtt| dddt ksttt fdd d S )NrY   r   c                      s   t  dddtS )Nr   irY   )r-   rB   rH   rJ   rH   rK   rk     rl   ztest_dmp_swap.<locals>.<lambda>)r   rB   r-   rR   rF   ro   )r   rH   r   rK   test_dmp_swap  s    "$r   c                  C   s   t dddgg ddgg dggdt} t dddddgdddgdggdt}t| ddgdt| ks`tt|ddgdt|ksztt| ddgdt|kstt|ddgdt| kstd S )NrY   r   )r   rB   r.   rR   r~   rH   rH   rK   test_dmp_permute  s    "$r   c                   C   s|   t tddtdgggkstt dggdtdggks:tt dggdtdgggksXtt dggdtdggggksxtd S rd   )r/   rB   rR   rH   rH   rH   rK   test_dmp_nest  s    r   c                   C   s   t g ddtg ggkstt dggddtdggks8tt dddgg ddggddtdggdggdgggg ggdggdggggkstd S )NrN   r   rY   rO   )r0   rB   rR   rH   rH   rH   rK   test_dmp_raise  s
    *r   c                
   C   s  t g tdg fkstt dgtddgfks0tt dddgtddddgfksRtt dddddgtddddgfksxtt tdddttdddddddddgfkstt tdddttdddgfkstt tdddttdddddddddgfkstt tddd	ttdddddddddgfks8tt tddd
ttddddgfksbtt tddittdddgfkstt tddittdddgfkstt tddittdddgfkstd S )NrY   rN   rO   r   )r]   rY   )r]   r   r]   )r]   rO   )r]   rP   )rh   rP   rP   rh   )r1   rB   rR   r(   rH   rH   rH   rK   test_dup_deflate  s8    "&








r   c                  C   s   t g gdtdg gfkstt dggdtddggfks<tdddgg ddgg dgg} t | dtddddgddgdggfkstd S )NrY   r`   rN   r   r   )r2   rB   rR   r   rH   rH   rK   test_dmp_deflate  s     r   c                   C   s  t dgftddgffkstt g g ftdg g ffks<tt dddgftddddgffksbtt dddddgftddddgffkstt dddddgdddgftddddgddgffkstt dddddgdddgftddddddgdddgffkstd S )NrN   rY   rO   r   )r3   rB   rR   rH   rH   rH   rK   test_dup_multi_deflate  s    &*r   c                  C   sh  t g gfdtdg gffks tt g gg gfdtdg gg gffksHtt dggg gfdtddggg gffksttt dggdggfdtddggdggffkstt dggddggfdtddggddggffkstt ddggddggfdtdddggddggffkstt dggdddggfdtddggddggffksJtt dddggdddggfdtdddggddggffkstt dddgdddddgfdtdddgdddgffkstdddgg ddgg dgg} ddddgg dgg}t | fdtddddgddgdggffks"tt | |fdtddddgddgdggddddgdggffksdtd S )	NrY   r`   rN   r   rY   rN   rP   rN   r   )r4   rB   rR   r~   rH   rH   rK   test_dmp_multi_deflate  sZ    

  
  


r   c                
   C   s   t g dtg kstt dddgdtdddgks4tt dddgdtdddddgksXtt dddgdtdddddddgkstt dddgdtdddddddddg	kstttdd  d S )	N   rY   rN   rO   r   rP   c                   S   s   t dddgdtS NrY   rN   rO   r   )r5   rB   rH   rH   rH   rK   rk   %  rl   z"test_dup_inflate.<locals>.<lambda>)r5   rB   rR   rF   ro   rH   rH   rH   rK   test_dup_inflate  s     $(,r   c                   C   s  t dgddtdgkstt g gddtg gks4tt dggddtdggksRtt ddggddtddggksttt ddggddtdddggkstt ddggddtddddggkstt dddgdgddggd	dtdddgg dgg ddggkstttd
d  d S )NrY   r   r   )rO   r]   rN   r   r`   )rY   rO   r   c                   S   s   t g gddtS )N)r]   rY   )r6   rB   rH   rH   rH   rK   rk   5  rl   z"test_dmp_inflate.<locals>.<lambda>)r6   rB   rR   rF   ro   rH   rH   rH   rK   test_dmp_inflate(  s    "$&r   c                   C   s`  t g ggdtg g ggdfks"tt dgggdtg dgggdfksHtt dddgdtg dddgdfksntt dgddggdtg dgddggdfkstt dddggdtdgdddgdfkstt dgdgdggdtdgdddgdfkstt dddgggdtddgdddgdfks$tt dggdggdgggdtddgdddgdfks\td S )NrN   r]   rY   rO   r   )r7   rB   rR   rH   rH   rH   rK   test_dmp_exclude8  s    "&&.*.0r   c                   C   s   t dddgg dtdddgks"tt dddgdgdtdddggksHtt dddgdgdtdgdgdggksrtt dddgddgdtdddgggkstt dddgddgdtdggdggdgggkstd S r   )r8   rB   rR   rH   rH   rH   rK   test_dmp_includeF  s
    "&**r   c                  C   sr  t dt\} }}|  }tg d|g ggdfks4ttg gd|g gggdfksTtt| dgd|dgggdfksxtt| dggd|dggggdfkstt| dd| d|  d gd|dggdgddgggdfkstd|d  d| |  d|d   d| | d||d  d	 g}dgddgdddggdgg gg gdddgd	ggg}t|d||dfksntd S )
Nr   r   rN   rY   rO   rP   r]   rQ   r   )rD   rB   r   r9   rR   r   r   r   r   rJ   r   rH   rH   rK   test_dmp_injectP  s     $(B@2r   c                  C   sZ  t dt\} }}|  }tg ggd|g ks0ttg gggd|g gksLttdgggd|| dgkslttdggggd|| dggksttdggdgddgggd|| dd| d|  d gkstd|d  d| |  d|d   d| | d||d  d	 g}dgddgdddggdgg gg gdddgd	ggg}t|d||ksVtd S )
Nr   rN   rO   rY   rP   r]   rQ   r   r   )rD   rB   r   r:   rR   r   rH   rH   rK   test_dmp_ejectb  s     $>@2r   c                   C   s`   t g tdg fkstt dddgtddddgfks8tt ddddgtddddgfks\td S rz   )r;   rB   rR   rH   rH   rH   rK   test_dup_terms_gcdt  s    "r   c                   C   s   t g gdtdg gfkstt ddddgdtddddgfksBtt dgg dgg gdtddgg dggfksptt ddgg dggdtdddgg dggfkstt ddgdddgg g gdtddgddggfkstd S )NrY   r\   r   rY   r_   r   )r<   rB   rR   rH   rH   rH   rK   test_dmp_terms_gcdz  s"    &.    r   c                  C   s<  t g ggdtdgkstt dgggdtdgks6tt dddddgdtd	d
dddgks^tt dgddgdddggdtdddddgkstddddgdddgg g} t | dtddddgkstt | dtddddgkstddddgddddddgg g} t | dtddddgkstt | dtddddgks8td S )NrN   )r   r   r   r   rY   )r   rY   rP   rO   rQ   r   ))rP   rY   )r   rN   )r   rP   )r   rO   )r   rQ   )r   rY   )r`   rN   )r_   rP   ))r   rN   rO   )r^   rQ   lex)order))rN   rO   rN   )r   rY   Zgrlex))rY   rQ   rY   )r=   rB   rR   r   rH   rH   rK   test_dmp_list_terms  s8          r   c                  C   s.  dd } t dddgdddg| g d	tdd
dgks4tt ddgdddg| g d	td
dgks\tt dddgddg| g d	td
dgkstt ddgdggddgdgg| g dtdd
gdggkstt ddgdggdgddgg| g dtdgdggkstt dgddggddgdgg| g dtdgdggks*td S )Nc                 S   s   | | S )NrH   )abrH   rH   rK   rk     rl   z&test_dmp_apply_pairs.<locals>.<lambda>rY   rN   rO   rP   rQ   ri   r   
      rh   )r>   rB   rR   )r   rH   rH   rK   test_dmp_apply_pairs  sD    ,((          
     
r   c                  C   s  ddddg} t | ddtg ks"tt | ddtdgks:tt | ddtddgksTtt | ddtdddgksptt | ddtddddgkstt | ddt| kstt | ddt| kstt | ddtg kstt | ddtg kstt | ddtddgkstt | ddtdddgks tt | ddtddddgks@tt ddgddtddgks`tddddg}t |ddtdgkstd S )NrY   rN   rO   rP   r   rf   )r?   rB   rR   r~   rH   rH   rK   test_dup_slice  s       r   c                  C   s   t dddt} t| dksttdd | D s4tt dddt} t| dksRttd	d | D shtt d
ddt} t| d
ksttdd | D stt dddt} t| dksttdd | D std S )Nr   r   c                 s   s&   | ]}d |  kodkn  V  qdS )r   r   NrH   rI   crH   rH   rK   	<genexpr>  s     z"test_dup_random.<locals>.<genexpr>rY      c                 s   s&   | ]}d |  kodkn  V  qdS )r   r   NrH   r   rH   rH   rK   r     s     rN      c                 s   s&   | ]}d |  kodkn  V  qdS )r   r   NrH   r   rH   rH   rK   r     s     rO   (   c                 s   s&   | ]}d |  kodkn  V  qdS )r   r   NrH   r   rH   rH   rK   r     s     )r@   rB   r
   rR   allr   rH   rH   rK   test_dup_random  s    r   N)__doc__Zsympy.polys.densebasicr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   Zsympy.polys.specialpolysrA   Zsympy.polys.domainsrB   rC   Zsympy.polys.ringsrD   Zsympy.core.singletonrE   Zsympy.testing.pytestrF   Zsympy.core.numbersrG   rq   rr   rs   rt   rm   ru   rn   rS   rT   rV   rW   rZ   r[   ra   rc   re   rp   rv   rx   ry   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH   rH   rH   rK   <module>   s    %	
				


"	#
