§
    µ³Ùg¿  ã                   óN  — d dl Z 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mZ ej        dej        dej        dej        diZd„ Zg Ze                     ¦   «         D ]GZg Z ee¦  «        rej        j        gZe                      ej        eeej        ¬	¦  «        ¦  «         ŒH ee¦  «        Zed fd
„Zd„ Zdd„Z ej         !                    dej"        eef¦  «        ej         !                    de¦  «        ej         !                    dd¦  «        ej         !                    dd¦  «        d„ ¦   «         ¦   «         ¦   «         ¦   «         Z#ej        j$        ej         !                    de¦  «        ej         !                    dd¦  «        d„ ¦   «         ¦   «         ¦   «         Z%ej         !                    dd¦  «        ej         !                    dedd…         ¦  «        d„ ¦   «         ¦   «         Z&ej        j        ej         '                    ¦   «         d„ ¦   «         ¦   «         Z(dS )é    N)Úassert_allclose)Úraises)Ú_svdp)Ú	csr_arrayÚ	csc_arrayg-Cëâ6?g:Œ0âŽyE>c                 ó<   — t          j        | ¦  «        j        dk    S )NÚc)ÚnpÚdtypeÚkind)r   s    ú\/granary/edev/quantum/lib/python3.11/site-packages/scipy/sparse/linalg/tests/test_propack.pyÚis_complex_typer      s   € ÝŒ8�E‰?Œ?Ô 3Ò&Ð&ó    )ÚmarksÚidc                 ó�  — t           j                             |¦  «        }t          |¦  «        rMdd|                     ||¦  «        z  z   dz
  d|                     ||¦  «        z  z                        |¦  «        }n/dd|                     ||¦  «        z  z                        |¦  «        }d||j        d|z  dz
  k    <    | |fi |¤ŽS )zGenerate a random sparse arrayéûÿÿÿé
   y              @y              $@r   é   )r
   ÚrandomÚRandomStater   ÚrandÚastypeÚreal)	ÚconstructorÚnÚmÚfr   ÚrseedÚkwargsÚrngÚMs	            r   Úgenerate_matrixr#   "   sÑ   € õ Œ)×
Ò
 Ñ
&Ô
&€CÝ�uÑÔð 5Ø�2˜Ÿš  A™œÑ&Ñ&ØñØ˜#Ÿ(š( 1 a™.œ.Ñ(ñ)ß*0ª&°©-¬-ð 	
ˆð �"�s—x’x  1‘~”~Ñ%Ñ%×-Ò-¨eÑ4Ô4ˆØ€A€a„fˆr�A‰v˜‰zÒÑØˆ;�qÐ#Ð#˜FÐ#Ð#Ð#r   c                 óð   — t          t          j        |                      ¦   «         j        |¦  «        ¦  «        }t          |t          j        | j        d         |j        d         ¦  «        ||¬¦  «         dS )z7Check that the first k rows of u1 and u2 are orthogonalé   ©ÚrtolÚatolN)Úabsr
   ÚdotÚconjÚTr   ÚeyeÚshape)Úu1Úu2r'   r(   ÚAs        r   Úassert_orthogonalr2   /   sZ   € å�BŒF�2—7’7‘9”9”; Ñ#Ô#Ñ$Ô$€AÝ�A•r”v˜bœh qœk¨2¬8°A¬;Ñ7Ô7¸dÈÐNÑNÔNÐNÐNÐNr   çš™™™™™é?c           
      óp  — t           |         }t          t          j        | |||¦  «        }	 ||	¦  «        }
t          j                             |	d¬¦  «        \  }}}t          |
||||t          j                             d¦  «        ¬¦  «        \  }}}}| 	                    ¦   «         dk    rAt          j
        ||d¦  «        }t          j
        ||d¦  «        }t          j
        ||¦  «        }t          |d |…         |||¬¦  «         t          ||||¬¦  «         t          |j        |j        ||¬¦  «         d S )NF)Úfull_matricesr   )ÚkÚwhichÚirl_modeÚtolr!   ÚSMr%   r&   )ÚTOLSr#   r
   ÚasarrayÚlinalgÚsvdr   r   Údefault_rngÚupperÚrollr   r2   r,   )r   r   r   r   r6   r8   r7   r   r9   r"   ÚMspr/   Úsigma1Úvt1r0   Úsigma2Úvt2Ú_s                     r   Ú
check_svdprH   5   s0  € Ý
ˆuŒ+€Cå�œ
 A q¨!¨UÑ3Ô3€AØ
ˆ+�a‰.Œ.€Cå”i—m’m A°U�mÑ;Ô;�O€Bˆ�Ý˜s a¨u¸xØ#&­B¬I×,AÒ,AÀ!Ñ,DÔ,DðFñ Fô FÑ€Bˆ��Qð ‡{‚{�}„}˜ÒÐÝŒW�R˜˜AÑÔˆÝŒg�c˜1˜aÑ Ô ˆÝ”˜ Ñ#Ô#ˆõ �F˜2˜A˜2”J ¨S°sÐ;Ñ;Ô;Ð;õ �b˜" 3¨SÐ1Ñ1Ô1Ð1Ý�c”e˜SœU¨°3Ð7Ñ7Ô7Ð7Ð7Ð7r   Úctorr   Úirl)TFr7   )ÚLMr:   c           
      ó  — t           j                             d¦  «         d\  }}}|dk    rJ|sHd}t          t          |¬¦  «        5  t          ||| ||||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S t          ||| ||||¦  «         d S )Nr   )r   é   é   r:   z#`which`='SM' requires irl_mode=True)Úmatch)r
   r   ÚseedÚassert_raisesÚ
ValueErrorrH   )rI   r   rJ   r7   r   r   r6   Úmessages           r   Ú	test_svdprT   M   sè   € õ
 „I‡N‚N�1ÑÔÐØ�G€A€qˆ!Ø�‚}€}˜S€}Ø7ˆÝ�:¨WÐ5Ñ5Ô5ð 	9ð 	9Ý�q˜!˜T 5¨!¨S°%Ñ8Ô8Ð8ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9õ 	�1�a˜˜u a¨¨eÑ4Ô4Ð4Ð4Ð4s   ÁA)Á)A-Á0A-)FTc                 ó¸  — t           j        dt           j        dt           j        dt           j        di|          }t
          j                             t          ¦  «        }d}t
          j         	                    ||¦  «        }t          j
        |d¬¦  «        5 }t          | ¦  «        r.|d                              ¦   «                              | ¦  «        }n-|d                              ¦   «                              | ¦  «        }d d d ¦  «         n# 1 swxY w Y   d	}t          |||t           j                             d
¦  «        ¬¦  «        \  }	}
}}t          | ¦  «        rdn|}|	d d …d |…f         }	|d |…d d …f         }|
d |…         }
t#          t          j        |	j        d         ¦  «        |	                     ¦   «         j        |	z  |¬¦  «         t#          t          j        |j        d
         ¦  «        ||                     ¦   «         j        z  |¬¦  «         t           j                             |                     ¦   «         ¦  «        \  }}}|d d …d |…f         }|d |…         }|d |…d d …f         }|t          j        |¦  «        z  |z  }|	t          j        |
¦  «        z  |z  }t#          t           j                             ||z
  ¦  «        d
|¬¦  «         d S )NgCÅ8
!?g•Ö&è.>gü©ñÒMbP?zpropack_test_data.npzT)Úallow_pickleÚ	A_complexÚA_realéÈ   r   )r8   r!   é   r%   )r(   )r
   Úfloat32Úfloat64Ú	complex64Ú
complex128ÚosÚpathÚdirnameÚ__file__ÚjoinÚloadr   Úitemr   r   r   r?   r   r-   r.   r+   r,   r=   r>   ÚtodenseÚdiagÚnorm)r   rJ   r(   Úpath_prefixÚrelative_pathÚfilenameÚdatar1   r6   ÚuÚsÚvhrG   Úsv_checkÚu3Ús3Úvh3ÚA3Úrecons                      r   Útest_examplesrv   \   sÆ  € õ 	Œ
�FÝ
Œ
�DÝ
Œ�dÝ
Œ�tð	ð
 ô€Dõ ”'—/’/¥(Ñ+Ô+€Kð ,€MÝŒw�|Š|˜K¨Ñ7Ô7€HÝ	Œ�¨Ð	-Ñ	-Ô	-ð 4°Ý˜5Ñ!Ô!ð 	4Ø�[Ô!×&Ò&Ñ(Ô(×/Ò/°Ñ6Ô6ˆAˆAà�X”×#Ò#Ñ%Ô%×,Ò,¨UÑ3Ô3ˆAð	4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð 	€AÝ˜˜1 sµ´	×0EÒ0EÀaÑ0HÔ0HÐIÑIÔI�K€A€qˆ"ˆaõ % UÑ+Ô+Ð2ˆrˆr°€HØ	ˆ!ˆ!ˆ!ˆYˆhˆYˆ,Œ€AØ	ˆIˆXˆI�q�q�qˆLÔ	€BØ	ˆ)ˆ8ˆ)Œ€Aõ •B”F˜1œ7 1œ:Ñ&Ô&¨¯ª©¬¬
°Q©¸TÐBÑBÔBÐBÝ•B”F˜2œ8 Aœ;Ñ'Ô'¨¨b¯gªg©i¬i¬kÑ)9ÀÐEÑEÔEÐEõ ”)—-’- §	¢	¡¤Ñ,Ô,�K€BˆˆCØ	ˆAˆAˆAˆy�ˆyˆLÔ	€BØ	ˆIˆXˆIŒ€BØ
ˆiˆxˆi˜˜˜ˆlÔ
€CØ	�bŒg�b‰kŒkÑ	˜CÑ	€BØ•”˜‘
”
‰N˜RÑ€EÝ•B”I—N’N 2¨¡:Ñ.Ô.°¸Ð=Ñ=Ô=Ð=Ð=Ð=s   ÂA+DÄDÄDÚshifts)Niöÿÿÿr   r%   r   éF   é   c           	      óˆ  — t           j                             d¦  «        }d\  }}|                     ||f¦  «        }| �l| dk     s|t          |dz
  | z
  |¦  «        k    rLt	          j        t          ¦  «        5  t          ||| d|z  d|¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S t          ||| d|z  d|¬¦  «         d S )Nr   ©rx   r   r%   r   T)rw   Úkmaxr8   r!   )r
   r   r?   ÚminÚpytestr   rR   r   )rw   r   r!   r   r6   r1   s         r   Útest_shiftsr   Ž   s/  € õ Œ)×
Ò
 Ñ
"Ô
"€CØ�D€A€qØ�
Š
�A�q�6ÑÔ€AØÐ ¨¢
 
°µC¸¸!¹¸F¹
ÀAÑ4FÔ4FÒ0FÐ0FÝŒ]�:Ñ&Ô&ð 	Ið 	IÝ�!�Q˜v¨A¨a©C¸$ÀCÐHÑHÔHÐHð	Ið 	Ið 	Iñ 	Iô 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Iøøøð 	Ið 	Ið 	Ið 	Ið 	Ið 	Iõ 	ˆa�˜6¨¨!©°dÀÐDÑDÔDÐDÐDÐDs   Á7BÂB!Â$B!c                  ó>  — t           j                             d¦  «        } d\  }}|                      ||f¦  «                             t           j        ¦  «        }t          ||d dd| ¬¦  «        \  }}}}t          ||ddd| ¬¦  «        \  }}	}
}t          ||	¦  «         d S )Nr   r{   r:   T)rw   r7   r8   r!   é    )r
   r   r?   r   r\   r   r   )r!   r   r6   r1   r/   Ús1rD   rG   r0   Ús2rF   s              r   Útest_shifts_accuracyr„   ›   s£   € õ Œ)×
Ò
 Ñ
"Ô
"€CØ�D€A€qØ�
Š
�A�q�6ÑÔ×!Ò!¥"¤*Ñ-Ô-€AÝ˜1˜a¨°DÀ4ÈSÐQÑQÔQ�N€BˆˆC�Ý˜1˜a¨°$ÀÈ3ÐOÑOÔO�N€BˆˆC�õ �B˜ÑÔÐÐÐr   )r3   ))r_   r~   Únumpyr
   Únumpy.testingr   r   rQ   Úscipy.sparse.linalg._svdpr   Úscipy.sparser   r   r[   r\   r]   r^   r;   r   Ú_dtypesÚkeysÚdtype_flavourr   ÚmarkÚslowÚappendÚparamÚ__name__ÚtupleÚfloatr#   r2   rH   ÚparametrizeÚarrayrT   Úxslowrv   r   Úxfailr„   © r   r   ú<module>r˜      sõ  ðØ 	€	€	€	Ø €€€à Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø *Ð *Ð *Ð *Ð *Ð *Ø +Ð +Ð +Ð +Ð +Ð +Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ð
 „J�Ø„J�Ø„L�$Ø„M�4ð	€ð'ð 'ð 'ð €Ø—Y’Y‘[”[ð <ð <€MØ€EØ€�}Ñ%Ô%ð #Ø”Ô!Ð"ˆØ‡N‚N�<�6”< °UØ#0Ô#9ð;ñ ;ô ;ñ <ô <ð <ð <à
ˆ%�‰.Œ.€ð   qð
$ð 
$ð 
$ð 
$ðOð Oð Oð8ð 8ð 8ð 8ð0 „×Ò˜ "¤(¨I°yÐ!AÑBÔBØ„×Ò˜ 'Ñ*Ô*Ø„×Ò˜ Ñ.Ô.Ø„×Ò˜ ,Ñ/Ô/ð5ð 5ñ 0Ô/ñ /Ô.ñ +Ô*ñ CÔBð5ð „ÔØ„×Ò˜ 'Ñ*Ô*Ø„×Ò˜ Ñ.Ô.ð,>ð ,>ñ /Ô.ñ +Ô*ñ Ôð,>ð^ „×Ò˜Ð#<Ñ=Ô=Ø„×Ò˜ '¨"¨1¨"¤+Ñ.Ô.ðEð Eñ /Ô.ñ >Ô=ðEð „ÔØ„×ÒÑÔðð ñ Ôñ Ôðð ð r   