o
    ðT·j!  ã                   @   sf   d Z ddlZddlZddlmZmZmZmZmZm	Z	 ddl
mZmZmZmZmZmZ G dd„ dƒZdS )z" Test functions for linalg module
é    N)ÚlinalgÚarangeÚfloat64ÚarrayÚdotÚ	transpose)Úassert_Úassert_raisesÚassert_equalÚassert_array_equalÚassert_array_almost_equalÚassert_array_lessc                   @   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ej dddg¡dd„ ƒZej dddgd e d¡g¡dd„ ƒZdd„ Zd S )!ÚTestRegressionc                 C   sR   t g d¢ƒ}tdtd�}d|_|d }t |¡\}}| ¡  | ¡  t||ƒ d S )N)yþºÓ�'ÎY@        yF.“<2/3À        yšÊ¹LTã¿WŒ¡9>°/@yšÊ¹LTã¿WŒ¡9>°/Ày=J€õ½&À        yt…�V)å¿·BÜÅÉÕ$@yt…�V)å¿·BÜÅÉÕ$ÀyZynFr62@        yÝ(�Ã3%@        yÖ´:@        yCr~è¿        y§Y·qs`Û<        yt&²üáAÛ¼        é©   ©Údtype)é   r   é   )r   r   r   Úshaper   ÚeigÚsortr   )ÚselfÚrvaÚaÚvaÚve© r   úe/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/numpy/linalg/tests/test_regression.pyÚtest_eig_build   s   zTestRegression.test_eig_buildc                 C   s>   g d¢}t g d¢g d¢g d¢gƒ}t |¡\}}t||ƒ d S )N)g"¤òŸÃ&Q@gg ÜödV@gƒ»7¯ÿªZ@)g'ŽU­ùlS@ç4h¦ƒ@ç%p±ÃJ/@)r   g›+÷À>V@ç ”Þqi0ñ¿)r    r!   gJ%~½©‹X@)r   r   Úeighr   )r   ÚrvalsÚcovÚvalsÚvecsr   r   r   Útest_eigh_build'   s   þzTestRegression.test_eigh_buildc                 C   sl   t ddgddgddgddggƒ}|j\}}t |¡\}}}tt|d d …|d …f ƒ|ƒ}t|t d¡ƒ d S )Nç        ç      ð?ç       @ç      @)é   r,   )	r   r   r   Úsvdr   r   r   ÚnpÚzeros)r   r   ÚmÚnÚuÚsÚvhÚbr   r   r   Útest_svd_build2   s
    
zTestRegression.test_svd_buildc                 C   s   t ttjtg d¢ƒdƒ d S )N)r)   r*   r+   Úfro)r	   Ú
ValueErrorr   Únormr   )r   r   r   r   Útest_norm_vector_badarg<   s   z&TestRegression.test_norm_vector_badargc                 C   sF   t ddgddggdd�}t |dd�}t |¡}t |¡}t||ƒ d S )Ng¬C$ù 3@gàŽ&ÍÕuÀg.¼Ü·#@z>f8r   z<f8)r   r   Úcholeskyr   )r   r   r5   ÚapÚbpr   r   r   Útest_lapack_endianA   s   ÿÿ

z!TestRegression.test_lapack_endianc                 C   s   t  dd¡}t j |¡ d S )Niè  éB   )r.   Úeyer   r-   )r   Úxr   r   r   Útest_large_svd_32bitK   s   z#TestRegression.test_large_svd_32bitc                 C   s’   dD ]D}t tfD ]=}tj||d�}tj|dd�}t t |¡dk¡}t|dƒ ttj 	|¡dƒ t
dtjj|dd�ƒ t |¡}t||ƒ qqd S )	N))é   é   )rD   rD   )rD   rC   r   F)Ú
compute_uvg      à?é   r,   ©Úord)ÚfloatÚcomplexr.   Úonesr   r-   Úcount_nonzeroÚabsoluter
   Úmatrix_rankr   r9   Úsvdvalsr   )r   r   Útr   ÚwÚcÚ	w_svdvalsr   r   r   Útest_svd_no_uvP   s   

÷ÿzTestRegression.test_svd_no_uvc                 C   s\  t jt  ddg¡ddgtd�}t |¡}t|ddgƒ t|jt  d¡kƒ tj|dd�}t|ddgƒ t|jt  d¡kƒ tj|dd�}t|ddgƒ t|jt  d¡kƒ tt	tj|dd� tt	tj|dd� tt	tj|t j
d� tt	tj|t j
 d� tt	tj|dd� tt	tj|d	d� tt	tj|d
d� t jt  ddg¡ddgg d¢gtd�}t |¡}t|ddgƒ t|jt  d¡kƒ tj|dd�}t|ddgƒ t|jt  d¡kƒ tttj|dd� tt	tj|t j
d� tt	tj|t j
 d� tt	tj|dd� tt	tj|dd� tt	tj|d	d� tttj|dd� tttj|d
d� tt	tj|dd� d S )Nr   rF   r   r   rG   r,   r7   Únucéÿÿÿÿéþÿÿÿ)r   r   r   rC   )r.   r   Úobjectr   r9   r   r   r   r	   r8   ÚinfÚ	TypeError)r   Ú
testvectorr9   Ú
testmatrixr   r   r   Útest_norm_object_array^   sJ   
ÿÿ
z%TestRegression.test_norm_object_arrayc           
      C   sx   d}d}t j ||¡dt j ||¡  }t j ||¡dt j ||¡  }| |¡}tj||d d�\}}}}	t||ƒ d S )Né   éF   y              ð?)Úrcond)r.   ÚrandomÚrandnr   r   Úlstsqr   )
r   ÚsizeÚn_rhsÚGr2   r5   Úu_lstsqÚresÚrankÚsvr   r   r   Útest_lstsq_complex_larger_rhs‹   s     
z,TestRegression.test_lstsq_complex_larger_rhsÚupperTFc                 C   s(   t jjt  d¡|d�}|jdksJ ‚d S )N)r   r   )rl   r   )r.   r   r;   r/   rd   )r   rl   rh   r   r   r   Útest_cholesky_empty_array—   s   z(TestRegression.test_cholesky_empty_arrayÚrtolr(   rD   ©rD   c                 C   s,   t  d¡}t jj||d�}|jdksJ ‚d S )N)rD   rC   r,   )rn   ro   )r.   r/   r   rN   r   )r   rn   rA   rh   r   r   r   Útest_matrix_rank_rtol_argument�   s   
z-TestRegression.test_matrix_rank_rtol_argumentc                 C   sŠ   t jdt jd�}t  |d| f¡j}t  ddgddgg¡}t  d| |f¡j}tdƒD ]}|| }t  ||¡  ¡ }|dkrBJ dƒ‚q+d S )	Ni ¡ r   iöÿÿÿr   rF   éÈ   FzHunexpected result from matmul, probably due to OpenBLAS threading issues)	r.   r   r   ÚvstackÚTr   ÚrangeÚiscloseÚsum)r   rA   ÚsrcÚmatrixÚexpectedÚiÚresultÚ
mismatchesr   r   r   Útest_openblas_threading¤   s   ÿýz&TestRegression.test_openblas_threadingN)Ú__name__Ú
__module__Ú__qualname__r   r'   r6   r:   r>   rB   rT   r]   rk   ÚpytestÚmarkÚparametrizerm   r.   r/   rp   r}   r   r   r   r   r      s    

-

r   )Ú__doc__r�   Únumpyr.   r   r   r   r   r   r   Únumpy.testingr   r	   r
   r   r   r   r   r   r   r   r   Ú<module>   s      