a
    hÝEbÎ7  ã                   @   sê   d Z ddlZddlmZmZ ddl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 dd„ ZG dd	„ d	ejƒZeZG d
d„ deƒZG dd„ deeƒZeZG dd„ dƒZG dd„ deƒZG dd„ dƒZG dd„ dƒZdd„ Z dS )z½Tests suite for MaskedArray & subclassing.

:author: Pierre Gerard-Marchant
:contact: pierregm_at_uga_dot_edu
:version: $Id: test_subclassing.py 3473 2007-10-29 15:18:13Z jarrod.millman $

é    N)Úassert_Úassert_raises)Úassert_equal)ÚarrayÚarangeÚmaskedÚMaskedArrayÚmasked_arrayÚlogÚaddÚhypotÚdivideÚasarrayÚ
asanyarrayÚnomaskc                 C   s   t | d t|ƒ… |ƒ d S ©N)r   Úlen)ÚaÚb© r   ú_/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/numpy/ma/tests/test_subclassing.pyÚassert_startswith   s    r   c                       s@   e Zd Zi fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )	ÚSubArrayc                 C   s   t  |¡ | ¡}| ¡ |_|S r   )Únpr   ÚviewÚcopyÚinfo)ÚclsZarrr   Úxr   r   r   Ú__new__   s    
zSubArray.__new__c                    s4   t ttƒ dd ƒƒrtƒ  |¡ t|di ƒ ¡ | _d S )NÚ__array_finalize__r   )ÚcallableÚgetattrÚsuperr    r   r   )ÚselfÚobj©Ú	__class__r   r   r       s    zSubArray.__array_finalize__c                    s(   t ƒ  |¡}|j dd¡d |jd< |S )NÚaddedr   é   )r#   Ú__add__r   Úget©r$   ÚotherÚresultr&   r   r   r*   $   s    zSubArray.__add__c                    s(   t ƒ  |¡}|j dd¡d |jd< |S )NÚiaddedr   r)   )r#   Ú__iadd__r   r+   r,   r&   r   r   r0   )   s    zSubArray.__iadd__)Ú__name__Ú
__module__Ú__qualname__r   r    r*   r0   Ú__classcell__r   r   r&   r   r      s   r   c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )ÚSubMaskedArrayz<Pure subclass of MaskedArray, keeping some info on subclass.Nc                    s"   t ƒ j| fi |¤Ž}||jd< |S )Nr   )r#   r   Ú_optinfo)r   r   Úkwargsr%   r&   r   r   r   4   s    
zSubMaskedArray.__new__)N)r1   r2   r3   Ú__doc__r   r4   r   r   r&   r   r5   2   s   r5   c                   @   s&   e Zd Zi efdd„Zedd„ ƒZdS )Ú	MSubArrayc                 C   s&   t ||ƒ}tj| ||d�}|j|_|S )N)ÚdataÚmask)r   r   r   r   )r   r:   r   r;   ZsubarrÚ_datar   r   r   r   <   s    
zMSubArray.__new__c                 C   s   |   t¡}d|_|S )NF)r   r   Z_sharedmask)r$   Z_viewr   r   r   Ú_seriesB   s    
zMSubArray._seriesN)r1   r2   r3   r   r   Úpropertyr=   r   r   r   r   r9   :   s   r9   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚCSAIteratorzß
    Flat iterator object that uses its own setter/getter
    (works around ndarray.flat not propagating subclass setters/getters
    see https://github.com/numpy/numpy/issues/4564)
    roughly following MaskedIterator
    c                 C   s   || _ | tj¡j| _d S r   )Ú	_originalr   r   ÚndarrayÚflatÚ	_dataiter)r$   r   r   r   r   Ú__init__W   s    zCSAIterator.__init__c                 C   s   | S r   r   ©r$   r   r   r   Ú__iter__[   s    zCSAIterator.__iter__c                 C   s4   | j  |¡}t|tjƒs | ¡ }| t| jƒ¡}|S r   )	rC   Ú__getitem__Ú
isinstancer   rA   Ú	__array__r   Útyper@   )r$   ZindxÚoutr   r   r   rG   ^   s
    zCSAIterator.__getitem__c                 C   s   | j  |¡| j|< d S r   )r@   Ú_validate_inputrC   )r$   ÚindexÚvaluer   r   r   Ú__setitem__e   s    zCSAIterator.__setitem__c                 C   s   t | jƒ ¡  t| jƒ¡S r   )ÚnextrC   rI   r   rJ   r@   rE   r   r   r   Ú__next__h   s    zCSAIterator.__next__N)	r1   r2   r3   r8   rD   rF   rG   rO   rQ   r   r   r   r   r?   P   s   r?   c                       sh   e Zd Zdd„ Zdd„ Zdd„ Z‡ fdd„Z‡ fd	d
„Zedd„ ƒZ	e	j
dd„ ƒZ	d‡ fdd„	Z‡  ZS )ÚComplicatedSubArrayc                 C   s   d|   t¡› d�S )Nz	myprefix z
 mypostfix)r   r   rE   r   r   r   Ú__str__n   s    zComplicatedSubArray.__str__c                 C   s   d| j j› d| › d�S )Nú<ú ú>)r'   r1   rE   r   r   r   Ú__repr__q   s    zComplicatedSubArray.__repr__c                 C   s   t |tƒstdƒ‚|S )Nz!Can only set to MySubArray values)rH   rR   Ú
ValueError)r$   rN   r   r   r   rL   u   s    
z#ComplicatedSubArray._validate_inputc                    s   t ƒ  ||  |¡¡ d S r   )r#   rO   rL   ©r$   ÚitemrN   r&   r   r   rO   z   s    zComplicatedSubArray.__setitem__c                    s*   t ƒ  |¡}t|tjƒs&| ¡  t¡}|S r   )r#   rG   rH   r   rA   rI   r   rR   rY   r&   r   r   rG      s    zComplicatedSubArray.__getitem__c                 C   s   t | ƒS r   )r?   rE   r   r   r   rB   †   s    zComplicatedSubArray.flatc                 C   s   |   ¡ }||d d …< d S r   )Zravel)r$   rN   Úyr   r   r   rB   Š   s    Nc                    s@   t ƒ  ||¡}|d ur<|d tju r<|j dd¡d |jd< |S )Nr   Z
multipliedr)   )r#   Ú__array_wrap__r   Úmultiplyr   r+   )r$   r%   Úcontextr&   r   r   r\   �   s    z"ComplicatedSubArray.__array_wrap__)N)r1   r2   r3   rS   rW   rL   rO   rG   r>   rB   Úsetterr\   r4   r   r   r&   r   rR   l   s   

rR   c                   @   st   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dS )ÚTestSubclassingc                 C   s,   t jddd�}t|g d¢d�}||f| _d S )Né   Úfloat)Zdtype)r   r)   r   r   r   ©r;   )r   r   Ú	msubarrayr:   ©r$   r   Úmxr   r   r   Úsetupš   s    zTestSubclassing.setupc                 C   sT   t  d¡}g d¢}t|ƒ}t||d�}tt|tƒƒ t|j|ƒ tt|jtƒƒ d S )Nra   ©r   r   r)   r   r   rc   )	r   r   r   r	   r   rH   r   r   r<   )r$   r   ÚmÚxsubZxmsubr   r   r   Útest_data_subclassingŸ   s    
z%TestSubclassing.test_data_subclassingc                 C   s   | j \}}tt|jtƒƒ d S r   )r:   r   rH   r<   Úsubarrayre   r   r   r   Útest_maskedarray_subclassing©   s    
z,TestSubclassing.test_maskedarray_subclassingc                 C   s`   | j \}}tjdd��6 ttt|ƒtƒƒ tt|ƒt |¡ƒ W d   ƒ n1 sR0    Y  d S )NÚignore)r   )r:   r   Zerrstater   rH   r
   rd   r   re   r   r   r   Útest_masked_unary_operations®   s    
z,TestSubclassing.test_masked_unary_operationsc                 C   sž   | j \}}ttt||ƒtƒƒ ttt||ƒtƒƒ tt||ƒ|| ƒ ttt||ƒjtƒƒ ttt ||¡tƒƒ ttt	||ƒtƒƒ ttt	||ƒtƒƒ d S r   )
r:   r   rH   r   rd   r   r<   rl   Úouterr   re   r   r   r   Útest_masked_binary_operationsµ   s    
z-TestSubclassing.test_masked_binary_operationsc                 C   s`   | j \}}t|j  ¡ |jd�}ttt||ƒtƒƒ ttt||ƒtƒƒ tt||ƒt||ƒƒ d S )Nrc   )	r:   r	   rI   r;   r   rH   r   rd   r   )r$   r   rf   Zxmxr   r   r   Útest_masked_binary_operations2Â   s
    
z.TestSubclassing.test_masked_binary_operations2c                 C   sz  t tdƒdgdgd  d�}tt|ƒƒ}t|ƒ}|d }tt|tƒƒ tt|tƒ ƒ tt|j	t
ƒƒ t|j	ji ƒ |d }tt|tƒƒ tt|tƒƒ tt|j	t
ƒƒ t|j	jd dkƒ |d7 }tt|tƒƒ tt|tƒƒ tt|j	t
ƒƒ t|j	jd dkƒ | g d¢¡ t|jg d¢ƒ |j g d	¢¡ t|jg d	¢ƒ t|d
did�}t|ƒ}tt|dƒƒ t|j|jƒ d S )Nra   r   r)   é   rc   r(   r/   )r)   r   r   r   r)   )r   r   r   r   r)   Únamer   )r   r   )r   r   r	   rl   rd   r   rH   r   r9   r<   r   r   r   Z	_set_maskÚ_maskr=   Úhasattr)r$   r   ZmyZymÚzrj   Úmxsubr   r   r   Útest_attributepropagationÊ   s4    z)TestSubclassing.test_attributepropagationc                 C   s
  t  d¡}g d¢}dd„ t||ƒD ƒ}t||d|id�}t|dd�}tt|tƒ ƒ tt|tƒƒ t|j	|ƒ t
|ƒ}tt|tƒ ƒ tt|tƒƒ t|j	|ƒ t|d	d�}tt|tƒƒ t|j|jƒ t|j	|j	ƒ t|ƒ}tt|tƒƒ t|j|jƒ t|j	|ƒ d S )
Nra   rh   c                 S   s   g | ]\}}||f‘qS r   r   )Ú.0ÚiÚjr   r   r   Ú
<listcomp>ï   ó    z=TestSubclassing.test_subclasspreservation.<locals>.<listcomp>rj   )r;   r   F)ZsubokT)r   r   Úzipr9   r	   r   rH   r   r   ru   r   r   r   )r$   r   ri   Zxinforj   rx   r   r   r   Útest_subclasspreservationë   s(    
z)TestSubclassing.test_subclasspreservationc                 C   sÄ  t  d¡}t|ƒ}t|g d¢d�}tt|d tƒƒ tt|d tƒƒ tt|dd… tƒƒ tt|d tƒƒ tt|d jtƒƒ t|d tu ƒ tt|d jtƒƒ tt|dd… jtƒƒ tt|jd jtƒƒ t|jd tu ƒ tt|jdd… j	tƒƒ t
t|jd|d ƒ t
t|jd|d ƒ t
t|jtddƒ|dd… ƒ |d |d< |dd… |dd…< t
t|jjd|d ƒ t
t|jjtddƒ|dd… ƒ |d |jd< |dd… |jdd…< d	S )
z,test that getter and setter go via baseclassra   ©TFTFFrc   r)   ©r)   .rs   r   ©r   .N)r   r   rR   r	   r   rH   r:   r   rB   Úbaser   rX   rO   Úslice)r$   r   ÚxcsubÚmxcsubr   r   r   Útest_subclass_items  s.    
 z#TestSubclassing.test_subclass_itemsc                 C   sj   t  d¡}t|ƒ}t|ƒ}tt|d jtƒƒ tt|d jtƒƒ tt|d tƒƒ tt|d tƒƒ d S )Nra   r‚   rƒ   r)   r   )r   r   rR   r	   r   rH   r:   )r$   r   r†   Zmxcsub_nomaskr   r   r   Útest_subclass_nomask_items+  s    
z*TestSubclassing.test_subclass_nomask_itemsc                 C   s\   t  d¡}t|g d¢d�}tt|ƒdƒ t|ƒ}t|g d¢d�}tt|ƒdtj› d�ƒ dS )zOtest that repr uses the name of the subclass
        and 'array' for np.ndarrayra   r�   rc   r	   Zmasked_z(data=[--, 1, --, 3, 4]N)r   r   r	   r   Úreprr   r1   )r$   r   rf   rj   rx   r   r   r   Útest_subclass_repr6  s    
ÿz"TestSubclassing.test_subclass_reprc                 C   sp   t  d¡}t|ƒ}t|g d¢d�}tt|ƒdƒ t|ƒ}tt|j	dt j
jjƒ t|g d¢d�}tt|ƒdƒ dS )z7test str with subclass that has overridden str, setitemra   r�   rc   z[-- 1 -- 3 4]r   z myprefix [-- 1 -- 3 4] mypostfixN)r   r   r   r	   r   ÚstrrR   r   rX   rO   ÚmaÚcoreZmasked_print_option)r$   r   rj   rx   r†   r‡   r   r   r   Útest_subclass_strA  s    

ÿz!TestSubclassing.test_subclass_strc                 C   sv   t dg d¢d�}t g d¢d�}t ||¡}td|jv ƒ t|jd dkƒ || }td|jv ƒ t|jd dkƒ d S )NÚtest)r)   é   é   rs   ra   é   )r:   )r   r)   r‘   r’   rs   ra   r   )r5   r   Úsubtractr   r6   )r$   Zarr1Zarr2Zdiff1Zdiff2r   r   r   Ú$test_pure_subclass_info_preservationO  s    z4TestSubclassing.test_pure_subclass_info_preservationN)r1   r2   r3   rg   rk   rm   ro   rq   rr   ry   r€   rˆ   r‰   r‹   r�   r•   r   r   r   r   r`   —   s   
!%r`   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚArrayNoInheritancez6Quantity-like class that does not inherit from ndarrayc                 C   s   || _ || _d S r   )Ú	magnitudeÚunits)r$   r:   r˜   r   r   r   rD   ^  s    zArrayNoInheritance.__init__c                 C   s   t | j|ƒS r   )r"   r—   )r$   Úattrr   r   r   Ú__getattr__b  s    zArrayNoInheritance.__getattr__N)r1   r2   r3   r8   rD   rš   r   r   r   r   r–   \  s   r–   c                  C   s  t jjg d¢g d¢d�} t| dƒ}t j |¡}t| j|jƒ t| j|jƒ g d¢| _t| j|jƒ t|jƒ t jj|dd�}t| j|jƒ t| j|jƒ g d¢| _tg d¢|jƒ t|j ƒ t jj|dd	�}t| j|jƒ t| jg d¢ƒ t|j ƒ t|j ƒ d S )
N)r)   r‘   r’   )TFTrc   Zmeters)TFFT)r   F)Z	keep_mask)	r   r�   r   r–   r   r:   r;   r   Z
sharedmask)Zdata_maskedZdata_masked_unitsZ	new_arrayr   r   r   Útest_array_no_inheritancef  s&    



r›   )!r8   Únumpyr   Znumpy.testingr   r   Znumpy.ma.testutilsr   Znumpy.ma.corer   r   r   r   r	   r
   r   r   r   r   r   r   r   rA   r   rl   r5   r9   rd   r?   rR   r`   r–   r›   r   r   r   r   Ú<module>   s    8+ F
