o
    Get                     @   sL  d Z ddlZddlZddlZddlmZmZmZmZ ddl	m
Z
mZmZmZmZmZmZ ddlZddlZddlmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlZddl m!Z! 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d Z)dd Z*dd Z+G dd dZ,G dd dZ-dS ) z, Test functions for linalg.matfuncs module

    N)arrayidentitydotsqrt)assert_array_equalassert_array_lessassert_equalassert_array_almost_equalassert_allcloseassert_assert_warns)
funmsignmlogmsqrtmfractional_matrix_powerexpmexpm_frechet	expm_condnorm
khatri_rao)_matfuncs_inv_ssq)minimizec                  C   s*   t jg dg dg dg dgtd} | S )aW  
    Return the test matrix from Experiment (1) of [1]_.

    References
    ----------
    .. [1] Awad H. Al-Mohy and Nicholas J. Higham (2012)
           "Improved Inverse Scaling and Squaring Algorithms
           for the Matrix Logarithm."
           SIAM Journal on Scientific Computing, 34 (4). C152-C169.
           ISSN 1095-7197

    )g3d?     L@r   r   )r   gRal!A?r   r   )r   r   gQI?r   )r   r   r   g^?dtype)npr   float)A r   j/var/www/html/SPIRAL.web.tool/spiral_venv/lib/python3.10/site-packages/scipy/linalg/tests/test_matfuncs.py%_get_al_mohy_higham_2012_experiment_1   s   r!   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
	TestSignMc                 C   sb   t g dg dg dg dg dg}t g dg dg dg d	g d
g}t|}t|| d S )Ng333333=@g3333338g     `Q@gfffffH@g      @gffffff"g@      2g0       g      $g      @g      4r&   r'   g333333#g333333#@g     9g.r'   g#@g333333g      2@g3333332@       @)g'@'Rqgy.@ge@5@r,   )g@ȽUЛ'?g9\g+%r-   )gRQQ?gGzgffffffr.   )gר#w?î?gk#egC,Nr/   )g@42
gF(@gcs@@r0   )r   r   r	   )selfacrrr   r   r    	test_nils2   s   zTestSignM.test_nilsc                 C   s0   t g dg dg dg dg}t|dd d S )N)           r   r   )r7   r   r7   r   r   r   r   r7   )r   r   r7   r   Fdispr   r   r1   r2   r   r   r    test_defective1@   s    zTestSignM.test_defective1c                 C   s6   t g dg dg dg dg df}t|dd d S )Nr$   r%   r(   r)   r*   Fr9   r;   r<   r   r   r    test_defective2E   s   zTestSignM.test_defective2c              	   C   sB   t g dg dg dg dg dg dg dg}t|dd	 d S )
Nr'         9@r6   r6   r6   r6   r6   r6               $@      @rD   rD   r6   r6   r6   r+         .@rD   rD   r6   r6   r6   r6   r6   rF   rD   r6   r6   r6   r6   r6   rD   rC   r6   r6   r6   r6   r6   r6   r'   r@   r6   r6   r6   r6   r6   r6   rB   Fr9   r;   r<   r   r   r    test_defective3O   s   zTestSignM.test_defective3N)__name__
__module____qualname__r5   r=   r>   rK   r   r   r   r    r#   0   s
    
r#   c                   @   sd   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S )TestLogMc              	   C   sV   t g dg dg dg dg dg dg dg}tdd	 d
 | }t|dd d S )Nr?   rA   rE   rG   rH   rI   rJ      g@y                Fr9   )r   r   r   )r1   r2   mr   r   r    r5   ]   s   zTestLogM.test_nilsc                 C   s2   t  }t|dd\}}t|}t||ddd d S NFr9   h㈵>+=)rtolatol)r!   r   r   r
   )r1   r   A_logminfoA_round_tripr   r   r    *test_al_mohy_higham_2012_experiment_1_logmi   s   z3TestLogM.test_al_mohy_higham_2012_experiment_1_logmc                 C   s>   t  }t|tjdd\}}t|}ttj||ddd  d S rR   )r!   r   r   logr   r   allclose)r1   r   
A_funm_logrX   rY   r   r   r    .test_al_mohy_higham_2012_experiment_1_funm_logq   s   z7TestLogM.test_al_mohy_higham_2012_experiment_1_funm_logc                 C   s   t jd tddD ]H}t j||}t dddD ]7}|| }t j|}d||}t	|dd	\}}|
|}	t|	| t|dd	\}
}t|
}t|||d
 qqd S )N  r7         	   zM:{0} eivals:{1}Fr9   )err_msg)r   randomseedrangerandnlogspacelinalgeigvalsformatr   r   r
   r   r   )r1   n
M_unscaledscaleMWrd   M_sqrtmrX   M_sqrtm_round_tripM_logmM_logm_round_tripr   r   r    test_round_trip_random_floaty   s   

z%TestLogM.test_round_trip_random_floatc                 C   s~   t jd tddD ]1}t j||dt j||  }t dddD ]}|| }t|dd	\}}t|}t|| q$qd S 
Nr_   r7   r`                 ?ra   rb   rc   Fr9   )	r   re   rf   rg   rh   ri   r   r   r
   )r1   rm   rn   ro   rp   rt   rX   M_round_tripr   r   r    test_round_trip_random_complex   s    z'TestLogM.test_round_trip_random_complexc                 C   s   d}ddgddggddgddggddgddggddgddggfD ]Z}t j|}ttdd |D   tj|td}t|d	d
\}}t|j	j
|v tj|td}t|d	d
\}}t|j	j
|v  tj|td }t|d	d
\}}t|j	j
|v  q d S )NFDGr7   r         c                 s        | ]}|j p|jd k V  qdS r   Nimagreal.0wr   r   r    	<genexpr>       zFTestLogM.test_logm_type_preservation_and_conversion.<locals>.<genexpr>r   Fr9   )scipyrj   rk   r   anyr   r   r   r   r   charcomplex)r1   complex_dtype_charsmatrix_as_listrq   r   rW   rX   r   r   r    *test_logm_type_preservation_and_conversion   s$   z3TestLogM.test_logm_type_preservation_and_conversionc                 C   s   g dg dg dg}t tfD ]4}tj||d}tj|}tdt|j	
 k  t|dd\}}tt|jtj tt|| qd S )N)r7   r7   r   )r   r7   r7   )r7   r   r7   r   {Gz?Fr9   )r   r   r   r   r   rj   rk   r   absoluter   sumr   
issubdtyper   inexactr
   r   )r1   rp   dtXr   YrX   r   r   r    test_complex_spectrum_real_logm   s   z(TestLogM.test_complex_spectrum_real_logmc                 C   sj   ddgddggddgddggfD ]"}t tfD ]}tj||d}t|dd\}}tt|jtj qqd S )Nr7   r   r   Fr9   )	r   r   r   r   r   r   r   r   complexfloating)r1   rp   r   r   rW   rX   r   r   r    test_real_mixed_sign_spectrum   s   z&TestLogM.test_real_mixed_sign_spectrumc                 C   sv   t ddgddgg}t ddgddgg}||j||jfD ]}tj}t|t|dd\}}t|}t	||dd qd S )Nr   rx   r7   Fr9   rT   rV   )
r   r   asarrayTr   LogmExactlySingularWarningr   r   r   r
   )r1   r   Brp   expected_warningLrX   Er   r   r    test_exactly_singular   s   zTestLogM.test_exactly_singularc                 C   sB   t dgg}tj}t|t|dd\}}t|}t||dd d S )Ng0.++Fr9   rT   r   )r   r   r   LogmNearlySingularWarningr   r   r   r
   )r1   rp   r   r   rX   r   r   r   r    test_nearly_singular   s
   zTestLogM.test_nearly_singularc                 C   s  ddgddgg}dt jd gt j d dgg}tt||dd tt||dd ddgdd	gg}dt j d d
t j gdd	t j d gg}tt||dd tt||dd ddgdd	gg}dt j d dgdd	t j d gg}tt||dd tt||dd d S )Nr   r7   r         ?rT   r   rx   rb   y             r   )r   pir
   r   r   )r1   r   r   r   r   r    &test_opposite_sign_complex_eigenvalues   s   *$z/TestLogM.test_opposite_sign_complex_eigenvaluesN)rL   rM   rN   r5   rZ   r^   rv   rz   r   r   r   r   r   r   r   r   r   r    rO   [   s    
	rO   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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 )	TestSqrtMc                 C   sn   t jd tddD ])}t j||}t dddD ]}|| }t|dd\}}||}t|| qqd S )	Nr_   r7   r`   ra   rb   rc   Fr9   	r   re   rf   rg   rh   ri   r   r   r
   r1   rm   rn   ro   rp   rr   rX   rs   r   r   r    rv      s   
z&TestSqrtM.test_round_trip_random_floatc                 C   s   t jd tddD ]2}t j||dt j||  }t dddD ]}|| }t|dd	\}}||}t|| q$qd S rw   r   r   r   r   r    rz      s    
z(TestSqrtM.test_round_trip_random_complexc                 C   s   d}t |}tg dd|ddgdd|dgg dg}tg dd|ddgdd|dgg dg}|jd }tt||| t|d|dd }tt||| t|dddd }tt||| d S )	Ng      ?)      ?r   r   r7   r   r8   )r7   r   r   r   Fr:   	blocksizer   )r   r   shaper	   r   r   )r1   eser2   sarm   esar   r   r    test_bad  s$   




zTestSqrtM.test_badc                 C   s  d}ddgddggddgddggddgddggddgddggddgddggfD ]Z}t j|}ttdd |D   tj|td}t|d	d
\}}t|j	j
|v tj|td}t|d	d
\}}t|j	j
|v  tj|td }t|d	d
\}}t|j	j
|v  q'd S )Nr{   r7   r   r   r   c                 s   r   r   r   r   r   r   r    r   %  r   zHTestSqrtM.test_sqrtm_type_preservation_and_conversion.<locals>.<genexpr>r   Fr9   )r   rj   rk   r   r   r   r   r   r   r   r   r   r1   r   r   rq   r   A_sqrtmrX   r   r   r    +test_sqrtm_type_preservation_and_conversion  s&   z5TestSqrtM.test_sqrtm_type_preservation_and_conversionc                 C   s   d}ddgddggddgddggg dg dg dgfD ]A}t j|}ttdd	 |D  tj|td
}t|dd\}}t|j	j
|v  tj|td
}t|dd\}}t|j	j
|v  qd S )Nr{   r7   r   r   r   r7   r   r   r   r7   r7   r   r   c                 s   r   r   r   r   r   r   r    r   ?  r   zVTestSqrtM.test_sqrtm_type_conversion_mixed_sign_or_complex_spectrum.<locals>.<genexpr>r   Fr9   )r   rj   rk   r   r   r   r   r   r   r   r   r   r   r   r   r    9test_sqrtm_type_conversion_mixed_sign_or_complex_spectrum6  s   zCTestSqrtM.test_sqrtm_type_conversion_mixed_sign_or_complex_spectrumc                 C   s   t jd tddD ];}t j||dt j||  }t|d|d\}}t|t j	|d tddD ]}t|d|d\}}t|| q5qd S )	Nr_   r7      rx   Fr   r   
   )
r   re   rf   rg   randrh   r   r
   rj   matrix_power)r1   rm   r   A_sqrtm_defaultrX   r   A_sqrtm_newr   r   r    test_blocksizesK  s    zTestSqrtM.test_blocksizesc                 C   sH   t  }t|dd\}}||}t||dd tt|t| d S )NFr9   rS   rU   )r!   r   r   r
   r   tril)r1   r   r   rX   rY   r   r   r    %test_al_mohy_higham_2012_experiment_1V  s
   
z/TestSqrtM.test_al_mohy_higham_2012_experiment_1c                 C   sZ   t tfD ]&}tjg dg dg dg dg|d}t|dd\}}tt|  qd S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   r   Fr9   )intr   r   r   r   r   isnanall)r1   r   r   r   rX   r   r   r    test_strict_upper_triangular^  s   z&TestSqrtM.test_strict_upper_triangularc                 C   s   t tfD ];}tjg dg dg dg|d}tjg dg dg dg|d}t||| t|dd\}}tt|	  qd S )Nr   r   r   r   r   r   Fr9   )
r   r   r   r   r   r   r   r   r   r   )r1   r   r   r   B_sqrtmrX   r   r   r    test_weird_matrixi  s&   zTestSqrtM.test_weird_matrixc                 C   s:   t jd t jdd}t|dd}t||| d S )Nr_   r   Tr9   )r   re   rf   r   r   r
   r   )r1   r   r   r   r   r    	test_dispz  s   zTestSqrtM.test_dispc                 C   sL   ddgddgg}ddgddgg}t t|||dd	 t t||dd	 d S )
N               @rb   r                       ?      ?r         ?      rT   r   )r
   r   r   r   r1   rp   Rr   r   r    r     s   z0TestSqrtM.test_opposite_sign_complex_eigenvaluesc              
   C   s   t g dg dg dg dg}t tdddtdgg dg dtdddtdgg}tt |||dd tt||dd d S )N)r7   r   r   r7   r   r   r   rT   r   )r   r   r   r
   r   r   r   r   r   r    test_gh4866  s   
zTestSqrtM.test_gh4866c                 C   sN   t g d}t tdddg}tt |||dd tt||dd d S )N)r   r7   r   r   r7   r   rT   r   )r   diagr   r
   r   r   r   r   r   r    test_gh5336  s   zTestSqrtM.test_gh5336c                 C   s@   t d}t d}tt |||dd tt||dd d S )N)r   r   rT   r   )r   zerosr
   r   r   r   r   r   r    test_gh7839  s   

zTestSqrtM.test_gh7839N)rL   rM   rN   rv   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r      s    

r   c                   @   sj   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
ejjdddd Zdd ZdS )TestFractionalMatrixPowerc                 C   s   t jd tddD ];}tddD ]3}t j||dt j||  }t dddD ]}|| }t|d| }t j||}t	|| q+qqd S )Nr_   r7      rx   ra   rb   rc   
r   re   rf   rg   rh   ri   r   rj   r   r
   r1   prm   rn   ro   rp   M_rootry   r   r   r    rz     s    z8TestFractionalMatrixPower.test_round_trip_random_complexc                 C   s   t jd tddD ]2}tddD ]*}t j||}t dddD ]}|| }t|d| }t j||}t	|| q"qqd S )Nr_   r7   r   ra   rb   rc   r   r   r   r   r    rv     s   z6TestFractionalMatrixPower.test_round_trip_random_floatc                 C   s   t jd dD ]L}tdD ]E}t j||dt j||  }t|d}t j|d}t|| t|d}t j|d}t|| t|d	}t j|d
}t|| qqd S )Nr_   )r   r   r   r   rx   皙?r   gigffffff@   )	r   re   rf   rg   rh   r   rj   r   r
   )r1   rm   irp   M_one_fifthry   r   r   r   r   r    (test_larger_abs_fractional_matrix_powers  s    




zBTestFractionalMatrixPower.test_larger_abs_fractional_matrix_powersc                 C   s   t jd d}t|D ]I}tdd}t j }t tdd}t j||}tdr9|dt j||  }|| }t||}t	|dd	\}}	t
|| }
t||
 qd S )
Nr_      r7   r   ra   )TFrx   Fr9   )r   re   rf   rg   	randrangerh   expchoicer   r   r   r
   )r1   nsamplesr   rm   r   matrix_scaler   A_powerrW   rX   A_power_expm_logmr   r   r    test_random_matrices_and_powers  s   


z9TestFractionalMatrixPower.test_random_matrices_and_powersc           	      C   s   t  }t|tjdd\}}t|dd\}}t|d}t|d}t|| t	|| t	|| dD ]"}t||}t|d| }t	||dd t	t
|dt
|d q1d S )NFr9   r   )r   g?r7   r   r   )r!   r   r   r   r   r   _remainder_matrix_powerr   r   r
   r   )	r1   r   A_funm_sqrtrX   r   A_rem_powerr   r   rY   r   r   r    r     s   




z?TestFractionalMatrixPower.test_al_mohy_higham_2012_experiment_1c                 C   sj   t jd t jddt jd  D ]}tdD ]}t||}|t |  d }t|| qqd S )Nr_   r   rx   r   r7   )	r   re   rf   rh   rg   r   _briggs_helper_functionexp2r
   )r1   r2   k
x_observed
x_expectedr   r   r    test_briggs_helper_function  s    z5TestFractionalMatrixPower.test_briggs_helper_functionc                 C   s   d}ddgddggddgddggddgddggddgddggfD ]V}t j|}ttdd |D   dD ]?}tj|td	}t||}t|j	j
|v tj|td	}t||}t|j	j
|v  tj|td	 }t||}t|j	j
|v  q6q d S )
Nr{   r7   r   r   r   c                 s   r   r   r   r   r   r   r    r     r   zRTestFractionalMatrixPower.test_type_preservation_and_conversion.<locals>.<genexpr>333333r   gffffff
@r   )r   rj   rk   r   r   r   r   r   r   r   r   r   r1   r   r   rq   r   r   r   r   r   r    %test_type_preservation_and_conversion  s(   


z?TestFractionalMatrixPower.test_type_preservation_and_conversionc                 C   s   d}ddgddggddgddggg dg dg dgfD ]@}t j|}ttdd	 |D  d
D ]*}tj|td}t||}t|j	j
|v  tj|td}t||}t|j	j
|v  q1qd S )Nr{   r7   r   r   r   r   r   c                 s   r   r   r   r   r   r   r    r   .  r   z`TestFractionalMatrixPower.test_type_conversion_mixed_sign_or_complex_spectrum.<locals>.<genexpr>r   r   )r   rj   rk   r   r   r   r   r   r   r   r   r   r   r   r   r    3test_type_conversion_mixed_sign_or_complex_spectrum%  s    

zMTestFractionalMatrixPower.test_type_conversion_mixed_sign_or_complex_spectrumzToo unstable across LAPACKs.reasonc                 C   s   ddgddggddgddggddgddggg dg dg dgfD ]9}t tfD ]2}tj||d	}d
D ]}t||}tt|  q2dD ]}t||}t|d| }t|| qEq'q!d S )Nr   r7   r   r   r`   r   )r   r7   r7   )r   r   r7   r   )gffffffr   r   g)r   gzG?)	r   r   r   r   r   r   r   r   r
   )r1   r   newtyper   r   r   rY   r   r   r    test_singular>  s"   

z'TestFractionalMatrixPower.test_singularc                 C   sN   ddgddgg}ddgddgg}t t|||dd	 t t|d
|dd	 d S )Nr   rb   r   r   r   r   r   rT   r   r   )r
   r   r   r   r   r   r   r    r   R  s   z@TestFractionalMatrixPower.test_opposite_sign_complex_eigenvaluesN)rL   rM   rN   rz   rv   r   r   r   r   r   r   pytestmarkxfailr  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 )TestExpMc                 C   s2   t ddgddgg}tt|ddgddgg d S )Nr6   r   r7   )r   r	   r   r<   r   r   r    	test_zeroZ  s   zTestExpM.test_zeroc                 C   s   ddl m} d}d}||ggdd}||ggdd}t|}t|}tt|t| tt|t| t|d tdd	 t|d td
d d S )Nr   )
csc_matrixy       ~6 y       vr   r   r   r   gGj/ܿghкg藣EgG)| ()scipy.sparser	  r   r   typer
   r   )r1   r	  vOnevTwomOnemTwooutOneoutTwor   r   r    test_single_elt^  s   
zTestExpM.test_single_eltc                 C   s$   t d}t|}|jdksJ d S )Nr
  r   )r   r   r   size)r1   r   resultr   r   r    test_empty_matrix_inputs  s   
z TestExpM.test_empty_matrix_inputN)rL   rM   rN   r  r  r  r   r   r   r    r  Y  s    r  c                   @   sJ   e Zd Zdd Zdd Zdd Zdd Zejj	ejj
d	d
dd ZdS )TestExpmFrechetc           	      C   s   t jg dg dg dg dgtd}t jddgdd	ggtd}t jd
dgddggtd}tj|}tj|d ddd f }i ddiddifD ]}t||fi |\}}t|| t|| qJd S )Nr7   r   r   rb   r   r`   rP   r   r   r   r7   r   r   r   r   r`   r   r7   r   r   r`   r   rb   rP   r   methodSPSblockEnlarge)r   r   r   r   rj   r   r   r
   )	r1   rp   r   r   expected_expmexpected_frechetkwargsobserved_expmobserved_frechetr   r   r    test_expm_frechet|  s6   
z!TestExpmFrechet.test_expm_frechetc                 C   s.  t jg dg dg dg dgtd}t jddgdd	ggtd}t jd
dgddggtd}tj|d}g d}t|d d |dd  }|D ]M\}}tjjj| }	tjjj| }
d|	|
  }|| }|| }|| }|| }tj	|}tj	|d ddd f }t
||\}}t|| t|| qGd S )Nr  r  r  r  r   r7   r   r   r`   r   rb   rP   r   )r7   r   r   rP   rc            r   r   )r   r   r   r   rj   r   zip_expm_frechetell_table_61r   r   r
   )r1   
M_original
A_original
E_originalA_original_norm_1selected_m_listm_neighbor_pairsmambell_aell_btarget_norm_1ro   rp   r   r   r  r   r"  r#  r   r   r    test_small_norm_expm_frechet  sJ   
z,TestExpmFrechet.test_small_norm_expm_frechetc              	   C   s  t jjt jjt jjt jjf}d}t|D ]l}t|}td}t	dd}|||fd}|||fd}t
j|d}	||	 }
|
| }|
| }t t ||gt t ||gg}t
j|}t
j|d ||d f }t||\}}t|| t|| qd S )Nd   r   r      r  r7   )r   re   uniformnormalstandard_cauchyexponentialrg   r   expovariater   r   rj   r   vstackhstack
zeros_liker   r   r
   )r1   rfuncsntestsr   rfuncr5  rm   r,  r-  r.  ro   r   r   rp   r  r   r"  r#  r   r   r    	test_fuzz  s4   


zTestExpmFrechet.test_fuzzc                 C   s~   t jddgddggtd}t jddgdd	ggtd}tj|d
 t||dd\}}t||dd\}}t|| t|| d S )Ng]؉??gvP?g^?guÝ?r   gS,?g| @gJt?g~3?r7   r  r  r  )r   r   r   r   rj   r   r   r
   )r1   r   r   sps_expmsps_frechetblockEnlarge_expmblockEnlarge_frechetr   r   r    test_problematic_matrix  s*   


z'TestExpmFrechet.test_problematic_matrixzthis test is deliberately slowr   c                 C   sd   d}t jj||fd}t jj||fd}t||dd\}}t||dd\}}t|| t|| d S )Ni  r9  r  rF  r  )r   re   r=  r   r
   )r1   rm   r   r   rG  rH  rI  rJ  r   r   r    test_medium_matrix  s   


z"TestExpmFrechet.test_medium_matrixN)rL   rM   rN   r$  r6  rE  rK  r  r  slowskiprL  r   r   r   r    r  z  s    !r  c           
      C   sL   t || j}t|}|| ||  }t| | }t|| ||  }	|	 S N)r   reshaper   r   r   )
r   A_normr   X_normepsr   p_normperturbationX_primescaled_relative_errorr   r   r    _help_expm_cond_search  s   rX  c                 C   s   | t j|t j|   S rO  )r   rj   r   )r   r   r   r   r    _normalized_like  s   rY  c                 C   s(   | |}| || }t || t | S rO  )r   )fr   rU  r   rV  r   r   r    _relative_error  s   r[  c                   @   s4   e Zd Zdd Zdd Zdd Zejjdd Z	d	S )
TestExpmConditionNumberc                 C   s@   t jd tddD ]}t j||}t|}td| qd S )Nr_   r7   rb   r   )r   re   rf   rg   rh   r   r   )r1   rm   r   kappar   r   r    test_expm_cond_smoke  s   z,TestExpmConditionNumber.test_expm_cond_smokec                 C   s8   t g dg dg dg dg}t|}td| d S )N)g(gٙBgx@g  =g ZdB)r   gzNV7g@g  2p)r   r   gᙥT g?W[E@)r   r   r   gT!g yhG)r   r   r   r   )r1   r   r]  r   r   r    test_expm_bad_condition_number  s   z6TestExpmConditionNumber.test_expm_bad_condition_numberc                 C   s   t jd t jddddD ]}t |gg}tt|t| qt jddddD ]}t |gg}tt|t| q)t	dD ]}t j
d	d	}tt|t |d
  q@d S )N90  r   r%  )numr   r   r7   r
  )r   re   rf   linspacer   r
   r   absri   rg   rh   r   )r1   xr   r   r   r   r    test_univariate  s   z'TestExpmConditionNumber.test_univariatec              	   C   sD  t jd d}d}t|D ]}t jdd}t j||}tj|}t	|}tj|}t
|}	tt|||||}
t || }t|
|dd}|j}|
|}|tt ||j| }tt	||}t|| |  tdD ]"}|tt jj|j | }tt|t| tt	||}t|| qot|dd|  | |	  qd S )	Nr`  rS   r   r   r   zL-BFGS-BrF  r7   )r   re   rf   rg   randintrh   r   rj   r   r   r   	functoolspartialrX  onesr   rf  rY  rP  r   r[  r
   r   )r1   rS  r   r   rm   r   rQ  r   rR  r]  rZ  guessoutxoptyoptp_bestp_best_relerrjp_randp_rand_relerrr   r   r    test_expm_cond_fuzz!  s6   
z+TestExpmConditionNumber.test_expm_cond_fuzzN)
rL   rM   rN   r^  r_  rg  r  r  rM  ru  r   r   r   r    r\    s    
r\  c                   @   r"   )
TestKhatriRaoc                 C   s~   t tddgddggtddgddgg}t|tdd	gdd
gddgddgg t tddgtddg}t|jd d S )Nr7   r   r   rb   r   r`   rP   r      r8  r'            )rb   r   )r   r   r   r   emptyr   r1   r2   br   r   r    
test_basicJ  s   zTestKhatriRao.test_basicc                 C   sb   t t" tg dg dg}tddgddgg}t|| W d    d S 1 s*w   Y  d S )Nr7   r   r   rb   r   r`   r7   r   r   rb   r  raises
ValueErrorr   r   r|  r   r   r    test_number_of_columns_equalityV  s   "z-TestKhatriRao.test_number_of_columns_equalityc                 C   s   t t tg d}tg d}t|| W d    n1 s!w   Y  t t tg d}tg dg dg}t|| W d    n1 sKw   Y  t t tg dg dg}tg d}t|| W d    d S 1 svw   Y  d S )Nr  r  )rP   r   rc   r  r|  r   r   r    test_to_assure_2d_array^  s*   	"z%TestKhatriRao.test_to_assure_2d_arrayc                    sf   t ddgddgg t ddgddggt }t fd	d
tjd D j}t|| d S )Nr7   r   r   rb   r   r`   rP   r   c                    s0   g | ]}t  d d |f d d |f qS rO  )r   kron)r   r   r2   r}  r   r    
<listcomp>|  s    (z@TestKhatriRao.test_equality_of_two_equations.<locals>.<listcomp>)r   r   r   r?  rg   r   r   r   )r1   res1res2r   r  r    test_equality_of_two_equationsw  s   
z,TestKhatriRao.test_equality_of_two_equationsN)rL   rM   rN   r~  r  r  r  r   r   r   r    rv  H  s
    rv  ).__doc__re   ri  numpyr   r   r   r   r   numpy.testingr   r   r   r	   r
   r   r   r  scipy.linalgr   r   r   r   r   r   r   r   r   r   r   r   scipy.linalg._expm_frechetscipy.optimizer   r!   r#   rO   r   r   r  r  rX  rY  r[  r\  rv  r   r   r   r    <module>   s6   $0+  4 :!v	E