a
    ç´«jaS  ã                
   @   sZ  d Z ddlmZ ddlmZ ddlZddlm  mZ	 ddl
Z
ddlmZ ddlmZmZmZmZmZmZ dd„ Zd	gZdd	gZg d
¢Zg d¢Zg d¢Zg d¢Zg d¢Zg d¢Zg d¢Zg d¢Zeeeeeeeeeeg
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S )$zTests for polynomial module.

é    )Úreduce)ÚFractionN)Údeepcopy)Úassert_almost_equalÚassert_raisesÚassert_equalÚassert_Úassert_array_equalÚassert_raises_regexc                 C   s   t j| dd�S )Ng�íµ ÷Æ°>)Ztol)ÚpolyÚpolytrim©Úx© r   úe/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/numpy/polynomial/tests/test_polynomial.pyÚtrim   s    r   é   )éÿÿÿÿr   é   )r   éýÿÿÿr   é   )r   r   iøÿÿÿr   é   )r   é   r   iìÿÿÿr   é   )r   r   é   r   iÐÿÿÿr   é    )r   iùÿÿÿr   é8   r   i�ÿÿÿr   é@   )	r   r   iàÿÿÿr   é    r   i ÿÿÿr   é€   )
r   é	   r   iˆÿÿÿr   i°  r   iÀýÿÿr   é   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S )ÚTestConstantsc                 C   s   t tjddgƒ d S )Nr   r   )r   r   Z
polydomain©Úselfr   r   r   Útest_polydomain"   s    zTestConstants.test_polydomainc                 C   s   t tjdgƒ d S )Nr   )r   r   Zpolyzeror#   r   r   r   Útest_polyzero%   s    zTestConstants.test_polyzeroc                 C   s   t tjdgƒ d S ©Nr   )r   r   Zpolyoner#   r   r   r   Útest_polyone(   s    zTestConstants.test_polyonec                 C   s   t tjddgƒ d S )Nr   r   )r   r   Zpolyxr#   r   r   r   Ú
test_polyx+   s    zTestConstants.test_polyxc                 C   s$   t  g d¢¡}t|ƒ}t||ƒ d S ©N©r   r   é   )r   Ú
Polynomialr   r   ©r$   r   Úyr   r   r   Ú	test_copy.   s    zTestConstants.test_copyc                 C   s,   t  g d¢¡}t t |¡¡}t||ƒ d S r*   )r   r-   ÚpickleÚloadsÚdumpsr   r.   r   r   r   Útest_pickle3   s    zTestConstants.test_pickleN)	Ú__name__Ú
__module__Ú__qualname__r%   r&   r(   r)   r0   r4   r   r   r   r   r"       s   r"   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S )ÚTestArithmeticc                 C   sž   t dƒD ]�}t dƒD ]‚}d|› d|› �}t t||ƒd ¡}||  d7  < ||  d7  < t dg| dg dg| dg ¡}tt|ƒt|ƒ|d� qqd S ©Nr   úAt i=ú, j=r   r   ©Úerr_msg)ÚrangeÚnpÚzerosÚmaxr   Úpolyaddr   r   ©r$   ÚiÚjÚmsgÚtgtÚresr   r   r   Útest_polyadd:   s    $zTestArithmetic.test_polyaddc                 C   sž   t dƒD ]�}t dƒD ]‚}d|› d|› �}t t||ƒd ¡}||  d7  < ||  d8  < t dg| dg dg| dg ¡}tt|ƒt|ƒ|d� qqd S r9   )r>   r?   r@   rA   r   Zpolysubr   r   rC   r   r   r   Útest_polysubD   s    $zTestArithmetic.test_polysubc                 C   sr   t t dg¡dgƒ t t dg¡ddgƒ tddƒD ]8}dg| dg }dg|d  dg }t t |¡|ƒ q4d S )Nr   r   r   )r   r   Zpolymulxr>   )r$   rD   ZserrG   r   r   r   Útest_polymulxN   s    zTestArithmetic.test_polymulxc                 C   s�   t dƒD ]‚}t dƒD ]t}d|› d|› �}t || d ¡}|||   d7  < t dg| dg dg| dg ¡}tt|ƒt|ƒ|d� qqd S r9   )r>   r?   r@   r   Úpolymulr   r   rC   r   r   r   Útest_polymulV   s    $zTestArithmetic.test_polymulc           
      C   sì   t ttjdgdgƒ t dgdg¡\}}t||fdƒ t ddgdg¡\}}t||fdƒ tdƒD ]„}tdƒD ]v}d|› d|› �}dg| ddg }dg| ddg }t ||¡}t ||¡\}}t t ||¡|¡}	t|	||d	� qnqbd S )
Nr   r   r   )r   r   ))r   r   r   r   r:   r;   r<   )r   ÚZeroDivisionErrorr   Zpolydivr   r>   rB   rL   )
r$   ZquoÚremrD   rE   rF   ÚciÚcjrG   rH   r   r   r   Útest_polydiv_   s    zTestArithmetic.test_polydivc                 C   s|   t dƒD ]n}t dƒD ]`}d|› d|› �}t |d ¡}ttj|g| t dg¡ƒ}t ||¡}tt	|ƒt	|ƒ|d� qqd S )Nr   r:   r;   r   r<   )
r>   r?   Úaranger   r   rL   ÚarrayZpolypowr   r   )r$   rD   rE   rF   ÚcrG   rH   r   r   r   Útest_polypowt   s    zTestArithmetic.test_polypowN)	r5   r6   r7   rI   rJ   rK   rM   rR   rV   r   r   r   r   r8   8   s   

	r8   c                   @   s   e Zd Zdd„ ZdS )ÚTestFractionc                 C   sô   t ddƒ}t ddƒ}t ddƒ}tj||g||g||gd�}d| |d  }t|jtjt ddƒt ddƒt d	dƒgtd
�ƒ t|j||gƒ t|jj	tj
 ¡ ƒ tt||ƒt ƒƒ t||ƒt ddƒƒ tjt ddƒg||g||gd�}t| ¡ |ƒ d S )Nr   r,   r   r   )ÚdomainZwindowr   r    é   r   )Údtypeé
   )r   r   r-   r   Úcoefr?   rT   ÚobjectrX   rZ   ZdtypesZObjectDTyper   Ú
isinstanceZderiv)r$   ÚfÚoneÚzeroÚpr   Zp_derivr   r   r   Útest_Fraction   s$    


ÿÿÿzTestFraction.test_FractionN)r5   r6   r7   rc   r   r   r   r   rW   }   s   rW   c                   @   sŒ   e Zd Ze g d¢¡Ze dee¡Ze deee¡Zej	 	d¡d d Z
e e
g d¢¡Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestEvaluation)ç      ð?g       @g      @úi,j->ijú
i,j,k->ijk©r,   r   r   r   c           
         s~  t t g dg¡jdƒ t dd¡‰ ‡ fdd„tdƒD ƒ}tdƒD ].}|| }t ˆ dg| dg ¡}t||ƒ q@ˆ ˆ d d  }t ˆ g d¢¡}t||ƒ td	ƒD ]^}dg| }t |¡‰ t t ˆ dg¡j	|ƒ t t ˆ ddg¡j	|ƒ t t ˆ g d
¢¡j	|ƒ q¢g d¢}tj
jg d¢|d�}t g d¢|¡}t|j|ƒ G dd„ dtjƒ}t g d¢¡ |¡}	t tt g d¢|	¡ƒ|ƒ d S )Nr   r   r   c                    s   g | ]}ˆ | ‘qS r   r   ©Ú.0rD   r   r   r   Ú
<listcomp>¡   ó    z/TestEvaluation.test_polyval.<locals>.<listcomp>r   r   )r   r   r   r   r,   ©r   r   r   )FTFr+   )Úmask)é   r   r,   c                   @   s   e Zd ZdS )z&TestEvaluation.test_polyval.<locals>.CN)r5   r6   r7   r   r   r   r   ÚC¹   s   rp   ©r   r,   r   )r   r   ÚpolyvalÚsizer?   Úlinspacer>   r   r@   ÚshapeÚmarT   r	   rn   ZndarrayÚviewÚtype)
r$   r/   rD   rG   rH   Údimsrn   Zmxrp   Zcxr   r   r   Útest_polyval›   s.    


zTestEvaluation.test_polyvalc                    sö  t ttjdgdgdd� tt g dg¡jdƒ tt g dg¡jdkƒ tt g dgd g¡jdƒ tt g dgd g¡jdkƒ tt dd¡dƒ tt dt 	d¡¡jd	kƒ t 
d
d¡‰ ‡ fdd„tdƒD ƒ}tddƒD ](}|| }t ˆ dg| ¡}t||ƒ qÚˆ ˆ d  ˆ d  }t ˆ g d¢¡}t||ƒ tdƒD ]`}dg| }t |¡‰ tt ˆ dg¡j|ƒ tt ˆ ddg¡j|ƒ tt ˆ g d¢¡j|ƒ �q:g d¢}t |¡}t 
d
d¡‰ tt ˆ |¡t ˆ |¡ƒ d}t dd¡‰ tjjdd|d�}tjˆ |dd�}t |jdd … ¡}t|jƒD ]&}	t ˆ |	 |d d …|	f ¡||	< �q$t||ƒ t ˆ dˆ  g¡‰ tjˆ |dd�}t |jdd … ˆ j ¡}t|jd ƒD ]F}	tˆ jd ƒD ]0}
t ˆ |
 |d d …|	f ¡||	|
d d …f< �q²�q t||ƒ d S )Nr   F)Ztensorr   )r   r   )r   r   )r,   r,   )r,   r   c                    s   g | ]}ˆ | ‘qS r   r   ri   r   r   r   rk   Ó   rl   z8TestEvaluation.test_polyvalfromroots.<locals>.<listcomp>)r   r   r   r,   r   rm   )é   r   iðÿÿÿéþÿÿÿr   rh   r   éûÿÿÿ)rs   T)r   Ú
ValueErrorr   Zpolyvalfromrootsr   rs   r   ru   r?   Úonesrt   r>   r   r@   Ú	polyrootsrr   rS   ÚrandomÚrandintÚemptyÚvstack)r$   r/   rD   rG   rH   ry   ZptestÚrZrshapeÚiiZjjr   r   r   Útest_polyvalfromroots¿   sZ    
ÿ




ÿ$
2z$TestEvaluation.test_polyvalfromrootsc           
      C   s„   | j \}}}| j\}}}ttdtj||d d… | jƒ || }t ||| j¡}t||ƒ t 	d¡}	t |	|	| j¡}t
|jdkƒ d S ©NZincompatibler   ©r   r,   )r   r/   r
   r~   r   Ú	polyval2dÚc2dr   r?   r   r   ru   ©
r$   Úx1Úx2Úx3Úy1Úy2Zy3rG   rH   Úzr   r   r   Útest_polyval2dÿ   s    ÿ

zTestEvaluation.test_polyval2dc           
   	   C   sŽ   | j \}}}| j\}}}ttdtj|||d d… | jƒ || | }t |||| j¡}t||ƒ t 	d¡}	t |	|	|	| j¡}t
|jdkƒ d S rˆ   )r   r/   r
   r~   r   Ú	polyval3dÚc3dr   r?   r   r   ru   rŒ   r   r   r   Útest_polyval3d  s    ÿ

zTestEvaluation.test_polyval3dc           
      C   sl   | j \}}}| j\}}}t d||¡}t ||| j¡}t||ƒ t d¡}	t |	|	| j¡}t	|j
dkƒ d S )Nrf   r‰   )r   r,   r   r,   )r   r/   r?   Úeinsumr   Z
polygrid2dr‹   r   r   r   ru   rŒ   r   r   r   Útest_polygrid2d#  s    

zTestEvaluation.test_polygrid2dc           
      C   sr   | j \}}}| j\}}}t d|||¡}t |||| j¡}t||ƒ t d¡}	t |	|	|	| j¡}t	|j
dkƒ d S )Nrg   r‰   )r   r,   r   r,   r   r,   )r   r/   r?   r—   r   Z
polygrid3dr•   r   r   r   ru   rŒ   r   r   r   Útest_polygrid3d1  s    

zTestEvaluation.test_polygrid3dN)r5   r6   r7   r?   rT   Zc1dr—   r‹   r•   r�   r   r   rr   r/   rz   r‡   r“   r–   r˜   r™   r   r   r   r   rd   ‘   s   $@rd   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestIntegralc              	   C   s  t ttjdgdƒ t ttjdgdƒ t ttjdgdddgƒ t ttjdgdgd� t ttjdgdgd� t ttjdgdd� t ttjddgdƒ td	d
ƒD ]8}dg|d	  dg }tjdg||d�}t|ddgƒ qštd
ƒD ]Z}|d }dg| dg }|gdg|  d| g }tj|d|gd�}tt|ƒt|ƒƒ qÜtd
ƒD ]D}|d }dg| dg }tj|d|gdd�}tt d|¡|ƒ �q@td
ƒD ]^}|d }dg| dg }|gdg|  d	| g }tj|d|gd	d�}tt|ƒt|ƒƒ �qŽtd
ƒD ]r}td	d
ƒD ]`}dg| dg }|d d … }t|ƒD ]}tj|dd�}�q,tj||d�}tt|ƒt|ƒƒ �q�qötd
ƒD ]€}td	d
ƒD ]n}dg| dg }|d d … }t|ƒD ]}tj|d|gd�}�q¨tj||t	t|ƒƒd�}tt|ƒt|ƒƒ �q€�qrtd
ƒD ]„}td	d
ƒD ]r}dg| dg }|d d … }t|ƒD ]}tj|d|gdd�}�q2tj||t	t|ƒƒdd�}tt|ƒt|ƒƒ �q
�qütd
ƒD ]„}td	d
ƒD ]r}dg| dg }|d d … }t|ƒD ]}tj|d|gd	d�}�qÀtj||t	t|ƒƒd	d�}tt|ƒt|ƒƒ �q˜�qŠd S )Nr   ç      à?r   r   )Úlbnd)Úscl©Úaxisre   r   r   )ÚmÚk)r    r¡   rœ   )r    r¡   r�   ©r    )
r   Ú	TypeErrorr   Úpolyintr~   r>   r   r   rr   Úlist)r$   rD   r¡   rH   r�   ZpolrG   rE   r   r   r   Útest_polyintB  sx    zTestIntegral.test_polyintc                 C   sš   t j d¡}t  dd„ |jD ƒ¡j}tj|dd�}t||ƒ t  dd„ |D ƒ¡}tj|dd�}t||ƒ t  dd„ |D ƒ¡}tj|d	dd
�}t||ƒ d S )N©r,   r   c                 S   s   g | ]}t  |¡‘qS r   ©r   r¤   ©rj   rU   r   r   r   rk   •  rl   z2TestIntegral.test_polyint_axis.<locals>.<listcomp>r   rž   c                 S   s   g | ]}t  |¡‘qS r   r¨   r©   r   r   r   rk   ™  rl   r   c                 S   s   g | ]}t j|d d�‘qS )r,   )r¡   r¨   r©   r   r   r   rk   �  rl   r,   )r¡   rŸ   )r?   r�   r„   ÚTr   r¤   r   ©r$   r‹   rG   rH   r   r   r   Útest_polyint_axis‘  s    

zTestIntegral.test_polyint_axisN)r5   r6   r7   r¦   r¬   r   r   r   r   rš   @  s   Orš   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestDerivativec                 C   s  t ttjdgdƒ t ttjdgdƒ tdƒD ]4}dg| dg }tj|dd�}tt|ƒt|ƒƒ q,tdƒD ]N}tddƒD ]>}dg| dg }tjtj||d�|d�}t	t|ƒt|ƒƒ qxqjtdƒD ]R}tddƒD ]B}dg| dg }tjtj||dd�|dd�}t	t|ƒt|ƒƒ qÐqÂd S )	Nr   r›   r   r   r   r¢   r   )r    r�   )
r   r£   r   Úpolyderr~   r>   r   r   r¤   r   )r$   rD   rG   rH   rE   r   r   r   Útest_polyder¤  s     zTestDerivative.test_polyderc                 C   sl   t j d¡}t  dd„ |jD ƒ¡j}tj|dd�}t||ƒ t  dd„ |D ƒ¡}tj|dd�}t||ƒ d S )Nr§   c                 S   s   g | ]}t  |¡‘qS r   ©r   r®   r©   r   r   r   rk   Á  rl   z4TestDerivative.test_polyder_axis.<locals>.<listcomp>r   rž   c                 S   s   g | ]}t  |¡‘qS r   r°   r©   r   r   r   rk   Å  rl   r   )r?   r�   r„   rª   r   r®   r   r«   r   r   r   Útest_polyder_axis½  s    
z TestDerivative.test_polyder_axisN)r5   r6   r7   r¯   r±   r   r   r   r   r­   ¢  s   r­   c                   @   s@   e Zd Zej d¡d d Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dS )Ú
TestVanderrh   r   r   c                 C   sÎ   t  d¡}t |d¡}t|jdkƒ tdƒD ].}dg| dg }t|d|f t ||¡ƒ q,t  	ddgddgdd	gg¡}t |d¡}t|jd
kƒ tdƒD ].}dg| dg }t|d|f t ||¡ƒ qšd S )Nr,   r§   r   r   r   .r   r   é   )r,   r   r   )
r?   rS   r   Ú
polyvanderr   ru   r>   r   rr   rT   )r$   r   ÚvrD   r\   r   r   r   Útest_polyvanderÎ  s    
zTestVander.test_polyvanderc                 C   sx   | j \}}}tj d¡}t ||ddg¡}t |||¡}t ||j¡}t||ƒ t |g|gddg¡}t	|j
dkƒ d S )Nr‰   r   r   )r   r   r³   )r   r?   r�   r   Zpolyvander2drŠ   ÚdotÚflatr   r   ru   ©r$   r�   rŽ   r�   rU   ZvanrG   rH   r   r   r   Útest_polyvander2dß  s    
zTestVander.test_polyvander2dc                 C   s€   | j \}}}tj d¡}t |||g d¢¡}t ||||¡}t ||j¡}t||ƒ t |g|g|gg d¢¡}t	|j
dkƒ d S )Nrq   r+   )r   r   é   )r   r?   r�   r   Zpolyvander3dr”   r·   r¸   r   r   ru   r¹   r   r   r   Útest_polyvander3dì  s    
zTestVander.test_polyvander3dc                 C   s   t  d¡}tttj|dƒ d S )Nr,   r   )r?   rS   r   r~   r   r´   )r$   r   r   r   r   Útest_polyvandernegdegù  s    
z TestVander.test_polyvandernegdegN)
r5   r6   r7   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d„ ZdS )ÚTestCompanionc                 C   s"   t ttjg ƒ t ttjdgƒ d S r'   )r   r~   r   Úpolycompanionr#   r   r   r   Útest_raises   s    zTestCompanion.test_raisesc                 C   s<   t ddƒD ],}dg| dg }tt |¡j||fkƒ q
d S )Nr   r   r   )r>   r   r   r¿   ru   )r$   rD   r\   r   r   r   Útest_dimensions  s    zTestCompanion.test_dimensionsc                 C   s   t t ddg¡d dkƒ d S )Nr   r   )r   r   ç      à¿)r   r   r¿   r#   r   r   r   Útest_linear_root	  s    zTestCompanion.test_linear_rootN)r5   r6   r7   rÀ   rÁ   rÃ   r   r   r   r   r¾   þ  s   r¾   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S )ÚTestMiscc              	   C   sˆ   t  g ¡}tt|ƒdgƒ tddƒD ]^}t t tj dd| d ¡dd d… ¡}t	| }t  |¡d|d   }tt|ƒt|ƒƒ q$d S )Nr   r   r   r   )
r   Úpolyfromrootsr   r   r>   r?   Úcosrt   ÚpiÚTlist)r$   rH   rD   ÚrootsrG   r   r   r   Útest_polyfromroots  s    
*zTestMisc.test_polyfromrootsc                 C   sl   t t dg¡g ƒ t t ddg¡dgƒ tddƒD ]4}t dd|¡}t t |¡¡}t t|ƒt|ƒƒ q2d S )Nr   r   rÂ   r   r   )r   r   r€   r>   r?   rt   rÅ   r   )r$   rD   rG   rH   r   r   r   Útest_polyroots  s    zTestMisc.test_polyrootsc                 C   sÐ  dd„ }dd„ }t ttjdgdgdƒ t ttjdggdgdƒ t ttjg dgdƒ t ttjdgdgggdƒ t ttjddgdgdƒ t ttjdgddgdƒ t ttjdgdgddggd	� t ttjdgdgdddgd	� t ttjdgdgdgƒ t ttjdgdgg d
¢ƒ t ttjdgdgg ƒ t dd¡}||ƒ}t ||d¡}tt|ƒdƒ t	t 
||¡|ƒ t ||g d¢¡}tt|ƒdƒ t	t 
||¡|ƒ t ||d¡}tt|ƒdƒ t	t 
||¡|ƒ t ||g d¢¡}tt|ƒdƒ t	t 
||¡|ƒ t |t ||g¡jd¡}t	|t ||g¡jƒ t |t ||g¡jg d¢¡}t	|t ||g¡jƒ t |¡}| ¡ }	d|dd d…< d|	dd d…< tj||	d|d	�}
t	|
|ƒ tj||	g d¢|d	�}
t	|
|ƒ tj|t |	|	g¡jd|d	�}t	|t ||g¡jƒ tj|t |	|	g¡jg d¢|d	�}t	|t ||g¡jƒ g d¢}t	t ||d¡ddgƒ t	t ||ddg¡ddgƒ t dd¡}||ƒ}t ||d¡}t	t 
||¡|ƒ t ||g d¢¡}t	t 
||¡|ƒ t	||ƒ d S )Nc                 S   s   | | d  | d  S )Nr   r   r   r   r   r   r   r_   !  s    z TestMisc.test_polyfit.<locals>.fc                 S   s   | d | d  d S )Nr   r   r   r   r   r   r   r   Úf2$  s    z!TestMisc.test_polyfit.<locals>.f2r   r   r   r   )Úw)r   r   r³   r,   r   )r   r   r   r,   r   )r   r   r   r,   r   )r   y              ð?r   y       €      ð¿)r   r   r   )r   r~   r   Zpolyfitr£   r?   rt   r   Úlenr   rr   rT   rª   Z
zeros_likeÚcopy)r$   r_   rÌ   r   r/   Zcoef3Zcoef4Zcoef2drÍ   ZywZwcoef3Zwcoef2dZcoef1Zcoef2r   r   r   Útest_polyfit   sj    


"zTestMisc.test_polyfitc                 C   sb   g d¢}t ttj|dƒ tt |¡|d d… ƒ tt |d¡|d d… ƒ tt |d¡dgƒ d S )N)r   r   r   r   r   r   r   r   r   )r   r~   r   r   r   )r$   r\   r   r   r   Útest_polytrimf  s
    zTestMisc.test_polytrimc                 C   s   t t dd¡ddgƒ d S )Nr,   r   ©r   r   Zpolyliner#   r   r   r   Útest_polylineq  s    zTestMisc.test_polylinec                 C   s   t t dd¡dgƒ d S )Nr,   r   rÒ   r#   r   r   r   Útest_polyline_zerot  s    zTestMisc.test_polyline_zeroN)	r5   r6   r7   rÊ   rË   rÐ   rÑ   rÓ   rÔ   r   r   r   r   rÄ     s   	FrÄ   ))Ú__doc__Ú	functoolsr   Ú	fractionsr   Únumpyr?   Znumpy.polynomial.polynomialZ
polynomialr   r1   rÏ   r   Znumpy.testingr   r   r   r   r	   r
   r   ZT0ZT1ZT2ZT3ZT4ZT5ZT6ZT7ZT8ZT9rÈ   r"   r8   rW   rd   rš   r­   r²   r¾   rÄ   r   r   r   r   Ú<module>   s:    E 0b(4