
    Ug                        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 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mZ ddl Zddl!m"Z" d	 Z# G d
 d          Z$ G d d          Z% G d d          Z& G d d          Z' G d d          Z( G d d          Z)d Z*d Z+d Z, G d d          Z- G d d          Z.dS )z, Test functions for linalg.matfuncs module

    N)arrayidentitydotsqrt)assert_array_almost_equalassert_allcloseassert_assert_array_lessassert_array_equalassert_warns)
funmsignmlogmsqrtmfractional_matrix_powerexpmexpm_frechet	expm_condnorm
khatri_rao)_matfuncs_inv_ssq)pick_pade_structure)minimizec                  T    t          j        g dg dg dg dgt                    } | 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)As    _/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/linalg/tests/test_matfuncs.py%_get_al_mohy_higham_2012_experiment_1r"      sO     	"""   	 &+		, 	, 	,A
 H    c                   &    e Zd Zd Zd Zd Zd ZdS )	TestSignMc                     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+%r0   )gRQQ?gGzgffffffr1   )gר#w?î?gk#egC,Nr2   )g@42
gF(@gcs@@r3   )r   r   r   )selfacrrs       r!   	test_nilszTestSignM.test_nils1   s    000000...111---	/ 0 0
 QQQOOO000OOONNN	P Q Q
 !HH!!B'''''r#   c                 ^    t          g dg dg dg dg          }t          |d           d S )N)           r   r   )r;   r   r;   r   r   r   r   r;   )r   r   r;   r   Fdispr   r   r4   r5   s     r!   test_defective1zTestSignM.test_defective1?   sA    ;;;yyy999=>>aer#   c                 d    t          g dg dg dg dg df          }t          |d           d S )Nr'   r(   r+   r,   r-   Fr=   r?   r@   s     r!   test_defective2zTestSignM.test_defective2D   s^    &&&'''((('''$$$& ' ' 	aer#   c           
      p    t          g dg dg dg dg dg dg dg          }t          |d	           d S )
Nr*         9@r:   r:   r:   r:   r:   r:               $@      @rJ   rJ   r:   r:   r:   r.         .@rJ   rJ   r:   r:   r:   r:   r:   rL   rJ   r:   r:   r:   r:   r:   rJ   rI   r:   r:   r:   r:   r:   r:   r*   rF   r:   r:   r:   r:   r:   r:   rH   Fr=   r?   r@   s     r!   test_defective3zTestSignM.test_defective3N   sp    1111110000000001110002 3 3 	aer#   N)__name__
__module____qualname__r8   rA   rC   rQ    r#   r!   r%   r%   /   sP        ( ( (  
      r#   r%   c            	           e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                            d          ej                            deeej        eej        g          d                         ZdS )TestLogMc           
          t          g dg dg dg dg dg dg dg          }t          d          d	z  d
z   |z
  }t          |d           d S )NrE   rG   rK   rM   rN   rO   rP      g@y                Fr=   )r   r   r   )r4   r5   ms      r!   r8   zTestLogM.test_nils\   s    1111110000000001110002 3 3 a[[_R"QUr#   c                     t                      }t          |d          \  }}t          |          }t          ||dd           d S )NFr=   g-C6
?+=rtolatol)r"   r   r   r   )r4   r    A_logminfoA_round_trips        r!   *test_al_mohy_higham_2012_experiment_1_logmz3TestLogM.test_al_mohy_higham_2012_experiment_1_logmh   sM     233AE***F||ad??????r#   c                     t                      }t          |t          j        d          \  }}t	          |          }t          t          j        ||dd                      d S )NFr=   h㈵>r\   r]   )r"   r   r   logr   r	   allclose)r4   r    
A_funm_logra   rb   s        r!   .test_al_mohy_higham_2012_experiment_1_funm_logz7TestLogM.test_al_mohy_higham_2012_experiment_1_funm_logp   sa     23326666
DJ''BKadGGGGHHHHHr#   c                    t           j                            d           t          dd          D ]}t           j                            ||          }t          j        ddd          D ]}||z  }t           j                            |          }d| d| }t          |d	
          \  }}|	                    |          }	t          |	|           t          |d	
          \  }
}t          |
          }t          |||           d S )N  r;         	   zM:z eivals:Fr=   )err_msg)r   randomseedrangerandnlogspacelinalgeigvalsr   r   r   r   r   )r4   n
M_unscaledscaleMWrp   M_sqrtmra   M_sqrtm_round_tripM_logmM_logm_round_trips               r!   test_round_trip_random_floatz%TestLogM.test_round_trip_random_floatx   s#   
	tq! 	G 	GAA..JRA.. G G& I%%a((-q--!-- !&ae 4 4 4%,[[%9%9" 2A666  $AE222$(LL! 11gFFFFFG	G 	Gr#   c                    t           j                            d           t          dd          D ]}t           j                            ||          dt           j                            ||          z  z   }t          j        ddd          D ]:}||z  }t          |d	          \  }}t          |          }t          ||           ;d S 
Nrk   r;   rl                 ?rm   rn   ro   Fr=   )	r   rq   rr   rs   rt   ru   r   r   r   )r4   rx   ry   rz   r{   r   ra   M_round_trips           r!   test_round_trip_random_complexz'TestLogM.test_round_trip_random_complex   s    
	tq! 	1 	1AA..biooa6K6K1KKJRA.. 1 1&#AE222#F||a0000	1	1 	1r#   c                    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 ](}t           j                            |          }t          t	          d |D                                   t          j        |t                    }t          |d	          \  }}t          |j	        j
        |v           t          j        |t                    }t          |d	          \  }}t          |j	        j
        |v            t          j        |t                     }t          |d	          \  }}t          |j	        j
        |v            *d S )
NFDGr;   r         c              3   :   K   | ]}|j         p
|j        d k     V  dS r   Nimagreal.0ws     r!   	<genexpr>zFTestLogM.test_logm_type_preservation_and_conversion.<locals>.<genexpr>   /      <<QAF0afqj<<<<<<r#   r   Fr=   )scipyrv   rw   r	   anyr   r   r   r   r   charcomplex)r4   complex_dtype_charsmatrix_as_listr|   r    r`   ra   s          r!   *test_logm_type_preservation_and_conversionz3TestLogM.test_logm_type_preservation_and_conversion   sy    .Q!Q Q!Q Q!Q Q!Q 	" 	> 	>N $$^44A<<!<<<<<<=== u555A...LFDFL%-@@AAA w777A...LFDFL%)<<=== .6666A...LFDFL%)<<====/	> 	>r#   c                    g dg dg dg}t           t          fD ]}t          j        ||          }t          j                            |          }t          dt          j        |j	                  
                                k                t          |d          \  }}t          t          j        |j        t          j                             t          t!          |          |           d S )N)r;   r;   r   )r   r;   r;   )r;   r   r;   r   {Gz?Fr=   )r   r   r   r   r   rv   rw   r	   absoluter   sumr   
issubdtyper   inexactr   r   )r4   r{   dtXr   Yra   s          r!   test_complex_spectrum_real_logmz(TestLogM.test_complex_spectrum_real_logm   s     YY			999-. 	( 	(B"%%%A$$Q''AD2;qv..2244455515)))GAtBM!'2:66777DGGQ''''	( 	(r#   c                    ddgddggddgddggfD ]n}t           t          fD ]]}t          j        ||          }t	          |d          \  }}t          t          j        |j        t          j                             ^od S )Nr;   r   r   Fr=   )	r   r   r   r   r   r	   r   r   complexfloating)r4   r{   r   r    r`   ra   s         r!   test_real_mixed_sign_spectrumz&TestLogM.test_real_mixed_sign_spectrum   s     Q!R!Q!Q " 	I 	IA Wn I IHQb)))#AE222flB4FGGHHHHI	I 	Ir#   c                 $   t          j        ddgddgg          }t          j        ddgddgg          }||j        ||j        fD ]J}t          j        }t          |t          |d          \  }}t          |          }t          ||d           Kd S )Nr   r   r;   Fr=   r\   r_   )
r   r   asarrayTr   LogmExactlySingularWarningr   r   r   r   )r4   r    Br{   expected_warningLra   Es           r!   test_exactly_singularzTestLogM.test_exactly_singular   s    Hq!fr2h'((JAA'((ACAC 	. 	.A0K"#3T15IIIGAtQAAqu-----		. 	.r#   c                     t          j        dgg          }t          j        }t	          |t
          |d          \  }}t          |          }t          ||d           d S )Ng0.++Fr=   r\   r   )r   r   r   LogmNearlySingularWarningr   r   r   r   )r4   r{   r   r   ra   r   s         r!   test_nearly_singularzTestLogM.test_nearly_singular   s_    HvhZ  ,F/quEEE4GG15))))))r#   c                    ddgddgg}dt           j        dz  gt           j         dz  dgg}t          t          |          |d           t          t	          |          |d           ddgdd	gg}dt           j        z  dz  d
t           j        z  gdd	t           j        z  dz  gg}t          t          |          |d           t          t	          |          |d           ddgdd	gg}dt           j        z  dz  dgdd	t           j        z  dz  gg}t          t          |          |d           t          t	          |          |d           d S )Nr   r;   r         ?r\   r   r   rn   y             r   )r   pir   r   r   )r4   r   r   s      r!   &test_opposite_sign_complex_eigenvaluesz/TestLogM.test_opposite_sign_complex_eigenvalues   sV   Vb!Ws^rufSj!_-Q////Q////!Wq#hhslAbeG$q#be)C-&89Q////Q////!Wq#hhslACIcM 23Q////Q//////r#   c                     d}t          j        ||f          t          j        |          z   }d|j        _        t          |           d S )N   F)r   onesr   flags	writeabler   r4   rx   r5   s      r!   test_readonlyzTestLogM.test_readonly   s>    GQFOObk!nn,!Qr#   z6ValueError: attempt to get argmax of an empty sequencereasonr   c                     t          j        d|          }t          |          }t          j        d|          }t          |          }|j        dk    sJ |j        |j        k    sJ d S Nr   r   r   r   )r   emptyr   eyeshaper   )r4   r   r5   log_aa0log_a0s         r!   
test_emptyzTestLogM.test_empty   sp     HV2&&&QVAR   b{f$$$${fl******r#   N)rR   rS   rT   r8   rc   ri   r   r   r   r   r   r   r   r   r   pytestmarkxfailparametrizeintr   r   float32r   	complex64r   rU   r#   r!   rW   rW   Z   s2       	 	 	@ @ @I I IG G G*1 1 1> > ><
( 
( 
(	I 	I 	I. . .* * *0 0 0   [VWW[TC
GR\#RSS+ + TS XW+ + +r#   rW   c                   4   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zej                            d          d             Zd Zd Zd Zd Zd Zd Zej                            deeej        e ej!        g          d             Z"dS )	TestSqrtMc                 X   t           j                            d           t          dd          D ]y}t           j                            ||          }t          j        ddd          D ]@}||z  }t          |d          \  }}|                    |          }t          ||           Azd S )	Nrk   r;   rl   rm   rn   ro   Fr=   	r   rq   rr   rs   rt   ru   r   r   r   r4   rx   ry   rz   r{   r}   ra   r~   s           r!   r   z&TestSqrtM.test_round_trip_random_float   s    
	tq! 	7 	7AA..JRA.. 7 7& %ae 4 4 4%,[[%9%9" 2A6666	7	7 	7r#   c                    t           j                            d           t          dd          D ]}t           j                            ||          dt           j                            ||          z  z   }t          j        ddd          D ]@}||z  }t          |d	          \  }}|                    |          }t          ||           Ad S r   r   r   s           r!   r   z(TestSqrtM.test_round_trip_random_complex  s    
	tq! 	7 	7AA..biooa6K6K1KKJRA.. 7 7& %ae 4 4 4%,[[%9%9" 2A6666	7	7 	7r#   c                    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         }t          t	          ||          |           t          |dd          d         }t          t	          ||          |           d S )	Ng      ?)      ?r   r   r;   r   r<   )r;   r   r   r   Fr>   	blocksizer   )r   r   r   r   r   r   )r4   eser5   sarx   esas          r!   test_badzTestSqrtM.test_bad  s   !WW;;;a!9a!999   KKKr!AJqAJII     GAJ!#b**Q///AEQ///2!#c#,,q111AEQ///2!#c#,,q11111r#   c                    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 ](}t           j                            |          }t          t	          d |D                                   t          j        |t                    }t          |d	          \  }}t          |j	        j
        |v           t          j        |t                    }t          |d	          \  }}t          |j	        j
        |v            t          j        |t                     }t          |d	          \  }}t          |j	        j
        |v            *d S )
Nr   r;   r   r   r   c              3   :   K   | ]}|j         p
|j        d k     V  dS r   r   r   s     r!   r   zHTestSqrtM.test_sqrtm_type_preservation_and_conversion.<locals>.<genexpr>5  r   r#   r   Fr=   )r   rv   rw   r	   r   r   r   r   r   r   r   r   r4   r   r   r|   r    A_sqrtmra   s          r!   +test_sqrtm_type_preservation_and_conversionz5TestSqrtM.test_sqrtm_type_preservation_and_conversion'  s    .Q!Q Q!Q Q!Q Q!Q Q!Q " 	? 	?N $$^44A<<!<<<<<<=== u555A!!%000MGTGM&.AABBB w777A!!%000MGTGM&*==>>> .6666A!!%000MGTGM&*==>>>>1	? 	?r#   c                    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                                  t          j        |t          	          }t          |d
          \  }}t          |j	        j
        |v            t          j        |t          	          }t          |d
          \  }}t          |j	        j
        |v            d S )Nr   r;   r   r   r   r;   r   r   r   r;   r;   r   r   c              3   :   K   | ]}|j         p
|j        d k     V  dS r   r   r   s     r!   r   zVTestSqrtM.test_sqrtm_type_conversion_mixed_sign_or_complex_spectrum.<locals>.<genexpr>O  /      88,!&1*888888r#   r   Fr=   )r   rv   rw   r	   r   r   r   r   r   r   r   r   r   s          r!   9test_sqrtm_type_conversion_mixed_sign_or_complex_spectrumzCTestSqrtM.test_sqrtm_type_conversion_mixed_sign_or_complex_spectrumF  s"   -Q!R!Q!Q IIIyyy13 	? 	?N $$^44AC88a88888999 w777A!!%000MGTGM&*==>>> u555A!!%000MGTGM&*==>>>>#	? 	?r#   c                    t           j                            d           t          dd          D ]}t           j                            ||          dt           j                            ||          z  z   }t          |d|          \  }}t          |t           j        	                    |d                     t          dd          D ]'}t          |d|          \  }}t          ||           (d S )	Nrk   r;      r   Fr   r   
   )
r   rq   rr   rs   randrt   r   r   rv   matrix_power)r4   rx   r    A_sqrtm_defaultra   r   A_sqrtm_news          r!   test_blocksizeszTestSqrtM.test_blocksizes[  s    
	tq! 	> 	>A	q!$$r")//!Q*?*?'??A$)!%1$E$E$E!OTAry55oqIIJJJ"1b\\ > >	$)!%9$M$M$M!T====>		> 	>r#   c                     t                      }t          |d          \  }}|                    |          }t          ||d           t          t	          j        |          t	          j        |                     d S )NFr=   re   r^   )r"   r   r   r   r   tril)r4   r    r   ra   rb   s        r!   %test_al_mohy_higham_2012_experiment_1z/TestSqrtM.test_al_mohy_higham_2012_experiment_1f  sq    133ae,,,{{7++ad3333--rwqzz:::::r#   c                     t           t          fD ]k}t          j        g dg dg dg dg|          }t	          |d          \  }}t          t          j        |                                                     ld S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   r   Fr=   )r   r   r   r   r   r	   isnanall)r4   r   r    r   ra   s        r!   test_strict_upper_triangularz&TestSqrtM.test_strict_upper_triangularn  s    u* 	- 	-B	 &(	) ) )A
 "!%000MGTBHW%%))++,,,,	- 	-r#   c                 x   t           t          fD ]}t          j        g dg dg dg|          }t          j        g dg dg dg|          }t	          ||                    |                     t          |d          \  }}t          t          j        |          	                                           d S )Nr   r   r   r   r   r   Fr=   )
r   r   r   r   r   r   r   r	   r  r  )r4   r   r    r   B_sqrtmra   s         r!   test_weird_matrixzTestSqrtM.test_weird_matrixy  s    u* 	- 	-B						 #%& & &A 						 #%& & &A q!%%((+++ "!%000MGTBHW%%))++,,,,	- 	-r#   c                     t           j                            d           t           j                            dd          }t	          |d          }t          |                    |          |           d S )Nrk   r   Tr=   )r   rq   rr   r   r   r   r   )r4   r    r   s      r!   	test_dispzTestSqrtM.test_disp  s]    
	tINN1a  !$a!$$$$$r#   c                     ddgddgg}ddgddgg}t          t          j        ||          |d	           t          t          |          |d	           d S )
N               @rn   r                       ?      ?r         ?      r\   r   )r   r   r   r   r4   r{   Rs      r!   r   z0TestSqrtM.test_opposite_sign_complex_eigenvalues  sf    !Wq#hAYD	"q!ae4444a!%000000r#   c                 ~   t          j        g dg dg dg dg          }t          j        t          d          ddt          d          gg dg dt          d          ddt          d          gg          }t          t          j        ||          |d           t          t          |          |d           d S )N)r;   r   r   r;   r   r   r   r\   r   )r   r   r   r   r   r   r  s      r!   test_gh4866zTestSqrtM.test_gh4866  s    Hlll"ll"ll"ll$ % % HtCyy!QS		2"ll"llCyy!QS		24 5 5 	q!ae4444a!%000000r#   c                    t          j        g d          }t          j        t          d          ddg          }t          t          j        ||          |d           t          t          |          |d           d S )N)r   r;   r   r   r;   r   r\   r   )r   diagr   r   r   r   r  s      r!   test_gh5336zTestSqrtM.test_gh5336  sp    GIIIGT!WWaO$$q!ae4444a!%000000r#   c                     t          j        d          }t          j        d          }t          t          j        ||          |d           t          t	          |          |d           d S )N)r   r   r\   r   )r   zerosr   r   r   r  s      r!   test_gh7839zTestSqrtM.test_gh7839  s`    HVHVq!ae4444a!%000000r#   zfailing on macOS after gh-20212r   c                     t          j        d          }|                    d           t          j        |d           t          j        t          |                    sJ d S )N)   r  gGz?r;   )r   r   fillfill_diagonal	isrealobjr   r4   r{   s     r!   test_gh17918zTestSqrtM.test_gh17918  sU    HX	t
A|E!HH%%%%%%%r#   c                 &   t          j        dt           j                  }t          |          j        t           j        k    sJ t          j        dt           j                  }t          |          j        t           j        k    sJ t          j        dt           j                  }t          |          j        t           j        k    sJ t          j        dt           j	                  }t          |          j        t           j
        k    sJ d S Nr   r   r   )r   r  uint8r   r   float16uint16uint32r   uint64float64r  s     r!   -test_data_size_preservation_uint_in_float_outz7TestSqrtM.test_data_size_preservation_uint_in_float_out  s    HXRX...Qxx~++++HXRY///Qxx~++++HXRY///Qxx~++++HXRY///Qxx~++++++r#   c                 &   t          j        dt           j                  }t          |          j        t           j        k    sJ t          j        dt           j                  }t          |          j        t           j        k    sJ t          j        dt           j                  }t          |          j        t           j        k    sJ t          j        dt           j	                  }t          |          j        t           j
        k    sJ d S r!  )r   r  int8r   r   r$  int16int32r   int64r(  r  s     r!   ,test_data_size_preservation_int_in_float_outz6TestSqrtM.test_data_size_preservation_int_in_float_out  s    HXRW---Qxx~++++HXRX...Qxx~++++HXRX...Qxx~++++HXRX...Qxx~++++++r#   c                 V   t          j        ddgddggt           j                  }t          |          j        t           j        k    sJ t          j        ddgddggt           j                  }t          |          j        t           j        k    sJ t          j        ddgddggt           j                  }t          |          j        t           j        k    sJ t          j        ddgddggt           j                  }t          |          j        t           j	        k    sJ d S )Nr   rn   r   r   )
r   r   r+  r   r   r   r,  r-  r.  
complex128r  s     r!   +test_data_size_preservation_int_in_comp_outz5TestSqrtM.test_data_size_preservation_int_in_comp_out  s    Hq!fq"g&bg666Qxx~----Hq!fq"g&bh777Qxx~----Hq!fq"g&bh777Qxx~----Hq!fq"g&bh777Qxx~......r#   c                 T   t          j        dt           j                  }t          |          j        t           j        k    sJ t          j        dt           j                  }t          |          j        t           j        k    sJ t          j        dt           j                  }t          |          j        t           j        k    sJ t          t           d          rDt          j        dt           j                  }t          |          j        t           j        k    sJ d S d S )Nr"  r   float128)	r   r  r$  r   r   r   r(  hasattrr5  r  s     r!   .test_data_size_preservation_float_in_float_outz8TestSqrtM.test_data_size_preservation_float_in_float_out  s    HXRZ000Qxx~++++HXRZ000Qxx~++++HXRZ000Qxx~++++2z"" 	1555A88>R[0000	1 	100r#   c                    t          j        ddgddggt           j                  }t          |          j        t           j        k    sJ t          j        ddgddggt           j                  }t          |          j        t           j        k    sJ t          j        ddgddggt           j                  }t          |          j        t           j        k    sJ t          t           d          r_t          t           d          rLt          j        ddgddggt           j
                  }t          |          j        t           j        k    sJ d S d S d S )Nr   rn   r   r1  r   r5  
complex256)r   r   r$  r   r   r   r   r(  r2  r6  r5  r9  r  s     r!   -test_data_size_preservation_float_in_comp_outz7TestSqrtM.test_data_size_preservation_float_in_comp_out  s7   Hq!fq"g&bj999Qxx~----Hq!fq"g&bj999Qxx~----Hq!fq"g&bj999Qxx~....2z"" 	3wr<'@'@ 	31a&1b'*"+>>>A88>R]2222	3 	3 	3 	322r#   c                    t          j        ddgddggt           j                  }t          |          j        t           j        k    sJ t          t           d          rt          j        ddgddggt           j                  }t          |          j        t           j        k    sJ t          j        ddgddggt           j                  }t          |          j        t           j        k    sJ d S d S )Nr  rn   r   r  r   r9  )r   r   r   r   r   r2  r6  r9  r  s     r!   ,test_data_size_preservation_comp_in_comp_outz6TestSqrtM.test_data_size_preservation_comp_in_comp_out  s    Hr1g3x(===Qxx~....2|$$ 	32q'As8,BMBBBA88>R]22222q'As8,BMBBBA88>R]2222		3 	3 32r#   r   c                     t          j        d|          }t          |          }t          j        d|          }t          |          }|j        dk    sJ |j        |j        k    sJ d S r   )r   r   r   r   r   r   )r4   r   r5   sr   s0s         r!   r   zTestSqrtM.test_empty  sn    HV2&&&!HHVAR   2YYw&    w"(""""""r#   N)#rR   rS   rT   r   r   r   r   r   r   r   r  r  r	  r   r  r  r  r   r   r   r  r)  r/  r3  r7  r:  r<  r   r   r   r   r   r   r   r   rU   r#   r!   r   r      s       7 7 77 7 72 2 2*? ? ?>? ? ?*	> 	> 	>; ; ;	- 	- 	-- - -"% % %1 1 1
1 
1 
11 1 11 1 1 [?@@& & A@&	, 	, 	,	, 	, 	,
/ 
/ 
/	1 	1 	1
3 
3 
33 3 3 [TC
GR\#RSS# # TS# # #r#   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                            d	
          d             Zd ZdS )TestFractionalMatrixPowerc                    t           j                            d           t          dd          D ]}t          dd          D ]}t           j                            ||          dt           j                            ||          z  z   }t          j        ddd          D ]J}||z  }t          |d|z            }t           j                            ||          }t          ||           Kd S )Nrk   r;   r   r   rm   rn   ro   
r   rq   rr   rs   rt   ru   r   rv   r   r   r4   prx   ry   rz   r{   M_rootr   s           r!   r   z8TestFractionalMatrixPower.test_round_trip_random_complex  s    
	tq! 	5 	5A1a[[ 5 5Y__Q22R")//!Q:O:O5OO
[Q22 5 5E"U*A4Q!<<F#%9#9#9&!#D#DL#L!4444	55	5 	5r#   c                    t           j                            d           t          dd          D ]}t          dd          D ]}t           j                            ||          }t          j        ddd          D ]J}||z  }t          |d|z            }t           j                            ||          }t          ||           Kd S )Nrk   r;   r   rm   rn   ro   rC  rD  s           r!   r   z6TestFractionalMatrixPower.test_round_trip_random_float  s    
 		tq! 	5 	5A1a[[ 5 5Y__Q22
[Q22 5 5E"U*A4Q!<<F#%9#9#9&!#D#DL#L!4444	55	5 	5r#   c                    t           j                            d           dD ]}t          d          D ]}t           j                            ||          dt           j                            ||          z  z   }t          |d          }t           j                            |d          }t          ||           t          |d          }t           j                            |d          }t          ||           t          |d	          }t           j                            |d
          }t          ||           	d S )Nrk   )r   r   r   r   r   皙?r   gigffffff@r  )	r   rq   rr   rs   rt   r   rv   r   r   )r4   rx   ir{   M_one_fifthr   r   r   s           r!   (test_larger_abs_fractional_matrix_powerszBTestFractionalMatrixPower.test_larger_abs_fractional_matrix_powers  s   
	t 	& 	&A2YY & &IOOAq))BA1F1F,FF5a==!y55k1EE<000+At44I**;<<1%%%+As33I**;;;1%%%%&	& 	&r#   c                 n   t           j                            d           d}t          |          D ]}t          j        dd          }t           j                                        }t          j        t          j        dd                    }t           j                            ||          }t          j        d          r&|dt           j                            ||          z  z   }||z  }t          ||          }t          |d	          \  }}	t          ||z            }
t          ||
           d S )
Nrk      r;   r   rm   )TFr   Fr=   )r   rq   rr   rs   	randrangert   expchoicer   r   r   r   )r4   nsamplesrJ  rx   rE  matrix_scaler    A_powerr`   ra   A_power_expm_logms              r!   test_random_matrices_and_powersz9TestFractionalMatrixPower.test_random_matrices_and_powers0  s    		tx 	8 	8A A&&A	!!A 6&"22q"9"9::L	1%%A}]++ 3RY__Q2222L A
 .a33G...LFD $VaZ 0 0G%67777%	8 	8r#   c                    t                      }t          |t          j        d          \  }}t	          |d          \  }}t          j        |d          }t          |d          }t          ||d           t          ||           t          ||           dD ]m}t          ||          }t          |d|z            }t          ||d           t          t          j	        |d          t          j	        |d                     nd S )	NFr=   r   gdy=r   )r   g?r;   r   )
r"   r   r   r   r   r   _remainder_matrix_powerr   r   r   )	r4   r    A_funm_sqrtra   r   A_rem_powerrT  rE  rb   s	            r!   r   z?TestFractionalMatrixPower.test_al_mohy_higham_2012_experiment_1I  s   133 !BG%888Tae,,,'?3GG)!S11W59999)))---  	E 	EA-a33G27AaC@@LL!$7777BGL!44bgammDDDD		E 	Er#   c                 r   t           j                            d           t           j                            d          dt           j                            d          z  z   D ]T}t	          d          D ]B}t          j        ||          }|t          j        |           z  dz
  }t          ||           CUd S )Nrk   r   r   r   r;   )	r   rq   rr   rt   rs   r   _briggs_helper_functionexp2r   )r4   r5   k
x_observed
x_expecteds        r!   test_briggs_helper_functionz5TestFractionalMatrixPower.test_briggs_helper_function]  s    
	t$$rBIOOB,?,?'?? 	8 	8A1XX 8 8.Fq!LL
"'1"++-1

J77778	8 	8r#   c                    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 ]!}t           j                            |          }t          t	          d |D                                   dD ]}t          j        |t                    }t          ||          }t          |j	        j
        |v           t          j        |t                    }t          ||          }t          |j	        j
        |v            t          j        |t                     }t          ||          }t          |j	        j
        |v            ֐#d S )	Nr   r;   r   r   r   c              3   :   K   | ]}|j         p
|j        d k     V  dS r   r   r   s     r!   r   zRTestFractionalMatrixPower.test_type_preservation_and_conversion.<locals>.<genexpr>s  r   r#   333333rI  gffffff
@r   )r   rv   rw   r	   r   r   r   r   r   r   r   r   r4   r   r   r|   rE  r    rT  s          r!   %test_type_preservation_and_conversionz?TestFractionalMatrixPower.test_type_preservation_and_conversione  s   
 .Q!Q Q!Q Q!Q Q!Q 	" 	C 	CN $$^44A<<!<<<<<<=== , C C H^59991!Q77*2EEFFF H^7;;;1!Q77*.AABBB XnE::::1!Q77*.AABBBBC	C 	Cr#   c                    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 ]}t          j        |t          
          }t          ||          }t          |j	        j
        |v            t          j        |t          
          }t          ||          }t          |j	        j
        |v            d S )Nr   r;   r   r   r   r   r   c              3   :   K   | ]}|j         p
|j        d k     V  dS r   r   r   s     r!   r   z`TestFractionalMatrixPower.test_type_conversion_mixed_sign_or_complex_spectrum.<locals>.<genexpr>  r   r#   rd  r   )r   rv   rw   r	   r   r   r   r   r   r   r   r   rg  s          r!   3test_type_conversion_mixed_sign_or_complex_spectrumzMTestFractionalMatrixPower.test_type_conversion_mixed_sign_or_complex_spectrum  s1   -Q!R!Q!Q IIIyyy13 	C 	CN $$^44AC88a88888999 , 
C 
C H^7;;;1!Q77*.AABBB H^59991!Q77*.AABBBB
C	C 	Cr#   zToo unstable across LAPACKs.r   c                    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 ]}t           t          fD ]}t          j        ||	          }d
D ]E}t	          ||          }t          t          j        |                                                     FdD ]5}t	          ||          }t	          |d|z            }t          ||           6d S )Nr   r;   r   r   rl   r  )r   r;   r;   )r   r   r;   r   )gffffffrf  re  g)rI  gzG?)	r   r   r   r   r   r	   r  r  r   )r4   r   newtyper    rE  rT  rb   s          r!   test_singularz'TestFractionalMatrixPower.test_singular  s"    Q!Q Q!Q Q!Q IIIzzz2	4 	5 	5N "7+ 5 5H^7;;;1 5 5A5a;;GBHW--11334444$ 5 5A5a;;G#:7AaC#H#HL#L!444455	5 	5r#   c                     ddgddgg}ddgddgg}t          t          j        ||          |d	           t          t          |d
          |d	           d S )Nr  rn   r   r  r  r   r  r\   r   r   )r   r   r   r   r  s      r!   r   z@TestFractionalMatrixPower.test_opposite_sign_complex_eigenvalues  sk    !Wq#hAYD	"q!ae4444/377GGGGGGr#   N)rR   rS   rT   r   r   rL  rV  r   ra  rh  rk  r   r   r   rn  r   rU   r#   r!   rA  rA    s        	5 	5 	55 5 5& & &$8 8 82E E E(8 8 8!C !C !CFC C C2 [<==5 5 >=5&H H H H Hr#   rA  c                       e Zd Zd Zd Zej                            dee	e
j        ee
j        g          d             Zd Zd Zd Zej                            d          d	             Zd
S )TestExpMc                 v    t          ddgddgg          }t          t          |          ddgddgg           d S )Nr:   r   r;   )r   r   r   r@   s     r!   	test_zerozTestExpM.test_zero  sC    Bq61Q%.!!!$q''Aa5!A-88888r#   c                     t          d          }t          |t          j        t          j        gg                     d S )Nr;   )r   r   r   r   r   )r4   elts     r!   test_single_eltzTestExpM.test_single_elt  s3    1ggRXvh//00000r#   r   c                     t          j        d|          }t          |          }|j        dk    sJ |j        |j        k    sJ d S )Nr   r   r   )r   r  r   sizer   )r4   r   r    results       r!   test_empty_matrix_inputz TestExpM.test_empty_matrix_input  sQ     HV2&&&a{a|qw&&&&&&r#   c                    t           j        }t          ddgddgg          }|dz  dz   d|z  z  }|dz  dz
  |z  }t          t	          |          t          ||g|dz  |gg                     t	          |                    t           j                            j        j        dk    sJ t	          |                    t           j	                            j        j        dk    sJ d S )Nr;   rn   r   r   f)
r   r   r   r   r   astyper   r   r   r   )r4   r   r5   aabbs        r!   test_2x2_inputzTestExpM.test_2x2_input  s    DAq6Aq6"##dQh1dQh\QR2a4*'=!>!>???AHHR\**++16#====AHHRZ(())/4;;;;;;r#   c                    t           j        }t          j        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gd	          }t          j        |dz  dz   d
|z  z  |dz  dz
  |z  g|dz  dz
  dz  |z  |dz  dz   d
|z  z  ggdd|d
z  z  z  d|d
z  z  dz  z   d|d
z  z  dz  dd|d
z  z  z  z
  g|d
z  dz  dd|d
z  z  z  z
  dd|d
z  z  z  |d
z  dz  z   ggdd|z  z  |dz  dz  z   dd|z  z  d|dz  z  dz  z   gdd
|z  z  |dz  d
z  z   dd|z  z  d|dz  z  dz  z   ggdd|d
z  z  z  d|dz  z  dz  z   dd|d
z  z  z  d|dz  z  dz  z   gdd|d
z  z  z  d|dz  z  dz  z   dd|d
z  z  z  d|dz  z  dz  z   ggdd
|z  z  d|z  d
z  z   dd
|z  z  d|z  d
z  z   gdd
|z  z  d|z  d
z  z
  dd
|z  z  d|z  d
z  z
  ggg          }t          t	          |          |           d S )Nr;   rn   r   r   r   rm   r   )orderr   rY   r   rl   )r   r   r   r   r   )r4   r   r5   a_ress       r!   test_nx2x2_inputzTestExpM.test_nx2x2_input  s   DH1v1v&1v2w'1v1v&1v1v&1vBx(	* 25	6 6 6 T!VacNQT!VQJ7T!VQJqL1a46AaC.9;qAvJ!Q$z1AadFA:a1a4j3HIqDF1a1f:-q!AqD&z!Q$q&/@ACqsGAqDFNB!Ha1faZ,?@!HQT!VOQ!Wa1faZ-?@BqAvJ!Q$z12qAv;!Q$z3IJ!Q$K1a4
2AqAvJ!Q$z4IJL!Hac1W,b!A#h!Qw.>?qsGQqS!GOQ!Wac1W_=?   	Q'''''r#   c                 l    d}t          j        ||f          }d|j        _        t	          |           d S )NrY   F)r   r   r   r   r   r   s      r!   r   zTestExpM.test_readonly  s1    GQFOO!Qr#   r   c                    t          j        dt                    }t           j                            d          }|                    ddd          }|                    ddd          }|                    d          |||f<   t          j        dt                    }|                                |d<   t          |          \  }}|dk    sJ t          |          }t           j
                            t          |          |           t          d	          D ]1}t          |          }	t           j
                            ||	           2d S )
N)  r  r   d   r   i  i  )r   r  r  ro   r   )r   r  r   rq   default_rngintegersr   copyr   r   testingr   r   rs   )
r4   r    rngrJ  jAmrZ   r>  	first_resnext_ress
             r!   test_gh18086zTestExpM.test_gh18086  s!   HZu---i##C((LLC%%LLC%%**S//!Q$Xm51111"2&&1AvvvvGG	

,,T)__a@@@q 	F 	FAAwwHJ00HEEEE	F 	Fr#   N)rR   rS   rT   rs  rv  r   r   r   r   r   r   r   r   r   rz  r  r  r   	fail_slowr  rU   r#   r!   rq  rq    s        9 9 91 1 1 [TC
GR\#RSS' ' TS'< < <( ( (.   [1F F F F Fr#   rq  c                       e Zd Zd Zd Zd Zd Zej        j	        ej        
                    d          d                         ZdS )	TestExpmFrechetc                    t          j        g dg dg dg dgt                    }t          j        ddgdd	ggt                    }t          j        d
dgddggt                    }t          j                            |          }t          j                            |          d ddd f         }i ddiddifD ]3}t          ||fi |\  }}t          ||           t          ||           4d S )Nr;   r   r   rn   r   rl   rY   r   r   r   r;   r   r   r   r   rl   r   r;   r   r   rl   r   rn   rY   r   methodSPSblockEnlarge)r   r   r   r   rv   r   r   r   )	r4   r{   r    r   expected_expmexpected_frechetkwargsobserved_expmobserved_frechets	            r!   test_expm_frechetz!TestExpmFrechet.test_expm_frechet
  sL   HLLLLLLLL	
    HFF    HFF    ))!,, <,,Q//ABB7HU+h~-FG 	@ 	@F.:1a.J.J6.J.J+M+M=999,.>????	@ 	@r#   c                    t          j        g dg dg dg dgt                    }t          j        ddgdd	ggt                    }t          j        d
dgddggt                    }t          j                            |d          }g d}t          |d d         |dd                    }|D ]\  }}t          j        j        j        |         }	t          j        j        j        |         }
d|	|
z   z  }||z  }||z  }||z  }||z  }t          j        	                    |          }t          j        	                    |          d ddd f         }t          ||          \  }}t          ||           t          ||           d S )Nr  r  r  r  r   r;   r   r   rl   r   rn   rY   r   )r;   r   r   rY   ro            r   r   )r   r   r   r   rv   r   zip_expm_frechetell_table_61r   r   r   )r4   
M_original
A_original
E_originalA_original_norm_1selected_m_listm_neighbor_pairsmambell_aell_btarget_norm_1rz   r{   r    r   r  r  r  r  s                       r!   test_small_norm_expm_frechetz,TestExpmFrechet.test_small_norm_expm_frechet!  s   XLLLLLLLL	
   
 XFF   
 XFF   
 "L--j!<<555ss3_QRR5HII& 	@ 	@FBL.;B?EL.;B?E55=1M!$55E
"A
"A
"A!L--a00M$|0033BQBF;.:1a.@.@+M+M=999,.>????	@ 	@r#   c           	      h   t           j        j        t           j        j        t           j        j        t           j        j        f}d}t          |          D ]\}t          j        |          }t          j        d          }t          j	        dd          } |||f          } |||f          }t          j                            |d          }	||	z  }
|
|z  }|
|z  }t          j        t          j        ||g          t          j        t          j        |          |g          g          }t          j                            |          }t          j                            |          d ||d f         }t#          ||          \  }}t%          ||d           t%          ||d	           ^d S )
Nr  r   r      rx  r;   gHj>r   gHz>)r   rq   uniformnormalstandard_cauchyexponentialrs   rQ  expovariaterO  r   rv   r   vstackhstack
zeros_liker   r   r   )r4   rfuncsntestsrJ  rfuncr  rx   r  r  r  rz   r    r   r{   r  r  r  r  s                     r!   	test_fuzzzTestExpmFrechet.test_fuzzB  s    	!	 	)	%	'
 v 	K 	KAM&))E".s33M B''AQqE***JQqE***J % 1 1*a @ @!$55E
"A
"A		1a&!!	2=++Q/002 3 3A "L--a00M$|0033BQBF;.:1a.@.@+M+M=tDDDD,.>TJJJJJ#	K 	Kr#   c                 ^   t          j        ddgddggt                    }t          j        ddgdd	ggt                    }t          j                            |d
           t          ||d          \  }}t          ||d          \  }}t          ||           t          ||           d S )Ng]؉??gvP?g^?guÝ?r   gS,?g| @gJt?g~3?r;   r  r  r  )r   r   r   r   rv   r   r   r   )r4   r    r   sps_expmsps_frechetblockEnlarge_expmblockEnlarge_frechets          r!   test_problematic_matrixz'TestExpmFrechet.test_problematic_matrix]  s    HZ(Z(       HZ(Z(       	!Q ,1U!$ !$ !$+2>1^3- 3- 3-//"3444%9:::::r#   zthis test is deliberately slowr   c                 &   d}t           j                            ||f          }t           j                            ||f          }t          ||d          \  }}t          ||d          \  }}t	          ||           t	          ||           d S )Ni  r  r  r  r  )r   rq   r  r   r   )r4   rx   r    r   r  r  r  r  s           r!   test_medium_matrixz"TestExpmFrechet.test_medium_matrixo  s     I!!1v!..I!!1v!.. ,1U!$ !$ !$+2>1^3- 3- 3-//"3444%9:::::r#   N)rR   rS   rT   r  r  r  r  r   r   slowskipr  rU   r#   r!   r  r    s        @ @ @.@ @ @BK K K6; ; ;$ [[=>>
; 
; ?> 
; 
; 
;r#   r  c                     t          j        || j                  }t          |          }||z  ||z  z  }t	          | |z             }t          ||z
            ||z  z  }	|	 S N)r   reshaper   r   r   )
r    A_normr   X_normepsrE  p_normperturbationX_primescaled_relative_errors
             r!   _help_expm_cond_searchr  ~  sh    

1agA!WWF7fvo.L1|#$$G 1--#>!!!r#   c                     | t           j                            |          t           j                            |           z  z  S r  )r   rv   r   )r    r   s     r!   _normalized_liker    s2    !!!$$u|'8'8';';;<<r#   c                 x     | |          } | ||z             }t          ||z
            t          |          z  S r  )r   )r|  r    r  r   r  s        r!   _relative_errorr    s@    	!AaL !!G!tAww&&r#   c                   J    e Zd Zd Zd Zd Zej        j        d             Z	dS )TestExpmConditionNumberc                     t           j                            d           t          dd          D ]A}t           j                            ||          }t          |          }t          d|           Bd S )Nrk   r;   rn   r   )r   rq   rr   rs   rt   r   r
   )r4   rx   r    kappas       r!   test_expm_cond_smokez,TestExpmConditionNumber.test_expm_cond_smoke  sj    
	tq! 	( 	(A	1%%AaLLEa''''	( 	(r#   c                     t          j        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
   )r4   r    r  s      r!   test_expm_bad_condition_numberz6TestExpmConditionNumber.test_expm_bad_condition_number  s_    HIII<<<///###	   !$&&&&&r#   c                 z   t           j                            d           t          j        ddd          D ]B}t          j        |gg          }t          t          |          t          |                     Ct          j        ddd          D ]B}t          j        |gg          }t          t          |          t          |                     Ct          d          D ]W}t           j        
                    d	d	          }t          t          |          t          j        |          d
                    Xd S )N90  r  r   r  )numr1  r   r   r;   r   )r   rq   rr   linspacer   r   r   absru   rs   rt   r   )r4   xr    rJ  s       r!   test_univariatez'TestExpmConditionNumber.test_univariate  s   
	uR+++ 	2 	2A1#AIaLL#a&&1111R+++ 	2 	2A1#AIaLL#a&&1111r 	@ 	@A	1%%AIaLL"+a..*>????	@ 	@r#   c           	      V   t           j                            d           d}d}t          |          D ]}t           j                            dd          }t           j                            ||          }t          j                            |          }t          |          }t          j                            |          }t          |          }	t          j        t          |||||          }
t          j        ||z            }t          |
|d          }|j        } |
|          }|t#          t          j        ||j                  |          z  }t)          t          ||          }t+          || |z             t          d          D ]{}|t#          t          j        j        |j         |          z  }t+          t          |          t          |                     t)          t          ||          }t-          ||           |t-          |dd|z  z   |z  |	z             d S )	Nr  re   r   r   r   zL-BFGS-Br  r;   )r   rq   rr   rs   randintrt   r   rv   r   r   r   	functoolspartialr  r   r   r  r  r  r   r  r   r
   )r4   r  rR  rJ  rx   r    r  r   r  r  r|  guessoutxoptyoptp_bestp_best_relerrr  p_randp_rand_relerrs                       r!   test_expm_cond_fuzzz+TestExpmConditionNumber.test_expm_cond_fuzz  s   
	ux 	H 	HA	!!!Q''A	1%%A\&&q))FQA\&&q))FaLLE !"8vq&#/ /AGAaCLLE1eJ777C5D1T77D+BJtQW,E,EqIIIF+D!V<<MMD53;777 1XX @ @/	0I1MMMVd6ll;;; /a @ @!-????
 ma!C%i3->-FGGGG?	H 	Hr#   N)
rR   rS   rT   r  r  r  r   r   r  r  rU   r#   r!   r  r    sj        ( ( (' ' '
@ 
@ 
@ [#H #H #H #H #Hr#   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestKhatriRaoc           
      ^   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          j        ddg          t          j        ddg                    }t          |j        d           d S )Nr;   r   r   rn   r   rl   rY   r      r  r            )rn   r   )r   r   r   r   r   r   r4   r5   bs      r!   
test_basiczTestKhatriRao.test_basic  s    uq!fq!f-..q!fq!f-..0 0 	1eaW&'W&("X&("X%/ 0 0 	1 	1 	1
 rxA''1a&)9)9::17F+++++r#   c                     t          j        t                    5  t          g dg dg          }t          ddgddgg          }t	          ||           d d d            d S # 1 swxY w Y   d S )Nr;   r   r   rn   r   rl   r;   r   r   rn   r   raises
ValueErrorr   r   r  s      r!   test_number_of_columns_equalityz-TestKhatriRao.test_number_of_columns_equality  s    ]:&& 	 	yyy yy" # #A1v1v    Aq!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ;A""A&)A&c                 j   t          j        t                    5  t          g d          }t          g d          }t	          ||           d d d            n# 1 swxY w Y   t          j        t                    5  t          g d          }t          g dg dg          }t	          ||           d d d            n# 1 swxY w Y   t          j        t                    5  t          g dg dg          }t          g d          }t	          ||           d d d            d S # 1 swxY w Y   d S )Nr  r	  )rY   r   ro   r
  r  s      r!   test_to_assure_2d_arrayz%TestKhatriRao.test_to_assure_2d_array  s    ]:&& 	 	iii  Aiii  Aq!		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]:&& 	 	iii  A				  A q!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]:&& 	 					  A iii  Aq!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   3AA A=7C  CC$7D((D,/D,c                    t          ddgddgg          t          ddgddgg          t                    }t          j        fd	t	          j        d                   D                       j        }t          ||           d S )
Nr;   r   r   rn   r   rl   rY   r   c                 b    g | ]+}t          j        d d |f         d d |f                   ,S r  )r   kron)r   r^  r5   r  s     r!   
<listcomp>z@TestKhatriRao.test_equality_of_two_equations.<locals>.<listcomp>
  sM     6 6 6 '!AAAqD'1QQQT733 6 6 6r#   )r   r   r   r  rs   r   r   r   )r4   res1res2r5   r  s      @@r!   test_equality_of_two_equationsz,TestKhatriRao.test_equality_of_two_equations  s    Aq6Aq6"##Aq6Aq6"##!Qy 6 6 6 6 6#(#4#46 6 6 7 778 	 	4&&&&&r#   c                 n   t          j        d          }t          j        d          }t          ||          }t          |t          j        d                     t          j        d          }t          j        d          }t          ||          }t          |t          j        d                     d S )N)r   r   )r   r   )r   r   )r   r   )r  r   )r   r   r   r   )r4   r5   r  ress       r!   r   zTestKhatriRao.test_empty  s    HVHVARXf--...HVHVARXg../////r#   N)rR   rS   rT   r  r  r  r  r   rU   r#   r!   r  r    s_        
, 
, 
,    2' ' '	0 	0 	0 	0 	0r#   r  )/__doc__rq   r  numpyr   r   r   r   r   numpy.testingr   r   r	   r
   r   r   r   scipy.linalgr   r   r   r   r   r   r   r   r   r   r   r   scipy.linalg._matfuncsr   scipy.linalg._expm_frechetscipy.optimizer   r"   r%   rW   r   rA  rq  r  r  r  r  r  r  rU   r#   r!   <module>r      s|             , , , , , , , , , , , ,P P P P P P P P P P P P P P P P     K K K K K K K K K K K K K K K K K K K K K K K K * * * * * * 6 6 6 6 6 6 ! ! ! ! # # # # # #  *' ' ' ' ' ' ' 'V`+ `+ `+ `+ `+ `+ `+ `+FC# C# C# C# C# C# C# C#LvH vH vH vH vH vH vH vHrIF IF IF IF IF IF IF IFXs; s; s; s; s; s; s; s;l" " "= = =' ' 'BH BH BH BH BH BH BH BHJB0 B0 B0 B0 B0 B0 B0 B0 B0 B0r#   