o
    Ö­j^R  ã                   @   sž  d Z ddlmZ ddlmZ ddlZddlZddlmZm	Z	 ddl
mZmZ ddlZddlmZ ddlm  m  mZ ddlmZ ddlmZmZ G d	d
„ d
ƒZG dd„ dƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z ej!j"dd„ ƒZ#dd„ Z$dd„ Z%ej&ej'ej(ej)fZ*ej+ej,ej-fZ.ej/ej0ej1fZ2e.e2 Z3e*e3 Z4ej! 5de4¡dd„ ƒZ6d d!„ Z7d"d#„ Z8d$d%„ Z9d&d'„ Z:d(d)„ Z;d*d+„ Z<ej!j=ed,d-�d.d/„ ƒZ>dS )0z7Test functions for the sparse.linalg._interface module
é    )Úpartial)ÚproductN)ÚraisesÚwarns)Úassert_Úassert_equal)Úmatrix)Úassert_deallocatedÚIS_PYPYc                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestLinearOperatorc                 C   sR   t  g d¢g d¢g¡| _t  ddgddgddgg¡| _t  ddgddgg¡| _d S )	N©é   é   é   ©é   é   é   r   r   r   r   r   r   )ÚnpÚarrayÚAÚBÚC©Úself© r   úe/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/sparse/linalg/tests/test_interface.pyÚsetup_method   s   
ÿ
þ
ÿzTestLinearOperator.setup_methodc              
      sÞ  dd„ }|| j ƒD �]_}tjdi |¤Ž‰ tˆ jdkƒ tˆ  t g d¢¡¡ddgƒ tˆ  t dgdgd	gg¡¡dgdggƒ tˆ t g d¢¡ ddgƒ tˆ t dgdgd	gg¡ dgdggƒ tˆ  	t g d¢¡¡ddgƒ tˆ  	t dgdgd	gg¡¡dgdggƒ tˆ  t
dgdgd	ggƒ¡dgdggƒ tˆ t
dgdgd	ggƒ dgdggƒ tˆ  	t
dgdgd	ggƒ¡dgdggƒ tdˆ  g d
¢ ddgƒ tdˆ   ddg¡g d¢ƒ tdˆ  j ddg¡g d¢ƒ tdˆ   ¡  ddg¡g d¢ƒ tdˆ  dgdgdgg dgdggƒ tdˆ   dgdgdgg¡dgdggƒ tˆ d g d
¢ ddgƒ tˆ d dgdgdgg dgdggƒ tdˆ  g d
¢ ddgƒ tˆ ˆ  g d
¢ ddgƒ tˆ ˆ   ddg¡g d¢ƒ tˆ ˆ  j ddg¡g d¢ƒ tˆ ˆ   ¡  ddg¡g d¢ƒ tˆ ˆ  dgdgdgg dgdggƒ tˆ ˆ   dgdgdgg¡dgdggƒ tˆ  g d
¢ ddgƒ tˆ  dgdgdgg dgdggƒ tˆ ˆ  g d
¢ ddgƒ tˆ ˆ  dgdgdgg dgdggƒ t ddgd	dgg¡}tdˆ   |¡t 	d| j  j|¡ƒ tˆ d  |¡t 	| j d j|¡ƒ tdˆ   |¡t 	d| j  j ¡ |¡ƒ tˆ d  |¡t 	| j d j ¡ |¡ƒ tˆ ˆ   |¡t 	| j | j  j|¡ƒ tˆ dˆ    |¡t 	| j d| j   j ¡ |¡ƒ tˆ   |¡t 	| j  j|¡ƒ tˆ ˆ   |¡t 	| j | j  j|¡ƒ tdˆ   d| ¡t 	d| j  j ¡ d| ¡ƒ ˆ ˆ  }tt|jƒdk�oÆ|jd ˆ u �oÆ|jd ˆ u ƒ dˆ  }tt|jƒdk�oã|jd ˆ u �oã|jd dkƒ ttˆ  g d¢¡tjƒƒ ttˆ  t dgdgd	gg¡¡tjƒƒ ttˆ t g d¢¡ tjƒƒ ttˆ t dgdgd	gg¡ tjƒƒ ttˆ  	t g d¢¡¡tjƒƒ ttˆ  	t dgdgd	gg¡¡tjƒƒ ttˆ  t
dgdgd	ggƒ¡tjƒƒ ttˆ t
dgdgd	ggƒ tjƒƒ ttˆ  	t
dgdgd	ggƒ¡tjƒƒ ttdˆ  tjƒƒ ttdˆ  tjƒƒ ttˆ ˆ  tjƒƒ ttˆ  tjƒƒ ttˆ ˆ  tjƒƒ ttˆ d tjƒƒ ttˆ d tjƒƒ tˆ d	 d	 jd ˆ u ƒ ˆ t g d¢¡ }ˆ d	 ‰ˆ d }tˆ t g d¢¡ |ƒ tdˆ  jtjkƒ d}tt|d�� ˆ t ddg¡  W d   ƒ n	1 �sw   Y  ttˆ jt ddg¡ƒ ttˆ jt g d¢¡ƒ ttˆ jt dgdgg¡ƒ ttˆ jt dgdgd	gdgg¡ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ q	t|| j ƒ|| jƒƒD ]â\}}	tjdi |¤Ž‰ tjdi |	¤Ž‰| j  	| j¡}
t ddgd	dgg¡}tˆ ˆ  |¡t 	|
j|¡ƒ tdˆ  ˆ  |¡t 	d|
 j ¡ |¡ƒ tˆ ˆ ddg ddgƒ tˆ ˆ dgdgg dgdggƒ tˆ ˆ  dgdgg¡dgdggƒ tˆ ˆ  ddg¡ddgƒ tˆ ˆ j ddg¡ddgƒ tˆ ˆ  ¡  ddg¡ddgƒ ttˆ ˆ tjƒƒ tt‡ ‡fd d„ƒ tt‡ fd!d„ƒ ˆ ˆ }tt|jƒdk�oT|jd ˆ u �oT|jd ˆu ƒ �qu|| jƒD ]�}tjdi |¤Ž}t ddgd	dgg¡}t| |¡t 	| jj|¡ƒ t|d  |¡t 	t 	| j| j¡j|¡ƒ t|d ddg d"d#gƒ t|d  ddg¡d$dgƒ t|d j ddg¡d$dgƒ t|d  ¡  ddg¡d$dgƒ t|d  dgdgg¡d"gd#ggƒ tt|d tjƒƒ �q]d S )%Nc                    sP   ˆ j ‡ fdd„‡ fdd„dœˆ j ‡ fdd„‡ fdd„‡ fdd„‡ fdd„d	œgS )
Nc                    s   t  ˆ | ¡ ˆ jd ¡S ©Nr   )r   ÚdotÚreshapeÚshape©Úx©r   r   r   Ú<lambda>!   s    zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>c                    s   t  ˆ j ¡ | ¡ ˆ jd ¡S ©Nr   )r   r    ÚTÚconjr!   r"   r#   r%   r   r   r&   "   s    ÿ)r"   ÚmatvecÚrmatvecc                    ó   t  ˆ | ¡S ©N©r   r    r#   r%   r   r   r&   '   ó    c                    ó   t  ˆ j ¡ | ¡S r-   ©r   r    r(   r)   r#   r%   r   r   r&   (   ó    c                    r0   r-   r1   r#   r%   r   r   r&   )   r2   c                    r,   r-   r.   r#   r%   r   r   r&   *   r/   ©r"   r*   r+   ÚrmatmatÚmatmat)r"   r%   r   r%   r   Úget_matvecs   s   

ý



ûúz3TestLinearOperator.test_matvec.<locals>.get_matvecsr   r   é   é    r   r   r   )r   r   r   é   é   )é
   r7   é   ù               @y              (@y              >@iúÿÿÿiñÿÿÿr   r   r   z.Can only divide a linear operator by a scalar.©Úmatch©r   r   r   r   c                      s   ˆ ˆ  S r-   r   r   r%   r   r   r&   �   ó    z0TestLinearOperator.test_matvec.<locals>.<lambda>c                      ó   ˆ d S ©Nr   r   r   r%   r   r   r&   �   rA   é2   éq   éG   é\   c                      s   ˆ ˆ S r-   r   r   ©r   r   r   r   r&   ¨   rA   c                      rB   rC   r   r   r%   r   r   r&   ©   rA   é   é%   é   ) r   Ú	interfaceÚLinearOperatorr   Úargsr   r*   r   r   r    r   r+   ÚHÚadjointr5   r4   r(   r)   ÚlenÚ
isinstanceÚndarrayÚ_ScaledLinearOperatorÚ_SumLinearOperatorÚdtypeÚ
complex128Úassert_raisesÚ
ValueErrorr   r   Ú_ProductLinearOperatorr   Ú_PowerLinearOperator)r   r6   ÚmatvecsÚXÚzÚresultr   ÚmsgÚmatvecsAÚmatvecsBÚAtimesBÚmatvecsCr   rH   r   Útest_matvec   sü   *(*(&( &(& &($&$$ÿÿÿÿ ÿÿ22(& (&$&ÿ$
ÿÿ"$ 6ÿ $òzTestLinearOperator.test_matvecc                    s¦  ˆ j j‡ fdd„‡ fdd„‡ fdd„‡ fdd„dœ}tjdi |¤Ž}t g d¢g d¢g d	¢g¡}|d
 }tt ||¡|| ƒ tt || 	dd¡¡|| 	dd¡ ƒ tt ||¡|| ƒ tt ||j
¡||j
 ƒ tt || ¡ ¡|| ¡  ƒ tt | 	dd¡|j
¡| 	dd¡|j
 ƒ tt | 	dd¡| ¡ ¡| 	dd¡| ¡  ƒ tt ||j
¡||j
 ƒ tt || ¡ ¡|| ¡  ƒ tttj|dƒ tttjd|ƒ d S )Nc                    s   t  ˆ j| ¡ ˆ jjd ¡S r   )r   r    r   r!   r"   r#   r   r   r   r&   À   s    z0TestLinearOperator.test_matmul.<locals>.<lambda>c                    s"   t  ˆ jj ¡ | ¡ ˆ jjd ¡S r'   )r   r    r   r(   r)   r!   r"   r#   r   r   r   r&   Á   s    ÿc                    s   t  ˆ jj ¡ | ¡S r-   )r   r    r   r(   r)   r#   r   r   r   r&   Ã   s    c                    s   t  ˆ j| ¡S r-   )r   r    r   r#   r   r   r   r&   Ä   s    r3   )y      ð?      ð?r   r   r   )é   é   é	   r   éÿÿÿÿr   r   r   )r   r"   rL   rM   r   r   r   ÚoperatorÚmatmulr!   rO   rP   rX   rY   )r   ÚDr   r   Úbr   r   r   Útest_matmul¾   s2   



û
þ&*ÿzTestLinearOperator.test_matmulN)Ú__name__Ú
__module__Ú__qualname__r   re   rn   r   r   r   r   r      s
    	 "r   c                   @   r   )ÚTestAsLinearOperatorc                 C   sb  g | _ dd„ }t g d¢g d¢g¡}|  j ||tjƒ7  _ |  j ||tjƒ7  _ |  j ||tjƒ7  _ |  j dd„ ||jtjƒD ƒ7  _ |  j dd„ ||jtjƒD ƒ7  _ |  j dd„ ||jtjƒD ƒ7  _ t g d	¢g d
¢g¡}|  j ||tjƒ7  _ |  j dd„ ||jtjƒD ƒ7  _ |  j dd„ ||jtjƒD ƒ7  _ |  j dd„ ||jtjƒD ƒ7  _ d S )Nc                    sò   g }|  tˆ|d�ˆf¡ |  tjˆ|d�ˆf¡ |  tjˆ|d�ˆf¡ ‡fdd„‰ ‡fdd„‰G ‡ ‡fdd„dtjƒ}G ‡fdd	„d	|ƒ}G ‡ ‡fd
d„d|ƒ}G ‡fdd„d|ƒ}|  ||ƒˆf¡ |  ||ƒˆf¡ |  ||ƒˆf¡ |S )N©rV   c                    s(   ˆ   | ¡}t| jƒdkr| dd¡}|S )Nr   ri   r   )r    rQ   r"   r!   )r$   rV   Úy©Úoriginalr   r   Úmvæ   s   
zATestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.mvc                    s   ˆ j  ¡  | ¡S r-   ©r(   r)   r    )r$   rV   ru   r   r   Úrmvì   ó   zBTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.rmvc                       s(   e Zd ZdZ‡fdd„Z‡ fdd„ZdS )zJTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.BaseMatliker   c                    s   t  |¡| _ˆ j| _d S r-   )r   rV   r"   )r   rV   ru   r   r   Ú__init__ò   s   zSTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.BaseMatlike.__init__c                    ó   ˆ || j ƒS r-   rs   ©r   r$   )rw   r   r   Ú_matvecö   ó   zRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.BaseMatlike._matvecN)ro   rp   rq   rN   r{   r~   r   )rw   rv   r   r   ÚBaseMatlikeï   s    r€   c                       s   e Zd ZdZ‡ fdd„ZdS )zITestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatvecr   c                    r|   r-   rs   r}   ©ry   r   r   Ú_rmatvecü   r   zRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatvec._rmatvecN)ro   rp   rq   rN   r‚   r   r�   r   r   Ú
HasRmatvecù   s    rƒ   c                       s   e Zd ZdZ‡ ‡fdd„ZdS )zITestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasAdjointr   c                    sD   | j d | j d f}tˆ| jd�}tˆ | jd�}tj||| j|d�S )Nr   r   rs   )r*   r+   rV   r"   )r"   r   rV   rL   rM   )r   r"   r*   r+   ©rw   ry   r   r   Ú_adjoint  s   ýzRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasAdjoint._adjointN)ro   rp   rq   rN   r…   r   r„   r   r   Ú
HasAdjointÿ   s    r†   c                       s$   e Zd Z‡ fdd„Z‡ fdd„ZdS )zITestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatmatc                    s
   ˆ   |¡S r-   )r    r}   ru   r   r   Ú_matmat  s   
zQTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatmat._matmatc                    s   ˆ j  ¡  |¡S r-   rx   r}   ru   r   r   Ú_rmatmat  rz   zRTestAsLinearOperator.setup_method.<locals>.make_cases.<locals>.HasRmatmat._rmatmatN)ro   rp   rq   r‡   rˆ   r   ru   r   r   Ú
HasRmatmat  ó    r‰   )Úappendr   r   r   ÚsparseÚ	csr_arrayrL   rM   )rv   rV   Úcasesr€   rƒ   r†   r‰   r   )rw   rv   ry   r   Ú
make_casesÝ   s   
z5TestAsLinearOperator.setup_method.<locals>.make_casesr   r   c                 S   ó"   g | ]\}}t  |¡j|jf‘qS r   ©rL   Úaslinearoperatorr(   ©Ú.0ÚMr   r   r   r   Ú
<listcomp>  ó    ÿz5TestAsLinearOperator.setup_method.<locals>.<listcomp>c                 S   ó&   g | ]\}}t  |¡j|j ¡ f‘qS r   ©rL   r’   rO   r(   r)   r“   r   r   r   r–     ó    ÿc                 S   ó(   g | ]\}}t  |¡ ¡ |j ¡ f‘qS r   ©rL   r’   rP   r(   r)   r“   r   r   r   r–     ó    ÿ©r   r=   ù              @)y              @y              @r   c                 S   r�   r   r‘   r“   r   r   r   r–   $  r—   c                 S   r˜   r   r™   r“   r   r   r   r–   &  rš   c                 S   r›   r   rœ   r“   r   r   r   r–   (  r�   )rŽ   r   r   Úint32Úfloat32Úfloat64r(   rW   )r   r�   rv   r   r   r   r   Ú   s4   :
ÿ
ÿ
ÿ
ÿ
ÿÿz!TestAsLinearOperator.setup_methodc           
      C   sp  | j D �]1\}}t |¡}|j\}}t g d¢¡t dgdgdgg¡g}t ddg¡t dgdgg¡g}|jtjkr`|t g d¢¡t dgdgdgg¡g7 }|t ddg¡t dgdgg¡g7 }t ddgdd	gdd
gg¡}|D ]}t| 	|¡| 
|¡ƒ t|| | 
|¡ƒ qpt| |¡| 
|¡ƒ t|| | 
|¡ƒ |D ]<}	t| |	¡|j ¡  
|	¡ƒ t|j 	|	¡|j 
|	¡ƒ t|j 	|	¡|j ¡  
|	¡ƒ t| ¡  	|	¡|j ¡  
|	¡ƒ qŸ|D ]B}	|	jdk ræqÞt| |	¡|j ¡  
|	¡ƒ t|j |	¡|j 
|	¡ƒ t|j |	¡|j ¡  
|	¡ƒ t| ¡  |	¡|j ¡  
|	¡ƒ qÞt|dƒ�r.t|j|jƒ tt|dƒƒ qd S )Nr   r   r   r   rž   r=   rŸ   r   r   r   rV   rN   )rŽ   rL   r’   r"   r   r   rV   rW   r   r*   r    r5   r+   r(   r)   rO   rP   Úndimr4   Úhasattrr   )
r   r•   ÚA_arrayr   ÚNÚxsÚysÚx2r$   rt   r   r   r   Ú
test_basic+  sD   

ÿ ÿ$"
"ÙzTestAsLinearOperator.test_basicc                 C   sª   | j D ]O\}}t |¡}|j\}}t g d¢¡}t dgdgdgg¡}t ddgddgddgg¡}t| |¡| |¡ƒ t| |¡| |¡ƒ t| |¡| |¡ƒ qd S )Nr   r   r   r   r   r   r   )rŽ   rL   r’   r"   r   r   r   r    )r   r•   r¥   r   r¦   Úx0Úx1r©   r   r   r   Útest_dotV  s   

özTestAsLinearOperator.test_dotN)ro   rp   rq   r   rª   r­   r   r   r   r   rr   Ù   s    Q+rr   c                  C   s,   t jddd„ d�} t| ƒ}td|v|ƒ d S )N)r   r   c                 S   s   dS r'   r   r#   r   r   r   r&   f  ó    ztest_repr.<locals>.<lambda>©r"   r*   zunspecified dtype)rL   rM   Úreprr   )r   Úrepr_Ar   r   r   Ú	test_repre  s   r²   c                  C   s^   t  d¡} t| g d¢ g d¢ƒ t|  t d¡ dd¡¡ ¡ t d¡ƒ tt	| j
g d¢ƒ d S )N©r   r   r   rh   r   r@   )rL   ÚIdentityOperatorr   r    r   Úaranger!   ÚravelrX   rY   r*   )Úidentr   r   r   Útest_identityk  s   
(r¸   c               
   C   s–   t  t d¡ dd¡¡} dd„ }t jd|d�}| || | | | | j|  ¡ | |  || | d g	}|D ]}tt	|dƒƒ tt	|dƒƒ tt	|d	ƒƒ q1d S )
Né   r   c                 S   s,   t  | ¡} t| jdkp| jdkƒ t  d¡S )N)r   )r   r   r   )r   Úasarrayr   r"   Úonesr#   r   r   r   Úalways_four_onesv  s   

z)test_attributes.<locals>.always_four_ones)r   r   r¯   rV   r"   r~   )
rL   r’   r   rµ   r!   rM   rO   rP   r   r¤   )r   r¼   r   ÚopsÚopr   r   r   Útest_attributess  s   0ýr¿   c                 C   s
   t  d¡S )z> Needed for test_pickle as local functions are not pickleable r   )r   Úzerosr#   r   r   r   r*   ƒ  s   
r*   c                  C   sf   dd l } t| jd ƒD ]%}t dt¡}| j||d�}|  |¡}|jD ]}t	t
||ƒt
||ƒƒ q"qd S )Nr   r   r³   )Úprotocol)ÚpickleÚrangeÚHIGHEST_PROTOCOLrL   rM   r*   ÚdumpsÚloadsÚ__dict__r   Úgetattr)rÂ   rÁ   r   Úsr   Úkr   r   r   Útest_pickle‡  s   

ÿûrË   c                  C   sÎ   G dd„ dt jƒ} ttdd�� tt| ƒ W d   ƒ n1 sw   Y  G dd„ dt jƒ}|dƒ}t| g d¢¡g d¢ƒ tt|j	g d	¢ƒ G d
d„ dt jƒ}|t
j dd¡ƒ}t| t
j d¡¡jdƒ d S )Nc                   @   s   e Zd ZdS )ztest_inheritance.<locals>.EmptyN)ro   rp   rq   r   r   r   r   ÚEmpty•  s    rÌ   zshould implement at leastr>   c                       ó$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )z"test_inheritance.<locals>.Identityc                    s   t ƒ jd ||fd� d S )N)rV   r"   )Úsuperr{   )r   Ún©Ú	__class__r   r   r{   œ  s   z+test_inheritance.<locals>.Identity.__init__c                 S   s   |S r-   r   r}   r   r   r   r~   Ÿ  s   z*test_inheritance.<locals>.Identity._matvec)ro   rp   rq   r{   r~   Ú__classcell__r   r   rÐ   r   ÚIdentity›  rŠ   rÓ   r   r   r   c                       rÍ   )z$test_inheritance.<locals>.MatmatOnlyc                    ó   t ƒ  |j|j¡ || _d S r-   ©rÎ   r{   rV   r"   r   ©r   r   rÐ   r   r   r{   §  ó   
z-test_inheritance.<locals>.MatmatOnly.__init__c                 S   s   | j  |¡S r-   )r   r    r}   r   r   r   r‡   «  r   z,test_inheritance.<locals>.MatmatOnly._matmat)ro   rp   rq   r{   r‡   rÒ   r   r   rÐ   r   Ú
MatmatOnly¦  s    rØ   r   )r   )rL   rM   r   ÚRuntimeWarningrX   Ú	TypeErrorr   r*   ÚNotImplementedErrorr+   r   ÚrandomÚrandnr"   )rÌ   rÓ   Úid3rØ   Úmmr   r   r   Útest_inheritance“  s   ÿrà   c                  C   sr   t j dd¡dt j dd¡  } t j dd¡}t | ¡}t |¡}|| }|| }t|jt jƒ t|jt jƒ d S )Nr   ù              ð?)	r   rÜ   ÚrandrL   r’   r   rV   r¢   rW   )Úmat_complexÚmat_realÚcomplex_operatorÚreal_operatorÚsum_complexÚsum_realr   r   r   Útest_dtypes_of_operator_sum±  s    

ré   c                     s2   dg‰ ‡ fdd„} t jd| d� tˆ d dƒ d S )Nr   c                    s   ˆ d  d7  < | S ©Nr   r   r   ©Úv©Ú
call_countr   r   r*   Ã  s   z#test_no_double_init.<locals>.matvec©r   r   ©r*   r   )rL   rM   r   rð   r   rí   r   Útest_no_double_initÀ  s   rñ   Ú
test_dtypec                    s@   t jd| d�‰ ‡ fdd„}tjd|d�}|jt  | ¡ksJ ‚d S )Nr   rs   c                    s   t  ˆ | d  | d g¡S rê   ©r   r   rë   ©Úscalarr   r   rw   ×  ó   z/test_determine_lo_dtype_from_matvec.<locals>.mvrï   rð   )r   r   rL   rM   rV   )rò   rw   Úlor   rô   r   Ú#test_determine_lo_dtype_from_matvecÓ  s   rø   c                  C   s(   dd„ } t jd| d�}|jtv sJ ‚d S )Nc                 S   s   t  d| d  | d g¡S )Né€   r   r   ró   rë   r   r   r   rw   à  rö   z+test_determine_lo_dtype_for_int.<locals>.mvrï   rð   )rL   rM   rV   Ú
INT_DTYPES)rw   r÷   r   r   r   Útest_determine_lo_dtype_for_intÝ  s   rû   c                  C   sŒ   t  dgg¡} t | ¡}d| }d|  }t  dg¡}t| |¡| |¡ƒ t|j |¡|j ¡  |¡ƒ t| 	¡  |¡|j ¡  |¡ƒ d S ©Nrá   r   )
r   r   rL   r’   r   r    rO   r(   r)   rP   ©r]   r   r   ÚYrì   r   r   r   Útest_adjoint_conjugateæ  s   
$rÿ   c                  C   s(   t  dgg¡} t | ¡}t|jdƒ d S )Nr   r   )r   r   rL   r’   r   r£   )r]   r   r   r   r   Ú	test_ndimó  s   
r   c                  C   sh   t  dgg¡} t | ¡}d| }d|  }t  dg¡}t| |¡| |¡ƒ t|j |¡|j |¡ƒ d S rü   )r   r   rL   r’   r   r    r(   rý   r   r   r   Útest_transpose_noconjugateø  s   
r  c                  C   s0  G dd„ dt jƒ} | t ddgddgg¡ƒ}t ddg¡}t ddgd	d
gg¡}| dd¡}t ddgddgg¡}t|| || ƒ t|j| |j| ƒ t|j| |j| ƒ t|| || ƒ t|j| |j| ƒ t|j| |j| ƒ t|| || ƒ t|j| |j| ƒ t|j| |j| ƒ d S )Nc                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )z/test_transpose_multiplication.<locals>.MyMatrixc                    rÔ   r-   rÕ   rÖ   rÐ   r   r   r{     r×   z8test_transpose_multiplication.<locals>.MyMatrix.__init__c                 S   s
   | j | S r-   r%   ©r   Úotherr   r   r   r‡   	  s   
 z7test_transpose_multiplication.<locals>.MyMatrix._matmatc                 S   s   | j j| S r-   )r   r(   r  r   r   r   rˆ   
  r/   z8test_transpose_multiplication.<locals>.MyMatrix._rmatmat)ro   rp   rq   r{   r‡   rˆ   rÒ   r   r   rÐ   r   ÚMyMatrix  s    r  r   r   r   r   r;   é   r:   é(   ri   )rL   rM   r   r   r!   r   r(   )r  r   r]   r   ÚX2rþ   r   r   r   Útest_transpose_multiplication  s   r  c                  C   sú   t jddd„ d�} t d¡}d}tt|d�� | |  W d   ƒ n1 s%w   Y  tt|d�� ||   W d   ƒ n1 s?w   Y  ttƒ� | t d¡  W d   ƒ n1 sZw   Y  ttƒ� t d¡|   W d   ƒ d S 1 svw   Y  d S )	Nrï   c                 S   s   | S r-   r   r#   r   r   r   r&     r®   z.test_sparse_matmat_exception.<locals>.<lambda>rð   r   z9Unable to multiply a LinearOperator with a sparse matrix.r>   r   )	rL   rM   rŒ   Ú	eye_arrayrX   rÚ   rY   r   Úidentity)r   r   r`   r   r   r   Útest_sparse_matmat_exception  s   

ÿ
ÿ
ÿ
"ÿr  zTest not meaningful on PyPy)Úreasonc                  C   sF   t  d¡} ttj| ƒ�}| ¡  ~W d   ƒ d S 1 sw   Y  d S rC   )r   Úeyer	   rL   ÚMatrixLinearOperatorrP   )r   r¾   r   r   r   Ú"test_MatrixLinearOperator_refcycle*  s
   
"þr  )?Ú__doc__Ú	functoolsr   Ú	itertoolsr   rj   Úpytestr   rX   r   Únumpy.testingr   r   Únumpyr   Úscipy.sparserŒ   Úscipy.sparse.linalg._interfaceÚlinalgÚ
_interfacerL   Úscipy.sparse._sputilsr   Úscipy._lib._gcutilsr	   r
   r   rr   r²   r¸   r¿   r*   rË   ÚmarkÚthread_unsaferà   ré   rñ   Úint8Úint16r    Úint64rú   r¡   r¢   Ú
longdoubleÚREAL_DTYPESÚ	complex64rW   ÚclongdoubleÚCOMPLEX_DTYPESÚINEXACTDTYPESÚ	ALLDTYPESÚparametrizerø   rû   rÿ   r   r  r  r  Úskipifr  r   r   r   r   Ú<module>   sP     G 

		