o
    i.                     @   sd  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZmZ ejejfZejejfZee Ze jdee jd	g d
e jdddg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edd Z"e jd g d!e jd"g d#e jd$g d#e jdddgd%d& Z#d'd( Z$dS ))    N)default_rng)assert_allclose)linalg)_compute_lwork)ortho_groupunitary_group)cossinget_lapack_funcsdtype_zm, p, q)
)      r   )   r   r   )r   r   r   )   r   r   )r   r   r   )(         )r      r   )r   r   r   )d   2   r   )r   r   r   	swap_signTFc                 C   s@  t d}| tv rtjtj||d| d}ntjtj||d| d}t||||d\}}}	t||| |	 d|d t	| j
 d |j| ksGJ |jt|jksRJ |	j| ksYJ t|d |d |f |d ||d f ||d d |f ||d |d f g|d\}}}	t||| |	 d|d t	| j
 d |j| ksJ |jt|jksJ |	j| ksJ t|||d|d	\}
}}t||dd
t	| j
 d t|	|dd
t	| j
 d t|||d|d\}}}
t||dd
t	| j
 d t||dd
t	| j
 d t|||dd|d\}
}}
t||dd
t	| j
 d d S )Nl   I9F0 Zrandom_statedtype)r           g     @@rtolatolF)	compute_ur   
   )
compute_vhr   )r   r   r   )r   COMPLEX_DTYPESnparrayr   rvsr   r   r   finfoepsr   real)r
   mpqr   rngxucsvh_Zcs2Zvh2u2 r1   _/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/linalg/tests/test_decomp_cossin.pytest_cossin   sH   (L( r3   c                  C   s   t d} tjtjd| dtjd}t|d dd df tj|d ddd f tjd|dd d df |dd dd f g\}}}|jtjksJJ |jtjksRJ |jtjksZJ t	||| | ddt
tjj d d S )	Nl   ; F0 r   r   r   r   r   g     @r   )r   r!   r"   r   r#   float64r   
complex128r   r   r$   r%   )r*   r+   r,   r-   r.   r1   r1   r2   test_cossin_mixed_typesH   s   
r6   c                   C   sT   t jtdd tddgg dddgg df W d    d S 1 s#w   Y  d S )	Nz!be due to missing p, q arguments.matchr   r   r   r               	   r   pytestraises
ValueErrorr   r1   r1   r1   r2   %test_cossin_error_incorrect_subblocksW   s   ""rD   c                   C   s   t jtdd tg g g g f W d    n1 sw   Y  t jtdd tddgg ddgg df W d    n1 s?w   Y  t jtd	d tddgg d
g g df W d    n1 sdw   Y  t jtdd tddgg d
dgg f W d    d S 1 sw   Y  d S )Nz
x11.*emptyr7   z
x12.*emptyr   r   r;   r<   r=   z
x21.*emptyr9   z
x22.*emptyr@   r1   r1   r1   r2   !test_cossin_error_empty_subblocks\   s   "rE   c                   C   s~   t jtdd ttd W d    n1 sw   Y  t jtdd ttd W d    d S 1 s8w   Y  d S )Nz.*exactly four arrays.* got 2r7   r   z.*might be due to missing p, qr   )rA   rB   rC   r   r   r#   r1   r1   r1   r2   &test_cossin_error_missing_partitioningg   s   "rF   c                   C   s<   t jtdd td W d    d S 1 sw   Y  d S )Nzcontaining the subblocks of Xr7   y              (@r@   r1   r1   r1   r2   test_cossin_error_non_iterableo   s   
"rG   c                   C   sL   t jtdd ttddggdd W d    d S 1 sw   Y  d S )Nzonly supports squarer7   r   r   )rA   rB   rC   r   r!   r"   r1   r1   r1   r2   test_cossin_error_non_squaret   s   "rH   c                  C   s  t jtdt jd} tjtdd t| dd W d    n1 s#w   Y  tjtdd t| dd W d    n1 s@w   Y  tjtdd t| dd	 W d    n1 s]w   Y  tjtd
d t| dd W d    d S 1 s{w   Y  d S )Nr   r   zinvalid p=0.*0<p<4.*r7   r   r   zinvalid p=4.*0<p<4.*zinvalid q=-2.*0<q<4.*zinvalid q=5.*0<q<4.*r:   )	r!   r"   r   r#   r4   rA   rB   rC   r   )r+   r1   r1   r2   test_cossin_error_partitioningy   s   "rJ   c                 C   s  t d}d\}}}| tv rdnd}|dkrtj||dntj||d}tj|| d}t|d |d f|g\}}t||||}	|dkrGd	|	int	t
d	d
g|	}
||d |d |f |d ||d f ||d d |f ||d |d f fi |
^ }}}}}}}t|||dd\\}}}\}}t||ddt| j d t||ddt| j d t||ddt| j d t||ddt| j d t||ddt| j d d S )Nl   8^^F0 )b   %   =   orunr   r   csdZ	csd_lworkZlworkZlrworkT)separater   r   r   )r   REAL_DTYPESr   r#   r   r!   r"   r	   r   dictzipr   r   r$   r%   )r
   r*   r'   r(   r)   pfxXdrvZdlwZlwvalZlwvalsr/   thetau1r0   Zv1tZv2tZu1_2Zu2_2Ztheta2Zv1t_2Zv2t_2r1   r1   r2   test_cossin_separate   s,   
T rZ   r'   )r   r:   r      r   r(   )r   r   r?         r)   c           (      C   s&  || ks|| krt d tjd}tj| |d}tjj||	 j
 t| dd tj|||d|d\}}}|\}	}
|\}}|	 j
|	 j
}}tjj|	|		 j
 t|dd tjj|
|
	 j
 t| | dd tjj||	 j
 t|dd tjj||	 j
 t| | dd tt|}tt|}t|| | || | }tj|d	 |d	  t| tt||| }tt|| | | }tt| | || }tt| | | | | }t|	|
}t||}t|	jd
 |jd f}t||}||d |jd d |jd
 f< t|	jd
 |jd f}|r3t||nt| | }|||jd  d |jd
  d f< t|
jd
 |jd f}|ret| | nt||}|||jd  d |jd
  d f< t|
jd
 |jd f}t||}||d |jd d |jd
 f< t||g||gg}tj||| |	 j
  tj||||d\}} }!tj|| tj||  tj||!	 j
 t|||d}"tj|fddd|"\}#}$}%|#d jdksJ |#d
 jdksJ t|$|dd t|%d |d dd t|%d
 |d
 dd tj|fddi|"\}}&}'|jdks:J t|&| dd t|'|!dd tj|fddd|"\}#}$}%t|#d |#d dd t|#d
 |#d
 dd t|$|dd |%d jdks~J |%d
 jdksJ tj|fddi|"\}}&}'t||dd t|&| dd |'jdksJ tj|fdddd|"\}#}$}%|#d jdksJ |#d
 jdksJ t|$|dd |%d jdksJ |%d
 jdksJ tj|fddd|"\}}&}'|jdksJ t|&| dd |'jdksJ d S )Nz%`0 < p < m` and `0 < q < m` must holdl   ];)$r   gV瞯<)r   T)r(   r)   rQ   r   gvIh%<=r   r   r   )r(   r)   r   F)rQ   r   )r   r   )r   r   )rQ   r   r   )rQ   r   r   )r   r   )rA   skipr!   randomr   r   r#   Ztestingr   ZconjTeyer   r   ZdiagcossinminZ
block_diagZzerosshapeblockrS   )(r'   r(   r)   r   r*   rV   Zu0Zcs0Zvh0rY   r0   Zv1Zv2CSrZI11ZI12ZI21ZI22UVZQ11ZIC11ZQ12ZSI12ZQ21ZSI21ZQ22ZIC22QZU0ZCS0ZVh0kwargsr,   r-   r.   CSZVhr1   r1   r2   test_properties   s   
""&"&  "$"$ ro   c                  C   s   t jd} | jddd}| dd}| || d |d }tj|| d}tj|||d	d
\}}}t || | |s>J d S )Nl   u\Iwr   r   )highr   r   r   r   F)r(   r)   rQ   )	r!   r_   r   Zintegersr   r#   r   r   Zallclose)r*   r'   r(   r)   rV   rj   DZVtr1   r1   r2   test_indexing_bug_gh19365$  s   rr   )%rA   numpyr!   Znumpy.randomr   Znumpy.testingr   Zscipyr   Zscipy.linalg.lapackr   Zscipy.statsr   r   Zscipy.linalgr   r	   Zfloat32r4   rR   Z	complex64r5   r    ZDTYPESmarkZparametrizer3   r6   rD   rE   rF   rG   rH   rJ   rZ   ro   rr   r1   r1   r1   r2   <module>   s@    )
