a
    Xg.                     @   s  d Z ddlZddlZddlmZmZmZ ddlm	Z	 ej
d ej
d  ej
d  ej
d  Zd	dii d
diddiddiddiddiddiddii i dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd  d ZG d!d" d"ZG d#d$ d$Zd%d& Zd'd( Zejd)g d*d+d, ZG d-d. d.Zejd)e d/d0 Zd1d2 Z ejd)d3d4e! dd5d6gd7d8 Z"ejd)e d9d: Z#ejd)e d;d< Z$ejd=eejd)e d>d? Z%dS )@z(Tests for the array padding functions.

    N)assert_array_equalassert_allcloseassert_equal)	_as_pairsZuintintfloatcomplexconstant_values
end_valuesstat_lengthreflect_typeZeven)constantedgelinear_rampmaximummeanmedianminimumreflect	symmetricwrapemptyc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestAsPairsc                 C   sh   t ddggd }ddgdggfD ]}t|d}t|| q$t }tt|dt ||ggd  dS )z Test casting for a single value.   
   Nnparrayr   r   objectselfexpectedxresultobj r%   k/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/numpy/lib/tests/test_arraypad.pytest_single_value!   s    
zTestAsPairs.test_single_valuec                 C   s   t ddggd }ddgddggfD ]}t|d}t|| q&t }ttd|gdt d|ggd  ttdgdggdt ddgddgg ttdg|ggdt ddg||gg dS )z-Test proper casting for two different values.r      r   a   Nr   r   r%   r%   r&   test_two_values.   s"    
zTestAsPairs.test_two_valuesc                 C   s0   d}t td ddd| t td ddd| d S )N)NNr,   r,   r   FZas_indexT)r   r   r    r!   r%   r%   r&   test_with_noneG   s    zTestAsPairs.test_with_nonec                 C   s$   t dd}tt|d| dS )z?Test if `x` already matching desired output are passed through.   )   r*   r1   N)r   arangereshaper   r   r.   r%   r%   r&   test_pass_throughR   s
    zTestAsPairs.test_pass_throughc              
   C   s   t tddgdddtjddggd tjd t tddgdddtjdd	ggd tjd d
d
gd
ggd
d	gddgd
d	ggd	d
ggddggd ddgg fD ]@}tjtdd t|ddd W d   q1 s0    Y  qdS )z Test results if `as_index=True`.g@gffffff
@r   Tr-   r   dtypeg(\@r(      r*   	   znegative valuesmatchN)r   r   r   r   Zintppytestraises
ValueError)r    r"   r%   r%   r&   test_as_indexZ   s    (zTestAsPairs.test_as_indexc                 C   s   t jtdd  tdgggd W d   n1 s40    Y  t jtdd& tddgdd	ggd W d   n1 sx0    Y  t jtdd  ttd
d W d   n1 s0    Y  dS )z"Ensure faulty usage is discovered.zmore dimensions than allowedr<   r   r   Nzcould not be broadcastr9   r*   r(   r*   r   )r>   r?   r@   r   r   ones)r    r%   r%   r&   test_exceptionsi   s    .4zTestAsPairs.test_exceptionsN)	__name__
__module____qualname__r'   r+   r/   r4   rA   rD   r%   r%   r%   r&   r       s   r   c                   @   sZ   e Zd Zejde dd Zejdg ddd Z	ejdg ddd Z
d	S )
TestConditionalShortcutsmodec                 C   s>   t dddd}dd |jD }t|t j|||d d S )Nx   r(      r1   c                 S   s   g | ]}d qS )r   r   r%   .0_r%   r%   r&   
<listcomp>w       zHTestConditionalShortcuts.test_zero_padding_shortcuts.<locals>.<listcomp>rI   r   r2   r3   shaper   padr    rI   testpad_amtr%   r%   r&   test_zero_padding_shortcutst   s    z4TestConditionalShortcuts.test_zero_padding_shortcuts)r   r   r   r   c                 C   sL   t dddd}dd |jD }tt j||ddt j|||d	d
 d S )NrJ   r(   rK   r1   c                 S   s   g | ]}d qS )r9   r9   r%   rM   r%   r%   r&   rP   }   rQ   zITestConditionalShortcuts.test_shallow_statistic_range.<locals>.<listcomp>r   rR   r9   rI   r   rS   rV   r%   r%   r&   test_shallow_statistic_rangez   s
    z5TestConditionalShortcuts.test_shallow_statistic_rangec                 C   sJ   t ddd}dd |jD }tt j|||dt j|||dd d S )N   rK   r1   c                 S   s   g | ]}d qS ))r   r   r%   rM   r%   r%   r&   rP      rQ   zFTestConditionalShortcuts.test_clip_statistic_range.<locals>.<listcomp>rR   r[   rS   rV   r%   r%   r&   test_clip_statistic_range   s
    z2TestConditionalShortcuts.test_clip_statistic_rangeN)rE   rF   rG   r>   markparametrize
_all_modeskeysrY   r\   r^   r%   r%   r%   r&   rH   s   s   

rH   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zejdg ddd Zejdg dejdg d d!d" Zd#d$ Zejd%ejd&ejdd'd(gd)d* Zejdd+d,gd-d. Zd/S )0TestStatisticc                 C   s>   t dd}t j|dddd}t g d}t|| d S )Nd   f)      r   )rB   r   )      ?rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj   rj                 ?       @      @      @      @      @      @       @      "@      $@      &@      (@      *@      ,@      .@      0@      1@      2@      3@      4@      5@      6@      7@      8@      9@      :@      ;@      <@      =@      >@      ?@      @@     @@      A@     A@      B@     B@      C@     C@      D@     D@      E@     E@      F@     F@      G@     G@      H@     H@      I@     I@      J@     J@      K@     K@      L@     L@      M@     M@      N@     N@      O@     O@      P@     @P@     P@     P@      Q@     @Q@     Q@     Q@      R@     @R@     R@     R@      S@     @S@     S@     S@      T@     @T@     T@     T@      U@     @U@     U@     U@      V@     @V@     V@     V@      W@     @W@     W@     W@      X@     @X@     X@     X@r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   astyperU   r   r   r    r)   br%   r%   r&   test_check_mean_stat_length   s    z)TestStatistic.test_check_mean_stat_lengthc                 C   s4   t d}t |dd}t g d}t|| d S )Nrd   rf   r   )c   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   r9   r*   r   r(   rK   r1         r:   r      r0                        rh               rg               r]          !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   `   a   b   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   rU   r   r   r   r%   r%   r&   test_check_maximum_1   s    
z"TestStatistic.test_check_maximum_1c                 C   s8   t dd }t |dd}t g d}t|| d S )Nrd   r9   rf   r   )rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  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   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   r+  r   r%   r%   r&   test_check_maximum_2   s    z"TestStatistic.test_check_maximum_2c                 C   s<   t dd }t j|dddd}t g d}t|| d S )Nrd   r9   rf   r   r   ri   )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   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  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   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   rd   r+  r   r%   r%   r&   test_check_maximum_stat_length   s    z,TestStatistic.test_check_maximum_stat_lengthc                 C   s4   t d}t |dd}t g d}t|| d S )Nrd   rf   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   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+  r   r%   r%   r&   test_check_minimum_1   s    
z"TestStatistic.test_check_minimum_1c                 C   s8   t dd }t |dd}t g d}t|| d S )Nrd   r*   rf   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(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  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   rd   e   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&   test_check_minimum_2  s    z"TestStatistic.test_check_minimum_2c                 C   s<   t dd }t j|dddd}t g d}t|| d S )Nrd   r9   rf   r   r   ri   )r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  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   rd   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&   test_check_minimum_stat_length  s    z,TestStatistic.test_check_minimum_stat_lengthc                 C   s:   t dd}t |dd}t g d}t|| d S )Nrd   re   rf   r        H@r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   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   r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r5  r   r   r%   r%   r&   test_check_median2  s    zTestStatistic.test_check_medianc                 C   s`   t g dg dg dg}t |dd}t g dg dg dg d	g dg}t|| d S )
Nr   r9   r(   r(   rK   r:   r:   r   r*   r9   r   )r(   r(   rK   r(   r(   r   r   r9   r(   r   rK   r(   rK   r:   rK   r   r:   r   r*   r   )r   r   rU   r   r   r%   r%   r&   test_check_median_01J  s    	z"TestStatistic.test_check_median_01c                 C   sd   t g dg dg dg}t |jddj}t g dg dg dg d	g dg}t|| d S )
Nr7  r8  r9  r9   r   )rK   r(   rK   r(   rK   r:  r;  r<  )r   r   rU   Tr   r   r%   r%   r&   test_check_median_02X  s    	z"TestStatistic.test_check_median_02c                 C   sN   t dd}d|d< d|d< t j|ddd	d
}t g d}t|| d S )Nrd   re   rm   r9   r   r)  rf   r   r   rK   ri   )rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rm   rk   rm   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r%   r&   test_check_median_stat_lengthf  s    z+TestStatistic.test_check_median_stat_lengthc                 C   s   g dg}t j|dddd}t g dg dg dg dg dg dg dg dg dg dg dg dg dg}t|| d S )Nr(   rK   r1   rK   r   r   r*   ri   )r(   r(   r(   r(   r(   r(   rK   r1   r1   r1   r1   r1   r1   r1   r1   r   rU   r   r   r   r%   r%   r&   test_check_mean_shape_one  s&    
z'TestStatistic.test_check_mean_shape_onec                 C   s:   t dd}t |dd}t g d}t|| d S )Nrd   re   rf   r   r4  r   r   r%   r%   r&   test_check_mean_2  s    zTestStatistic.test_check_mean_2rI   )r   r   r   r   c                 C   sF   t g dt jg dt jd }t |d|}t|d |d  dS )z3 Test that appended and prepended values are equal )r*   rG  )r   g-q=r   r5   rZ   r   rG  N)r   r   float64rU   r   )r    rI   r)   r%   r%   r&   test_same_prepend_append  s    
"z&TestStatistic.test_same_prepend_appendr   r;   )r;   )r   rG  ))rK   r*   )r;   r   ))r8   r*   c                 C   sX   t dd}d}tjt|d" t j|d||d W d    n1 sJ0    Y  d S )Nr]   r1   rK   #index can't contain negative valuesr<   r*   ri   r   r2   r3   r>   r?   r@   rU   )r    rI   r   arrr=   r%   r%   r&   test_check_negative_stat_length  s    z-TestStatistic.test_check_negative_stat_lengthc                 C   s   t d}t |d}t j|dddd}t g dg dg dg dg d	g d
g dg dg dg dg dg}t|| d S )Nr]   rL  rB   r   r*   r   r   r[   )
r1   r1   r1   rK   r1   r   r   r:   r   r   )
r9   r9   r9   r   r9   r*   r   r(   r   r   )
r   r   r   r   r   r0   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )
r   r   r   rh   r   r   r   r   r   r   )
r   r   r   rg   r   r   r   r   r   r   r   r2   r3   rU   r   r   r   r%   r%   r&   test_simple_stat_length  s$    
z%TestStatistic.test_simple_stat_lengthz)ignore:Mean of empty slice:RuntimeWarningzCignore:invalid value encountered in( scalar)? divide:RuntimeWarningr   r   c                 C   s>   t jddgd|dd}t t jddt jt jg}t|| d S )Nrl   rm   r9   r*   r   ri   )r   rU   r   nanr   )r    rI   rO  r!   r%   r%   r&   test_zero_stat_length_valid  s    z)TestStatistic.test_zero_stat_length_validr   r   c                 C   s  d}t jt|d& tjddgd|dd W d    n1 s>0    Y  t jt|d& tjddgd|dd W d    n1 s0    Y  t jt|d& tjddgd|dd W d    n1 s0    Y  t jt|d& tjddgd|dd W d    n1 s0    Y  d S )	Nz,stat_length of 0 yields no value for paddingr<   rl   rm   r   ri   )r9   r   r9   )r>   r?   r@   r   rU   r    rI   r=   r%   r%   r&   test_zero_stat_length_invalid  s    444z+TestStatistic.test_zero_stat_length_invalidN)rE   rF   rG   r   r,  r-  r.  r0  r2  r3  r6  r=  r?  rA  rE  rF  r>   r_   r`   rI  rP  rU  filterwarningsrX  rZ  r%   r%   r%   r&   rc      s:   

rc   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )TestConstantc                 C   s8   t d}t j|dddd}t g d}t|| d S )Nrd   rf   r   )r   rh   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   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  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   rh   rh   rh   rh   rh   rh   rh   rh   rh   rh   rh   rh   rh   rh   rh   rh   rh   r+  r   r%   r%   r&   test_check_constant  s    
z TestConstant.test_check_constantc                 C   s4   t d}t |dd}t g d}t|| d S )Nrd   rf   r   r/  r+  r   r%   r%   r&   test_check_constant_zeros  s    
z&TestConstant.test_check_constant_zerosc                 C   sl   t ddd}t j|dddd}t g dg d	g d
g dg dg dg dg dg}t|| d S )Nr]   rK   r1   rV  r   皙?rI   r	   )	r9   r9   r9   r9   r9   r9   r9   r9   r9   )	r9   r   r9   r*   r   r(   rK   r9   r9   )	r9   r1   r   r   r:   r   r   r9   r9   )	r9   r0   r   r   r   r   r   r9   r9   )	r9   r   r   rh   r   r   r   r9   r9   )	r9   r   rg   r   r   r   r   r9   r9   r   r2   r3   rU   r   r   r    rO  rW   r!   r%   r%   r&   test_check_constant_float#  s     
z&TestConstant.test_check_constant_floatc                 C   sx   t ddd}|t j}t j|dddd}t g dg d	g d
g dg dg dg dg dg}t|| d S )Nr]   rK   r1   rV  rV  r   r`  ra  )	r`  r`  r`  r`  r`  r`  r`  r`  r`  )	r`  rk   rl   rm   rn   ro   rp   r`  r`  )	r`  rq   rr   rs   rt   ru   rv   r`  r`  )	r`  rw   rx   ry   rz   r{   r|   r`  r`  )	r`  r}   r~   r   r   r   r   r`  r`  )	r`  r   r   r   r   r   r   r`  r`  r   r2   r3   r   rH  rU   r   r   )r    rO  Z	arr_floatrW   r!   r%   r%   r&   test_check_constant_float27  s"    
z'TestConstant.test_check_constant_float2c                 C   s<   t jdtd}t j|dddd}t g d}t|| d S )Nrd   r5   rf   r   )皙333333r]  )rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  rh  r   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  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   ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  ri  )r   r2   r   rU   r   r   r   r%   r%   r&   test_check_constant_float3L  s    z'TestConstant.test_check_constant_float3c              
   C   sf   t ddd}t j|dddd}t g dg d	g d
g dg dg dg dg}t|| d S )Nr]   rK   r1   )r9   rK  r   r   ra  )
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r9   r*   r   r(   rK   r   r   )
r   r   r1   r   r   r:   r   r   r   r   )
r   r   r0   r   r   r   r   r   r   r   )
r   r   r   r   rh   r   r   r   r   r   )
r   r   r   rg   r   r   r   r   r   r   rb  rc  r%   r%   r&   "test_check_constant_odd_pad_amountd  s    
z/TestConstant.test_check_constant_odd_pad_amountc                 C   s\   t ddd}t jj|dddd}t g dg dg d	g d
g d
g}t|| d S )Nr(   r*   )rV  r9   r   r   )rV  r   r(   ra  )r   r9   r9   r(   r(   r(   )r   r   r9   r(   r(   r(   )r   r*   r   r(   r(   r(   )r   r*   r*   r(   r(   r(   )r   r2   r3   librU   r   r   rc  r%   r%   r&   test_check_constant_pad_2du  s    z'TestConstant.test_check_constant_pad_2dc                 C   s   d}t jd|t jd}t j|dd| d}t jd|t jd}t|| d}t jd|t jd}t j|dd| d}t jd|t jd}t|| d S )	Nl    rK   r5   r9   r   ra  r   l    )r   fullZuint64rU   minr   Zint64)r    Z
uint64_maxrO  rW   r!   Z	int64_maxr%   r%   r&   test_check_large_integers  s    
z&TestConstant.test_check_large_integersc                 C   sr   t jdtd}t }||d< t }t }t j|dd||fd}t jdtd}||d< ||d< ||d< t|| d S )Nr9   r5   r   r   )	pad_widthrI   r	   rS  r*   )r   r   r   rU   r   )r    rO  Zobj_aZobj_bZobj_cr!   r%   r%   r&   test_check_object_array  s    
z$TestConstant.test_check_object_arrayc                 C   s0   t d}t j|g ddd}|jdks,J d S )Nr   r   r*   r   rK  rk  r   rR   r   r(   r(   r   zerosrU   rT   r    rO  r#   r%   r%   r&   test_pad_empty_dimension  s    
z%TestConstant.test_pad_empty_dimensionN)rE   rF   rG   r^  r_  rd  rg  rj  rl  rp  rs  ru  r}  r%   r%   r%   r&   r\    s   r\  c                   @   sR   e Zd Zdd Zdd Zejjefddd Z	dd	 Z
ejd
edd ZdS )TestLinearRampc                 C   sD   t dd}t j|dddd}t g d}t||ddd	 d S )
Nrd   re   rf   r   )r(   rK   )r
   )ro   gQ@gq=
ףp@g)\(@gzG
@g	@gRQ@g
ףp=
@g(\@g{Gz@g333333@gQ@gp=
ף @gQ?g)\(?g?g
ףp=
?g{Gz?gQ?gQ?g?g{Gz?gQ?g{Gz?g{Gz?rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   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   g33333W@gffffffV@g9U@gT@g     R@g33333Q@gfffffP@g33333N@gYL@r   gfffffG@gLE@g33333B@g@@g     <@g7@g3@g,@gffffff#@rp   gh㈵>)ZrtolZatol)r   r2   r   rU   r   r   r   r%   r%   r&   test_check_simple  s    z TestLinearRamp.test_check_simplec                 C   st   t dddt j}t j|dddd}t g dg d	g d
g dg dg dg dg dg}t|| d S )Nrh   r(   rK   )r*   r*   r   rL   rI   r
   )	rk   rk   rk   rk   rk   rk   rk   rk   rk   )	rk   rk   rk   rj   rl   g      ?rm   rl   rk   )	rk   rk   rk   rl   rm   rn   ro   rm   rk   )	rk   g      @rp   rq   rr   rs   rt   g      @rk   )	rk   rp   ru   rv   rw   rx   ry   rr   rk   )	rk         @rz   r{   r|   r}   r~         #@rk   )	rk   g      @r  rs   g      !@rt   r  g      @rk   rf  rc  r%   r%   r&   test_check_2d  s    	zTestLinearRamp.test_check_2d)
exceptionsc                 C   s   ddl m} t|dd|ddg}tj|dddd}t|dd	|d
d	|dd	|dd	|dd	|dd	|dd	g}t|| d S )Nr   )Fractionr9   r*   rG  rB   r   r  r0   r   r1   r8   r;   )	fractionsr  r   r   rU   r   )r    r  rO  actualr!   r%   r%   r&   test_object_array  s    	z TestLinearRamp.test_object_arrayc                 C   sz   t jt dddddd}t|dddf d	 t|ddd
f d	 t|dddf d	 t|d
ddf d	 dS )z!Ensure that end values are exact.r   r*   rK   )   {   r   rR   Nr   rk   rG  )r   rU   rC   r3   r   )r    r)   r%   r%   r&   test_end_values  s
    zTestLinearRamp.test_end_valuesr6   c                 C   s   t jdg|d}t j|dddd}t jg d|d}t|| t jdg|d}t j|dddd}t jg d|d}t|| dS )	a<  
        Check correct behavior of unsigned dtypes if there is a negative
        difference between the edge to pad and `end_values`. Check both cases
        to be independent of implementation. Test behavior for all other dtypes
        in case dtype casting interferes with complex dtypes. See gh-14191.
        r   r5   r   r   r  )r   r9   r*   r   r*   r9   r   )r   r*   r9   r   r9   r*   r   N)r   r   rU   r   )r    r6   r"   r#   r!   r%   r%   r&   test_negative_difference  s    
z'TestLinearRamp.test_negative_differenceN)rE   rF   rG   r  r  r>   r_   ZxfailAssertionErrorr  r  r`   _numeric_dtypesr  r%   r%   r%   r&   r~    s   
r~  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestReflectc                 C   s4   t d}t |dd}t g d}t|| d S )Nrd   rf   r   )rg   r   r   r   r   rh   r   r   r   r   r   r   r   r0   r   r   r:   r   r   r1   rK   r(   r   r*   r9   r   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r   r*  r)  r(  r'  r&  r%  r$  r#  r"  r!  r   r  r  r  r  r  r  r  r  r  r+  r   r%   r%   r&   r    s    
zTestReflect.test_check_simplec                 C   s8   t d}t j|dddd}t g d}t|| d S )Nrd   rf   r   oddr   )ir  r8   r7   r;   rG  r   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  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   rd   r1  f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   r+  r   r%   r%   r&   test_check_odd_method  s    
z!TestReflect.test_check_odd_methodc                 C   s   g dg dg}t |dd}t g dg dg dg dg dg dg dg dg dg dg dg dg dg dg}t|| d S )NrB  r1   r   r   rC  r   )r   r1   r   r   r   r1   r   r   r   r1   r   r   r   r1   r   rK   r(   rK   r1   rK   r(   rK   r1   rK   r(   rK   r1   rK   r(   rK   rD  r   r%   r%   r&   test_check_large_pad+  s(    z TestReflect.test_check_large_padc                 C   s~   g dg}t |dd}t g dg dg dg dg dg dg dg dg dg dg dg dg dg}t|| d S )NrB  rC  r   r  rD  r   r%   r%   r&   test_check_shapeB  s&    
zTestReflect.test_check_shapec                 C   s.   t g ddd}t g d}t|| d S )Nr9   r*   r   r*   r   )r   r*   r9   r*   r   r*   r9   rD  r   r%   r%   r&   test_check_01X  s    zTestReflect.test_check_01c                 C   s.   t g ddd}t g d}t|| d S )Nr  r   r   )	r*   r   r*   r9   r*   r   r*   r9   r*   rD  r   r%   r%   r&   test_check_02]  s    zTestReflect.test_check_02c                 C   s.   t g ddd}t g d}t|| d S )Nr  r(   r   )r9   r*   r   r*   r9   r*   r   r*   r9   r*   r   rD  r   r%   r%   r&   test_check_03b  s    zTestReflect.test_check_03N)
rE   rF   rG   r  r  r  r  r  r  r  r%   r%   r%   r&   r    s   r  c                   @   sP   e Zd ZdZejdee	 ddh dd Z
ejde	 dd Zd	S )
TestEmptyArrayz<Check how padding behaves on arrays with an empty dimension.rI   r   r   c                 C   s   d}t jt|d  tjg d|d W d    n1 s80    Y  t jt|d& tjtdd|d W d    n1 s|0    Y  t jt|d& tjtdd|d W d    n1 s0    Y  d S )NzFcan't extend empty axis 0 using modes other than 'constant' or 'empty'r<   r(   rR   r   )r   r   )rk  rx  )r>   r?   r@   r   rU   Zndarrayr{  rY  r%   r%   r&   r}  k  s    .4z'TestEmptyArray.test_pad_empty_dimensionc                 C   s(   t jt dd|d}|jdks$J d S )N)r*   r   r*   )rS  rx  rk  rR   )r   r   r(   )r   rU   rC   rT   )r    rI   r#   r%   r%   r&   test_pad_non_empty_dimensionz  s    z+TestEmptyArray.test_pad_non_empty_dimensionN)rE   rF   rG   __doc__r>   r_   r`   sortedra   rb   r}  r  r%   r%   r%   r&   r  h  s   

r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestSymmetricc                 C   s4   t d}t |dd}t g d}t|| d S )Nrd   rf   r   )r   r   r   r   rh   r   r   r   r   r   r   r   r0   r   r   r:   r   r   r1   rK   r(   r   r*   r9   r   r   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r   r   r*  r)  r(  r'  r&  r%  r$  r#  r"  r!  r   r  r  r  r  r  r  r  r  r+  r   r%   r%   r&   r    s    
zTestSymmetric.test_check_simplec                 C   s8   t d}t j|dddd}t g d}t|| d S )Nrd   rf   r   r  r  )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r8   r7   r;   rG  r   r   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  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   rd   r1  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r   r%   r%   r&   r    s    
z#TestSymmetric.test_check_odd_methodc                 C   s   g dg dg}t |dd}t g dg dg dg dg dg dg dg dg dg dg dg dg dg dg}t|| d S )NrB  r  rC  r   rK   r1   r1   rK   r(   r(   rK   r1   r1   rK   r(   r(   rK   r1   r1   )r   r   r   r   r1   r1   r   r   r   r   r1   r1   r   r   r   rD  r   r%   r%   r&   r    s(    z"TestSymmetric.test_check_large_padc                 C   s   g dg dg}t j|dddd}t g dg dg dg dg d	g d	g d
g d
g dg dg dg dg dg dg}t|| d S )NrB  r  rC  r   r  r  )r7   r;   r;   rG  r   r   r9   r*   r*   r   r(   r(   rK   r1   r1   )rG  r   r   r9   r*   r*   r   r(   r(   rK   r1   r1   r   r   r   )r9   r*   r*   r   r(   r(   rK   r1   r1   r   r   r   r:   r   r   )r   r(   r(   rK   r1   r1   r   r   r   r:   r   r   r   r0   r0   )rK   r1   r1   r   r   r   r:   r   r   r   r0   r0   r   r   r   )r   r   r   r:   r   r   r   r0   r0   r   r   r   r   r   r   )r:   r   r   r   r0   r0   r   r   r   r   r   r   r   r   r   rD  r   r%   r%   r&   test_check_large_pad_odd  s(    z&TestSymmetric.test_check_large_pad_oddc                 C   s~   g dg}t |dd}t g dg dg dg dg dg dg dg dg dg dg dg dg dg}t|| d S )NrB  rC  r   r  rD  r   r%   r%   r&   r    s&    
zTestSymmetric.test_check_shapec                 C   s.   t g ddd}t g d}t|| d S )Nr  r*   r   )r*   r9   r9   r*   r   r   r*   rD  r   r%   r%   r&   r    s    zTestSymmetric.test_check_01c                 C   s.   t g ddd}t g d}t|| d S )Nr  r   r   )	r   r*   r9   r9   r*   r   r   r*   r9   rD  r   r%   r%   r&   r    s    zTestSymmetric.test_check_02c                 C   s.   t g ddd}t g d}t|| d S )Nr  r1   r   )r9   r*   r   r   r*   r9   r9   r*   r   r   r*   r9   r9   r*   r   rD  r   r%   r%   r&   r     s    zTestSymmetric.test_check_03N)rE   rF   rG   r  r  r  r  r  r  r  r  r%   r%   r%   r&   r    s   r  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestWrapc                 C   s4   t d}t |dd}t g d}t|| d S )Nrd   rf   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   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   rh   r   r   r   r   rg   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  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   r9   r*   r   r(   rK   r1   r   r   r:   r   r   r0   r   r   r   r   r   r   r   r+  r   r%   r%   r&   r    s    
zTestWrap.test_check_simplec                 C   s   t d}t |d}t |dd}t g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg}t|| d S )Nr0   rn  )r   r0   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   r9   r*   r   r   r9   r*   r   r   r9   r*   r   r   r9   r*   r   r   r9   r*   r   r   r9   r*   r   )r1   r   r(   rK   r1   r   r(   rK   r1   r   r(   rK   r1   r   r(   rK   r1   r   r(   rK   r1   r   r(   rK   r1   r   rT  r   r%   r%   r&   r    s@    
6zTestWrap.test_check_large_padc                 C   s.   t g ddd}t g d}t|| d S )Nr  r   r   )	r9   r*   r   r9   r*   r   r9   r*   r   rD  r   r%   r%   r&   r  [  s    zTestWrap.test_check_01c                 C   s.   t g ddd}t g d}t|| d S )Nr  r(   r   )r   r9   r*   r   r9   r*   r   r9   r*   r   r9   rD  r   r%   r%   r&   r  `  s    zTestWrap.test_check_02c                 C   s8   t d}t j|ddd}t||d dd df  d S )Nr@  )r   rK   r   rR   r  )r   rC   rU   r   r   r%   r%   r&   test_pad_with_zeroe  s    
zTestWrap.test_pad_with_zeroc                 C   sx   t d}t j|ddd}tt j||||f dd | t d}t j|ddd}tt j||||f dd | dS )	zy
        Check wrapping on each side individually if the wrapped area is longer
        than the original array.
        rK   )r0   r   r   rR   r   N)r   r0   r7   )r   r2   rU   r   Zr_r   r%   r%   r&   test_repeated_wrappingj  s    
 
zTestWrap.test_repeated_wrappingc              	   C   sb   t ddd}t j|ddgdd}t g dg dg dg dg dg dg}t|| d	S )
z
        Assert that 'wrap' pads only with multiples of the original area if
        the pad width is larger than the original array.
        r(   r*   rm  r   r9   r   rR   )r   r*   r   r*   r   r*   )r9   r   r9   r   r9   r   NrT  r   r%   r%   r&   &test_repeated_wrapping_multiple_originw  s    z/TestWrap.test_repeated_wrapping_multiple_originN)
rE   rF   rG   r  r  r  r  r  r  r  r%   r%   r%   r&   r    s   <r  c                   @   s   e Zd Zdd Zdd ZdS )TestEdgec                 C   sr   t d}t |d}t |dd}t g dg dg dg dg dg dg dg dg dg	}t|| d S 	Nr0   r(   r   rQ  r   )r   r   r   r   r9   r*   r*   r*   )r   r   r   r   r(   rK   rK   rK   )r1   r1   r1   r1   r   r   r   r   )r:   r:   r:   r:   r   r   r   r   rT  r   r%   r%   r&   r    s     
zTestEdge.test_check_simplec                 C   s   t g d}t |dd}t g d}t|| t g dg dg}t |dd}t |dd}t|| t ddd	d
}t |dd}t |dd}t|| d S )Nr  )rV  r   )r9   r9   r*   r   r   r   rB  re  r   r*   r   r(   )rV  rV  rV  )r   r   rU   r   r2   r3   )r    r)   paddedr!   r%   r%   r&   test_check_width_shape_1_2  s    

z#TestEdge.test_check_width_shape_1_2N)rE   rF   rG   r  r  r%   r%   r%   r&   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )	TestEmptyc                 C   sR   t ddd}t j|ddgdd}|jdks4J t||d	d
ddf  d S )Nr   r(   r1   rB   r  r   rR   )r:   r   r*   r7   r   rG  r   r2   r3   rU   rT   r   r|  r%   r%   r&   test_simple  s    zTestEmpty.test_simplec                 C   s0   t d}t j|g ddd}|jdks,J d S )Nrv  rw  r   rR   ry  rz  r|  r%   r%   r&   r}    s    
z"TestEmpty.test_pad_empty_dimensionN)rE   rF   rG   r  r}  r%   r%   r%   r&   r    s   r  c               	   C   sd   dd } t ddd}t |d| }t g dg dg dg dg dg dg}t|| d S )	Nc                 S   s&   d| d |d < d| |d  d < d S )Nr   r   r9   r%   )Zvectorrt  Ziaxiskwargsr%   r%   r&   _padwithtens  s    z6test_legacy_vector_functionality.<locals>._padwithtensr1   r*   r   )r   r   r   r   r   r   r   )r   r   r   r9   r*   r   r   )r   r   r   r(   rK   r   r   rT  )r  r)   r   r%   r%   r&    test_legacy_vector_functionality  s    
r  c                  C   s.   t jdgddd} t g d}t| | d S )Nr9   r*   r   rR   )r   r   r9   r   r   rD  )r)   r   r%   r%   r&   test_unicode_mode  s    r  rI   )r   r   r   r   c                 C   s:   t jdd d}d}t jdd d}tt j||| d| d S )Nr  )Z
fill_valuerQ  )r:   r   rR   )r   rq  r   rU   )rI   r)   rX   r   r%   r%   r&   test_object_input  s    r  c                   @   s   e Zd Zejdg dejde dd Zejde dd Z	ejdg dejde d	d
 Z
ejdddde dfddefedddfdgejde dd Zdd Zejdg dejde dd ZdS )TestPadWidthrt  ))r(   rK   r1   r   )rk  rK  rS  )rV  rn  )rK   r1   ))r   r(   rK   )r   r9   r*   rI   c                 C   sT   t dd}d}tjt|d t ||| W d    n1 sF0    Y  d S )Nr]   rL  z(operands could not be broadcast togetherr<   rN  r    rt  rI   rO  r=   r%   r%   r&   test_misshaped_pad_width  s    z%TestPadWidth.test_misshaped_pad_widthc                 C   sT   t dd}d}tjt|d t |d| W d    n1 sF0    Y  d S )Nr]   rL  zDinput operand has more dimensions than allowed by the axis remappingr<   ))rS  )r(   )rK   )rx  rk  rK  rN  )r    rI   rO  r=   r%   r%   r&   test_misshaped_pad_width_2  s    z'TestPadWidth.test_misshaped_pad_width_2rJ  c                 C   sT   t dd}d}tjt|d t ||| W d    n1 sF0    Y  d S )Nr]   rL  rM  r<   rN  r  r%   r%   r&   test_negative_pad_width  s    z$TestPadWidth.test_negative_pad_widthzpad_width, dtype)3N)wordNr,   N)g333333@N))r*   r   r(   rR  r9   rG  )))g r   rR  Nc                 C   s   t dd}d}|d urdtjt|d( t |t j||d| W d    q1 sX0    Y  n~tjt|d t ||| W d    n1 s0    Y  tjt|d$ t |t || W d    n1 s0    Y  d S )Nr]   rL  z%`pad_width` must be of integral type.r<   r5   )r   r2   r3   r>   r?   	TypeErrorrU   r   )r    rt  r6   rI   rO  r=   r%   r%   r&   test_bad_type  s    8,zTestPadWidth.test_bad_typec                 C   sx   t d}t |d}t |t dd}t g dg dg dg dg dg dg dg dg dg	}t|| d S r  rT  r   r%   r%   r&   test_pad_width_as_ndarray  s     
z&TestPadWidth.test_pad_width_as_ndarray)r   rL   )rL   rL   c                 C   s,   t ddd}t|t j|||d d S )Nr]   r1   rK   rR   )r   r2   r3   r   rU   )r    rt  rI   rO  r%   r%   r&   test_zero_pad_width*  s    z TestPadWidth.test_zero_pad_width)rE   rF   rG   r>   r_   r`   ra   rb   r  r  r  r   r   r  r  r  r%   r%   r%   r&   r    s4   

r  c              	   C   s   t |  }i }t  D ]}||kr|| qtjg dd| fi | | D ]^\}}d| }tjt	|d. tjg dd| fi ||i W d   qN1 s0    Y  qNdS )z1Test behavior of pad's kwargs for the given mode.r  r9   z+unsupported keyword arguments for mode '{}'r<   N)
ra   valuesupdater   rU   itemsformatr>   r?   r@   )rI   allowednot_allowedr  keyvaluer=   r%   r%   r&   test_kwargs1  s    
r  c                  C   s(   t ddg} tt | dg d d S )Nr9   r*   )r   r   r9   r9   r   r   )r   r   r   rU   )rO  r%   r%   r&   test_constant_zero_defaultB  s    r  r9   constTFc                 C   sP   d | }tjt|d$ tjg dd| d W d    n1 sB0    Y  d S )Nzmode '{}' is not supportedr<   r  r(   rR   )r  r>   r?   r@   r   rU   )rI   r=   r%   r%   r&   test_unsupported_modeG  s    
r  c                 C   s`   t dddd d dd d df }t |d| }|jdksBJ t|ddddf | d S )Nr   r(   r1   r*   rB   )r   r   r7   r  )rI   rO  r#   r%   r%   r&   test_non_contiguous_arrayN  s    &r  c                 C   sP   t jddd}t |d| jd s&J t jddd}t |d| jd sLJ dS )	z5Test if C and F order is preserved for all pad modes.)rK   r   C)orderrK   ZC_CONTIGUOUSFZF_CONTIGUOUSN)r   rC   rU   flags)rI   r"   r%   r%   r&   test_memory_layout_persistenceV  s    r  r6   c                 C   s0   t jd| d}t j|d|d}|j| ks,J d S )N)r   r*   r9   r5   r9   rR   )r   r{  rU   r6   )r6   rI   rO  r#   r%   r%   r&   test_dtype_persistence_  s    r  )&r  r>   numpyr   Znumpy.testingr   r   r   Znumpy.lib.arraypadr   Zsctypesr  ra   r   rH   rc   r\  r~  r  r  r  r  r  r  r  r  r_   r`   r  r  rb   r  r  r   r  r  r  r  r%   r%   r%   r&   <module>   sr   S  k 4Un  '
Q



