U
    O8c:                     @   s   d dl Zd dlZd dlmZmZmZ d dlmZm	Z	m
Z
mZmZmZ d dlmZ d dlm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 )    N)matrixasmatrixbmat)assert_assert_equalassert_almost_equalassert_array_equalassert_array_almost_equalassert_raises)matrix_power)matc                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestCtorc           
   	   C   s  t ddgddgg}t|}tt |j|k td}t||g||gg}t ddddgddddgddddgddddgg}tt |j|k tt |j|k t ddgdd	gg}tddddgdddd	gg}tt t||g|k t d}t|}	t|	jd
k d S )N            A,A;A,A            )r   r   )	nparrayr   r   allAr   arangeshape)
selfr   mABCDEZAEresultZvecZmvec r#   H/tmp/pip-unpacked-wheel-fd_gsd75/numpy/matrixlib/tests/test_defmatrix.py
test_basic   s$    



zTestCtor.test_basicc                 C   s   t ttd d S )Ninvalid)r
   
ValueErrorr   r   r#   r#   r$   test_exceptions#   s    zTestCtor.test_exceptionsc              	   C   s,  t ddgddgg}t ddgddgg}t ddddgddddgddddgddddgg}t ddddgddddgddddgddddgg}tt td	|k tt td	d
|id|k tttd	d
|id tt td	d
|id
|id|k td||d||dd}tt ||k d S )Nr   r   r   r   r   r   r   r   r   r   )ldict)gdict)r*   r+   zA,B;C,D)r   r   )r    r!   )r   r   r   r   r   r
   	TypeError)r   r   r   ZAresultZ	mixresultZb2r#   r#   r$   test_bmat_nondefault_str'   s(    





z!TestCtor.test_bmat_nondefault_strN)__name__
__module____qualname__r%   r)   r-   r#   r#   r#   r$   r      s   r   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 )TestPropertiesc                 C   s   t ddddgddddgddddgddddgg}t ddddg}t dd	dd
gj}d}t||jdd t||jdd t||  t|tj|dd t|tj|dd t|t| dS )zeTest whether matrix.sum(axis=1) preserves orientation.
        Fails in NumPy <= 0.9.6.2127.
        r   r   r   r   r   r      r   r         ZaxisN)r   Tr   sumr   r   )r   MZsum0Zsum1Zsumallr#   r#   r$   test_sum<   s    


zTestProperties.test_sumc                 C   s   t dddgdddgg}t| d t|dt dd	d
gg t|dt dgdgg tt|d ttj|ddt dd	d
gg ttj|ddt dgdgg t dddg}t| dk d S )Nr   r   r   r   r   r   i  r   
      x   r5   )r   r   prodr   r   r   xyr#   r#   r$   	test_prodO   s      zTestProperties.test_prodc                 C   s   t dddgdddgg}t| d t|dt dddgg t|dt dgdgg tt|d ttj|ddt dddgg ttj|ddt dgdgg d S 	Nr   r   r   r   r   r   r   r5   )r   r   maxr   r   r?   r#   r#   r$   test_max\   s     zTestProperties.test_maxc                 C   s   t dddgdddgg}t| d t|dt dddgg t|dt dgdgg tt|d ttj|ddt dddgg ttj|ddt dgdgg d S rB   )r   r   minr   rD   r#   r#   r$   test_minf   s     zTestProperties.test_minc                 C   sh   t dd}t| dk tt |dt ddgk tt |dt ddgk d S )Nr   )r   r   r   r   r   r   )r   r   reshaper   ptpr   r   rD   r#   r#   r$   test_ptpp   s    "zTestProperties.test_ptpc                 C   sT   t dd}|t j}t|jdd|jdd t|jdd|jdd d S )N	   )r   r   r   )Zddofr   )r   r   rH   viewr   r   var)r   r?   Zmxr#   r#   r$   test_varv   s    zTestProperties.test_varc                 C   s
  dd l m} tddgddgg}t|}tt|||j tt	tt
||jk tt	tt
||jk tt	||jk |d|  }t|}tt|||j tt	tt
||jk tt	tt
| |jk d S )Nr         ?       @      @      @y               @)numpy.linalglinalgr   r   r   r   allcloseinvIr   Z	transposer6   Hr   Zconj)r   rT   r   r   r   mBr#   r#   r$   r%   |   s    
   zTestProperties.test_basicc                 C   s@   t tddd}t ddgddgdd	gg}t|j| d S )
Nr   r   r   g:gn)t?g#qg#q?gn)t?g6Bq)r   r   r   rH   r   rW   )r   r?   Zxpinvr#   r#   r$   	test_pinv   s    zTestProperties.test_pinvc                 C   sr  t ddd}t|}t|d }tt ||d k tt |t|d k tt |t|d k  tt ||k  tt ||k tt ||k tt ||k   tt ||k   tt ||k tt ||k tt ||k  tt ||k tt ||k  tt ||k tt t|dk  tt t|dk d S )Nd   r:   皙?r   )r   r   rH   r   r   r   anyabs)r   r   r   rY   r#   r#   r$   test_comparisons   s&    zTestProperties.test_comparisonsc                 C   s:   t ddd}t|}d|d< t|d |d k d S )Nr[   r:   ir   r   )r   r   rH   r   r   )r   r   r   r#   r#   r$   test_asmatrix   s    zTestProperties.test_asmatrixc                 C   s@   t ddgddgg}t| t dk t| t dk d S )Nr   r   r         ?)r   r   r7   meanr   r   r#   r#   r$   test_noaxis   s    zTestProperties.test_noaxisc                 C   s(   t ddgddgg}tt|dk d S )Nr   r   z matrix([[1, 0],
        [0, 1]]))r   r   reprrd   r#   r#   r$   	test_repr   s    zTestProperties.test_reprc                 C   s*   t d}t dgdgdgg}t|| d S )NzTrue; True; FalseTF)r   r   )r   r   r   r#   r#   r$   test_make_bool_matrix_from_str   s    z-TestProperties.test_make_bool_matrix_from_strN)r.   r/   r0   r9   rA   rE   rG   rJ   rN   r%   rZ   r_   ra   re   rg   rh   r#   r#   r#   r$   r1   ;   s   

r1   c                   @   s   e Zd Zdd ZdS )TestCastingc                 C   s   t ddd}t|}| }t dt jd }|| }t|jj	t jk tt 
||k tt 
||d k | }t dt j}|| }t|jj	t jk tt 
||k d S )Nr[   r:   )r:   r:   r\   )r   r   rH   r   copyZonesZfloat64r   dtypetyper   Z
complex128)r   r   r   rY   OZmCr#   r#   r$   r%      s    zTestCasting.test_basicNr.   r/   r0   r%   r#   r#   r#   r$   ri      s   ri   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestAlgebrac                 C   s&  dd l m} tddgddgg}t|}td}tdD ]&}tt|| j	| t
||}q<||}td}tdD ](}tt||  j	| t
||}qtt|| j	t
|| tt|| j	||  ttd| j	d|  t|}|d9 }tt|j	d|  d S )	Nr   rO   rP   rQ   rR   r   r   r   )rS   rT   r   r   r   identityranger   rU   r   dotrV   )r   rT   r   r   r   iZAinvZmA2r#   r#   r$   r%      s$    


zTestAlgebra.test_basicc                 C   st   t d}| }|dC }| }|dC }| }|dC }t||d  t|t|| tt||td dS )z<Test raising a matrix to an integer power works as expected.z1. 2.; 3. 4.r   N)r   rj   r	   r   rr   eye)r   mm2miZm4r#   r#   r$   test_pow   s    zTestAlgebra.test_powc                 C   sD   t ddgddgg}tjtjfD ]}|d}t|d ||  q d S Nr   r   r   r   )r   r   Zint8Zuint8r	   )r   rv   Zscalar_tZtwor#   r#   r$   test_scalar_type_pow   s    z TestAlgebra.test_scalar_type_powc              	   C   sR   t ddgddgg}tt d|  W 5 Q R X tt |t   W 5 Q R X dS )z:Check that 'not implemented' operations produce a failure.rO   rP   rQ   rR   N)r   r
   r,   objectrd   r#   r#   r$   test_notimplemented   s    

zTestAlgebra.test_notimplementedN)r.   r/   r0   r%   ry   r{   r}   r#   r#   r#   r$   ro      s   ro   c                   @   s   e Zd Zdd ZdS )TestMatrixReturnc           
   &   C   s^  t dgdd}dddgfdddtdgd	}d
dddddddddddddddddddddd d!d"d#d$d%d
d&d'd(d)d*d+d,d-d.g&}t|D ]x}|d/s||krqt||}t|tjj	r|
d |d ||kr|| }nd0}|| }tt|t kd1|  qtt|jt k tt|jt k t d2g \}}	tt|tjk tt|	tjk d S )3NrO   Zf8)rk   )Zintc)        rO   r   )r   r`   )astypeZclipcompressrepeatrH   Zswapaxesrr   ZargminchoosedumpdumpsfillZgetfieldZgetAZgetA1itemnonzeroputZputmaskresizeZsearchsortedZsetflagsZsetfieldsort	partitionZargpartitionZtakeZtofiletolisttostringtobytesr   r]   r7   ZargmaxrF   rC   rc   rM   rI   r=   ZstdctypesZitemset_r#   z%sr   )r   r   r   dir
startswithgetattr
isinstancecollectionsabcCallabler   r   r   rl   realimagr   ndarray)
r   aZ
methodargsZexcluded_methodsattribfargsbcdr#   r#   r$   test_instance_methods  s    

                               	



z&TestMatrixReturn.test_instance_methodsN)r.   r/   r0   r   r#   r#   r#   r$   r~     s   r~   c                   @   s   e Zd Zdd ZdS )TestIndexingc                 C   sf   t tdt}tdt}dddg|d d df< |dk|d d df< t|ddgddgddgg d S )	Nr   r   )r   r   g?g?g333333?r   rb   r   r   r   zerosfloatr   r>   r#   r#   r$   r%   9  s
    zTestIndexing.test_basicNrn   r#   r#   r#   r$   r   8  s   r   c                   @   sh   e Zd Zeddgddgg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 )TestNewScalarIndexingr   r   r   r   c                 C   s   | j }|d }t|jd d S )Nr   r   )r   r   ndimr   r   r?   r#   r#   r$   test_dimesionsD  s    z$TestNewScalarIndexing.test_dimesionsc                 C   s*   | j }t||g}t|jdddg d S )Nr   )r   r   r   r   r   r   r#   r#   r$   test_array_from_matrix_listI  s    z1TestNewScalarIndexing.test_array_from_matrix_listc                 C   s$   | j }t| ddgddgg d S rz   )r   r   r   r   r   r#   r#   r$   test_array_to_listN  s    z(TestNewScalarIndexing.test_array_to_listc                 C   s   | j }|ddddgf }tt|t t|tdddgg |ddg }tt|t t|tddgddgg |dgdggddgddggf }tt|t t|tddgddgg d S )Nr   r   r   r   r   )r   r   r   r   r   r   r#   r#   r$   test_fancy_indexingR  s     z)TestNewScalarIndexing.test_fancy_indexingc                 C   s   t dddgdddgg}t|d d t dddgg t|d d jd t|d jd t|d d df jd	 t d}t|d
 d t|d d t|d d df j|j d S )Nr   r   r   r   r   r   r   )r   r   r   r   r`   )r   r   r   rD   r#   r#   r$   test_matrix_element^  s    z)TestNewScalarIndexing.test_matrix_elementc                 C   s*   t tdt}t|d |d d  d S )Nr   r`   r   r   rD   r#   r#   r$   test_scalar_indexingj  s    z*TestNewScalarIndexing.test_scalar_indexingc                 C   s   t td}t|dd d f ddgg t|dd d f ddgg t|d d df dgdgg t|d d df dgdgg d S )Nr   r   r   )r   r   ru   r   rD   r#   r#   r$   test_row_column_indexingn  s
    z.TestNewScalarIndexing.test_row_column_indexingc                 C   sv   t d}d|_t|}t|d d t ddgf |d d df  t|t dddgd d f |dd d f  d S )Nr   r   TFr   )r   r   r   r   r   r   r   r   r?   r#   r#   r$   test_boolean_indexingu  s
    
,z+TestNewScalarIndexing.test_boolean_indexingc                 C   sv   t d}d|_t|}t|d d ddgf |d d d d df  t|dddgd d f |d d dd d f  d S )Nr   r   r   r   rt   r   )r   r   r   r   r   r   r#   r#   r$   test_list_indexing|  s
    
,z(TestNewScalarIndexing.test_list_indexingN)r.   r/   r0   r   r   r   r   r   r   r   r   r   r   r   r#   r#   r#   r$   r   A  s   r   c                   @   s   e Zd Zdd Zdd ZdS )	TestPowerc                 C   sP   t ddgddgg}ttt|dt jk t|}ttt|dtk d S Nr   r   r   )r   r   r   rl   r   r   r   r   r   r#   r#   r$   test_returntype  s    zTestPower.test_returntypec                 C   s,   t tddgddggdddgddgg d S r   )r   r   r(   r#   r#   r$   	test_list  s    zTestPower.test_listN)r.   r/   r0   r   r   r#   r#   r#   r$   r     s   r   c                   @   sv   e Zd ZedgdggZedgdgg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 )	TestShaper   r   c                 C   s    t | jjd t | jjd d S )Nr   )r   r   r   rv   r(   r#   r#   r$   
test_shape  s    zTestShape.test_shapec                 C   s,   t t| jjd t t| jjd d S )Nr   )r   r   ravelr   r   rv   r(   r#   r#   r$   test_numpy_ravel  s    zTestShape.test_numpy_ravelc                 C   s(   t | j jd t | j jd d S Nr   )r   r   )r   r   r   r   rv   r(   r#   r#   r$   test_member_ravel  s    zTestShape.test_member_ravelc                 C   s(   t | j jd t | j jd d S r   )r   r   flattenr   rv   r(   r#   r#   r$   test_member_flatten  s    zTestShape.test_member_flattenc                 C   s.  t dddgdddgg}tt |ddddddg tt j|ddddddddg tt |jddddddg tt j|jd	dddddddg tdddgdddgg}tt |ddddddg tt j|ddddddddg tt |jddddddg tt j|jd	dddddddg d S 
Nr   r   r   r   r   r   F)orderr   )r   r   r   r   r6   r   rD   r#   r#   r$   test_numpy_ravel_order  s     " z TestShape.test_numpy_ravel_orderc                 C   s   t dddgdddgg}t| ddddddgg t|jddddddddgg t|j ddddddgg t|jjd	dddddddgg d S r   )r   r   r   r6   rD   r#   r#   r$   test_matrix_ravel_order  s
     z!TestShape.test_matrix_ravel_orderc                 C   s6   t t| j| j  t t| j| j   d S N)r   r   may_share_memoryr   r   r   r(   r#   r#   r$   test_array_memory_sharing  s    z#TestShape.test_array_memory_sharingc                 C   s6   t t| j| j  t t| j| j   d S r   )r   r   r   rv   r   r   r(   r#   r#   r$   test_matrix_memory_sharing  s    z$TestShape.test_matrix_memory_sharingc                 C   sH   t ddt j}t j|dd}t|jd tt	|t j  d S )Nr:   )r   r   r   r5   r   )
r   r   rH   rL   r   Zexpand_dimsr   r   r   r   )r   r   expandedr#   r#   r$   test_expand_dims_matrix  s    z!TestShape.test_expand_dims_matrixN)r.   r/   r0   r   r   r   r   rv   r   r   r   r   r   r   r   r   r   r#   r#   r#   r$   r     s   r   )collections.abcr   Znumpyr   r   r   r   Znumpy.testingr   r   r   r   r	   r
   rS   r   Znumpy.matrixlibr   r   r1   ri   ro   r~   r   r   r   r   r#   r#   r#   r$   <module>   s    / ;*	C