Ë
    0Ò^jÔÆ  ã            
       ó˜  — d Z ddlZddlmZ ddlmZ ddlZddlmZ ddl	m
Z
 ddlZddlmZmZ ddlmZm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$m#c m%c m&Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z.  ee)dfe)dfe)dfe)dfe)dfe)dfe)dfe*«      Z/dddddœd„Z0 G d„ d«      Z1ejd                  jg                  dd¬«       G d„ d«      «       Z4 G d „ d!«      Z5d"„ Z6d#„ Z7d$„ Z8d%„ Z9ejd                  jg                  d&d'¬«      d(„ «       Z:d)„ Z;d*„ Z<d+„ Z=ej|                  ej~                  ej€                  ej‚                  fZBej†                  ejˆ                  ejŠ                  fZFejŽ                  ej�                  ej’                  fZJeFeJz   ZKeBeKz   ZLejd                  j›                  d,eL«      d-„ «       ZNd.„ ZOd/„ ZPd0„ ZQd1„ ZRejd                  jg                  dd¬«      ejd                  jg                  d&d2¬«      d3„ «       «       ZSejd                  jg                  d4¬5«      d6„ «       ZTejd                  jg                  d7d8¬«      d9„ «       ZUejd                  j›                  d:d;d4g«      ejd                  j›                  d<g d=¢«      ejd                  j›                  d>g d?¢«      ejd                  j›                  d@g dA¢«      ejd                  j›                  dBejˆ                  ej�                  g«      ejd                  jg                  dd¬«      ejd                  jg                  d&d2¬«      dC„ «       «       «       «       «       «       «       ZVy)Dz7Test functions for the sparse.linalg._interface module
é    N)Úpartial)Úproduct)Ú
ModuleType)Ú
NamedTuple)ÚraisesÚwarns)Úassert_Úassert_equal)
ÚSCIPY_ARRAY_APIÚSCIPY_DEVICEÚis_torchÚxp_assert_closeÚis_lazy_arrayÚxp_assert_equalÚxp_ravelÚis_numpyÚmake_xp_pytest_marksÚis_jax_array)Úarray_api_extra)ÚLinearOperatorÚaslinearoperator)Úmatrix)Úassert_deallocatedÚ__init__ÚmatvecÚmatmatÚdotÚrdotÚrmatvecÚrmatmaté   é
   ©ÚndimÚminÚmaxÚrngc                ó  ‡— t         j                  j                  ‰«      Št        j                  ||«      }t        j                  ||«      }t	        ˆfd„t        ||«      D «       «      }t        j                  |g| d¬«      }|j                  D ]  }d|‰j                  d| «      d  Œ t        ‰j                  |d¬«      «      }t        t        |«      «      D ]n  }||   }	t        j                  |	dk7  «      rt        j                  |	dk7  «      d   d   n|}
‰j                  «       dk  sŒT|	‰j                  |
dz   «      d  ||<    n t        j                  |Ž |k(  sJ ‚|D �	cg c]  }	t	        d„ |	D «       «      ‘Œ c}	S c c}	w )Nc              3   óN   •K  — | ]  \  }}‰j                  ||d z   «      –— Œ y­w)é   N)Úintegers)Ú.0Úmin_Úmax_r'   s      €ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/scipy/sparse/linalg/tests/test_interface.pyú	<genexpr>z0generate_broadcastable_shapes.<locals>.<genexpr>+   s$   øè ø€ ÒS±z°t¸T˜Ÿ™ T¨4°©6×2ÑSùs   ƒ"%r   ©Úaxisr*   g      Ð?c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Úint)r,   Úels     r/   r0   z0generate_broadcastable_shapes.<locals>.<genexpr><   s   è ø€ Ò*˜b”#�b—'Ñ*ùs   ‚)ÚnpÚrandomÚdefault_rngÚbroadcast_toÚtupleÚzipÚrepeatÚTr+   ÚlistÚpermutedÚrangeÚlenÚanyÚwhereÚbroadcast_shapes)Únshapesr$   r%   r&   r'   Úbatch_shapeÚshapesÚcolumnÚiÚshapeÚjs       `      r/   Úgenerate_broadcastable_shapesrM   '   s^  ø€ Ü
�)‰)×
Ñ
 Ó
$€CÜ
�/‰/˜#˜tÓ
$€CÜ
�/‰/˜#˜tÓ
$€CÜÓSÄSÈÈcÃ]ÔSÓS€KÜ�Y‰Y˜�} g°AÔ6€Fð —(‘(ò .ˆØ,-ˆˆs�|‰|˜A˜wÓ'Ð(Ñ)ð.ô �#—,‘,˜v¨A�,Ó.Ó/€Fä”3�v“;Óò ˆØ�q‘	ˆÜ*,¯&©&°¸!±Ô*<ŒB�H‰H�U˜a‘ZÓ  Ñ# AÒ&À$ˆØ�:‰:‹<˜$ÓØ˜cŸl™l¨1¨Q©3Ó/Ð0Ð1ˆF�1‰IÙðô ×Ñ Ð'¨;Ò6Ð6Ð6Ø8>Ö?¨uŒEÑ* EÔ*Õ*Ò?Ð?ùÒ?s   Å&Fc                   ód   — e Zd Zd„ Zd„ Zej                  j                  dd¬«      d„ «       Zd„ Z	y)	ÚTestLinearOperatorc                 óÊ   — t        j                  g d¢g d¢g«      | _        t        j                  ddgddgddgg«      | _        t        j                  ddgddgg«      | _        y )	N©r*   r!   é   ©é   é   é   r*   r!   rR   rT   rU   rV   )r7   ÚarrayÚAÚBÚC)Úselfs    r/   Úsetup_methodzTestLinearOperator.setup_method@   si   € Ü—‘š7Ú"ð$ó %ˆŒä—‘˜A˜a˜5Ø˜a˜5Ø˜a˜5ð"ó #ˆŒô —‘˜A˜a˜5Ø˜a˜5ð"ó #ˆ�ó    c                 ó"  ‡‡‡— ˆfd„}t        ‰j                  ‰j                  ¬«      } | || j                  «      «      D �]  }t	        j
                  di |¤d‰i¤ŽŠ‰j                  dk(  sJ ‚t        ‰j                   |g d¢«      «       |ddg«      «       t        j                  t        d¬	«      5  t        ‰j                   |d
gdgdgg«      «       |dgdgg«      «       d d d «       t        ‰ |g d¢«      z   |ddg«      «       t        ‰ |d
gdgdgg«      z   |dgdgg«      «       t        ‰j                   |g d¢«      «       |ddg«      «       t        ‰j                   |d
gdgdgg«      «       |dgdgg«      «       t        s�t        ‰j                  t        d
gdgdgg«      «       |dgdgg«      «       t        ‰t        d
gdgdgg«      z   |dgdgg«      «       t        ‰j                  t        d
gdgdgg«      «       |dgdgg«      «       t        d‰z   |g d¢«      z   |ddg«      «       t        d‰z  j                   |d
d
g«      «       |g d¢«      «       t        d‰z  j                   j                   |d
d
g«      «       |g d¢«      «       t        d‰z  j#                  «       j                   |d
d
g«      «       |g d¢«      «       t        d‰z   |d
gd
gd
gg«      z   |dgdgg«      «       t        d‰z  j%                   |d
gd
gd
gg«      «       |dgdgg«      «       t        ‰dz   |g d¢«      z   |ddg«      «       t        ‰dz   |d
gd
gd
gg«      z   |dgdgg«      «       t        d‰z   |g d¢«      z   |ddg«      «       t        ‰‰z    |g d¢«      z   |ddg«      «       t        ‰‰z   j                   |d
d
g«      «       |g d¢«      «       t        ‰‰z   j                   j                   |d
d
g«      «       |g d¢«      «       t        ‰‰z   j#                  «       j                   |d
d
g«      «       |g d¢«      «       t        ‰‰z    |d
gd
gd
gg«      z   |dgdgg«      «       t        ‰‰z   j%                   |d
gd
gd
gg«      «       |dgdgg«      «       t        ‰  |g d¢«      z   |ddg«      «       t        ‰  |d
gd
gd
gg«      z   |dgdgg«      «       t        ‰‰z
   |g d¢«      z   |ddg«      «       t        ‰‰z
   |d
gd
gd
gg«      z   |dgdgg«      «       ‰j                  | j                  ‰j                  ¬«      }‰j                  d
dgddgg‰j                  ¬«      }t        d‰z  j'                  |«      d|z  j(                  |z  «       t        ‰dz  j'                  |«      |dz  j(                  |z  «       t        d‰z  j'                  |«      ‰j+                  d|z  j(                  «      |z  «       t        ‰dz  j'                  |«      ‰j+                  |dz  j(                  «      |z  «       t        ‰‰z   j'                  |«      ||z   j(                  |z  «       t        ‰d‰z  z   j'                  |«      ‰j+                  |d|z  z   j(                  «      |z  «       t        ‰ j'                  |«      | j(                  |z  «       t        ‰‰z
  j'                  |«      ||z
  j(                  |z  «       t        d‰z  j'                  d|z  «      ‰j+                  d|z  j(                  «      d|z  z  «       ‰‰z   }t-        |j                  «      dk(  r"|j                  d   ‰u r|j                  d
   ‰u sJ ‚d‰z  }t-        |j                  «      dk(  sJ ‚t/        ‰j1                  d«      «      s%|j                  d   ‰u r|j                  d
   dk(  sJ ‚t3        ‰j1                  d«      «      }t5        ‰j                   |g d¢«      «      |«      sJ ‚t7        ‰j1                  d«      «      st        j                  t        d¬	«      nt9        j:                  «       }	|	5  t5        ‰j                   |d
gdgdgg«      «      |«      sJ ‚	 d d d «       t5        ‰ |g d¢«      z  |«      sJ ‚t5        ‰ |d
gdgdgg«      z  |«      sJ ‚t5        ‰j                   |g d¢«      «      |«      sJ ‚t5        ‰j                   |d
gdgdgg«      «      |«      sJ ‚t        sxt5        ‰j                  t        d
gdgdgg«      «      |«      sJ ‚t5        ‰t        d
gdgdgg«      z  |«      sJ ‚t5        ‰j                  t        d
gdgdgg«      «      |«      sJ ‚t5        d‰z  t        j<                  «      sJ ‚t5        d‰z  t        j<                  «      sJ ‚t5        ‰‰z   t        j>                  «      sJ ‚t5        ‰ t        j<                  «      sJ ‚t5        ‰‰z
  t        j>                  «      sJ ‚t5        ‰dz  t        j<                  «      sJ ‚t5        ‰dz  t        j<                  «      sJ ‚t/        ‰j1                  d«      «      s‰dz  dz  j                  d   ‰u sJ ‚‰ |g d¢«      z  }
‰dz  Š‰dz  }t        ‰ |g d¢«      z  |
«       d‰z  j@                  ‰j                  k(  sJ ‚d}tC        tD        |¬	«      5  ‰‰j                  d
dg«      z  }d d d «       tC        tD        ‰j                  ‰j                  d
dg«      «       tC        tD        ‰j                  ‰j                  g d¢«      «       tC        tD        ‰j                  ‰j                  d
gdgg«      «       tC        tD        ‰j                  ‰j                  d
gdgdgdgg«      «       tC        tD        ˆfd„«       tC        tD        ˆfd„«       �Œ tG         | || j                  «      «       | || jH                  «      «      «      D �]‘  \  }}t	        j
                  di |¤d‰i¤ŽŠt	        j
                  di |¤d‰i¤ŽŠ || j                  | jH                  z  «      } |d
dgddgg«      }t        ‰‰z  j'                  |«      |j(                  |z  «       t        d‰z  ‰z  j'                  |«      ‰j+                  d|z  j(                  «      |z  «       t        ‰‰z   |d
d
g«      z   |ddg«      «       t        ‰‰z   |d
gd
gg«      z   |dgdgg«      «       t        ‰‰z  j%                   |d
gd
gg«      «       |dgdgg«      «       t        ‰‰z  j                   |d
d
g«      «       |dd g«      «       t        ‰‰z  j                   j                   |d
d
g«      «       |dd g«      «       t        ‰‰z  j#                  «       j                   |d
d
g«      «       |dd g«      «       t5        ‰‰z  t        jJ                  «      sJ ‚tC        tD        ˆˆfd!„«       tC        tD        ˆfd"„«       ‰‰z  }t-        |j                  «      dk(  sJ ‚t/        ‰j1                  d«      «      r�Œn|j                  d   ‰u r|j                  d
   ‰u r�Œ’J ‚  | || jL                  «      «      D �]§  }t	        j
                  di |¤d‰i¤Ž} |d
dgddgg«      } || jL                  «      }t        |j'                  |«      |j(                  |z  «       t        |dz  j'                  |«      ||z  j(                  |z  «       t        |dz   |d
d
g«      z   |d#d$g«      «       t        |dz  j                   |d
d
g«      «       |d%dg«      «       t        |dz  j                   j                   |d
d
g«      «       |d%dg«      «       t        |dz  j#                  «       j                   |d
d
g«      «       |d%dg«      «       t        |dz  j%                   |d
gd
gg«      «       |d#gd$gg«      «       t5        |dz  t        jN                  «      r�Œ¨J ‚ y # 1 sw Y   �Œ xY w# 1 sw Y   �ŒxY w# 1 sw Y   �Œ–xY w)&Nc                 ó^   •‡ — ‰ j                   ‰j                  ˆ fd„ˆ ˆfd„ˆ ˆfd„ˆ fd„dœgS )Nc                 ó   •— ‰| z  S r4   © ©ÚxrX   s    €r/   ú<lambda>zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>N   ó   ø€  A¨¡E€ r]   c                 ó@   •— ‰j                  ‰j                  «      | z  S r4   ©Úconjr>   ©rc   rX   Úxps    €€r/   rd   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>O   ó   ø€  R§W¡W¨Q¯S©S£\°AÑ%5€ r]   c                 ó@   •— ‰j                  ‰j                  «      | z  S r4   rg   ri   s    €€r/   rd   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>P   rk   r]   c                 ó   •— ‰| z  S r4   ra   rb   s    €r/   rd   zETestLinearOperator.test_matvec.<locals>.get_matvecs.<locals>.<lambda>Q   re   r]   ©rK   Údtyper   r   r    r   )rK   Úfloat64)rX   rj   s   `€r/   Úget_matvecsz3TestLinearOperator.test_matvec.<locals>.get_matvecsJ   s,   ù€ àŸ™ØŸ™Û)Ü5Ü5Û)ñð ð r]   ©ro   rj   ra   rQ   é   é    úcolumn vectors©Úmatchr*   r!   rR   )r*   r*   r*   é   é   )r"   rs   é   ù               @y              (@y              >@iúÿÿÿiñÿÿÿr   rT   rU   z.Can only divide a linear operator by a scalar.©r*   r!   rR   rT   c                  ó   •— ‰ ‰ z  S r4   ra   ©rX   s   €r/   rd   z0TestLinearOperator.test_matvec.<locals>.<lambda>Ô   ó   ø€ ¨a°©c€ r]   c                  ó   •— ‰ dz  S ©Nr!   ra   r~   s   €r/   rd   z0TestLinearOperator.test_matvec.<locals>.<lambda>Õ   ó   ø€ ¨a°©d€ r]   é2   éq   éG   é\   c                  ó   •— ‰ ‰z   S r4   ra   )rX   rY   s   €€r/   rd   z0TestLinearOperator.test_matvec.<locals>.<lambda>î   r   r]   c                  ó   •— ‰ dz  S r�   ra   r~   s   €r/   rd   z0TestLinearOperator.test_matvec.<locals>.<lambda>ï   r‚   r]   é   é%   é   )(r   ÚasarrayÚ
complex128rX   Ú	interfacer   Úargsr   r   Úpytestr   ÚFutureWarningr   r   r   r   ÚHÚadjointr   r    r>   rh   rB   r   ÚemptyÚtypeÚ
isinstancer   Ú
contextlibÚnullcontextÚ_ScaledLinearOperatorÚ_SumLinearOperatorro   Úassert_raisesÚ
ValueErrorr   rY   Ú_ProductLinearOperatorrZ   Ú_PowerLinearOperator)r[   rj   rq   Ú_asarrayÚmatvecsÚA_ÚXÚzÚarray_objectÚctxÚresultrZ   ÚmsgÚ_ÚmatvecsAÚmatvecsBÚAtimesBÚmatvecsCÚC_rX   rY   s    `                 @@r/   Útest_matveczTestLinearOperator.test_matvecI   sd  ú€ ô	ô ˜2Ÿ:™:¨R¯]©]Ô;ˆá"¡8¨D¯F©FÓ#3Ó4ó 	4ˆGÜ×(Ñ(Ñ:¨7Ñ:°rÒ:ˆAà—6‘6˜R’<Ð�<ä˜AŸH™H¡XªgÓ%6Ó7¹À2ÀbÀ'Ó9JÔKÜ—‘œmÐ3CÔDñ ÜØ—H‘H™X¨ s¨A¨3°¨s mÓ4Ó5Ù˜r˜d B 4˜[Ó)ô÷ô
 ˜A¡ªÓ 1Ñ1±8¸RÀ¸GÓ3DÔEÜ˜A¡¨1¨#¨q¨c°1°#¨Ó 7Ñ7¹ÀBÀ4ÈÈÀ+Ó9NÔOÜ˜AŸE™E¡(ª7Ó"3Ó4±hÀÀ2¸wÓ6GÔHÜ˜AŸE™E¡(¨Q¨C°°°Q°C¨=Ó"9Ó:¹HÀrÀdÈBÈ4À[Ó<QÔRå"ÜØ—H‘HœV a S¨!¨¨a¨S MÓ2Ó3Ù˜r˜d B 4˜[Ó)ôô   ¤F¨Q¨C°°°Q°C¨=Ó$9Ñ 9¹8ÀbÀTÈ2È$ÀKÓ;PÔQÜ §¡¤f¨q¨c°1°#°q°c¨]Ó&;Ó <¹hÈÈÈbÈTÀ{Ó>SÔTä˜Q˜q™S¡HªWÓ$5Ñ5±xÀÀBÀÓ7HÔIÜ˜Q ™UŸO™O©H°a¸°VÓ,<Ó=¹xÊÓ?UÔVÜ˜Q˜q™SŸG™GŸN™N©8°Q°q°E«?Ó;¹XÂlÓ=SÔTÜØ�1‘—‘“×&Ñ&¡x°°1°£Ó7ÙšÓ&ôô ˜Q˜q™S¡H¨q¨c°1°#°q°c¨]Ó$;Ñ;¹XÈÀtÈRÈDÀkÓ=RÔSÜØ�Q‘—‘™x¨!¨¨q¨c°A°3¨Ó8Ó9Ù˜2˜$  ˜Ó&ôô ˜Q˜q™S¡HªWÓ$5Ñ5±xÀÀBÀÓ7HÔIÜ˜Q˜q™S¡H¨q¨c°1°#°q°c¨]Ó$;Ñ;¹XÈÀtÈRÈDÀkÓ=RÔSÜ˜R ™T¡XªgÓ%6Ñ6¹À#ÀcÀÓ8KÔLÜ˜Q˜q™S¡HªWÓ$5Ñ5±xÀÀRÀÓ7IÔJÜ˜Q ™UŸO™O©H°a¸°VÓ,<Ó=¹xÊÓ?UÔVÜ˜Q˜q™SŸG™GŸN™N©8°Q°q°E«?Ó;¹XÂlÓ=SÔTÜØ�Q‘—‘Ó!×(Ñ(©°1°Q°%«Ó9ÙšÓ&ôô ˜Q˜q™S¡H¨q¨c°1°#°q°c¨]Ó$;Ñ;¹XÈÀtÈbÈTÀlÓ=SÔTÜØ�1‘—‘™X¨ s¨A¨3°¨s mÓ4Ó5Ù˜2˜$  ˜Ó&ôô ˜a˜R¡8ªGÓ#4Ñ4±hÀÀ3¸xÓ6HÔIÜ˜a˜R¡8¨a¨S°!°°a°S¨MÓ#:Ñ:¹HÀrÀdÈCÈ5À\Ó<RÔSÜ˜Q˜q™S¡HªWÓ$5Ñ5±xÀÀ1À³ÔGÜ˜Q ™U¡h°°°a°S¸1¸#¨Ó&?Ñ?ÁÈAÈ3ÐQRÐPSÈ*ÓAUÔVà—‘˜DŸF™F¨"¯-©-�Ó8ˆBØ—
‘
˜Q ˜F Q¨ FÐ+°2·=±=�
ÓAˆAÜ˜Q ™UŸO™O¨AÓ.°°R±·
±
¸Q±Ô?Ü˜Q ™UŸO™O¨AÓ.°°a±·
±
¸Q±Ô?Ü˜R !™V×,Ñ,¨QÓ/°·±¸"¸r¹'¿¹Ó1EÈÑ1IÔJÜ˜Q ™V×,Ñ,¨QÓ/°·±¸"¸r¹'¿¹Ó1EÈÑ1IÔJÜ˜Q ™UŸO™O¨AÓ.°°b±·±¸a±Ô@Ü˜Q  a¡™Z×0Ñ0°Ó3°R·W±W¸bÀ2ÈÁ7¹l×=MÑ=MÓ5NÐQRÑ5RÔSÜ˜a˜RŸL™L¨›O¨r¨c¯W©W°q©[Ô9Ü˜Q ™UŸO™O¨AÓ.°°b±·±¸a±Ô@Ü˜R !™V×,Ñ,¨R°!©VÓ4°b·g±g¸rÀB¹w¿k¹kÓ6JÈbÐSTÉfÑ6UÔVà�!‘ˆAÜ�q—v‘v“; !Ò#¨¯©¨q©	°Q©¸1¿6¹6À!¹9È¹>ÐIÐIØ�!‘ˆAÜ�q—v‘v“; !Ò#Ð#Ð#Ü  §¡¨!£Ô-à—v‘v˜a‘y A‘~¨!¯&©&°©)°qª.Ð8Ð8ä §¡¨£Ó,ˆLÜ˜aŸh™h¡x²	Ó':Ó;¸\ÔJÐJÐJô $ B§H¡H¨Q£KÔ0ô —‘œ]Ð2BÕCä×+Ñ+Ó-ð ð
 ñ SÜ! !§(¡(©8°a°S¸!¸¸a¸S°MÓ+BÓ"CÀ\ÔRÐRÑR÷Sä˜a¡(ª7Ó"3Ñ3°\ÔBÐBÐBÜ˜a¡(¨Q¨C°°°Q°C¨=Ó"9Ñ9¸<ÔHÐHÐHÜ˜aŸe™e¡HªWÓ$5Ó6¸ÔEÐEÐEÜ˜aŸe™e¡H¨q¨c°1°#°q°c¨]Ó$;Ó<¸lÔKÐKÐKå"Ü! !§(¡(¬6°A°3¸°s¸A¸3°-Ó+@Ó"AÀ<ÔPÐPÐPÜ! !¤f¨q¨c°1°#°q°c¨]Ó&;Ñ";¸\ÔJÐJÐJÜ! !§%¡%¬°°°Q°C¸¸¨}Ó(=Ó">ÀÔMÐMÐMä˜a ™c¤9×#BÑ#BÔCÐCÐCÜ˜b ™d¤I×$CÑ$CÔDÐDÐDÜ˜a ™c¤9×#?Ñ#?Ô@Ð@Ð@Ü˜q˜b¤)×"AÑ"AÔBÐBÐBÜ˜a ™c¤9×#?Ñ#?Ô@Ð@Ð@Ü˜a ™c¤9×#BÑ#BÔCÐCÐCÜ˜a ™d¤I×$CÑ$CÔDÐDÐDä  §¡¨!£Ô-à˜Q™ !™×)Ñ)¨!Ñ,°Ñ1Ð1Ð1ð ™¢)Ó,Ñ,ˆFØ�A‘ˆAØ�A‘ˆAÜ˜A¡ªÓ 3Ñ3°VÔ<à˜‘F—>‘> R§]¡]Ò2Ð2Ð2ð CˆCÜœz°Ô5ñ +Ø˜Ÿ
™
 A q 6Ó*Ñ*�÷+ô œ* a§h¡h°·
±
¸A¸a¸5Ó0AÔBÜœ* a§h¡h°·
±
º9Ó0EÔFÜœ* a§h¡h°·
±
¸Q¸CÀÀ¸9Ó0EÔFÜœ* a§h¡h°·
±
¸Q¸CÀÀÀQÀCÈÈÐ;LÓ0MÔNäœ*£kÔ2Üœ*£lÖ3ð	4ôB #*©+±h¸t¿v¹vÓ6FÓ*GÙ*5±h¸t¿v¹vÓ6FÓ*Gó#Ió 	9ÑˆH�hä×(Ñ(Ñ;¨8Ñ;¸Ò;ˆAÜ×(Ñ(Ñ;¨8Ñ;¸Ò;ˆAÙ˜tŸv™v¨¯©™Ó/ˆGÙ˜1˜a˜& 1 a &Ð)Ó*ˆAä˜Q ™UŸO™O¨AÓ.°·	±	¸A±Ô>Ü˜R !™V a™Z×0Ñ0°Ó3°R·W±W¸bÀ7¹l×=MÑ=MÓ5NÐQRÑ5RÔSä˜Q ™U¡h°°!¨u£oÑ5±xÀÀCÀÓ7IÔJÜ˜Q ™U¡h°°°Q°C¨yÓ&9Ñ9¹8ÀbÀTÈ3È%ÀLÓ;QÔRÜ˜Q ™UŸN™N©8°a°S¸!¸°IÓ+>Ó?ÁÈBÈ4ÐQTÐPUÈ,ÓAWÔXä˜Q ™UŸO™O©H°a¸°VÓ,<Ó=¹xÈÈRÈÓ?QÔRÜ˜Q ™UŸI™I×,Ñ,©X°q¸!°fÓ-=Ó>ÁÈ"ÈbÈÓ@RÔSÜØ�Q‘—‘Ó!×(Ñ(©°1°a°&Ó)9Ó:Ù˜"˜b˜Ó"ôô
 ˜a ™c¤9×#CÑ#CÔDÐDÐDäœ*¤kÔ2Üœ*£lÔ3à�!‘ˆAÜ�q—v‘v“; !Ò#Ð#Ð#Ü  §¡¨!£Ö-à—v‘v˜a‘y A‘~¨!¯&©&°©)°q«.Ð8Ð8ð=	9ñ@ $¡H¨T¯V©VÓ$4Ó5ó 	DˆHÜ×(Ñ(Ñ;¨8Ñ;¸Ò;ˆAÙ˜1˜a˜& 1 a &Ð)Ó*ˆAÙ˜$Ÿ&™&Ó!ˆBä˜AŸI™I a›L¨2¯&©&°1©*Ô5Ü˜Q ™TŸN™N¨1Ó-°°R±¯{©{¸Q©Ô?ä˜Q ™T¡8¨Q¨q¨E£?Ñ2±H¸bÀ¸WÓ4EÔFÜ˜Q ™TŸN™N©8°Q¸°FÓ+;Ó<¹hÈÈBÀxÓ>PÔQÜ˜Q ™TŸH™HŸO™O©H°a¸°VÓ,<Ó=¹xÈÈRÈÓ?QÔRÜØ�A‘—‘Ó ×'Ñ'©°!°Q°Ó(8Ó9Ù˜"˜b˜Ó"ôô ˜Q ™TŸM™M©(°Q°C¸¸°9Ó*=Ó>ÁÈ2È$ÐPRÈtÈÓ@UÔVä˜a ™d¤I×$BÑ$BÖCÐCÐCñ#	D÷wñ ú÷ZSñ Sú÷F+ñ +ús-   Â62AC&â7*AC3íAD ÁC&AC0	ÁC3AC=	ÁD AD
	Úarray_api_strictú8https://github.com/data-apis/array-api-strict/issues/188©Úreasonc           	      óú  ‡‡— t        ‰j                  ‰j                  ¬«      } || j                  «      Š‰j                  ‰j                  ˆˆfd„ˆˆfd„ˆˆfd„ˆfd„dœ}t        j                  di |¤d‰i¤Ž} |g d¢g d	¢g d
¢g«      }|d   }t        t        j                  ||«      ||z  «       t        t        j                  |‰j                  |d«      «      |‰j                  |d«      z  «       t        t        j                  ||«      ||z  «       t        t        j                  ||j                  «      ||j                  z  «       t        t        j                  ||j                  «       «      ||j                  «       z  «       t        t        j                  ‰j                  |d«      |j                  «      ‰j                  |d«      |j                  z  «       t        t        j                  |j                  dd«      |j                  «       «      |j                  dd«      |j                  «       z  «       t        t        j                  ||j                  «      ||j                  z  «       t        t        j                  ||j                  «       «      ||j                  «       z  «       t        t        t        j                  |d«       t        t        t        j                  d|«       y )Nrr   c                 óJ   •— ‰j                  ‰| z  ‰j                  d   f«      S )Nr   )ÚreshaperK   ©rc   r¡   rj   s    €€r/   rd   z0TestLinearOperator.test_matmul.<locals>.<lambda>  s    ø€  §¡¨B°©F°R·X±X¸a±[°NÓ!C€ r]   c                 ó|   •— ‰j                  ‰j                  ‰j                  «      | z  ‰j                  d   f«      S ©Nr*   )rµ   rh   r>   rK   r¶   s    €€r/   rd   z0TestLinearOperator.test_matmul.<locals>.<lambda>  s-   ø€  "§*¡*¨R¯W©W°R·T±T«]¸QÑ->ÀÇÁÈ!ÁÀÓ"O€ r]   c                 ó@   •— ‰j                  ‰j                  «      | z  S r4   rg   r¶   s    €€r/   rd   z0TestLinearOperator.test_matmul.<locals>.<lambda>  s   ø€  "§'¡'¨"¯$©$£-°!Ñ"3€ r]   c                 ó   •— ‰| z  S r4   ra   )rc   r¡   s    €r/   rd   z0TestLinearOperator.test_matmul.<locals>.<lambda>  s   ø€   a¡€ r]   rn   rj   )y      ð?      ð?r!   rR   rS   )é   é   é	   )r   .©éÿÿÿÿr*   )r*   r¿   r*   r¿   r!   ra   )r   rŒ   r�   rX   rK   rŽ   r   r   ÚoperatorÚmatmulrµ   r’   r“   r›   rœ   )r[   rj   rŸ   ÚDrX   rY   Úbr¡   s    `     @r/   Útest_matmulzTestLinearOperator.test_matmul
  s  ù€ ô
 ˜2Ÿ:™:¨R¯]©]Ô;ˆÙ�d—f‘fÓˆØ—h‘hØ—m‘mÜCÜOÜ3Û'ñ)ˆô ×$Ñ$Ñ0 qÑ0¨RÒ0ˆÙ’nÚÚð!ó "ˆð ˆf‰IˆäœŸ™¨¨1Ó-¨q°1©uÔ5ÜÜ�O‰O˜A˜rŸz™z¨!¨WÓ5Ó6Ø�—
‘
˜1˜gÓ&Ñ&ô	
ô 	œŸ™¨¨1Ó-¨q°1©uÔ5ÜœŸ™¨¨1¯3©3Ó/°°Q·S±S±Ô9ÜœŸ™¨¨1¯9©9«;Ó7¸¸Q¿Y¹Y»[¹ÔIÜÜ�O‰O˜BŸJ™J q¨'Ó2°A·C±CÓ8Ø�J‰J�q˜'Ó" Q§S¡SÑ(ô	
ô 	Ü�O‰O˜AŸI™I a¨Ó,¨a¯i©i«kÓ:Ø�I‰I�a˜Ó˜qŸy™y›{Ñ*ô	
ô 	œŸ™¨¨1¯3©3Ó/°°Q·S±S±Ô9ÜœŸ™¨¨1¯9©9«;Ó7¸¸Q¿Y¹Y»[¹ÔIÜ”j¤(§/¡/°1°aÔ8Ü”j¤(§/¡/°1°aÕ8r]   c                 ó–  — d}t        j                  |j                  d«      «      }|j                  |j                  d«      «       t	        j
                  t        |¬«      5  |j                  |j                  d«      «       d d d «       |j                  |j                  d«      «       t	        j
                  t        |¬«      5  |j                  |j                  d«      «       d d d «       |j                  |j                  d«      «       t	        j
                  t        |¬«      5  |j                  |j                  d«      «       d d d «       |j                  |j                  d«      «       t	        j
                  t        |¬«      5  |j                  |j                  d«      «       d d d «       |j                  |j                  d«      «       t	        j
                  t        |¬«      5  |j                  |j                  d«      «       d d d «       |j                  |j                  d«      «       t	        j
                  t        |¬«      5  |j                  |j                  d«      «       d d d «       y # 1 sw Y   �ŒÿxY w# 1 sw Y   �Œ¨xY w# 1 sw Y   �ŒQxY w# 1 sw Y   ŒùxY w# 1 sw Y   Œ¡xY w# 1 sw Y   y xY w)	Nz(D|d)imension mismatch)rR   rT   rT   rv   rR   ©rT   rR   ©rR   rR   ©rT   rT   )rŽ   r   Úonesr   r�   r   rœ   r   r   r    r   r   )r[   rj   r§   rX   s       r/   Útest_dimension_mismatchz*TestLinearOperator.test_dimension_mismatch2  sð  € Ø&ˆÜ×&Ñ& r§w¡w¨v£Ó7ˆà	�‰�—‘˜“ÔÜ�]‰]œ:¨SÔ1ñ 	!Ø�H‰H�R—W‘W˜Q“ZÔ ÷	!ð 	
�	‰	�"—'‘'˜!“*ÔÜ�]‰]œ:¨SÔ1ñ 	"Ø�I‰I�b—g‘g˜a“jÔ!÷	"ð 	
�‰�—‘˜“Ô!Ü�]‰]œ:¨SÔ1ñ 	&Ø�H‰H�R—W‘W˜V“_Ô%÷	&ð 	
�	‰	�"—'‘'˜&“/Ô"Ü�]‰]œ:¨SÔ1ñ 	'Ø�I‰I�b—g‘g˜f“oÔ&÷	'ð 	
�‰ˆb�g‰g�f‹oÔÜ�]‰]œ:¨SÔ1ñ 	#Ø�E‰E�"—'‘'˜&“/Ô"÷	#ð 	
�‰ˆr�w‰w�v‹ÔÜ�]‰]œ:¨SÔ1ñ 	$Ø�F‰F�2—7‘7˜6“?Ô#÷	$ð 	$÷)	!ñ 	!ú÷	"ñ 	"ú÷	&ñ 	&ú÷	'ð 	'ú÷	#ð 	#ú÷	$ð 	$úsH   Á"!J Ã!JÄ*!JÆ!J'Ç2!J3É!J?Ê J
ÊJÊJ$Ê'J0Ê3J<Ê?KN)
Ú__name__Ú
__module__Ú__qualname__r\   r®   r�   ÚmarkÚskip_xp_backendsrÄ   rÊ   ra   r]   r/   rO   rO   ?   sC   „ ò#òDðB ‡[�[×!Ñ!ØØIð "ó ñ"9ó	ð"9óH$r]   rO   ú
dask.arrayú)https://github.com/dask/dask/issues/11711r±   c                   óÜ  — e Zd ZU dZ G d„ de«      Z edddd«      Zeed<    edd	d
d«      Zeed<    eddd
d«      Z	eed<    edddd«      Z
eed<    edddd«      Zeed<    edddd«      Zeed<   eee	gZee   ed<   ee
eegz   Zee   ed<   	 d/dedej$                  dedefd„Z	 	 d0dej$                  dedededef
d„Zej0                  j3                  d g d!¢«      ej0                  j3                  d"e«      d"ed eed#f   fd$„«       «       Zej0                  j3                  d g d!¢«      ej0                  j3                  d"e«      d"ed eed#f   fd%„«       «       Zej0                  j3                  d g d!¢«      ej0                  j3                  d"e«      d"ed eed#f   fd&„«       «       Zej0                  j3                  d g d!¢«      d eed#f   fd'„«       Zej0                  j3                  d g d!¢«      ej0                  jA                  d(d)¬*«      d eed#f   fd+„«       «       Z!ej0                  j3                  d g d!¢«      ej0                  jA                  d¬,«      d eed#f   fd-„«       «       Z"y.)1ÚTestDotTestszÇ
    This class aims to help ensure correctness of the LinearOperator
    interface, by verifying correctness properties based on equivalent
    computations using 'forward' and 'adjoint' modes.
    c                   óD   — e Zd ZU dZeedf   ed<   eed<   eed<   eed<   y)úTestDotTests.OperatorArgszÜ
        shape: (core) shape of the operator
        op_dtype: dtype of the operator
        data_dtype: real dtype corresponding to op_dtype for data generation
        complex: the operator has a complex dtype
        .rK   Úop_dtypeÚ
data_dtypeÚcomplexN)	rË   rÌ   rÍ   Ú__doc__r;   r5   Ú__annotations__ÚstrÚboolra   r]   r/   ÚOperatorArgsrÕ   V  s&   … ñ	ð �S˜#�X‰ÓØ‹Ø‹ØŒr]   rÝ   )rx   rx   rp   FÚreal_square_args)r½   r½   Úint32Úfloat32Úinteger_square_args)é   râ   Ú	complex64TÚcomplex_square_args)r‰   é   Úreal_overdetermined_argsr�   Úcomplex_overdetermined_args)rU   r½   Úreal_underdetermined_argsÚsquare_args_listÚall_args_listrj   Úopr×   Úcomplex_datac                 ó8  — t         j                  j                  d«      }t        j                  |«      }|j                  �^ }}}	t        ddddd¬«      \  }
}|	f|ffg |
¢|¢|	‘­g |¢|¢|‘­ffD �]'  \  }}|j                  ||¬«      }|j                  ||¬«      }|r2|d	|j                  ||¬«      z  z   }|d	|j                  ||¬«      z  z   }|j                  |«      }|j                  |«      }|j                  |«      }|j                  |«      }|j                  ||d
¬«      }|j                  ||d
¬«      }t        j                  |«      j                  dk  rdnd}t        j                  |«      j                  dk  rdnd}t        ||||¬«       �Œ* y)a-  
        This check verifies the equivalence of the forward and adjoint computation,
        using `matvec` and `rmatvec` respectively, on randomised data.

        Data is generated with the real dtype `data_dtype` and operated on by the
        linear operator `op`.

        If `complex_data` is set to `True`, complex data is instead generated
        by combining randomised real and imaginary components, each generated
        with `data_dtype`.

        If `check_operators` is set to `True`, equivalence is checked between
        `matvec` and `*` and `@`,
        and between `rmatvec` and the composition of `.H` and `*`.

        If `check_dot` is set to `True`, equivalence is checked between
        `matvec` and `.dot`,
        and between `rmatvec` and the composition of `.H` and `.dot`.
        é*   r!   rR   r   rU   é?   r#   rr   ù              ð?r¿   r1   ç:Œ0âŽyE>çê-�™—q=çñhãˆµøä>çVçž¯â<©ÚrtolÚatolN)r7   r8   r9   ro   rK   rM   Ústandard_normalrŒ   r   r   ÚvecdotÚfinfoÚepsr   )r[   rj   rë   r×   rì   r'   ro   rG   ÚMÚNÚu_broadcastÚv_broadcastÚu_shapeÚv_shapeÚuÚvÚop_uÚopH_vÚop_u_H_vÚuH_opH_vrö   r÷   s                         r/   Úcheck_matveczTestDotTests.check_matvec|  s­  € ô. �i‰i×#Ñ# BÓ'ˆä—‘˜Ó$ˆØŸX™XÑˆ�a˜ä#@Ø�A˜1 !¨ô$
Ñ ˆ�[ð ˆT�A�4ˆLà,ˆ{Ð,˜[Ð,¨!Ñ,Ð.M°Ð.M¸kÐ.MÈ1Ñ.MÐNð	!
ó 	FÑˆG�Wð ×#Ñ# G°5Ð#Ó9ˆAØ×#Ñ# G°5Ð#Ó9ˆAÙØ˜˜c×1Ñ1°'ÀÐ1ÓGÑGÑH�Ø˜˜c×1Ñ1°'ÀÐ1ÓGÑGÑH�Ø—
‘
˜1“ˆAØ—
‘
˜1“ˆAà—9‘9˜Q“<ˆDØ—J‘J˜q“MˆEà—y‘y  q¨r�yÓ2ˆHØ—y‘y  E°�yÓ3ˆHäŸH™H ZÓ0×4Ñ4°tÒ;‘5ÀˆDÜŸH™H ZÓ0×4Ñ4°tÒ;‘5ÀˆDÜ˜H h°TÀ×Eñ-	Fr]   Úcheck_operatorsÚ	check_dotc                 ó¶  — t         j                  j                  d«      }|j                  dd«      }t        j                  |«      }	|j
                  �^ }
}}|j                  g |
¢|‘|‘­|	¬«      }|j                  g |
¢|‘|‘­|	¬«      }|r@|d|j                  g |
¢|‘|‘­|	¬«      z  z   }|d|j                  g |
¢|‘|‘­|	¬«      z  z   }|j                  |«      }|j                  |«      }|j                  |«      }|j                  |«      }|rPt        |||z  «       t        |||z  «       t        ||j                  |z  «       t        ||j                  |z  «       |r@t        ||j                  |«      «       t        ||j                  j                  |«      «       |j                  |«      j                  }|j                  |«      j                  }|j                  ||«      }|j                  ||«      }t        j                   |«      j"                  dk  rdnd}t        j                   |«      j"                  dk  rd	nd}t        ||||¬
«       y)a-  
        This check verifies the equivalence of the forward and adjoint computation,
        using `matmat` and `rmatmat` respectively, on randomised data.

        Data is generated with the real dtype `data_dtype` and operated on by the
        linear operator `op`.

        If `complex_data` is set to `True`, complex data is instead generated
        by combining randomised real and imaginary components, each generated
        with `data_dtype`.

        If `check_operators` is set to `True`, equivalence is checked between
        `matmat` and `*` and `@`,
        and between `rmatvec` and the composition of `.H` and `@`.

        If `check_dot` is set to `True`, equivalence is checked between
        `matmat` and `.dot`,
        and between `rmatmat` and the composition of `.H` and `.dot`.
        rî   r!   éd   )Úsizero   rð   rñ   rò   ró   rô   rõ   N)r7   r8   r9   r+   ro   rK   rø   rŒ   r   r    r   r’   r   rh   ÚmTrÁ   rú   rû   )r[   rj   rë   r×   rì   r	  r
  r'   Úkro   rG   rü   rý   ÚUÚVÚop_UÚopH_VÚop_U_HÚUHÚop_U_H_VÚUH_opH_Vrö   r÷   s                          r/   Úcheck_matmatzTestDotTests.check_matmat´  s!  € ô0 �i‰i×#Ñ# BÓ'ˆØ�L‰L˜˜CÓ ˆä—‘˜Ó$ˆØŸX™XÑˆ�a˜ð ×ÑÐ%9 {Ð%9°AÐ%9°qÑ%9ÀÐÓGˆØ×ÑÐ%9 {Ð%9°AÐ%9°qÑ%9ÀÐÓGˆÙØ�R˜#×-Ñ-Ð3G°[Ð3GÀ!Ð3GÀQÑ3GÈuÐ-ÓUÑUÑVˆAØ�R˜#×-Ñ-Ð3G°[Ð3GÀ!Ð3GÀQÑ3GÈuÐ-ÓUÑUÑVˆAØ�J‰J�q‹MˆØ�J‰J�q‹Mˆà�y‰y˜‹|ˆØ—
‘
˜1“ˆáÜ˜D " q¡&Ô)Ü˜D " q¡&Ô)Ü˜E 2§4¡4¨!¡8Ô,Ü˜E 2§4¡4¨!¡8Ô,áÜ˜D "§&¡&¨£)Ô,Ü˜E 2§4¡4§8¡8¨A£;Ô/à—‘˜“×!Ñ!ˆØ�W‰W�Q‹Z�]‰]ˆà—9‘9˜V QÓ'ˆØ—9‘9˜R Ó'ˆäŸ™ Ó,×0Ñ0°4Ò7‰u¸TˆÜŸ™ Ó,×0Ñ0°4Ò7‰u¸TˆÜ˜ (°¸DÖAr]   rG   )ra   ©rR   )rR   rT   rU   ©r   r�   .c                 ó6  ‡‡— ˆˆfd„}‰|j                   z   }t        ‰|j                  «      }t        j                  ||||‰¬«      }| j                  ‰||j                  |j                  ¬«       | j                  ‰||j                  |j                  ¬«       y)zs
        Simple identity operator on square matrices.
        Tests batches of RHS via `args.batch_shape`.
        c                 ó’   •— g t        j                  ‰| j                  d d «      ¢| j                  d   ‘­}‰j                  | |«      S )Nr¿   )ÚxpxrE   rK   r:   )rc   rK   rG   rj   s     €€r/   Úidentityz3TestDotTests.test_identity_square.<locals>.identityû  sB   ø€ ØS”c×*Ñ*¨;¸¿¹ÀÀ¸ÓEÐSÀqÇwÁwÈrÁ{ÑSˆEØ—?‘? 1 eÓ,Ð,r]   ©rK   ro   r   r   rj   ©r×   rì   N©	rK   ÚgetattrrÖ   rŽ   r   r  r×   rØ   r  )r[   r�   rG   rj   r  rK   ro   rë   s     ``    r/   Útest_identity_squarez!TestDotTests.test_identity_squareò  s„   ù€ õ	-ð ˜dŸj™jÑ(ˆÜ˜˜DŸM™MÓ*ˆÜ×%Ñ%Ø˜uØ X°"ô
ˆð
 	×Ñ˜"˜b¨T¯_©_È4Ï<É<ÐÔXØ×Ñ˜"˜b¨T¯_©_È4Ï<É<ÐÕXr]   c                 ót  ‡‡‡	‡
‡— |j                   \  Š	Š
d„ Šˆ	ˆˆˆfd„}ˆ
ˆˆˆfd„}‰|j                   z   }t        ‰|j                  «      }t        j                  ||||‰¬«      }| j                  ‰||j                  |j                  ¬«       | j                  ‰||j                  |j                  ¬«       y)z‚
        Identity operator with zero-padding on non-square matrices.
        Tests batches of RHS via `args.batch_shape`.
        c                 ó€   — dg| j                   z  }d|| j                  d   z
  f|d<   t        j                  | |d¬«      S )N)r   r   r   r¿   Úconstant)Úmode)r$   rK   r  Úpad)rc   Útarget_sizeÚ
pad_widthss      r/   Úpad_core_dimz:TestDotTests.test_identity_nonsquare.<locals>.pad_core_dim  s@   € Ø ˜ A§F¡FÑ*ˆJØ ¨q¯w©w°r©{Ñ!:Ð;ˆJ�r‰NÜ—7‘7˜1˜j¨zÔ:Ð:r]   c                 ó$  •— t        j                  | j                  d   ‰z
  «      xdk(  r nxdk(  r | dd ‰…f   } ndk(  r
 ‰| ‰¬«      } g t        j                  ‰| j                  d d «      ¢| j                  d   ‘­}‰j                  | |«      S )Nr¿   r   r*   .©r)  ©r7   ÚsignrK   r  rE   r:   )rc   rK   rü   rG   r+  rj   s     €€€€r/   Úmvz0TestDotTests.test_identity_nonsquare.<locals>.mv  sƒ   ø€ Ü—'‘'˜!Ÿ'™' "™+¨™/Ó*ÝØÝØ˜#˜r ˜r˜'™
‘AÛÙ$ Q°AÔ6�AàS”c×*Ñ*¨;¸¿¹ÀÀ¸ÓEÐSÀqÇwÁwÈrÁ{ÑSˆEØ—?‘? 1 eÓ,Ð,r]   c                 ó$  •— t        j                  ‰| j                  d   z
  «      xdk(  r nxdk(  r  ‰| ‰¬«      } ndk(  r	| dd ‰…f   } g t        j                  ‰| j                  d d «      ¢| j                  d   ‘­}‰j                  | |«      S )Nr¿   r   r*   r-  .r.  )rc   rK   rý   rG   r+  rj   s     €€€€r/   Úrmvz1TestDotTests.test_identity_nonsquare.<locals>.rmv%  sƒ   ø€ Ü—'‘'˜!˜aŸg™g b™k™/Ó*ÝØÝÙ$ Q°AÔ6‘AÛØ˜#˜r ˜r˜'™
�AàS”c×*Ñ*¨;¸¿¹ÀÀ¸ÓEÐSÀqÇwÁwÈrÁ{ÑSˆEØ—?‘? 1 eÓ,Ð,r]   r  r   Nr!  )r[   r�   rG   rj   r0  r2  rK   ro   rë   rü   rý   r+  s     ``     @@@r/   Útest_identity_nonsquarez$TestDotTests.test_identity_nonsquare	  sœ   ü€ ð �z‰z‰ˆˆ1ò	;÷

	-÷
	-ð ˜dŸj™jÑ(ˆÜ˜˜DŸM™MÓ*ˆÜ×%Ñ%Ø˜u¨R¸Àô
ˆð 	×Ñ˜"˜b¨T¯_©_È4Ï<É<ÐÔXØ×Ñ˜"˜b¨T¯_©_È4Ï<É<ÐÕXr]   c                 óB  ‡‡— ˆˆfd„}ˆˆfd„}‰|j                   z   }t        ‰|j                  «      }t        j                  ||||‰¬«      }| j                  ‰||j                  |j                  ¬«       | j                  ‰||j                  |j                  ¬«       y)z|
        Simple (complex) scaling operator on square matrices.
        Tests batches of RHS via `args.batch_shape`.
        c                 ó´   •— dt        d«      z  }g t        j                  ‰| j                  d d «      ¢| j                  d   ‘­}‰j	                  || z  |«      S )Ny      @       @r¿   ©Úabsr  rE   rK   r:   ©rc   ÚscalerK   rG   rj   s      €€r/   r9  z/TestDotTests.test_scaling_square.<locals>.scaleA  óT   ø€ Øœs 6›{Ñ*ˆEØS”c×*Ñ*¨;¸¿¹ÀÀ¸ÓEÐSÀqÇwÁwÈrÁ{ÑSˆEØ—?‘? 5¨1¡9¨eÓ4Ð4r]   c                 ó´   •— dt        d«      z  }g t        j                  ‰| j                  d d «      ¢| j                  d   ‘­}‰j	                  || z  |«      S )Ny      @       Àr¿   r6  r8  s      €€r/   Úr_scalez1TestDotTests.test_scaling_square.<locals>.r_scaleF  r:  r]   r  r   Nr!  )	r[   r�   rG   rj   r9  r<  rK   ro   rë   s	     ``     r/   Útest_scaling_squarez TestDotTests.test_scaling_square:  sˆ   ù€ õ	5õ
	5ð
 ˜dŸj™jÑ(ˆÜ˜˜DŸM™MÓ*ˆÜ×%Ñ%Ø˜u¨U¸GÈô
ˆð 	×Ñ˜"˜b¨T¯_©_È4Ï<É<ÐÔXØ×Ñ˜"˜b¨T¯_©_È4Ï<É<ÐÕXr]   c                 óò   ‡‡‡—  G ˆˆˆfd„dt         j                  «      Š‰j                  dz  }d} ‰g ‰¢d‘d‘­‰j                  |¬«      }| j	                  ‰||d¬«       | j                  ‰||d¬«       y)	z£
        Simple rotation operator defined by `matmat` and `adjoint`,
        subclassing `LinearOperator`.
        Tests batches of RHS via `batch_shape`.
        c                   ó8   •‡ — e Zd Zˆ ˆfd„Zˆˆfd„Zˆfd„Zˆ xZS )ú0TestDotTests.test_subclass_matmat.<locals>.RotOpc                 ó8   •— || _         t        ‰| �	  ||‰¬«       y ©N©rj   )Ú_thetaÚsuperr   )r[   ro   rK   ÚthetaÚ	__class__rj   s       €€r/   r   z9TestDotTests.test_subclass_matmat.<locals>.RotOp.__init__\  s   ø€ Ø#�”Ü‘Ñ  ¨°"Ð Õ5r]   c                 óx  •— | j                   }‰j                  t        j                  |«      t        j                  |«       gt        j                  |«      t        j                  |«      gg«      }||z  }t        j                  ‰|j                  d d «      |j                  dd  z   }‰j                  ||«      S )Néþÿÿÿ)	rD  rŒ   r7   ÚcosÚsinr  rE   rK   r:   )r[   r¢   rF  ÚRrY   rK   rG   rj   s         €€r/   Ú_matmatz8TestDotTests.test_subclass_matmat.<locals>.RotOp._matmat`  sš   ø€ ØŸ™�Ø—J‘JÜ—V‘V˜E“]¤R§V¡V¨E£] NÐ3Ü—V‘V˜E“]¤R§V¡V¨E£]Ð3ð ó �ð ˜‘E�Ü×,Ñ,¨[¸!¿'¹'À#À2¸,ÓGÈ!Ï'É'ÐRTÐRUÈ,ÑV�Ø—‘ q¨%Ó0Ð0r]   c                 óZ   •— | j                    } ‰| j                  | j                  |«      S r4   )rD  ro   rK   )r[   Únegative_thetaÚRotOps     €r/   Ú_adjointz9TestDotTests.test_subclass_matmat.<locals>.RotOp._adjointj  s%   ø€ Ø"&§+¡+ �Ù˜TŸZ™Z¨¯©°^ÓDÐDr]   )rË   rÌ   rÍ   r   rM  rQ  Ú__classcell__)rG  rP  rG   rj   s   @€€€r/   rP  r@  Z  s   ù„ õ6õ1÷Eð Er]   rP  r!   rp   )rK   ro   rF  Fr   N)rŽ   r   Úpirp   r  r  )r[   rG   rj   rF  r×   rë   rP  s    ``   @r/   Útest_subclass_matmatz!TestDotTests.test_subclass_matmatS  s�   ú€ ÷	Eð 	E”I×,Ñ,ô 	Eð( —‘˜‘	ˆØˆ
ÙÐ-˜;Ð-¨Ð-¨1Ñ-°R·Z±ZÀuÔMˆà×Ñ˜"˜b¨ZÀeÐÔLØ×Ñ˜"˜b¨ZÀeÐÕLr]   rÐ   rÑ   r±   c                 ó*  — t         j                  j                  d«      }|j                  |j	                  g |¢d‘d‘­«      |j
                  ¬«      }t        j                  |«      }d}| j                  |||d¬«       | j                  |||d¬«       y)za
        Test operators coming from `aslinearoperator`,
        *including batched LHS*.
        rî   rT   rr   rp   Tr   N)
r7   r8   r9   rŒ   rø   r�   rŽ   r   r  r  )r[   rG   rj   r'   r   rë   r×   s          r/   Útest_aslinearop_densez"TestDotTests.test_aslinearop_denseu  s•   € ô �i‰i×#Ñ# BÓ'ˆØ—‘Ø×ÑÐ 4 +Ð 4¨qÐ 4°!Ñ 4Ó5Ø—-‘-ð ó 
ˆô ×'Ñ'¨Ó/ˆØˆ
Ø×Ñ˜"˜b¨ZÀdÐÔKØ×Ñ˜"˜b¨ZÀdÐÕKr]   ©Únp_onlyc                 óÖ   — t        j                  g |¢d‘d‘­|j                  ¬«      }t        j                  |«      }d}| j                  |||d¬«       | j                  |||d¬«       y)zs
        Test operators coming from `aslinearoperator` with sparse arrays,
        *including batched LHS*
        rT   rr   rp   Tr   N)ÚsparseÚrandom_arrayr�   rŽ   r   r  r  )r[   rG   rj   r   rë   r×   s         r/   Útest_aslinearop_sparsez#TestDotTests.test_aslinearop_sparseˆ  sm   € ô ×$Ñ$Ð%9 {Ð%9°AÐ%9°qÑ%9ÀÇÁÔOˆÜ×'Ñ'¨Ó/ˆØˆ
Ø×Ñ˜"˜b¨ZÀdÐÔKØ×Ñ˜"˜b¨ZÀdÐÕKr]   N)F)FFF)#rË   rÌ   rÍ   rÙ   r   rÝ   rÞ   rÚ   rá   rä   ræ   rç   rè   ré   r?   rê   r   rŽ   r   rÛ   rÜ   r  r  r�   rÎ   Úparametrizer;   r5   r#  r3  r=  rT  rÏ   rV  r\  ra   r]   r/   rÓ   rÓ   O  s{  … ñô

�zô 
ñ &2Ø�)˜Y¨ó&Ð�ló ñ )5Ø�˜ Eó)Ð˜ó ñ )5Ø�+˜y¨$ó)Ð˜ó ñ .:Ø�)˜Y¨ó.Ð˜ló ñ 1=Ø�, 	¨4ó1Ð ó ñ /;Ø�	˜9 eó/Ð˜|ó ð
 	Ð-Ð/Bð,Ð�d˜<Ñ(ó ð *:Ø Ð"=Ð?Xð=ñ *€M�4˜Ñ%ó ð #ñ6FØð6FØ"+×":Ñ":ð6FØHKð6Fàó6Fðt =BØñ<BØ×.Ñ.ð<BØ<?ð<Bàð<Bà59ð<Bð ó<Bð| ‡[�[×Ñ˜]Ò,HÓIØ‡[�[×Ñ˜VÐ%5Ó6ðYØ ðYØ/4°S¸#°X©òYó 7ó JðYð* ‡[�[×Ñ˜]Ò,HÓIØ‡[�[×Ñ˜V ]Ó3ð-YØ ð-YØ/4°S¸#°X©ò-Yó 4ó Jð-Yð^ ‡[�[×Ñ˜]Ò,HÓIØ‡[�[×Ñ˜VÐ%5Ó6ðY¨ð YÀ5ÈÈcÈÁ?ò Yó 7ó JðYð. ‡[�[×Ñ˜]Ò,HÓIðM°°c¸3°h±ò Mó JðMðB ‡[�[×Ñ˜]Ò,HÓIØ‡[�[×!Ñ! ,Ð7bÐ!ÓcðLØ   c ™?òLó dó JðLð" ‡[�[×Ñ˜]Ò,HÓIØ‡[�[×!Ñ!¨$Ð!Ó/ð	L°%¸¸S¸±/ò 	Ló 0ó Jñ	Lr]   rÓ   c                   óê   — e Zd Zdd„Zd„ Zej                  j                  d¬«      d„ «       Zej                  j                  d¬«      d„ «       Z	ej                  j                  dg d	¢«      d
„ «       Zy)ÚTestAsLinearOperatorNc                 óª  ‡‡‡‡	‡
‡— g }‰�‰nt         Š	ˆ	ˆfd„Š
ˆ	ˆfd„Š G ˆ
ˆˆfd„dt        j                  «      } G ˆfd„d|«      } G ˆˆ
ˆˆfd„d|«      } G ˆ	ˆfd	„d
|«      }‰�r0|j                  ‰‰f«       |j                   |‰«      ‰f«       |j                   |‰«      ‰f«       |j                   |‰«      ‰f«       |j                  t        j                  ‰j
                  «      j
                  ‰f«       |j                  t        j                  ‰j
                  «      j                  ‰j                  ‰«      f«       |j                  t        j                  ‰j
                  «      j                  «       ‰j                  ‰«      f«       |S |j                  t        ‰‰¬«      ‰f«       |j                  t        j                  ‰‰¬«      ‰f«       |j                  t        j                  ‰‰¬«      ‰f«       |j                   |‰«      ‰f«       |j                   |‰«      ‰f«       |j                   |‰«      ‰f«       |S )Nc                 óf   •— ‰| z  }t        | j                  «      dk(  r‰j                  |d«      }|S )Nr!   r¾   )rB   rK   rµ   )rc   ÚyÚ_xpÚoriginals     €€r/   r0  z+TestAsLinearOperator.make_cases.<locals>.mv�  s1   ø€ Ø˜1‘ˆAÜ�1—7‘7‹|˜qÒ Ø—K‘K  7Ó+�ØˆHr]   c                 ó@   •— ‰j                  ‰j                  «      | z  S r4   rg   )rc   rc  rd  s    €€r/   r2  z,TestAsLinearOperator.make_cases.<locals>.rmv£  s   ø€ Ø—8‘8˜HŸJ™JÓ'¨!Ñ+Ð+r]   c                   ó2   •‡ — e Zd ZdZˆ ˆˆfd„Zˆfd„Zˆ xZS )ú4TestAsLinearOperator.make_cases.<locals>.BaseMatlikera   c                 ó>   •— t         ‰| �  |‰j                  ‰¬«       y ©N)ro   rK   rj   )rE  r   rK   )r[   ro   rG  rd  rj   s     €€€r/   r   z=TestAsLinearOperator.make_cases.<locals>.BaseMatlike.__init__©  s"   ø€ Ü‘Ñ ØØ"Ÿ.™.Øð !õ r]   c                 ó   •—  ‰|«      S r4   ra   )r[   rc   r0  s     €r/   Ú_matvecz<TestAsLinearOperator.make_cases.<locals>.BaseMatlike._matvec°  s   ø€ Ù˜!“u�r]   )rË   rÌ   rÍ   r�   r   rk  rR  )rG  r0  rd  rj   s   @€€€r/   ÚBaseMatlikerg  ¦  s   ù„ ØˆDö÷ð r]   rl  c                   ó   •— e Zd ZdZˆ fd„Zy)ú3TestAsLinearOperator.make_cases.<locals>.HasRmatvecra   c                 ó   •—  ‰|«      S r4   ra   )r[   rc   r2  s     €r/   Ú_rmatvecz<TestAsLinearOperator.make_cases.<locals>.HasRmatvec._rmatvec¶  s   ø€ Ù˜1“v�r]   N)rË   rÌ   rÍ   r�   rp  )r2  s   €r/   Ú
HasRmatvecrn  ³  s   ø„ ØˆDõr]   rq  c                   ó"   •— e Zd ZdZˆ ˆˆˆfd„Zy)ú3TestAsLinearOperator.make_cases.<locals>.HasAdjointra   c                 ó    •— | j                   d   | j                   d   f}t        ‰«      }t        ‰«      }t        j                  ||‰|‰¬«      S )Nr*   r   )r   r   ro   rK   rj   )rK   r   rŽ   r   )r[   rK   r   r   ro   r0  r2  rj   s       €€€€r/   rQ  z<TestAsLinearOperator.make_cases.<locals>.HasAdjoint._adjoint¼  sP   ø€ ØŸ
™
 1™ t§z¡z°!¡}Ð4�Ü  ›�Ü! "›+�Ü ×/Ñ/°vØ8?Ø6;Ø6;Ø35ô	8ð 8r]   N)rË   rÌ   rÍ   r�   rQ  )ro   r0  r2  rj   s   €€€€r/   Ú
HasAdjointrs  ¹  s   ø„ ØˆD÷8ð 8r]   ru  c                   ó$   •— e Zd Zˆfd„Zˆ ˆfd„Zy)ú3TestAsLinearOperator.make_cases.<locals>.HasRmatmatc                 ó   •— ‰|z  S r4   ra   )r[   rc   rd  s     €r/   rM  z;TestAsLinearOperator.make_cases.<locals>.HasRmatmat._matmatÇ  s   ø€ Ø !‘|Ð#r]   c                 ó@   •— ‰j                  ‰j                  «      |z  S r4   rg   )r[   rc   rc  rd  s     €€r/   Ú_rmatmatz<TestAsLinearOperator.make_cases.<locals>.HasRmatmat._rmatmatÊ  s   ø€ Ø—x‘x §
¡
Ó+¨aÑ/Ð/r]   N©rË   rÌ   rÍ   rM  rz  )rc  rd  s   €€r/   Ú
HasRmatmatrw  Æ  s   ø„ ô$ö0r]   r|  rr   )r7   rŽ   r   Úappendr   r>   r’   rh   r“   r   rW   rZ  Ú	csr_array)r[   rd  ro   rj   Úcasesrl  rq  ru  r|  rc  r0  r2  s    ```     @@@r/   Ú
make_caseszTestAsLinearOperator.make_cases—  sì  ý€ Øˆð �N‰b¬ˆõ	õ	,÷	ð 	œ)×2Ñ2ô 	ö	˜ô 	÷	8ñ 	8˜ô 	8÷	0˜ô 	0ò Ø�L‰L˜( HÐ-Ô.à�L‰L™* UÓ+¨XÐ6Ô7Ø�L‰L™* UÓ+¨XÐ6Ô7Ø�L‰L™* UÓ+¨XÐ6Ô7à�L‰Lœ)×4Ñ4°X·Z±ZÓ@×BÑBÀHÐMÔNØ�L‰LÜ×*Ñ*¨8¯:©:Ó6×8Ñ8Ø—‘˜Ó!ðô ð �L‰LÜ×*Ñ*¨8¯:©:Ó6×>Ñ>Ó@Ø—‘˜Ó!ð#ô ð
 ˆLà�‰”f˜X¨UÔ3°XÐ>Ô?Ø�‰”b—h‘h˜x¨uÔ5°xÐ@ÔAØ�‰”f×&Ñ& x°uÔ=¸xÐHÔIà�‰‘j Ó'¨Ð2Ô3Ø�‰‘j Ó'¨Ð2Ô3Ø�‰‘j Ó'¨Ð2Ô3Øˆr]   c           	      óî  — g | _         | j                  }t        j                  g d¢g d¢g«      }| xj                    ||t        j                  «      z  c_         | xj                    ||t        j
                  «      z  c_         | xj                    ||t        j                  «      z  c_         | xj                    ||j                  t        j                  «      D ��cg c]0  \  }}t        j                  |«      j                  |j                  f‘Œ2 c}}z  c_         | xj                    ||j                  t        j                  «      D ��cg c]>  \  }}t        j                  |«      j                  |j                  j                  «       f‘Œ@ c}}z  c_         | xj                    ||j                  t        j                  «      D ��cg c]B  \  }}t        j                  |«      j                  «       |j                  j                  «       f‘ŒD c}}z  c_         t        j                  g d¢g d¢g«      }| xj                    ||t        j                  «      z  c_         | xj                    ||j                  t        j                  «      D ��cg c]0  \  }}t        j                  |«      j                  |j                  f‘Œ2 c}}z  c_         | xj                    ||j                  t        j                  «      D ��cg c]>  \  }}t        j                  |«      j                  |j                  j                  «       f‘Œ@ c}}z  c_         | xj                    ||j                  t        j                  «      D ��cg c]B  \  }}t        j                  |«      j                  «       |j                  j                  «       f‘ŒD c}}z  c_         y c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w )NrQ   rS   ©r*   r{   ù              @)y              @y              @rV   )r  r€  r7   rW   rß   rà   rp   r>   rŽ   r   r’   rh   r“   r�   )r[   r€  rd  rü   rX   s        r/   r\   z!TestAsLinearOperator.setup_methodé  sØ  € ØˆŒ
Ø—_‘_ˆ
Ü—8‘8šW¢gÐ.Ó/ˆØ�
Š
‘j ¬2¯8©8Ó4Ñ4�
Ø�
Š
‘j ¬2¯:©:Ó6Ñ6�
Ø�
Š
‘j ¬2¯:©:Ó6Ñ6�
Ø�
Š
Ù#-¨h¯j©j¼"¿*¹*Ó#E÷GÙ˜1˜aô "×2Ñ2°1Ó5×7Ñ7¸¿¹Ò=ó Gñ 	G�
à�
Š
Ù#-¨h¯j©j¼"¿*¹*Ó#E÷GÙ˜1˜aô "×2Ñ2°1Ó5×7Ñ7¸¿¹¿¹»ÒDó Gñ 	G�
à�
Š
Ù#-¨h¯j©j¼"¿*¹*Ó#E÷GÙ˜1˜aô "×2Ñ2°1Ó5×=Ñ=Ó?ÀÇÁÇÁÃÒLó Gñ 	G�
ô —8‘8š[ª+Ð6Ó7ˆØ�
Š
‘j ¬2¯=©=Ó9Ñ9�
Ø�
Š
Ù#-¨h¯j©j¼"¿-¹-Ó#H÷JÙ˜1˜aô "×2Ñ2°1Ó5×7Ñ7¸¿¹Ò=ó Jñ 	J�
à�
Š
Ù#-¨h¯j©j¼"¿-¹-Ó#H÷JÙ˜1˜aô "×2Ñ2°1Ó5×7Ñ7¸¿¹¿¹»ÒDó Jñ 	J�
à�
Š
Ù#-¨h¯j©j¼"¿-¹-Ó#H÷JÙ˜1˜aô "×2Ñ2°1Ó5×=Ñ=Ó?ÀÇÁÇÁÃÒLó Jñ 	JŽ
ùóGùóGùóGùó
JùóJùóJs(   Ã5O
ÅAO
ÇAO
Ê5O%
ÌAO+
Î AO1
TrW  c           	      ó,
  — | j                   D �]ê  \  }}t        j                  |«      }t        j                  g d¢«      t        j                  dgdgdgg«      g}t        j                  ddg«      t        j                  dgdgg«      g}|j
                  t        j                  k(  rh|t        j                  g d¢«      t        j                  dgdgdgg«      gz  }|t        j                  ddg«      t        j                  dgdgg«      gz  }t        j                  ddgdd	gdd
gg«      }|D ]–  }|j                  d   dk(  rt        j                  t        d¬«      nt        j                  «       }	|	5  t        |j                  |«      |j                  |«      «       d d d «       t        ||z  |j                  |«      «       Œ˜ t        |j!                  |«      |j                  |«      «       t        ||z  |j                  |«      «       |D �]k  }
|
j                  d   dk(  rt        j                  t        d¬«      nt        j                  «       }	|	5  t        |j#                  |
«      |j$                  j'                  «       j                  |
«      «       t        |j$                  j                  |
«      |j$                  j                  |
«      «       t        |j(                  j                  |
«      |j$                  j'                  «       j                  |
«      «       t        |j+                  «       j                  |
«      |j$                  j'                  «       j                  |
«      «       d d d «       �Œn |D �]/  }
|
j,                  dk  rŒt        |j/                  |
«      |j$                  j'                  «       j                  |
«      «       t        |j$                  j!                  |
«      |j$                  j                  |
«      «       t        |j(                  j!                  |
«      |j$                  j'                  «       j                  |
«      «       t        |j+                  «       j!                  |
«      |j$                  j'                  «       j                  |
«      «       �Œ2 t1        |d«      r t        |j
                  |j
                  «       t3        t1        |d«      «       �Œí y # 1 sw Y   �Œ]xY w# 1 sw Y   �Œ xY w)NrQ   r*   r!   rR   r‚  r{   rƒ  rT   rU   rV   r¿   ru   rv   ro   r�   )r  rŽ   r   r7   rW   ro   r�   rK   r�   r   r‘   r—   r˜   r
   r   r   r   r   r>   rh   r’   r“   r$   r    Úhasattrr	   )r[   rj   rü   ÚA_arrayrX   ÚxsÚysÚx2rc   r¥   rb  s              r/   Ú
test_basiczTestAsLinearOperator.test_basic   sØ  € ð Ÿ*™*ó 3	(‰JˆAˆwÜ×*Ñ*¨1Ó-ˆAä—(‘(š9Ó%Ü—(‘(˜Q˜C !  q c˜?Ó+ð-ˆBä—(‘(˜A˜q˜6Ó"¤B§H¡H¨q¨c°A°3¨ZÓ$8Ð9ˆBà�w‰wœ"Ÿ-™-Ò'Ø”r—x‘x¢Ó,Ü—x‘x !  r d¨R¨DÐ 1Ó2ð4ñ 4�à”r—x‘x  B Ó(¬"¯(©(°Q°C¸"¸°;Ó*?Ð@Ñ@�ä—‘˜A˜q˜6 A q 6¨A¨q¨6Ð2Ó3ˆBàò 	4�ð —w‘w˜r‘{ aÒ'ô —L‘L¤Ð6FÕGä#×/Ñ/Ó1ð ð
 ñ >Ü  §¡¨!£¨g¯k©k¸!«nÔ=÷>ô ˜Q ™U G§K¡K°£NÕ3ð	4ô ˜Ÿ™ "› w§{¡{°2£Ô7Ü˜˜R™ §¡¨R£Ô1àó 
Q�ð —w‘w˜r‘{ aÒ'ô —L‘L¤Ð6FÕGä#×/Ñ/Ó1ð ð
 ñ QÜ  §¡¨1£¨w¯y©y¯~©~Ó/?×/CÑ/CÀAÓ/FÔGÜ  §¡§¡¨A£°·	±	·±¸aÓ0@ÔAÜ  §¡§¡¨A£°·	±	·±Ó0@×0DÑ0DÀQÓ0GÔHÜ  §¡£×!3Ñ!3°AÓ!6¸¿	¹	¿¹Ó8H×8LÑ8LÈQÓ8OÔP÷	Qñ Qð
Qð ó M�Ø—6‘6˜A’:ØÜ˜QŸY™Y q›\¨7¯9©9¯>©>Ó+;×+?Ñ+?ÀÓ+BÔCÜ˜QŸS™SŸZ™Z¨›]¨G¯I©I¯M©M¸!Ó,<Ô=Ü˜QŸS™SŸZ™Z¨›]¨G¯I©I¯N©NÓ,<×,@Ñ,@ÀÓ,CÔDÜ˜QŸY™Y›[×/Ñ/°Ó2°G·I±I·N±NÓ4D×4HÑ4HÈÓ4KÖLðMô �q˜Ô!Ü˜QŸW™W a§g¡gÔ.ä”G˜A˜vÓ&Ö'ñg3	(÷(>ñ >ú÷Qñ Qús   Å6+S<ÉDT	Ó<TÔ	Tc                 óò  — | j                   D ]è  \  }}t        j                  |«      }t        j                  g d¢«      }t        j                  dgdgdgg«      }t        j                  ddgddgddgg«      }t        |j                  |«      |j                  |«      «       t        |j                  |«      |j                  |«      «       t        |j                  |«      |j                  |«      «       Œê y )NrQ   r*   r!   rR   rT   rU   rV   )r  rŽ   r   r7   rW   r
   r   )r[   rj   rü   r†  rX   Úx0Úx1r‰  s           r/   Útest_dotzTestAsLinearOperator.test_dot8  sÂ   € ð Ÿ*™*ò 		5‰JˆAˆwÜ×*Ñ*¨1Ó-ˆAä—‘š)Ó$ˆBÜ—‘˜A˜3   a S˜/Ó*ˆBÜ—‘˜A˜q˜6 A q 6¨A¨q¨6Ð2Ó3ˆBä˜Ÿ™˜r› G§K¡K°£OÔ4Ü˜Ÿ™˜r› G§K¡K°£OÔ4Ü˜Ÿ™˜r› G§K¡K°£OÕ4ñ		5r]   ro   )Úint64rp   r�   c                 óJ  — |dk(  r)t        |«      rt        dk7  rt        j                  d«       t	        ||«      }|j                  g d¢g d¢g|¬«      }| j                  |||¬«      D �]¸  \  }}t        j                  |«      }|j                  g d¢«      |j                  dgd	gd
gg«      g}|j                  dd	g«      |j                  dgd	gg«      g}|j                  |j                  k(  rX||j                  g d¢«      |j                  dgdgdgg«      gz  }||j                  ddg«      |j                  dgdgg«      gz  }|j                  ddgd	dgd
dgg|¬«      }	|D ]&  }
|j                  |
|«      }
t        ||
z  ||
z  «       Œ( t        |j                  |	«      ||	z  «       t        ||	z  ||	z  «       |D �]#  }|j                  d	k  rŒ|j                  ||«      }t        |j                  |«      |j!                  |j"                  «      |z  «       t        |j"                  j                  |«      |j!                  |j"                  «      |z  «       t        |j$                  j                  |«      |j!                  |j"                  «      |z  «       t        |j'                  «       j                  |«      |j!                  |j"                  «      |z  «       �Œ& t)        |d«      r t+        |j                  |j                  «       t)        |d«      r�Œ¹J ‚ y )Nr�  Úcpuz'"addmm_cuda" not implemented for 'Long'rQ   rS   rr   rC  r*   r!   rR   r‚  r{   rƒ  rT   rU   rV   ro   r�   )r   r   r�   Úskipr"  rŒ   r€  rŽ   r   ro   r�   Úastyper   r   r$   r    rh   r>   r’   r“   r…  r
   )r[   ro   rj   rd  rü   r†  rX   r‡  rˆ  r‰  rc   rb  s               r/   Útest_xpzTestAsLinearOperator.test_xpF  s»  € à�GÒ¤¨¤´ÀÒ1FÜ�K‰KÐCÔDÜ˜˜EÓ"ˆØ—:‘:šyª)Ð4¸E�:ÓBˆØŸ/™/¨(°E¸b˜/ÓAó !	&‰JˆAˆwÜ×*Ñ*¨1Ó-ˆAà—*‘*šYÓ'Ø—*‘*˜q˜c A 3¨¨˜_Ó-ð/ˆBà—*‘*˜a ˜VÓ$ b§j¡j°1°#¸°s°Ó&<Ð=ˆBà�w‰w˜"Ÿ-™-Ò'Ø�r—z‘z¢+Ó.Ø—z‘z A 3¨¨¨r¨dÐ"3Ó4ð6ñ 6�à�r—z‘z 1 b 'Ó*¨B¯J©J¸¸¸b¸T°{Ó,CÐDÑD�à—‘˜a ˜V a¨ V¨a°¨VÐ4¸E�ÓBˆBàò 4�Ø—I‘I˜a Ó'�Ü  A¡ w°¡{Õ3ð4ô ˜AŸH™H R›L¨'°B©,Ô7Ü˜A ™F G¨b¡LÔ1àó O�Ø—6‘6˜A’:ØØ—I‘I˜a Ó'�Ü §	¡	¨!£¨b¯g©g°g·i±iÓ.@À1Ñ.DÔEÜ §¡§
¡
¨1£¨r¯w©w°w·y±yÓ/AÀAÑ/EÔFÜ §¡§
¡
¨1£¨r¯w©w°w·y±yÓ/AÀAÑ/EÔFÜ §	¡	£× 2Ñ 2°1Ó 5°r·w±w¸w¿y¹yÓ7IÈAÑ7MÖNðOô �q˜'Ô"Ü˜QŸW™W a§g¡gÔ.ä˜1˜fÖ%Ð%Ð%ñC!	&r]   r4   )rË   rÌ   rÍ   r€  r\   r�   rÎ   rÏ   rŠ  rŽ  r]  r”  ra   r]   r/   r_  r_  –  sƒ   „ óPòdJð. ‡[�[×!Ñ!¨$Ð!Ó/ñ5(ó 0ð5(ðn ‡[�[×!Ñ!¨$Ð!Ó/ñ5ó 0ð5ð ‡[�[×Ñ˜WÒ&HÓIñ&&ó Jñ&&r]   r_  c                 óh   ‡ — t        j                  dˆ fd„‰ ¬«      }t        |«      }d|vsJ |«       ‚y )N)r*   r*   c                 ó(   •— ‰j                  dg«      S r¸   ©rŒ   ©rc   rj   s    €r/   rd   ztest_repr.<locals>.<lambda>q  s   ø€ ÀÇ
Á
ÈAÈ3Ã€ r]   ©rK   r   rj   zunspecified dtype)rŽ   r   Úrepr)rj   rX   Úrepr_As   `  r/   Ú	test_reprrœ  p  s5   ø€ Ü× Ñ  vÓ6OÐTVÔW€AÜ�!‹W€FØ fÑ,Ð4¨fÓ4Ñ,r]   c                 ó�  — t        j                  d| ¬«      }t        || j                  g d¢«      z  | j                  g d¢«      «       t        t	        |j                  | j                  | j                  d«      d«      «      «      | j                  d«      «       t        t        |j                  | j                  g d¢«      «       y )NrÇ   rC  rQ   r½   r|   )rŽ   ÚIdentityOperatorr   rŒ   r   r   rµ   Úaranger›   rœ   r   )rj   Úidents     r/   Útest_identityr¡  v  s‚   € Ü×&Ñ& v°"Ô5€EÜ�E˜BŸJ™J¢yÓ1Ñ1°2·:±:ºiÓ3HÔIÜ”H˜UŸY™Y r§z¡z°"·)±)¸A³,ÀÓ'GÓHÓIÈ2Ï9É9ÐUVË<ÔXä”*˜eŸl™l¨B¯J©J²|Ó,DÕEr]   c           
      ó†  ‡ — t        j                  ‰ j                  ‰ j                  d‰ j                  ¬«      d«      «      }ˆ fd„}t        j
                  d|‰ ¬«      }||||z  ||z  |j                  |j                  «       ||z   ||z   |dz  g	}|D ],  }t        |d«      sJ ‚t        |d	«      sJ ‚t        |d
«      rŒ,J ‚ y )Né   rr   rÈ   c                 óˆ   •— ‰j                  | «      } | j                  dk(  s| j                  dk(  sJ ‚‰j                  d«      S )Nr  )rR   r*   rT   )rŒ   rK   rÉ   r˜  s    €r/   Úalways_four_onesz)test_attributes.<locals>.always_four_ones�  s:   ø€ Ø�J‰J�q‹MˆØ�w‰w˜$Š !§'¡'¨VÒ"3Ð3Ð3Ø�w‰w�q‹zÐr]   rÆ   r™  rT   ro   rK   rk  )	rŽ   r   rµ   rŸ  rp   r   r’   r“   r…  )rj   rX   r¥  rY   Úopsrë   s   `     r/   Útest_attributesr§  ~  sÀ   ø€ Ü×"Ñ" 2§:¡:¨b¯i©i¸À"Ç*Á*¨iÓ.MÈvÓ#VÓW€Aôô
 	× Ñ  vÐ6FÈ2ÔN€Aàˆa��Q‘˜˜A™˜qŸs™s A§I¡I£K°°Q±¸¸A¹¸qÀ!¹tÐ
D€CØò &ˆÜ�r˜7Ô#Ð#Ð#Ü�r˜7Ô#Ð#Ð#Ü�r˜9Õ%Ð%Ð%ñ&r]   c                 ó   — | S )z> Needed for test_pickle as local functions are not pickleable ra   ©rc   s    r/   Úmatvec_for_picklerª  �  s   € à€Hr]   r¯   z0pickle-ability is not guaranteed by the standardc                 ó>  — dd l }t        | «      rdnd}t        ||j                  dz   «      D ]n  }t	        j
                  dt        | ¬«      }|j                  ||¬«      }|j                  |«      }|j                  D ]  }t        ||«      t        ||«      k(  rŒJ ‚ Œp y )Nr   r!   r*   rÇ   rC  )Úprotocol)Úpickler   rA   ÚHIGHEST_PROTOCOLrŽ   r   rª  ÚdumpsÚloadsÚ__dict__r"  )rj   r­  Úprotocol_minr¬  rX   ÚsrY   r  s           r/   Útest_pickler´  ”  s–   € ó
 ä  œ‘1¨!€LÜ˜,¨×(?Ñ(?À!Ñ(CÓDò 2ˆÜ×$Ñ$ VÔ->À2ÔFˆØ�L‰L˜ XˆLÓ.ˆØ�L‰L˜‹Oˆà—‘ò 	2ˆAÜ˜1˜a“=¤G¨A¨q£MÓ1Ð1Ð1ñ	2ñ2r]   c                 óö  ‡ —  G d„ dt         j                  «      }t        t        d¬«      5  t	        t
        |«       d d d «        G ˆ fd„dt         j                  «      } |d«      }t        |j                  ‰ j                  g d¢«      «      ‰ j                  g d¢«      «       t	        t        |j                  ‰ j                  g d	¢«      «        G ˆ fd
„dt         j                  «      } |‰ j                  t        j                  j                  dd«      «      «      }|j                  ‰ j                  t        j                  j                  d«      «      «      j                  dk(  sJ ‚y # 1 sw Y   �Œ3xY w)Nc                   ó   — e Zd Zy)útest_inheritance.<locals>.EmptyN)rË   rÌ   rÍ   ra   r]   r/   ÚEmptyr·  ¦  s   „ Ør]   r¸  zshould implement at leastrv   c                   ó(   •‡ — e Zd Zˆ ˆfd„Zd„ Zˆ xZS )ú"test_inheritance.<locals>.Identityc                 ó.   •— t         ‰| �  d ||f‰¬«       y ri  )rE  r   )r[   ÚnrG  rj   s     €€r/   r   z+test_inheritance.<locals>.Identity.__init__­  s   ø€ Ü‰GÑ 4°°1¨v¸"ÐÕ=r]   c                 ó   — |S r4   ra   ©r[   rc   s     r/   rk  z*test_inheritance.<locals>.Identity._matvec°  s   € ØˆHr]   )rË   rÌ   rÍ   r   rk  rR  ©rG  rj   s   @€r/   ÚIdentityrº  ¬  s   ù„ õ	>ö	r]   rÀ  rR   rQ   rS   c                   ó(   •‡ — e Zd Zˆ ˆfd„Zd„ Zˆ xZS )ú$test_inheritance.<locals>.MatmatOnlyc                 ó`   •— t         ‰| �  |j                  |j                  ‰¬«       || _        y rB  ©rE  r   ro   rK   rX   ©r[   rX   rG  rj   s     €€r/   r   z-test_inheritance.<locals>.MatmatOnly.__init__¸  ó&   ø€ Ü‰GÑ˜QŸW™W a§g¡g°"ÐÔ5ØˆD�Fr]   c                 ó    — | j                   |z  S r4   r~   r¾  s     r/   rM  z,test_inheritance.<locals>.MatmatOnly._matmat¼  s   € Ø—6‘6˜A‘:Ðr]   )rË   rÌ   rÍ   r   rM  rR  r¿  s   @€r/   Ú
MatmatOnlyrÂ  ·  s   ù„ õ	ö	r]   rÈ  rU   ©rU   )rŽ   r   r   ÚRuntimeWarningr›   Ú	TypeErrorr   r   rŒ   ÚNotImplementedErrorr   r7   r8   ÚrandnrK   )rj   r¸  rÀ  Úid3rÈ  Úmms   `     r/   Útest_inheritancerÐ  ¥  s  ø€ ô”	×(Ñ(ô ô 
Œ~Ð%@Ô	Añ (Ü”i Ô'÷(ö”9×+Ñ+ô ñ �1‹+€CÜ�C—J‘J˜rŸz™zª)Ó4Ó5°r·z±zÂ)Ó7LÔMÜÔ% s§{¡{°B·J±JºyÓ4IÔJö”Y×-Ñ-ô ñ 
�B—J‘JœrŸy™yŸ™¨q°!Ó4Ó5Ó	6€BØ�9‰9�R—Z‘Z¤§	¡	§¡°Ó 2Ó3Ó4×:Ñ:¸dÒBÐBÑB÷/(ñ (ús   ¬E.Å.E8c                 óÜ  — | j                  t        j                  j                  dd«      dt        j                  j                  dd«      z  z   «      }| j                  t        j                  j                  dd«      «      }t	        j
                  |«      }t	        j
                  |«      }||z   }||z   }|j                  | j                  k(  sJ ‚|j                  | j                  k(  sJ ‚y )Nr!   rð   )	rŒ   r7   r8   ÚrandrŽ   r   ro   rp   r�   )rj   Úmat_complexÚmat_realÚcomplex_operatorÚreal_operatorÚsum_complexÚsum_reals          r/   Útest_dtypes_of_operator_sumrÙ  Ã  s»   € ð —*‘*œRŸY™YŸ^™^¨A¨aÓ0°2¼¿	¹	¿¹ÀqÈÓ8KÑ3KÑKÓL€KØ�z‰zœ"Ÿ)™)Ÿ.™.¨¨1Ó-Ó.€Hä ×1Ñ1°+Ó>ÐÜ×.Ñ.¨xÓ8€Mà"Ð%5Ñ5€KØ˜}Ñ,€Hà�>‰>˜RŸZ™ZÒ'Ð'Ð'Ø×Ñ §¡Ò-Ð-Ñ-r]   c                 ód   ‡— dgŠˆfd„}t        j                  d|| ¬«       t        ‰d   d«       y )Nr   c                 ó"   •— ‰dxx   dz  cc<   | S ©Nr   r*   ra   )r  Ú
call_counts    €r/   r   z#test_no_double_init.<locals>.matvecÖ  s   ø€ Ø�1‹˜Ñ‹Øˆr]   ©r!   r!   ©r   rj   r*   )rŽ   r   r
   )rj   r   rÝ  s     @r/   Útest_no_double_initrà  Ó  s1   ø€ Ø�€Jôô ×Ñ˜V¨F°rÕ:Ü�˜A‘ Õ"r]   Ú
test_dtypec                 óÞ  ‡‡— d| j                   v r t        ‰«      st        j                  d«       ‰j	                  t        j                  d| ¬«      «      Šˆˆfd„}t        j                  d|‰¬«      }‰j                  }‰j                  |d«      r$	 ‰j	                  d	«      ‰j	                  d
«      z    |j                  |k(  sJ ‚y # t        $ r t        j                  ‰d¬«      }Y Œ4w xY w)NÚ
longdoublez$longdoubles are only tested for `np`r*   rr   c                 ó<   •— ‰j                  ‰| d   z  | d   g«      S rÜ  )Ústack)r  Úscalarrj   s    €€r/   r0  z/test_determine_lo_dtype_from_matvec.<locals>.mví  s#   ø€ Ø�x‰x˜ ! A¡$™¨¨!©Ð-Ó.Ð.r]   rÞ  rß  )zreal floatingzcomplex floatingr!   g       @Úintegral)Úkind)rË   r   r�   r’  rŒ   r7   rW   rŽ   r   ro   ÚisdtyperË  r  Údefault_dtype)rá  rj   r0  ÚloÚexpectedræ  s    `   @r/   Ú#test_determine_lo_dtype_from_matvecrí  ç  sÆ   ù€ à�z×*Ñ*Ñ*´8¸B´<Ü�‰Ð:Ô;à�Z‰ZœŸ™ ¨*Ô5Ó6€Fõ/ô 
×	!Ñ	! &°¸Ô	;€Bð �|‰|€HØ	‡z�z�(ÐAÔBð	>Ø�J‰J�q‹M˜BŸJ™J s›OÒ+ð �8‰8�xÒÐÑøô ò 	>Ü×(Ñ(¨°*Ô=ŠHð	>ús   Â#C	 Ã	 C,Ã+C,c                 ó|   ‡ — ˆ fd„}t        j                  d|‰ ¬«      }‰ j                  |j                  d«      sJ ‚y )Nc                 ó<   •— ‰j                  d| d   z  | d   g«      S )Né€   r   r*   r—  )r  rj   s    €r/   r0  z+test_determine_lo_dtype_for_int.<locals>.mv  s#   ø€ Ø�z‰z˜3  1¡™: q¨¡tÐ,Ó-Ð-r]   rÞ  rß  rç  )rŽ   r   ré  ro   )rj   r0  rë  s   `  r/   Útest_determine_lo_dtype_for_intrñ  ÿ  s6   ø€ ô.ô 
×	!Ñ	! &°¸Ô	;€BØ�:‰:�b—h‘h 
Ô+Ð+Ñ+r]   c                 óR  — | j                  dgg| j                  ¬«      }t        j                  |«      }d|z  }d|z  }| j                  dg| j                  ¬«      }t	        |j                  |«      | j                  ||«      «       t	        |j                  j                  |«      | j                  | j                  |j                  «      |«      «       t	        |j                  «       j                  |«      | j                  | j                  |j                  «      |«      «       y ©Nrð   rr   r*   )rŒ   r�   rŽ   r   r   r   rù   r’   rh   r>   r“   ©rj   r¢   rX   rY   ÚYr  s         r/   Útest_adjoint_conjugaterö  	  sÏ   € Ø
�
‰
�R�D�6 §¡ˆ
Ó/€AÜ×"Ñ" 1Ó%€Aà
ˆQ‰€AØ
ˆQ‰€Aà
�
‰
�A�3˜bŸm™mˆ
Ó,€Aä�A—E‘E˜!“H˜bŸi™i¨¨1›oÔ.Ü�A—C‘C—G‘G˜A“J §	¡	¨"¯'©'°!·#±#«,¸Ó :Ô;Ü�A—I‘I“K—O‘O AÓ&¨¯	©	°"·'±'¸!¿#¹#³,ÀÓ(BÕCr]   c                 óv   — | j                  dgg«      }t        j                  |«      }|j                  dk(  sJ ‚y )Nr*   r!   )rŒ   rŽ   r   r$   )rj   r¢   rX   s      r/   Ú	test_ndimrø    s4   € Ø
�
‰
�Q�C�5Ó€AÜ×"Ñ" 1Ó%€AØ�6‰6�QŠ;Ð‰;r]   c                 ó�  — | j                  dgg| j                  ¬«      }t        j                  |«      }d|z  }d|z  }| j                  dg| j                  ¬«      }t	        |j                  |«      | j                  ||«      «       t	        |j                  j                  |«      | j                  |j                  |«      «       y ró  )rŒ   r�   rŽ   r   r   r   rù   r>   rô  s         r/   Útest_transpose_noconjugaterú    s—   € Ø
�
‰
�R�D�6 §¡ˆ
Ó/€AÜ×"Ñ" 1Ó%€Aà
ˆQ‰€AØ
ˆQ‰€Aà
�
‰
�A�3˜bŸm™mˆ
Ó,€Aä�A—E‘E˜!“H˜bŸi™i¨¨1›oÔ.Ü�A—C‘C—G‘G˜A“J §	¡	¨!¯#©#¨qÓ 1Õ2r]   r°   c                 ó&  ‡ — t        ‰ j                  ‰ j                  ¬«      } G ˆ fd„dt        j                  «      } | |ddgddgg«      «      } |ddg«      }|} |dd	gd
dgg«      }‰ j                  |d«      } |ddgddgg«      }t        ||z  ||z  «       t        |j                  |z  |j                  |z  «       t        |j                  |z  |j                  |z  «       t        ||z  ||z  «       t        ||z  ||z  «       t        |j                  |z  |j                  |z  «       t        ||z  ||z  «       t        |j                  |z  |j                  |z  «       t        |j                  |z  |j                  |z  «       y )Nrr   c                   ó.   •‡ — e Zd Zˆ ˆfd„Zd„ Zd„ Zˆ xZS )ú/test_transpose_multiplication.<locals>.MyMatrixc                 ó`   •— t         ‰| �  |j                  |j                  ‰¬«       || _        y rB  rÄ  rÅ  s     €€r/   r   z8test_transpose_multiplication.<locals>.MyMatrix.__init__2  rÆ  r]   c                 ó    — | j                   |z  S r4   r~   ©r[   Úothers     r/   rM  z7test_transpose_multiplication.<locals>.MyMatrix._matmat5  s   € ¨¯©°%©Ð"7r]   c                 ó4   — | j                   j                  |z  S r4   )rX   r  r   s     r/   rz  z8test_transpose_multiplication.<locals>.MyMatrix._rmatmat6  s   € ¨$¯&©&¯)©)°eÑ*;Ð#;r]   )rË   rÌ   rÍ   r   rM  rz  rR  r¿  s   @€r/   ÚMyMatrixrý  1  s   ù„ õ	ò 	8Þ;r]   r  r*   r!   rR   rT   r"   é   ry   é(   r¾   )	r   rŒ   r�   rŽ   r   rµ   r   r>   r  )	rj   rŸ   r  rX   r¢   ÚX_TrY   ÚX2rõ  s	   `        r/   Útest_transpose_multiplicationr  *  sd  ø€ ô �r—z‘z¨¯©Ô7€Hö<”9×+Ñ+ô <ñ 	‘˜A˜q˜6 A q 6Ð*Ó+Ó,€AÙ�!�Q�Ó€AØ
€CÙ�2�r�(˜R ˜HÐ%Ó&€AØ	�‰�A�wÓ	€BÙ�1�a�&˜1˜a˜&Ð!Ó"€Aä�A˜‘E˜1˜q™5Ô!Ü�A—C‘C˜!‘G˜QŸS™S 1™WÔ%Ü�A—C‘C˜!‘G˜QŸT™T A™XÔ&Ü�A˜‘E˜1˜q™5Ô!Ü�C˜!‘G˜S 1™WÔ%Ü�A—C‘C˜!‘G˜QŸT™T A™XÔ&Ü�A˜‘F˜A ™FÔ#Ü�B—E‘E˜A‘I˜rŸu™u q™yÔ)Ü�A—C‘C˜"‘H˜aŸd™d R™iÕ(r]   TrW  c                  óÈ  — t        j                  d«      } t        j                  t        j                  d«      «      }t	        || z  t         j
                  «      sJ ‚t	        | |z  t         j
                  «      sJ ‚t        || z  j                  «       t        j                  d«      «       t        | |z  j                  «       t        j                  d«      «       t        j                  dd„ ¬«      }d}t        t        |¬«      5  || z   d d d «       t        t        |¬«      5  | |z   d d d «       t        j                  | «      } t	        || z  t        j                  «      sJ ‚t	        | |z  t        j                  «      sJ ‚t        || z  j                  t        j                  d«      «      t        j                  d«      «       y # 1 sw Y   ŒÀxY w# 1 sw Y   Œ­xY w)Nr!   rÞ  c                 ó   — | S r4   ra   r©  s    r/   rd   z.test_sparse_matmat_exception.<locals>.<lambda>T  s   € ¸!€ r]   )r   z6Try wrapping the matrix with `aslinearoperator` first.rv   )rZ  Ú	eye_arrayrŽ   r   r–   Úsparrayr   Útoarrayr7   Úeyer   r›   rË  r   rÉ   )rY   rX   r§   s      r/   Útest_sparse_matmat_exceptionr  J  sg  € ä×Ñ˜Ó€Aä×"Ñ"¤6×#3Ñ#3°AÓ#6Ó7€AÜ�a˜!‘eœVŸ^™^Ô,Ð,Ð,Ü�a˜!‘eœVŸ^™^Ô,Ð,Ð,Ü�Q˜‘U—O‘OÓ%¤r§v¡v¨a£yÔ1Ü�Q˜‘U—O‘OÓ%¤r§v¡v¨a£yÔ1ä× Ñ  ±Ô<€AØ
B€CÜ	”y¨Ô	,ñ Ø	ˆAŠ÷ä	”y¨Ô	,ñ Ø	ˆAŠ÷ô 	×"Ñ" 1Ó%€AÜ�a˜!‘eœY×5Ñ5Ô6Ð6Ð6Ü�a˜!‘eœY×5Ñ5Ô6Ð6Ð6Ü�Q˜‘U—N‘N¤2§7¡7¨1£:Ó.´·±¸³
Õ;÷ð ú÷ð ús   ÄGÄ&GÇGÇG!z	jax.numpyz.remaining reference (due to lazy_xp_function?)c                 ó¨   — | j                  d«      }t        t        j                  || «      5 }|j	                  «        ~d d d «       y # 1 sw Y   y xY wr�   )r  r   rŽ   ÚMatrixLinearOperatorr“   )rj   rX   rë   s      r/   Ú"test_MatrixLinearOperator_refcycler  a  sF   € ð 	�‰ˆq‹	€AÜ	œI×:Ñ:¸A¸rÓ	Bð ÀbØ
�
‰
ŒØ÷÷ ñ ús   ­AÁAÚleftFÚoperator_definition)Úsubclass_matvecÚsubclass_matmatÚ__init__matvecÚ__init__matmatr   Úbatch_A)ra   rÉ  r  Úbatch_x)ra   )rV   r*   )r   r*   ro   c                 ó„  ‡‡‡‡‡— t         j                  j                  d«      }d\  }}}	|j                  g |¢|‘|‘­«      Š|j                  g ‰¢| r|n|‘­«      }
|j                  g ‰¢| r|n|‘d‘­«      }|j                  g ‰¢| r|n|‘|	‘­«      }|t         j                  k(  r„‰d|j                  ‰j                  «      z  z   Š|
d|j                  |
j                  «      z  z   }
|d|j                  |j                  «      z  z   }|d|j                  |j                  «      z  z   }ˆfd„‰|
||fD «       \  Š}
}}ˆˆfd„Šˆfd„Š|dk(  rt        j                  ‰«      }nÛ|d	k(  r8t        j                  ‰j                  ‰j                  ˆˆfd
„ˆˆˆfd„‰¬«      }nž|dk(  rt        j                  d«       nƒ|dk(  r= G ˆˆˆfd„dt
        j                  «      } |‰j                  ‰j                  ‰¬«      }nA|dk(  r< G ˆˆˆfd„dt
        j                  «      } |‰j                  ‰j                  ‰¬«      }t        | rj                  |
«      nj                  |
«      | r	 ‰‰|
«      n! ‰‰j                  ‰j                  «      |
«      «       ‰rKd}t        j                   t"        |¬«      5  | r|j                  |«      n|j                  |«       d d d «       n{| rdnd}t        j$                  t&        |¬«      5  t        | r|j                  |«      n|j                  |«      | r‰|z  n‰j                  ‰j                  «      |z  «       d d d «       t        j                   t"        d¬«      5  | r|j                  |«      n|j                  |«       d d d «       ‰rdnd}t        j                   t"        |¬«      5  | r|j)                  |
«      n|j+                  |
«       d d d «       t        | r|j)                  |«      n|j+                  |«      | r‰|z  n‰j                  ‰j                  «      |z  «       t        | r|j)                  |«      n|j+                  |«      | r‰|z  n‰j                  ‰j                  «      |z  «       | rü‰r*t        j                   t"        d¬«      5  ||
z   d d d «       nEt        ||
z  ‰|
z  «       t         ||
«      ‰|
z  «       t        |j-                  |
«      ‰|
z  «       t        ||z  ‰|z  «       t         ||«      ‰|z  «       t        |j-                  |«      ‰|z  «       t        ||z  ‰|z  «       t         ||«      ‰|z  «       t        |j-                  |«      ‰|z  «       y d}	 t        j.                  |‰d d «       |s2d}t        j                   t"        t0        f|¬«      5  |
|z   d d d «       n0t        |
|z  |
‰z  «       t        |j3                  |
«      |
‰z  «       t        j                   t"        d¬«      5  ||z   d d d «       t        ‰j                  |j                  «      |z  ‰j                  |j                  «      ‰z  «       t        |j3                  ‰j                  |j                  «      «      ‰j                  |j                  «      ‰z  «       y # 1 sw Y   �Œ~xY w# 1 sw Y   �Œ‹xY w# 1 sw Y   �ŒPxY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒxY w# t"        $ r d}Y �Œqw xY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒþxY w)Nl   ÿw{3j©)rT   rR   r!   r*   rð   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr4   r—  )r,   rc   rj   s     €r/   r0   ztest_batch.<locals>.<genexpr>Œ  s   øè ø€ ÒP°˜rŸz™z¨!Ÿ}ÑPùs   ƒc                 ó„   •— ‰s|j                   dk(  sJ ‚| |z  S |j                   dk\  sJ ‚| |d‰j                  f   z  d   S )Nr*   r!   .).r   )r$   Únewaxis)rX   rc   r  rj   s     €€r/   r   ztest_batch.<locals>.matvecŽ  sN   ø€ ÙØ—6‘6˜Q’;Ð�;Ø�q‘5ˆLð —6‘6˜Q’;Ð�;Ø˜˜3 §
¡
˜?Ñ+Ñ,¨fÑ5Ð5r]   c                 ó`   •— ‰s|j                   dk(  sJ ‚| |z  S |j                   dk\  sJ ‚| |z  S )Nr!   rR   )r$   )rX   r¢   r  s     €r/   r   ztest_batch.<locals>.matmat›  s<   ø€ ÙØ—6‘6˜Q’;Ð�;ð
 �1‰uˆð —6‘6˜Q’;Ð�;Ø�1‰uˆr]   r   r  c                 ó   •—  ‰‰| «      S r4   ra   )rc   r¡   r   s    €€r/   rd   ztest_batch.<locals>.<lambda>©  s   ø€ ™V B¨›]€ r]   c                 óH   •—  ‰‰j                  ‰j                  «      | «      S r4   ©rh   r  )rc   r¡   r   rj   s    €€€r/   rd   ztest_batch.<locals>.<lambda>ª  s   ø€ ™f R§W¡W¨R¯U©U£^°QÓ7€ r]   r  r  z&should work but doesn't - see gh-24510r  c                   ó(   •— e Zd Zˆ ˆfd„Zˆ ˆˆfd„Zy)ú$test_batch.<locals>.MyLinearOperatorc                 ó   •—  ‰‰|«      S r4   ra   )r[   rc   r¡   r   s     €€r/   rk  z,test_batch.<locals>.MyLinearOperator._matvec³  ó   ø€ Ù˜b !“}Ð$r]   c                 óH   •—  ‰‰j                  ‰j                  «      |«      S r4   r"  )r[   rc   r¡   r   rj   s     €€€r/   rp  z-test_batch.<locals>.MyLinearOperator._rmatvecµ  ó   ø€ Ù˜bŸg™g b§e¡e›n¨aÓ0Ð0r]   N)rË   rÌ   rÍ   rk  rp  )r¡   r   rj   s   €€€r/   ÚMyLinearOperatorr$  ²  ó   ø„ õ%÷1r]   r)  )rK   ro   rj   r  c                   ó(   •— e Zd Zˆ ˆfd„Zˆ ˆˆfd„Zy)r$  c                 ó   •—  ‰‰|«      S r4   ra   )r[   r¢   r¡   r   s     €€r/   rM  z,test_batch.<locals>.MyLinearOperator._matmatº  r&  r]   c                 óH   •—  ‰‰j                  ‰j                  «      |«      S r4   r"  )r[   r¢   r¡   r   rj   s     €€€r/   rz  z-test_batch.<locals>.MyLinearOperator._rmatmat¼  r(  r]   Nr{  )r¡   r   rj   s   €€€r/   r)  z$test_batch.<locals>.MyLinearOperator¹  r*  r]   zDimension mismatch:...rv   z'Calling `matvec` on 'column vectors'...z(Calling `rmatvec` on 'column vectors'...zExpected at least 2-d...Tr¿   Fz<Incompatible shapes|size of tensor|could not be broadcast...)r7   r8   r9   r�   rK   rŽ   r   r   ro   r�   r’  r   r   r   rh   r  r   rœ   r   r‘   r   r    r   rE   ÚRuntimeErrorr   )r  r  r  r  ro   rj   r'   Úmr¼  r  Úx_rowÚx_colÚx_matrX   r)  ÚmessageÚbroadcastabler§   r¡   r   r   s      ` `            @@@r/   Ú
test_batchr5  m  s4  ü€ ô" �)‰)×
Ñ
Ð 1Ó
2€Cà�G€A€qˆ!Ø	�‰Ð$�gÐ$˜qÐ$ !Ñ$Ó	%€BØ�J‰JÐ3˜Ð3¡t¡!°Ñ3Ó4€EØ�J‰JÐ6˜Ð6¡t¡!°Ð6°AÑ6Ó7€EØ�J‰JÐ6˜Ð6¡t¡!°Ð6°AÑ6Ó7€Eà”—‘ÒØ�"�s—z‘z "§(¡(Ó+Ñ+Ñ+ˆØ˜˜SŸZ™Z¨¯©Ó4Ñ4Ñ4ˆØ˜˜SŸZ™Z¨¯©Ó4Ñ4Ñ4ˆØ˜˜SŸZ™Z¨¯©Ó4Ñ4Ñ4ˆãP°r¸5À%ÈÐ6OÔPÑ€Bˆˆu�eõ6ôð Ð0Ò0Ü×&Ñ& rÓ*‰Ø	Ð 0Ò	0Ü×$Ñ$Ø—(‘( "§(¡(Ü*Ý7Øô	
‰ð 
Ð 0Ò	0ô 	�‰Ð<Õ=Ø	Ð 1Ò	1÷	1ð 	1œy×7Ñ7ô 	1ñ
  2§8¡8°2·8±8ÀÔC‰Ø	Ð 1Ò	1÷	1ð 	1œy×7Ñ7ô 	1ñ
  2§8¡8°2·8±8ÀÔCˆô Ùˆ�‰�Œ Q§Y¡Y¨uÓ%5Ù!‰ˆr�5Ô¡v¨b¯g©g°b·e±e«n¸eÓ'Dôñ
 Ø*ˆÜ�]‰]œ:¨WÔ5ñ 	:Ù#ˆA�H‰H�UŒO¨¯©°5Ó)9ø÷	:ð 	:ñ AEÑ<ØBð 	ä�\‰\œ-¨wÔ7ñ 	ÜÙ#'�—‘˜”¨Q¯Y©Y°uÓ-=Ù"��U’
¨¯©°·±«¸Ñ(>ô÷	ô 
�‰”zÐ)AÔ	Bñ 6Ùˆ�‰�Œ Q§Y¡Y¨uÓ%5ø÷6ñ
 +2Ñ&Ð7Q€GÜ	�‰”z¨Ô	1ñ 6Ùˆ�‰�Œ Q§Y¡Y¨uÓ%5ø÷6ô Ùˆ�‰�Œ Q§Y¡Y¨uÓ%5ÙˆˆUŠ
 §¡¨¯©£°Ñ 6ôô
 Ùˆ�‰�Œ Q§Y¡Y¨uÓ%5ÙˆˆUŠ
 §¡¨¯©£°Ñ 6ôñ áÜ—‘œzÐ1IÔJñ Ø�E’	÷ð ô ˜A ™I r¨E¡zÔ2Ü™A˜e›H b¨5¡jÔ1Ü˜AŸE™E %›L¨"¨u©*Ô5ä˜˜E™	 2¨¡:Ô.Ü™˜%› " u¡*Ô-Ü˜Ÿ™˜e› b¨5¡jÔ1ä˜˜E™	 2¨¡:Ô.Ü™˜%› " u¡*Ô-Ü˜Ÿ™˜e› b¨5¡jÕ1ð ˆð	"ô
 ×Ñ ¨°°"¨Ô6ñ àPˆCÜ—‘¤
¬LÐ9ÀÔEñ Ø˜’	÷ð ô ˜E A™I u¨r¡zÔ2Ü˜AŸF™F 5›M¨5°2©:Ô6ä�]‰]œ:Ð-EÔFñ 	Ø�AŠI÷	ô 	˜Ÿ™ §¡Ó)¨AÑ-¨r¯w©w°u·x±xÓ/@À2Ñ/EÔFÜ˜Ÿ™˜rŸw™w u§x¡xÓ0Ó1°2·7±7¸5¿8¹8Ó3DÀrÑ3IÕJ÷Q	:ñ 	:ú÷
	ñ 	ú÷6ñ 6ú÷6ñ 6ú÷"ñ ûô. ò 	"Ø!‹Mð	"ú÷
ñ ú÷	ð 	úsg   Ê9%[ÌA[#Í=%[0Ï%[=Ò9\
Ö\ ×\)Ø3\6Û[ Û#[-Û0[:Û=\Ü
\Ü\&Ü%\&Ü)\3Ü6\?)WrÙ   r—   Ú	functoolsr   Ú	itertoolsr   rÀ   Útypesr   Útypingr   r�   r   r›   r   Únumpy.testingr	   r
   Únumpyr7   Úscipy._lib._array_apir   r   r   r   r   r   r   r   r   r   Úscipy._externalr   r  Úscipy.sparserZ  Úscipy.sparse.linalg._interfaceÚlinalgÚ
_interfacerŽ   Úscipy.sparse.linalgr   r   Úscipy.sparse._sputilsr   Úscipy._lib._gcutilsr   Ú
pytestmarkrM   rO   rÎ   rÏ   rÓ   r_  rœ  r¡  r§  rª  r´  rÐ  rÙ  rà  Úint8Úint16rß   r�  Ú
INT_DTYPESrà   rp   rã  ÚREAL_DTYPESrã   r�   ÚclongdoubleÚCOMPLEX_DTYPESÚINEXACTDTYPESÚ	ALLDTYPESr]  rí  rñ  rö  rø  rú  r  r  r  r5  ra   r]   r/   ú<module>rN     sr  ðñó Ý Ý Û Ý Ý ã ß 1ß /ã ÷÷ ÷ õ 3Ý ç 2Ó 2ß @Ý (Ý 2á!Ø�ZÐ Ø�XÐØ�XÐØ�UÐØ�VÐØ�YÐØ�YÐØó	€
ð 45¸!ÀÈô @÷0M$ñ M$ð` ‡�×Ñ˜lÐ3^ÐÓ_÷CLð CLó `ðCL÷L
W&ñ W&òt5òFò&ò"ð
 ‡�×ÑØØ=ð ó ñ
2ó	ð
2òCò<.ò 
#ð �g‰g�r—x‘x §¡¨2¯8©8Ð4€
Ø�z‰z˜2Ÿ:™: r§}¡}Ð5€Ø—,‘, §¡¨r¯~©~Ð>€Ø˜nÑ,€Ø˜Ñ&€	ð ‡�×Ñ˜ yÓ1ñ ó 2ð ò.,òDòò
3ð ‡�×Ñ˜lÐ3^ÐÓ_Ø‡�×ÑØØEð ó ñ)ó	ó `ð
)ð6 ‡�×Ñ dÐÓ+ñ<ó ,ð<ð, ‡�×ÑØÐHð ó ñóðð ‡�×Ñ˜ %¨ Ó/Ø‡�×ÑÐ.ò 1Eó Fð ‡�×Ñ˜Ò$4Ó5Ø‡�×Ñ˜Ò$8Ó9Ø‡�×Ñ˜ 2§:¡:¨r¯}©}Ð"=Ó>Ø‡�×Ñ˜lÐ3^ÐÓ_Ø‡�×ÑØØEð ó ñXKó	ó `ó ?ó :ó 6óFó 0ñXKr]   