§
    µ³Ùgì  ã                   ó  — d dl mZmZ d dlZd dlZd dlmZmZ d dlm	Z
 d dlmZmZmZmZ d dlmZ d dlm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g d¢¦  «        d„ ¦   «         Z!dS )é    )ÚproductÚpermutationsN)Úassert_array_lessÚassert_allclose)Úraises)ÚinvÚeighÚnormÚsvd)Úorthogonal_procrustes)Úmatrixc                  óØ   — t           j                             d¦  «        } |                      ddd¦  «        }|                      ddd¦  «        }t	          t
          t          ||¦  «         d S )NéÒ  é   é   é   ©ÚnpÚrandomÚRandomStateÚrandnÚassert_raisesÚ
ValueErrorr   ©ÚrngÚAÚBs      úX/granary/edev/quantum/lib/python3.11/site-packages/scipy/linalg/tests/test_procrustes.pyÚ)test_orthogonal_procrustes_ndim_too_larger      s\   € Ý
Œ)×
Ò
 Ñ
%Ô
%€CØ�	Š	�!�Q˜ÑÔ€AØ�	Š	�!�Q˜ÑÔ€AÝ•*Õ3°Q¸Ñ:Ô:Ð:Ð:Ð:ó    c                  óÐ   — t           j                             d¦  «        } |                      d¦  «        }|                      d¦  «        }t	          t
          t          ||¦  «         d S )Nr   r   r   r   s      r   Ú)test_orthogonal_procrustes_ndim_too_smallr"      sP   € Ý
Œ)×
Ò
 Ñ
%Ô
%€CØ�	Š	�!‰Œ€AØ�	Š	�!‰Œ€AÝ•*Õ3°Q¸Ñ:Ô:Ð:Ð:Ð:r    c                  óÔ   — t           j                             d¦  «        } d}t          |d¦  «        D ]5\  }} | j        |Ž } | j        |Ž }t          t          t          ||¦  «         Œ6d S )Nr   ))r   r   )r   r   ©r   r   ©r   r   é   )r   r   r   r   r   r   r   r   )r   ÚshapesÚaÚbr   r   s         r   Ú)test_orthogonal_procrustes_shape_mismatchr*      su   € Ý
Œ)×
Ò
 Ñ
%Ô
%€CØ-€FÝ˜V QÑ'Ô'ð ?ð ?‰ˆˆ1ØˆCŒI�qˆMˆØˆCŒI�qˆMˆÝ•jÕ"7¸¸AÑ>Ô>Ð>Ð>ð?ð ?r    c                  ó²  — t           j                             d¦  «        } d\  }}|                      ||¦  «        }|                      ||¦  «        }t           j        t           j         t           j        fD ]a}|                     ¦   «         }||d<   |                     ¦   «         }||d<   ||f||f||ffD ]!\  }}	t          t          t          ||	¦  «         Œ"Œbd S )Nr   )r&   r   )é   r&   )
r   r   r   r   ÚinfÚnanÚcopyr   r   r   )
r   ÚmÚnÚA_goodÚB_goodÚ	bad_valueÚA_badÚB_badr   r   s
             r   Ú0test_orthogonal_procrustes_checkfinite_exceptionr7   $   sà   € Ý
Œ)×
Ò
 Ñ
%Ô
%€CØ�D€A€qØ�YŠY�q˜!‰_Œ_€FØ�YŠY�q˜!‰_Œ_€FÝ”V�bœf˜W¥b¤fÐ,ð Cð Cˆ	Ø—’‘”ˆØˆˆd‰Ø—’‘”ˆØˆˆd‰Ø˜e�_ u¨f o¸¸u°~ÐFð 	Cð 	C‰DˆAˆqÝ�*Õ&;¸QÀÑBÔBÐBÐBð	CðCð Cr    c                  óê  — t           j                             d¦  «        } d\  }}t          d¦  «        D ]¾}|                      ||¦  «        }|                      ||¦  «        }t          ||¦  «        \  }}t          j        |                      d¦  «        ¦  «        D ]U}t          j        |                      d¦  «        ¦  «        D ]+}	t          ||z  ||	z  ¦  «        \  }
}t          |
|¦  «         Œ,ŒVŒ¿d S )Nr   r$   r   )r   r   r   Úranger   r   Úsquarer   )r   r0   r1   ÚiÚA_origÚB_origÚR_origÚsÚA_scaleÚB_scaleÚRs              r   Ú+test_orthogonal_procrustes_scale_invariancerC   2   sô   € Ý
Œ)×
Ò
 Ñ
%Ô
%€CØ�D€A€qÝ�1‰XŒXð +ð +ˆØ—’˜1˜a‘”ˆØ—’˜1˜a‘”ˆÝ)¨&°&Ñ9Ô9‰	ˆ�Ý”y §¢¨1¡¤Ñ.Ô.ð 	+ð 	+ˆGÝœ9 S§Y¢Y¨q¡\¤\Ñ2Ô2ð +ð +�Ý,¨V°gÑ-=¸vÈÑ?OÑPÔP‘��1Ý  6Ñ*Ô*Ð*Ð*ð+ð	+ð	+ð +r    c                  ó(  — t           j                             d¦  «        } dD ]ï\  }}|                      ||¦  «        }|                      ||¦  «        }||                     ¦   «         t          |¦  «        f}||                     ¦   «         t          |¦  «        f}t          ||¦  «        \  }}|                     |¦  «        }	t          ||¦  «        D ]=\  }
}t          |
|¦  «        \  }}|                     |¦  «        }t          ||	¦  «         Œ>Œðd S )Nr   ©)é   r   r%   )r   rF   )
r   r   r   r   Útolistr   r   Údotr   r   )r   r0   r1   ÚA_arrÚB_arrÚAsÚBsÚR_arrr?   ÚAR_arrr   r   rB   ÚARs                 r   Ú+test_orthogonal_procrustes_array_conversionrP   ?   s  € Ý
Œ)×
Ò
 Ñ
%Ô
%€CØ(ð 
(ð 
(‰ˆˆ1Ø—	’	˜!˜Q‘”ˆØ—	’	˜!˜Q‘”ˆØ�U—\’\‘^”^¥V¨E¡]¤]Ð3ˆØ�U—\’\‘^”^¥V¨E¡]¤]Ð3ˆÝ(¨°Ñ6Ô6‰ˆˆqØ—’˜5Ñ!Ô!ˆÝ˜B ‘O”Oð 	(ð 	(‰DˆAˆqÝ(¨¨AÑ.Ô.‰DˆAˆqØ—’˜1‘”ˆBÝ˜B Ñ'Ô'Ð'Ð'ð	(ð
(ð 
(r    c                  ór  — t           j                             d¦  «        } dD �]“\  }}|                      ||¦  «        }|                      ||¦  «        }t	          |j        |z   ¦  «        \  }}t          t          |¦  «        |j        ¦  «         t          j        ||j        ¦  «        }t          ||¦  «        \  }}	t          t          |¦  «        |j        ¦  «         t          |                     |¦  «        |¦  «         |d|                      ||¦  «        z  z   }
t          |
|¦  «        \  }}	t          t          |¦  «        |j        ¦  «         |
                     |¦  «        }|
                     |¦  «        }t          ||z
  d¬¦  «        }t          ||z
  d¬¦  «        }t          ||¦  «         �Œ•d S )Nr   rE   g{®Gáz„?Úfro)Úord)r   r   r   r   r	   ÚTr   r   rH   r   r
   r   )r   r0   r1   r   ÚXÚwÚVr   rB   r?   ÚA_perturbedÚR_primeÚnaive_approxÚoptim_approxÚnaive_approx_errorÚoptim_approx_errors                   r   Útest_orthogonal_procrustesr^   N   sŽ  € Ý
Œ)×
Ò
 Ñ
%Ô
%€CØ(ð Bñ B‰ˆˆ1à�IŠI�a˜‰OŒOˆð �IŠI�a˜‰OŒOˆÝ�A”C˜!‘G‰}Œ}‰ˆˆ1Ý�˜A™œ ¤Ñ$Ô$Ð$åŒF�1�a”c‰NŒNˆå$ Q¨Ñ*Ô*‰ˆˆ1Ý�˜A™œ ¤Ñ$Ô$Ð$Ý˜Ÿš˜a™œ !Ñ$Ô$Ð$à˜$ §¢¨1¨a¡¤Ñ0Ñ0ˆõ +¨;¸Ñ:Ô:‰
ˆ�Ý�˜G™œ g¤iÑ0Ô0Ð0à"—’ qÑ)Ô)ˆØ"—’ wÑ/Ô/ˆå! ,°Ñ"2¸Ð>Ñ>Ô>ÐÝ! ,°Ñ"2¸Ð>Ñ>Ô>ÐåÐ,Ð.@ÑAÔAÐAÑAð9Bð Br    c                 ó<   — |                       d¬¦  «        }| |z
  |fS )Nr   )Úaxis)Úmean)r   Úmus     r   Ú	_centeredrc   o   s!   € Ø	
�Š�Qˆ‰Œ€BØˆr‰6�2ˆ:Ðr    c                  ó²  — t          j        ddgddgddgddggt          ¬¦  «        } t          j        ddgddgddgddggt          ¬¦  «        }t          | ¦  «        \  }}t          |¦  «        \  }}t	          ||¦  «        \  }}|t          j        t          |¦  «        ¦  «        z  }|t          j        ||¦  «        z  |z   }	t          |	|d	¬
¦  «         d S )Néýÿÿÿr   éþÿÿÿr&   ©Údtyper,   r   r   ç:Œ0âŽyE>©Úatol©	r   ÚarrayÚfloatrc   r   r:   r
   rH   r   )
r<   r=   r   ÚA_mur   ÚB_murB   r?   ÚscaleÚB_approxs
             r   Ú(test_orthogonal_procrustes_exact_examplers   t   sá   € õ ŒX˜˜A�w  Q ¨"¨a¨°2°q°'Ð:Å%ÐHÑHÔH€FÝŒX˜˜1�v  1˜v¨¨2 w°°A°Ð7½uÐEÑEÔE€FÝ˜ÑÔ�G€A€tÝ˜ÑÔ�G€A€tÝ   AÑ&Ô&�D€A€qØ•”	�$˜q™'œ'Ñ"Ô"Ñ"€EØ•r”v˜a ‘|”|Ñ# dÑ*€HÝ�H˜f¨4Ð0Ñ0Ô0Ð0Ð0Ð0r    c                  ó¸  — t          j        ddgddgddgddggt          ¬¦  «        } t          j        ddgddgdd	gd
dggt          ¬¦  «        }t          | ¦  «        \  }}t          |¦  «        \  }}t	          ||¦  «        \  }}|t          j        t          |¦  «        ¦  «        z  }|t          j        ||¦  «        z  |z   }	t          j        ddgddgddgddggt          ¬¦  «        }
t          |	|
d¬¦  «         d}t          j        t          |	|z
  ¦  «        t          |¦  «        z  ¦  «        }t          ||¦  «         t	          ||¦  «        \  }}|t          j        t          |¦  «        ¦  «        z  }|t          j        ||¦  «        z  |z   }t          j        t          || z
  ¦  «        t          |¦  «        z  ¦  «        }t          ||¦  «         d S )Nre   r   rf   r&   rg   é(   r,   r   iØÿÿÿr   é   iîÿÿÿiëÿÿÿé   ri   rj   gñÒÇ×ÎÜ?rl   )r<   r=   r   ro   r   rp   rB   r?   rq   rr   ÚexpectedÚexpected_disparityÚAB_disparityÚA_approxÚBA_disparitys                  r   Ú,test_orthogonal_procrustes_stretched_exampler}   Œ   sÈ  € åŒX˜˜A�w  Q ¨"¨a¨°2°q°'Ð:Å%ÐHÑHÔH€FÝŒX˜˜2�w  A ¨¨C¨°1°a°&Ð9ÅÐGÑGÔG€FÝ˜ÑÔ�G€A€tÝ˜ÑÔ�G€A€tÝ   AÑ&Ô&�D€A€qØ•”	�$˜q™'œ'Ñ"Ô"Ñ"€EØ•r”v˜a ‘|”|Ñ# dÑ*€HÝŒx˜!˜R˜ 3¨ (¨Q°¨H°r¸1°gÐ>ÅeÐLÑLÔL€HÝ�H˜h¨TÐ2Ñ2Ô2Ð2à+ÐÝ”9�T (¨VÑ"3Ñ4Ô4µt¸A±w´wÑ>Ñ?Ô?€LÝ�LÐ"4Ñ5Ô5Ð5Ý   AÑ&Ô&�D€A€qØ•”	�$˜q™'œ'Ñ"Ô"Ñ"€EØ•r”v˜a ‘|”|Ñ# dÑ*€HÝ”9�T (¨VÑ"3Ñ4Ô4µt¸A±w´wÑ>Ñ?Ô?€LÝ�LÐ"4Ñ5Ô5Ð5Ð5Ð5r    c                  ó.  — t          j        ddgddgddgddggt          ¬¦  «        } t          j        ddgddgddgddggt          ¬¦  «        }t          j        d	d
gd	dgd	dgddgg¦  «        }t          | ¦  «        \  }}t          |¦  «        \  }}t	          ||¦  «        \  }}|t          j        t          |¦  «        ¦  «        z  }	|	t          j        ||¦  «        z  |z   }
t          |
|¦  «         t          |t          |¦  «        z  |¦  «         d S )Nr   rf   éüÿÿÿiúÿÿÿr&   rg   r,   r   gCuRãÎÁ¿g”'œ‚aå?gCuRãÎÁ?gä¯ûT6¨Ù¿gä¯ûT6¨Ù?rl   )r<   r=   ÚB_standardizedr   ro   r   rp   rB   r?   rq   rr   s              r   Ú(test_orthogonal_procrustes_skbio_exampler�   ¢   s.  € õ" ŒX˜˜2�w  B ¨!¨R¨°1°b°'Ð:Å%ÐHÑHÔH€FÝŒX˜˜1�v  1˜v¨¨1 v°°1¨vÐ6½eÐDÑDÔD€FÝ”XØ	�iÐ Ø	�jÐ!Ø	�kÐ"Ø	�[Ð!ð	#ñ $ô $€Nõ
 ˜ÑÔ�G€A€tÝ˜ÑÔ�G€A€tÝ   AÑ&Ô&�D€A€qØ•”	�$˜q™'œ'Ñ"Ô"Ñ"€EØ•r”v˜a ‘|”|Ñ# dÑ*€HÝ�H˜fÑ%Ô%Ð%Ý�A�˜Q™œ‘K Ñ0Ô0Ð0Ð0Ð0r    c                  ó*  — t          j        d¦  «        } t          | | ¦  «        \  }}t          |t          j        d¦  «        ¦  «         t          j        d¦  «        } t          | | ¦  «        \  }}t          |t          j        d¦  «        ¦  «         d S )N)r   r   )r   r   r   )r   Úemptyr   r   Úidentity)r(   Úrr?   s      r   Ú
test_emptyr†   Ã   s~   € Ý
Œ�ÑÔ€AÝ   AÑ&Ô&�D€A€qÝ�A•r”x Ñ'Ô'Ñ(Ô(Ð(å
Œ�ÑÔ€AÝ   AÑ&Ô&�D€A€qÝ�A•r”{ 1‘~”~Ñ&Ô&Ð&Ð&Ð&r    Úshape)©r   r   )r   r   )r   r   c                 óî  — | \  }}t           j                             d¦  «        }|                     | ¦  «        |                     | ¦  «        dz  z   }|                     ||f¦  «        |                     ||f¦  «        dz  z   }t           j                             |¦  «        \  }}||z  }t          ||¦  «        \  }}	t          ||                     ¦   «         j        z  t          j	        |¦  «        d¬¦  «         t          ||z  |¦  «         | dk    rt          ||¦  «         t          |                     ¦   «         j        |z  ¦  «        \  }}
}t          |	t          j        |
¦  «        ¦  «         d S )Nl   sIHb$y              ð?g›+¡†›„=rj   rˆ   )r   r   Údefault_rngÚlinalgÚqrr   r   ÚconjrT   Úeyer   Úsum)r‡   r0   r1   r   r   ÚQÚ_r   rB   rq   r?   s              r   Útest_unitaryr’   Í   s@  € ð �D€A€qÝ
Œ)×
Ò
 Ñ
-Ô
-€CØ�
Š
�5ÑÔ˜CŸJšJ uÑ-Ô-°Ñ2Ñ2€AØ�
Š
�A�q�6ÑÔ˜SŸZšZ¨¨A¨Ñ/Ô/°"Ñ4Ñ4€AÝŒ9�<Š<˜‰?Œ?�D€A€qØ	ˆA‰€AÝ$ Q¨Ñ*Ô*�H€A€uÝ�A˜Ÿš™œœ
‘N¥B¤F¨1¡I¤I°EÐ:Ñ:Ô:Ð:Ý�A˜‘E˜1ÑÔÐØ�‚€Ý˜˜1ÑÔÐÝ�!—&’&‘(”(”*˜q‘.Ñ!Ô!�G€A€qˆ!Ý�E�2œ6 !™9œ9Ñ%Ô%Ð%Ð%Ð%r    )"Ú	itertoolsr   r   Únumpyr   ÚpytestÚnumpy.testingr   r   r   r   Úscipy.linalgr   r	   r
   r   r   Úscipy.sparse._sputilsr   r   r"   r*   r7   rC   rP   r^   rc   rs   r}   r�   r†   ÚmarkÚparametrizer’   © r    r   ú<module>rœ      sŸ  ðØ +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à Ð Ð Ð Ø €€€Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø *Ð *Ð *Ð *Ð *Ð *à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø .Ð .Ð .Ð .Ð .Ð .Ø (Ð (Ð (Ð (Ð (Ð (ð;ð ;ð ;ð;ð ;ð ;ð?ð ?ð ?ðCð Cð Cð
+ð 
+ð 
+ð(ð (ð (ðBð Bð BðBð ð ð
1ð 1ð 1ð06ð 6ð 6ð,1ð 1ð 1ðB'ð 'ð 'ð „×Ò˜Ð":Ð":Ð":Ñ;Ô;ð&ð &ñ <Ô;ð&ð &ð &r    