
    xf!                    "   d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
Z
d dl
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 d dlmZmZmZ d dlmZ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+m,Z, d dl-m.Z/ 	 d d
l0m1Z1 	 d dlm3Z4 d dl(m5Z5 d dl6m7Z7 ejp                  ejr                  gZ:ejv                  ejx                  gZ=e:e=z   Z>dxZ?Z@e1e1d   d   d   Z?e1d   d   d   Z@d ZAd ZB G d d      ZC G d d      ZD G d d      ZEe
j                  j                  de>      e
j                  j                  dg d      d               ZH G d d      ZI G d  d!      ZJ G d" d#      ZK G d$ d%      ZLd& ZMd' ZNd( ZOd) ZP G d* d+      ZQ G d, d-      ZRd. ZSd/ ZTd0 ZUd1 ZVd2 ZWd3 ZXd4 ZYd5 ZZd6 Z[d7 Z\d8 Z]d9 Z^d: Z_d; Z` G d< d=      Zad> Zbd? Zcd@ ZddA Zee
j                  j                  dBdCD      dE        ZgdF Zhe
j                  j                  dGdHdIg      e
j                  j                  de:      e
j                  j                  dJ eidK            e
j                  j                  dL eidM            e
j                  j                  dN eidM            e
j                  j                  dOd dPg      e
j                  j                  dQd dPg      d.dR                                                 Zje
j                  j                  de:      dS        Zke
j                  j                  dTdJdUidLdUidNdUidOdUidVdUidQdUif      dW        Zle
j                  j                  dX ej                  g dYg dZg d[g d\g d]g d^g       ej                  g d_       ej                  g d`g dag dbg dcg ddg deg       ej                  g dfg dgg dhg dig      fg      dj        Zne
j                  j                  de>      dk        Zoe
j                  j                  dl ej                  g dm       ej                  g dn       ej                  g do       ej                  g dp       ej                  g dq       ej                  g dr       ej                  g ds       ej                  dtdugdvdwgdxdygdzd{gdtd|gg       ej                  d}d~gdd}gddgd}dgddPgg      f	 ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  g ds       ej                  ddgddgddgddgddgg       ej                  ddgddgddgddgddgg      f	g      d        Zpe
j                  j                  de>      e
j                  j                  dg d      d               Zqe
j                  j                  d ere:e:z   e>            d        Zse
j                  j                  d ere:e:z   e>            d        Zte
j                  j                  d ere:e:z   e>            d        Zue
j                  j                  d ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  dKdgdUdMgddUgddgddgg       ej                  ddgddgdPdgddKgddgg      f ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  ddgddgddgddgg       ej                  ddgddgddgddgg      fg      d        Zvd Zwe
j                  j                  d ere>e:e:z               e
j                  j                  d eid            dÄ               Zxe
j                  j                  d ere>e:e:z               e
j                  j                  d eid            dĄ               Zye
j                  j                  d ere>e:e:z               e
j                  j                  d eid            dń               Zze
j                  j                  d ere>e:e:z               e
j                  j                  d eid            dƄ               Z{e
j                  j                  dd ej                  g dȢ       ej                  g dɢ       ej                  g dʢ       ej                  g dˢg d̢g d͢g d΢g      fg      dτ        Z|e
j                  j                  de>      e
j                  j                  dg dѢ      d҄               Z}dӄ Z~e
j                  j                  dg dբ      e
j                  j                  dddg      dل               Ze
j                  j                  dddg      e
j                  j                  dddg      d܄               Ze
j                  j                  de>      e
j                  j                  dg dߢ      d               Ze
j                  j                  de>      d        Ze
j                  j                  de>      e
j                  j                  dddBg      e
j                  j                  dddg      d                      Ze
j                  j                  de>      e
j                  j                  dd dPg      e
j                  j                  dddg      d                      Ze
j                  j                  de>dz        e
j                  j                  dddBg      e
j                  j                  dddg      d                      Ze
j                  j                  d ej                  g dm       ej                  g dn       ej                  g do       ej                  dtdugdvdwgdxdygdzd{gdtd|gg       ej                  d}d~gdd}gddgd}dgddPgg      f ej                  g d       ej                  g d       ej                  g d       ej                  ddgddgddgddgddgg       ej                  ddgddgddgddgddgg      fg      d        Ze
j                  j                  d ere>e:e:z               e
j                  j                  ddd fdd fg      d               Ze
j                  j                  d ere>e:e:z               e
j                  j                  ddd fdd fg      d               Ze
j                  j                  d ere>e:e:z               e
j                  j                  ddd fdd fg      d               Ze
j                  j                  d ej                  g d       ej                  g d       ej                  dKdgdUdMgddUgddgddgg       ej                  ddgddgdPdgddKgddgg      f ej                  g d       ej                  g d       ej                  ddgddgddgddgg       ej                  ddgddgddgddgg      fg      d        Ze
j                  j                  dddBg      e
j                  j                  de>      d               Ze
j                  j                  de>      d        Ze
j                  j                  d ej                  g dg dg dg dg       ej                  g d g dg dg dg      ddPf ej                  g dg dg dg dg       ej                  g dg dg d	g d
g      dPdMfg      d        Ze
j                  j                  de>      d        Ze
j                  j                  de>      d        Ze
j                  j                  d ej                  g dg dg dg dg       ej                  g dg dg dg dg       ej                  g dg dg dg dg       ej                  g d      ddf ej                  g dg dg d g d!g       ej                  g d"g d#g d$g d%g       ej                  g d&g d'g d(g d)g       ej                  g d      d*d+fg      d,        Ze
j                  j                  de>      d-        Zy# e2$ r dZ1Y w xY w# e2$ r dZ4Y w xY w(/      N)reduce)assert_equalassert_array_almost_equalassert_assert_allcloseassert_almost_equalassert_array_equal)raises)eyeoneszeros
zeros_liketriutriltril_indicestriu_indices)randrandintseed)_flapacklapackinvsvdcholeskysolveldlnorm
block_diagqreigh)_compute_lwork)ortho_groupunitary_group)CONFIG)_clapack)get_lapack_funcs)get_blas_funcszBuild Dependenciesblasnameversionc                     |t         v rKt        j                  j                  |  t        j                  j                  |  dz  z   j	                  |      S t        j                  j                  |  j	                  |      S )N              ?)COMPLEX_DTYPESnprandomr   astype)shapedtypes     @/usr/lib/python3/dist-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr4   1   s`    		&))..%(-./5ve}	=99>>5!((//    c                  R   t         j                  t        j                  d       t	        t         j                  j                               } h d}t               }t        t               D ]/  }|j                  d      r||vs|| vs|j                  |       1 |g k(  sJ d       y)z%Test that all entries are in the doc.Nzlapack.__doc__ is None>   clapackflapackdivision	HAS_ILP64print_functionabsolute_importfind_best_lapack_type_z2Name(s) missing from lapack.__doc__ or ignore_list)
r   __doc__pytestskipsetsplitlistdir
startswithappend)namesignore_listmissingr)   s       r3   test_lapack_documentedrK   9   s    ~~,-$$&'EK fGF !$[)@E!NN4 ! b=NNN=r5   c                   $    e Zd Zd Zd Zd Zd Zy)TestFlapackSimplec           	         g dg dg dg}g dg dg dg dg}dD ]  }t        t        |d	z   d       }| ||      \  }}}}}	t        |	 t        |	             t	        ||       t        ||fd
t        |d
         dz
  f       t	        |t        j                  t        |                    ||dd      \  }}}}}	t        |	 t        |	              y )N)         )         )      	   )rO   r   r   ga2U0*3?)rR   r   r   gMb`?)rU   rO   r   r   )r   rO   r   r   sdzcgebalr   rO   )permutescale)	getattrr8   r   reprr   r   lenr.   r   )
selfaa1pfbalohipivscaleinfos
             r3   
test_gebalzTestFlapackSimple.test_gebalL   s    	9-  	*A7D1Ay)*1&BB$Hd4j)%b!,"bAs1Q4y{#34%hA@)*2q)B&BB$Hd4j)	*r5   c                     g dg dg dg}dD ];  }t        t        |dz   d       }| ||      \  }}}t        | t        |             = y )Nikiifi     i"  iiidgehrd)r\   r8   r   r]   )r_   r`   rb   rc   httaurh   s          r3   
test_gehrdzTestFlapackSimple.test_gehrda   s\      	*A7D1AyaDMBTHd4j)	*r5   c           	         t        j                  ddgddgg      }t        j                  ddgddgg      }t        j                  dd	gd
dgg      }d}dD ]u  }|j                  |      |j                  |      |j                  |      }}}t        d|f      \  }	|j	                         r|dxx   dz  cc<   d} |	|||      \  }
}}t        t        j                  ||
      t        j                  |
|      z   ||z          |	|||||      \  }
}}t        t        j                  |j                         j                  |
      t        j                  |
|j                         j                        z   ||z  d        |	|||d      \  }
}}t        t        j                  ||
      t        j                  |
|      z
  ||z  d       x y )NrO   rP   r   rR   rS   rT   rV   rW   
         TfdFD)trsylr,   C)tranatranbdecimal)isgn)	r.   arrayr0   r&   isupperr   dot	conjugaterx   )r_   r`   bctransr2   ra   b1c1rz   xr[   rh   s                r3   
test_trsylzTestFlapackSimple.test_trsyll   s   HHq!fq!f%&HHq!fq!f%&HHq"gBx()  	=E%!((5/188E?BB%j2%8FE}}1"2r2.NAud%bffRmbffQm&C&+bj2 #2r2U%HNAud%FF2<<>++Q/"&&BLLN<L<L2MMBJ+ #2r2B7NAud%bffRmbffQm&C&+bj!=#	=r5   c                 :   t        j                  g dg dg dg      }dD ]w  }dD ]n  }|j                  |      }|j                         r|dxx   dz  cc<   t	        d|f      \  } |||      }|d	v re|d
v rd}nd}t        j
                  t        j                  t        j                  t        j                  |                        }t        |||       |dv r)t        j                  t        j                  |            }n|dv r>t        j                  t        j                  t        j                  |      d            }nA|dv r=t        j                  t        j                  t        j                  |      d            }t        |       q z y )Nrk   rl   rn   ry   Mm1OoIiFfEer   r   r,   )langeFfEeFfrQ   rU   Mm1Oor   axisIirO   )r.   r   r0   r   r&   sqrtsumsquareabsr   maxr   )	r_   r`   r2   norm_strra   r   valuer   refs	            r3   
test_langezTestFlapackSimple.test_lange   sD   HH 
  	-E) -XXe_==?tHNH)*re<h+v%}"#"#''"&&266":)>"?@C'sG<4' ffRVVBZ0!U* ffRVVBFF2JQ%?@!T) ffRVVBFF2JQ%?@ ,1-	-r5   N)__name__
__module____qualname__ri   rs   r   r    r5   r3   rM   rM   J   s    **	*=8-r5   rM   c                       e Zd Zd Zd Zy)
TestLapackc                 &    t        t        d      ry y Nempty_module)hasattrr8   r_   s    r3   test_flapackzTestLapack.test_flapack       7N+ ,r5   c                 &    t        t        d      ry y r   )r   r7   r   s    r3   test_clapackzTestLapack.test_clapack   r   r5   N)r   r   r   r   r   r   r5   r3   r   r      s    
r5   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestLeastSquaresSolversc           	         t        d       t        t              D ]  \  }}d}d}d}t        ||      j	                  |      }t        |      j	                  |      }t        d|      \  }}	t        |	|||      }
 ||||
      \  }}}t        |dk\          |||d	|   |

      \  }}}t        |dk\          t        D ]  }t        j                  ddgddgddgg|      }t        j                  g d|      }t        d||f      \  }}}|j                  \  }}t        |j                        dk(  r|j                  d   }nd}t        ||||      }
 ||||
      \  }}}t        |d d t        j                  ddg|      dt        j                  |      j                  z          ||      \  }}}}t!        ||        t"        D ]  }t        j                  ddgddgddgg|      }t        j                  g d|      }t        d||f      \  }}}|j                  \  }}t        |j                        dk(  r|j                  d   }nd}t        ||||      }
 ||||
      \  }}}t        |d d t        j                  dd g|      dt        j                  |      j                  z          ||      \  }}}}t!        ||        y )!N  ru      rO   )gels
gels_lworkr2   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrP   r   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r   	enumerateDTYPESr   r0   r&   r!   r   REAL_DTYPESr.   r   r1   r^   r   finfoepsr	   r-   )r_   indr2   mnnrhsra   r   glsglslwr   r>   rh   r   r   r   lqrr   	lqr_truths                      r3   	test_gelsz!TestLeastSquaresSolvers.test_gels   s   T
#F+ 	JCAADa""5)Ba&B)*@NJC #5!Q5ER51JAq$DAIR6#;eDJAq$DAI	 ! 	/EC:::'.35B ,E:B&63b"X'?#D*e 88DAq288}!xx{ #:q!T:EBe4LCDAcrFBHH.A.@.B38%: "$BHHUO$7$7!79 "'rIq!QsI./	/2 $ 	/EHc?$h/$h/18=?B 6eDB&63b"X'?#D*e 88DAq288}!xx{ #:q!T:EBe4LCDAcrFHH&J&J&L+028:288E?;N;N8NP "'rIq!QsI./	/r5   c                    t         D ]U  }t        j                  ddgddgddgg|      }t        j                  g d|      }t        d	||f      \  }}|j                  \  }}t        |j                        d
k(  r|j                  d   }nd} ||||d      \  }	}
}t        t        j                  |	            }|
} |||||ddd      \  }}}}t        |d d t        j                  ddg|      dt        j                  |      j                  z         t        |t        j                  ddg|      dt        j                  |      j                  z         X t        D ]b  }t        j                  ddgddgddgg|      }t        j                  g d|      }t        d	||f      \  }}|j                  \  }}t        |j                        d
k(  r|j                  d   }nd} ||||d      \  }	}}
}t        t        j                  |	            }t        |      }|
} ||||||ddd      \  }}}}t        |d d t        j                  ddg|      dt        j                  |      j                  z         t        |t        j                  ddg|      dt        j                  |      j                  z         e y )Nr   r   r   r   r   r   r   r   )gelsdgelsd_lworkrP   rO   r   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r.   r   r&   r1   r^   intrealr   r   r   r-   )r_   r2   ra   r   r   r   r   r   r   workiworkrh   r   
iwork_sizer   srankrwork
rwork_sizes                      r3   
test_gelsdz"TestLeastSquaresSolvers.test_gelsd   s     	9EC:::'.35B ,E:B!12J35r("<E; 88DAq288}!xx{ !,Aq$ ;D%&EJ$RUJ%' 7Aq$AcrFBHH.A.@.B38%: "$BHHUO$7$7!79 Arxx);):)<CH J!#BHHUO$7$7!793	9: $ 	PEHc?$h/$h/18=?B 6eDB!12J35r("<E; 88DAq288}!xx{ (31ar'B$D%&EUJJ$RUJ
%' 7Aq$AcrFHH&J&J&L+028:288E?;N;N8NP AHH&8:K%L+028:288E?;N;N8NP5	Pr5   c           	      x   t         D ]S  }t        j                  ddgddgddgg|      }t        j                  g d|      }t        d	||f      \  }}|j                  \  }}t        |j                        d
k(  r|j                  d   }nd} ||||d      \  }	}
t        t        j                  |	            } |||d|dd      \  }}}}}	}
t        |d d t        j                  ddg|      dt        j                  |      j                  z         t        |t        j                  ddg|      dt        j                  |      j                  z         V t        D ]S  }t        j                  ddgddgddgg|      }t        j                  g d|      }t        d	||f      \  }}|j                  \  }}t        |j                        d
k(  r|j                  d   }nd} ||||d      \  }	}
t        t        j                  |	            } |||d|dd      \  }}}}}	}
t        |d d t        j                  ddg|      dt        j                  |      j                  z         t        |t        j                  ddg|      dt        j                  |      j                  z         V y )Nr   r   r   r   r   r   r   r   )gelssgelss_lworkrP   rO   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r_   r2   ra   r   r   r   r   r   r   r   rh   r   vr   r   r   s                   r3   
test_gelssz"TestLeastSquaresSolvers.test_gelss9  s     	9EC:::'.35B ,E:B!12J35r("<E; 88DAq288}!xx{ %Q44JD$&E(-b"b%(N%Aq!T4AcrFBHH.A.@.B38%: "$BHHUO$7$7!79 Arxx);):)<CH J!#BHHUO$7$7!79/	96 $ 	9EHc?$h/$h/18=?B 6eDB!12J35r("<E; 88DAq288}!xx{ %Q44JD$&E(-b"b%(N%Aq!T4AcrFHH&J&J&L+02 "$BHHUO$7$7!7	9
 Arxx);):)<CH J!#BHHUO$7$7!791	9r5   c           
      (   t         D ]  }t        j                  ddgddgddgg|      }t        j                  g d|      }t        d	||f      \  }}|j                  \  }}t        |j                        d
k(  r|j                  d   }nd} ||||dt        j                  |      j                  z        \  }	}
t        t        j                  |	            }t        j                  |j                  d   dft        j                        } ||||t        j                  |      j                  |dd      \  }}}}}
t        |d d t        j                  ddg|      dt        j                  |      j                  z          t        D ]  }t        j                  ddgddgddgg|      }t        j                  g d|      }t        d	||f      \  }}|j                  \  }}t        |j                        d
k(  r|j                  d   }nd} ||||dt        j                  |      j                  z        \  }	}
t        t        j                  |	            }t        j                  |j                  d   dft        j                        } ||||t        j                  |      j                  |dd      \  }}}}}
t        |d d t        j                  ddg|      dt        j                  |      j                  z          y )Nr   r   r   r   r   r   r   r   )gelsyr   rP   rO   ru   Fr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r.   r   r&   r1   r^   r   r   r   r   r   int32r   r-   )r_   r2   ra   r   r   gelsy_lworkr   r   r   r   rh   r   jptvr   r   jr   s                    r3   
test_gelsyz"TestLeastSquaresSolvers.test_gelsyr  s     	9EC:::'.35B ,E:B!12J35r("<E; 88DAq288}!xx{ %Q4BHHUO4G4G1GHJD$&E88RXXa[!,BHH=D"'Bbhhuo6I6I(-ue#=Aq!T4AcrFBHH.A.@.B38%: "$BHHUO$7$7!79+	94 $ 	9EHc?$h/$h/18=?B 6eDB!12J35r("<E; 88DAq288}!xx{ %Q4BHHUO4G4G1GHJD$&E88RXXa[!,BHH=D"'Bbhhuo6I6I(-ue#=Aq!T4AcrFHH&J&J&L+02 "$BHHUO$7$7!7	9+	9r5   N)r   r   r   r   r   r   r   r   r5   r3   r   r      s    B/H:Px79r59r5   r   r2   r1   )rQ   rR   )rS   rP      r   c                 Z    t        d|       }|\  }} |||      \  }}t        |d       y )Ngeqrf_lworkr   r   r   r   r&   r   )r2   r1   r  r   r   r   rh   s          r3   test_geqrf_lworkr    s3     #M%@KDAqQ'KE4qr5   c                       e Zd Zd Zy)TestRegressionc                    t         D ]  }t        j                  d|      }t        dg|g      \  }t	        t
        ||d        ||      \  }}}}|t        v r6t        dg|g      \  }t	        t
        ||dd  |d        ||dd  |d       |t        v st        d	g|g      \  }	t	        t
        |	|dd  |d        |	|dd  |d        y )
N)i,  rP   r   gerqfrP   r   orgrqrO   ungrq)r   r.   r   r&   assert_raises	Exceptionr   r-   )
r_   r2   r`   r	  rqrr   r   rh   r
  r  s
             r3   test_ticket_1645zTestRegression.test_ticket_1645  s     	-E/A%wi!5FE)UAQ7"'(BT4#)7)aS9i23AFbgs!,.()7)aS9i23AFbgs!,	-r5   N)r   r   r   r  r   r5   r3   r  r    s    -r5   r  c                       e Zd Zd Zy)	TestDpotrc           
      "   dD ]	  }dD ]   }t         j                  j                  d       t         j                  j                  d      }|j	                  |j
                        }t        d|f      \  }} ||||      \  }} |||      d   }	|r<t        t        j                  |	      t        j                  t        |                   t        t        j                  |	      t        j                  t        |                     y )N)TF*   )rQ   rQ   )size)potrfpotri)cleanr   )r.   r/   r   normalr   rx   r&   r   r   r   r   )
r_   lowerr  r   r`   dpotrfdpotrir   rh   dpts
             r3   test_gh_2691zTestDpotr.test_gh_2691  s    " 	CE& C		r"II$$&$1EE!##J!12Dqe!L E74Q&q)#BGGCL"''#a&/B#BGGCL"''#a&/BC	Cr5   N)r   r   r   r  r   r5   r3   r  r    s    Cr5   r  c                       e Zd Zd Zy)
TestDlasd4c                 :   t        j                  g d      }t        j                  g d      }t        j                  t        j                  t        j                  |dd       t        j
                  dt        |      dz
  f      f      |d d t         j                  f   f      }t        |dddd      }t        |      }t        j                  |d d d   |d   |t        |      z  z   gf      }t        j                  |d d d   df      }t        d	|f      }g }	t        d|      D ]5  }
 ||
||      }|	j                  |d          t        |d
   dk  d|
z         7 t        j                  |	      d d d   }	t        t        j                  t        j                   |	             df       t#        ||	dt        j$                  t         j&                        j(                  z  dt        j$                  t         j&                        j(                  z         y )N)r         @r   r   )g(\@g@g333333皙r   r   rO   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rQ   zcLAPACK root finding dlasd4 failed to find                                     the singular value %izThere are NaN rootsd   atolr   )r.   r   hstackvstackdiagr   r^   newaxisr   concatenater   r&   rangerG   r   anyisnanr   r   float64r   )r_   sigmasm_vecMSMit_lensgmmvcr)  rootsiress               r3   test_sing_val_updatezTestDlasd4.test_sing_val_update  s   /*01IIryy"''&2,"7"$((As5zA~+>"?"A BQ

]+- . %Eu#% VnnfTrTlVAYU9K-K,LMNnneDbDk401 6)4q&! 	@A3$CLLQ SVq[ $;=>$? @		@ "%RVVBHHUO,,.CDEEBHHRZZ,@,D,D(D "**!5!9!99	;r5   N)r   r   r   r@  r   r5   r3   r   r     s    ;r5   r   c                       e Zd Zej                  j                  de      d        Zej                  j                  deD  cg c]  }dD ]  }|dk(  r|t        v s||f  c}}}}       ej                  j                  dddg      ej                  j                  d	d
dg      d                      Z	ej                  j                  dg dg dg dg      d        Z
d Zej                  j                  dddg      d        Zyc c}}}} w )	TestTbtrsr2   c                 D   |t         v rdt        j                  g dg dg|      }t        j                  ddgddgdd	gd
dgg|      }t        j                  ddgddgddgddgg|      }n~|t        v rgt        j                  g dg dg dg|      }t        j                  ddgddgddgddgg|      }t        j                  ddgd d!gd"d#gd$d%gg|      }nt	        d&| d'      t        d(|      } |||d)*      \  }}t        |d+       t        ||d+d,-       y.)/zTest real (f07vef) and complex (f07vsf) examples from NAG

        Examples available from:
        * https://www.nag.com/numeric/fl/nagdoc_latest/html/f07/f07vef.html
        * https://www.nag.com/numeric/fl/nagdoc_latest/html/f07/f07vsf.html

        )p=
ףgQ@gHzG@g{Gz?)g      gq=
ףp@gHzGr   r   gp=
ף0rD  g(\+gףp=
0g333333*@g(\gHzG,gQ#rR   rO   r   rQ   rP   r  )y
ףp=
Q@y{Gz@GzyQ?HzGy)\(??)yQQ@yq=
ףpGz@yףp=
?{Gzr   )yQ?q=
ףp@y)\(zGr   r   yQ!
ףp=
yףp=
8Gzyp=
#/)\h7y\(LHzG @yQHz6@yףp=
3@(\=y{Gz-333333yQ+3@GzT5@y               @y      ?      @y      ?      y             yt&m=#yi6@Ug$B@y[a^C?b->y-@ji& *!z	Datatype z not understood.tbtrsLabr   uplor   h㈵>r   r,  N)r   r.   r   r-   
ValueErrorr&   r   r   )r_   r2   rI  r   x_outrF  r   rh   s           r3   test_nag_example_f07vef_f07vsfz(TestTbtrs.test_nag_example_f07vef_f07vsf  s    K424 %'B 65/!6* %.!5/+  %	&A
 HHq!f!2h !f "g' $)	*E
 n$KF:< !&'B =.9*N;)>:)>:<  %	&A
 HHr6l%w/46JK35JKM $)	*E y/?@AA '%82-4T15qt4r5   zdtype,trans)Nrx   r{   r{   rJ  UrG  r/  rP  c           	      @   t        d       d\  }}}t        d|      }|dk(  }	||	z  }
||
z
  }t        |
| dz
  d      }|D cg c]  }|t        |      z
   }}|D cg c]  }t	        |f|       }}|dk(  rt        j                  ||      ||
<   t        j                  ||d	      }t        j                  |dz   |f|      }t        |      D ]4  \  }}|j                  |      ||t        |d
      t        ||z   |      f<   6 t	        ||f|      } ||||||      \  }}t        |d
       |dk(  rt        ||z  |d       y |dk(  rt        |j                   |z  |d       y |dk(  rt        |j"                  |z  |d       y t%        d      c c}w c c}w )Ni  )rR   rQ   rP   rF  r   rQ  rO   r   dia)formatr   )rI  r   rJ  r   r/  rP  g-C6
?r   rx   r{   zInvalid trans argument)r   r&   r2  r   r4   r.   r   spsdiagsr   r   diagonalr   minr   r   rx   HrM  )r_   r2   r   rJ  r/  r   r   kdrF  is_upperkuklband_offsetsr   band_widthswidthbandsr`   rI  rowkr   rh   s                          r3   test_random_matriceszTestTbtrs.test_random_matrices,  s    	T
 4 6CK(]"W R"q"-+78aq3q6z88)+ -eXu= + + 3;/E"I IIe\%8 XXrAvqk5)- 	;FC-.ZZ]BsC1Ic!A#qk))*	; (D	592UF4T1C<AE140c\ACC!GQT2c\ACC!GQT25669 9+s   FFzuplo,trans,diag)rQ  rP  Invalid)rQ  re  rP  )re  rP  rP  c           	          t        dt        j                        }t        dd      }t        dd      }t	        t
        ||||||       y)z?Test if invalid values of uplo, trans and diag raise exceptionsrF  r   rR   rP   N)r&   r.   r5  r   r  r  )r_   rJ  r   r/  rF  rI  r   s          r3   &test_invalid_argument_raises_exceptionz0TestTbtrs.test_invalid_argument_raises_exception_  s>     !

;!QZAJiAtUDAr5   c                     t        j                  dt              }t        j                  dt              }t        dt              }d|d<    |||d      \  }}t	        |d       y	)
aH  Test if a matrix with a zero diagonal element is singular

        If the i-th diagonal of A is zero, ?tbtrs should return `i` in `info`
        indicating the provided matrix is singular.

        Note that ?tbtrs requires the matrix A to be stored in banded form.
        In this form the diagonal corresponds to the last row.r   r   rR   rF  r   )r   rQ   rQ  rH  N)r.   r   floatr&   r   )r_   rI  r   rF  r>   rh   s         r3   test_zero_element_in_diagonalz'TestTbtrs.test_zero_element_in_diagonall  sU     WWV5)GGAU# 65	2-4T1r5   zldab,n,ldb,nrhs)rS   rS   r   rS   )rS   rS   rQ   rS   c                     t        j                  ||ft              }t        j                  ||ft              }t        dt              }t	        t
        |||       y)z2Test ?tbtrs fails correctly if shapes are invalid.r   rF  Nr.   r   ri  r&   r  r  )r_   ldabr   ldbr   rI  r   rF  s           r3   test_invalid_matrix_shapesz$TestTbtrs.test_invalid_matrix_shapes|  sF     WWdAYe,GGS$Ku- 6iA.r5   N)r   r   r   r@   markparametrizer   rO  r   rd  rg  rj  ro  ).0r2   r   r   s   0000r3   rB  rB    s@   [[Wf-+5 .+5Z [[]+1N N"'N6;&+slu7K  %en Nn NO [[Vc3Z0[[Vc3Z0+7 1 1	O+7Z [[.33356B	6B  [[.**1 /	/gNs   DrB  c                     dD ]  } t        d|       }t        j                  d|       }t        j                  d|       }t        j                  |      r|dz  } |||      \  }}}t	        |d       t	        |d       t        j                  |      rCt	        |d	       t        t        |      t        k(         t        t        |      t        k(         t	        |d
        y )Nry   lartgr   rQ   rR   r,   333333?r   y       皙?)	r&   r.   r   iscomplexobjr   r   typecomplexri  )r2   rt  rc   gcssnrs          r3   
test_lartgr~    s     ) 6HHQHHQ??1GA!QK	BG$3??1B	*DGw&'DH%&B(')r5   c                     dD ]  } d}d}t        j                  dd|       }t        j                  dd|       }dt        j                  |       j                  dz
   z  }| dv rt	        d	| 
      }d}nt        d	| 
      }|dz  }|dz  }d}t         |||||      g dg dg|       t         |||||d      g ddd||gg|       t         |||||dd      g d||ddgg|       t         |||||ddd      g d||ddgg|       t         |||||ddd      g dd|d|gg|       t         |||||ddddd	      g d||d|gg|       t         |||||ddd      g dd|d|gg|        |||||dd      \  }}	t        ||u        t        |	|u        t        |g d|       t        |	g d|        y )Nry   ru  rv  rR   rQ   ru   rO   fdrotr   y             r,   y              @)rS   rS   rS   rS   )r   r   r   r   r,  rP   )r   )rS   rS   rQ   rQ   r   )offxoffy)rQ   rQ   rS   rS   )incxr  r   )rS   rQ   rS   rQ   )r  incyr   )r  r  r  r  r   )rQ   rQ   rS   rQ   r  )r  r  r   )overwrite_xoverwrite_y)r.   fullr   	precisionr'   r&   r   r   )
r2   r   r   ur   r,  r  rc   r`   r   s
             r3   test_rotr    s     $4GGAq% GGAq% RXXe_..q011D= e4CA"56CHAGAAAq!Q,*6*8>B	DAq!Q!,|011a|/=CG	IAq!QQQ7%1a|44	AAq!QQQ!<%1a|44	AAq!QQQ!<%1a|44	AAq!QQQQQ!L%1a|44	AAq!QRbA>%1a|44	A 1aA1!<1QQ<d3<d3I$4r5   c            
      b   t         j                  j                  d       t         j                  j                  d      } | j                  j	                  |       } t         j                  j                  d      dt         j                  j                  d      z  z   }|j                  j                         j	                  |      }dD ]e  }t        ddg|      \  }}|dv r|j                         }n| j                         } ||j                  d	   d
z
  |d   |dd d	f         \  }}}t        j                  |d d d	f         }	|d   |	d	<   ||	d
<   t        j                  |d
d d	f         }
d|
d	<   ||
d
d   ||
|j                         |d
d d d f   t        j                  |j                  d
               |d
d d d f<    ||
||d d d
d f   t        j                  |j                  d	         d      |d d d
d f<   t        |d d d	f   |	d       t        |d	d d f   |	d       h y )Nr   )rR   rR   r,   ry   larfglarfr   FDr   rO   rO   r   rP   r   r   RsiderK  r  )r.   r/   r   rx   r   conjr&   copyr1   r   r   r   r   )a0a0jr2   r  r  r`   alphar   rr   expectedr   s              r3   test_larfg_larfr    s   IINN4			&	!B	"B
))

6
"R		(8(8(@%@
@C
%%**,

3
C
  6&'8FtD=
A	A aggajlAdGQqr1uX>q# ==1a4)g MM!ABE(#!!" 3==?Aab!eHbhhqwwqz6JK!"a% 3!QR%"((1771:*>SI!QR%!Q$5!Q$596r5   c                  z    t        dt        j                  d      } d}t        | ||dd      }|dk(  s|dk(  sJ y y )	Ngesdd_lwork	preferredr2   ilp64iA%  T)r%  r$  i`DiD)r&   r.   float32r!   )sgesdd_lworkr   r   s      r3    test_sgesdd_lwork_bug_workaroundr    sQ     $M*57LA<A&*$@E  I)!333!3r5   c                       e Zd Zej                  j                  de      d        Zej                  j                  de      ej                  j                  dd      d               Zy)	TestSytrdr2   c                 n    t        j                  d|      }t        d|f      }t        t        ||       y )Nr   r   sytrdr.   r   r&   r  rM  )r_   r2   Ar  s       r3   test_sytrd_with_zero_dim_arrayz(TestSytrd.test_sytrd_with_zero_dim_array  s.     HHV5) 1$/j%+r5   r   rO   rQ   c                    t        j                  ||f|      }t        d|f      \  }}t        j                  d||dz   z  dz  dz   |      |t        j                  |      <    ||      \  }}t        |d        ||d|      \  }}	}
}}t        |d       t        ||dt        j                  |      j                  z  d	       t        |	t        j                  |             t        |
d
       t        |d
        |||      \  }}	}
}}t        |d       t        j                  ||      }t        j                  |j                  d         }|	|||f<   t        j                  |j                  d   dz
        }|
||dz   |f<   |
|||dz   f<   t        j                  |||      }t        |dz
        D ]x  }t        j                  ||      }|d ||dz   f   |d | d||<   t        j                  |||      ||   t        j                  ||      z  z
  }t        j                  ||      }z t        j                   |d      }|j"                  |   ||<   t        j                  |j"                  t        j                  ||            }t        ||dt        j                  |      j                  z  d	       y )Nr   )r  sytrd_lworkrO   rP   r   r  r   rS   r   r+          r   r   )r.   r   r&   arangetriu_indices_fromr   r   r   r   r/  r   r1   r   r2  outerr   r   rx   )r_   r2   r   r  r  r  r   rh   dataro   err   rx   rc  k2Qr>  r   rY  i_lowerQTAQs                        r3   
test_sytrdzTestSytrd.test_sytrd  s|    HHaV5) 5t< 	{
 IIaAaC!AU3 	
"

q
!" "!ntT1 !&aq >aCT1aa(;(;&;#F2771:&3S! !&au 5aCT1
 MM!5)IIaggaj!!Q$YYqwwqz!|$"Q$("bd( FF1au%qs 	A%(A!QqSMAbqEAaDq!5)CFRXXa^,CCAq!A	 //!R(SS\'
vvacc266!Q<( 	aa(;(;&;#Fr5   N)	r   r   r   r@   rp  rq  r   r  r  r   r5   r3   r  r    se    [[Wk2, 3, [[Wk2[[S&)7G * 37Gr5   r  c                       e Zd Zej                  j                  de      d        Zej                  j                  d ee	e            ej                  j                  dd      d               Z
y)	TestHetrdcomplex_dtypec                 n    t        j                  d|      }t        d|f      }t        t        ||       y )Nr   r   hetrdr  )r_   r  r  r  s       r3   test_hetrd_with_zero_dim_arrayz(TestHetrd.test_hetrd_with_zero_dim_arrayT  s.     HHV=1 1$/j%+r5   zreal_dtype,complex_dtyper   r  c           	      "   t        j                  ||f|      }t        d|f      \  }}t        j                  d||dz   z  dz  dz   |      dt        j                  d||dz   z  dz  dz   |      z  z   |t        j                  |      <   t        j
                  |t        j                  t        j                  |                   dD ]  } |||      \  }}	t        |	d        t        ||      }
 ||d|
	      \  }}}}}	t        |	d       t        ||d
t        j                  |      j                  z  d       t        |t        j                  t        j                  |                   t        |d       t        |d        |||
      \  }}}}}	t        |	d       t        j                  ||      }t        j                  |j                  d   t              }||||f<   t        j                  |j                  d   dz
  t              }|||dz   |f<   ||||dz   f<   t        j                   |||      }t#        |dz
        D ]  }t        j                  ||      }|d ||dz   f   |d | d||<   t        j                   |||      ||   t        j$                  |t        j&                  |            z  z
  }t        j(                  ||      } t        j*                  |d      }t        j&                  |j,                  |         ||<   t        j(                  t        j&                  |j,                        t        j(                  ||            }t        ||dt        j                  |      j                  z  d       y )Nr   )r  hetrd_lworkrO   rP   r,   )r   rO   r  r   r  rS   r   r+  r  r   r   ru   )r.   r   r&   r  r  fill_diagonalr   r/  r   r!   r   r   r   r   r1   r   r   r2  r  r  r   r   rx   )r_   r   
real_dtyper  r  r  r  r   r>   rh   r   r  ro   r  rr   rx   rc  r  r  r>  r   rY  r  QHAQs                           r3   
test_hetrdzTestHetrd.test_hetrd[  s    HHaV=15t< 	{
 IIaAaC!AZ8299Q1Q3
1J??@ 	
"

q
!" 	BGGBGGAJ/0  	"A!!1-GAtq!	"
 {A. !&aq >aCT1aa(<(@(@&@sK2772771:./3S! !&au 5aCT1
 MM!:.IIaggaj,!Q$YYqwwqz!|3/"Q$("bd( FF1a}-qs 	A-0A!QqSMAbqEAaDq!=1a&288Arwwqz223Aq!A	 //!R(WWQSS\*'
vvbggacclBFF1aL1 	!"RXXj1555C	r5   N)r   r   r   r@   rp  rq  r-   r  zipr   r  r   r5   r3   r  r  S  sp    [[_n=, >, [[7 n=?[[S&)A *?Ar5   r  c            
         t        t              D ]W  \  } }t        d|      \  }}t        |ddd      }| dk  r\t	        j
                  g dg dg d	g d
g dg dg|      }t	        j
                  g d|      }t	        j
                  ddg|      }n_t	        j
                  g dg dg dg dg dg dg      }t	        j
                  dgdgdgdgdgdgg      }t	        j                  d|      }t	        j
                  g dg dg|      } ||||||      \  }	}	}	}
}	| dk  rt	        j
                  g d      }nt	        j
                  g d      }t        |
|d        Z y )!N)gglsegglse_lworkr   rT   rR   rP   )r   r   rb   )g=
ףp=g{Gzg(\ؿ      ?)zGgHzG?gףp=
ӿQ)ffffff@gQ?g?gffffffֿ)r  g{Gz?Qg{Gz?)333333?g333333?r  g
ףp=
)g{Gz{Gz?gzG      ?)g      r  gGz?gHzGgzGg=
ףp=?r  )yQ?QyQQ?yQ{Gz @y=
ףp=?)y\(\￮Gz?y333333RQ?yQzG?yQQ?)yףp=
?q=
ףpݿy)\(?{Gz?y)\(?(\ſy(\333333?)yGz?RQ?yRQ?HzGy\(\
ףp=
׿y)\(?ɿ)y(\?RQ?y?{Gz?y(\ſq=
ףpݿyQ?q=
ףp?)yHzG?Qѿy?QyQ뱿Gz?yp=
ף?p=
ף?yRQ
ףp=
?yffffff?GzyzG GzyQ?ffffff
@yp=
ף)\(@y(\ @Q?)r   r        r  )r  r   r  r  r   )^"L?\}?r  r  )y!f?$_Kdy^gŵ翸F@y!f?}dy61ŵe_@r~   )r   r   r&   r!   r.   r   r   r   )r   r2   func
func_lworkr   r`   r   ro   r   r>   resultr  s               r3   
test_gglser    sx   ' ,?
U+,D279jzQ!q975534346
 >CDA AOA"b/A MNKKKKM NA ;-%,&-%,&-%,( )A %(AHH'):;5I!!Q1E:1a7xx !- .H
 xx !: ;H 	"&(A>Y,?r5   c            
         t        d       t        t        t        z         D ]>  \  } }d}| dk  r9t	        d|      }t	        d|      \  }}t        ||      j                  |      }nHt	        d|      }t	        d|      \  }}t        ||      t        ||      d	z  z   j                  |      }||j                         j                  z   d
z  d
t        j                  ||      z  z   }t        |d      }t        ||      } |||d      \  }	}
} ||	|
|d      \  }}t        t        d|z  t        j                  j!                  |d      z
        |z  dk         A y )Nr   ru   rR   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr,   rP   rO   )r   r  )r`   ipivanormr  rb   )r   r   r   r-   r&   r   r0   r  rx   r.   r   r   r!   r   r   linalgcond)r   r2   r   r  funconfunctrfr  r  r   ldur  r>   rconds                r3   test_sycon_heconr    sJ   J~ 56 A
U7)-uEJ./AOOFGa##E*A *-uEJ./AOOFGad1ajm+33E:A ^Q266!5#9!99Q
z1-qQ7T1Cd%qAqAeGbiinnQ!n445e;a?@-Ar5   c                  J   t        d       t        t              D ]  \  } }d}t        d|      \  }}}}t	        ||      j                  |      }||j                  z   dz  }t	        ||      j                  |      }||j                  z   dz  dt        j                  ||      z  z   } |||      \  }	}
}t        |dk(          ||      \  }}t        |dk(          |||      \  }}t        |dk(          ||      \  }}
}t        |dk(         t        ||	d        y )	Nr   ru   )r  sygstsyevdsygvdr   rP   r   g-C6*?r   )r   r   r   r&   r   r0   rx   r.   r   r   r   )r   r2   r   r  r  r  r  r  Beig_gvdr>   rh   r   r`   eigs                  r3   
test_sygstr    s%   J, 1
U%5 7I<A&C"ueU AJe$WaKAJe$WaK!bffQe444 !A;D	 (4	1+4	QxQ	W4051r5   c                     t        d       t        t              D ]_  \  } }d}t        d|      \  }}}}t	        ||      j                  |      dt	        ||      j                  |      z  z   }||j                         j                  z   dz  }t	        ||      j                  |      dt	        ||      j                  |      z  z   }||j                         j                  z   dz  dt        j                  ||      z  z   } |||      \  }	}
}t        |dk(          ||      \  }}t        |dk(          |||      \  }}t        |dk(          ||      \  }}
}t        |dk(         t        ||	d	       b y )
Nr   ru   )r  hegstheevdhegvdr   r,   rP   r   -C6?r   )r   r   r-   r&   r   r0   r  rx   r.   r   r   r   )r   r2   r   r  r  r  r  r  r  r  r>   rh   r   r`   r  s                  r3   
test_hegstr    si   J/ 1
U%5 7I<A&C"ueU AJe$rDAJ,=,=e,D'DD^QAJe$rDAJ,=,=e,D'DD^QRVVAU%;!;; !A;D	 (4	1+4	QxQ	W4051r5   c                  X   t        d       d\  } }t        t              D ]  \  }}t        d|      \  }}t	        || |      }|dk  r%t        t        | |      j                  |            }n4t        t        | |      t        | |      dz  z   j                  |            }t        t        ||j                          |||      \  }}	}
t        |
dk(         t        j                  |d	d	d	| f   t        j                  | || z
  f|      f      }t        j                  t        j                  | |      |d	d	| d	f   f      }t        j                  ||      }t!        |       D cg c]D  }||	|   ||gd	d	f   j                  j#                  ||gd	d	f   j%                               z  z
  F }}t'        t        j"                  |      }t)        |j#                  |      |z
  t+        ||      d
t        j,                   |d      j.                        z  d        y	c c}w )z
    This test performs an RZ decomposition in which an m x n upper trapezoidal
    array M (m <= n) is factorized as M = [R 0] * Z where R is upper triangular
    and Z is unitary.
    r   )ru      tzrzftzrzf_lworkr   rP   r,   r   r   Nru   r   r  r+  )r   r   r   r&   r!   r   r   r0   r  r  rx   r   r.   r-  r   r   r2  r   r  r   r   r   spacingr   )r   r   r   r2   r  tzrzf_lwr   r  rzrr   rh   r  VIdr   r   Zs                    r3   
test_tzrzfr  ,  s    	JDAq' F
U*+C168xxA.7T!QZ&&u-.Ad1aj41:b=088?@A 	i,au-C	 IIr!RaR%y"((Aqs85"ABCIIrvvau-r!QR%y9:VVAU#DI!HMqr#a&A36A36)9:::MM2663a1j%&@

5:?? ;;"	F-F( Ns   ,A	H'c            	      l   t        d       t        t              D ]  \  } }d}| dkD  rCt        t	        ||      t	        ||      dz  z   t        |      z         j                  |      }d}n2t        t	        ||      t        |      z         j                  |      }d}t        d|      \  }}} ||      \  }}	t	        |d	      j                  |      }
 |d
||
      }t        |t        | |
      | d	z  dk(  rdnd        |d
||
|      }t        |t        |j                         j                   |
      | d	z  dk(  rdnd        |d      |t        j                  |      t        j                  |      f<    |d
||
|d      }t        |t        |j                         j                   |
      | d	z  dk(  rdnd       t	        d|      j                  |      } |d
|||dd      }t        |t        | |j                        j                         j                  | d	z  dk(  rdnd        y)z
    Test for solving a linear system with the coefficient matrix is a
    triangular array stored in Full Packed (RFP) format.
    r   r   rO   r,   r{   rx   )trttftfttrtfsmr   rP   r   r   rR   rT   r~   r   r   rQ  )r   r/  rQ   r  )r   r/  r  N)r   r   r   r   r   r   r0   r&   r   r   r  rx   r.   r  )r   r2   r   r  r   r  r  r  Afpr>   r  solnB2s                r3   	test_tfsmr  N  s
   
 	J'  D
U7T!QZ$q!*R-/#a&89@@GAET!QZ#a&()007AE-.H49;ud qQAJe$BQ!$qb!/2Qw!|!	D BQe,!$qvvxzzk1(=/2Qw!|!	D ).b	"))A,		!
$%BQe#6!$qvvxzzk1(=/2Qw!|!	D !QZu%BRu3SA!$qb"$$(<(<(>(@(@/2Qw!|!	D? Dr5   c                     t        d       d\  } }}t        t              D ]A  \  }}t        d|      \  }}t	        || |      }|dk  rPt        t        | |      j                  |            }t        ||      j                  |      }	t        d|      \  }
}not        t        | |      t        | |      dz  z   j                  |            }t        ||      t        ||      dz  z   j                  |      }	t        d|      \  }
}t	        |||      } |||	      \  }}}t        j                  t        j                  | |      |d
d
| d
f   f      }t        j                  ||      }t        |       D cg c]D  }|||   ||gd
d
f   j                  j                  ||gd
d
f   j                               z  z
  F }}t        t        j                  |      }|dk  rdnd}dt        j                    |d      j"                        z  } |
|||	|	      \  }}t%        |dk(         t'        ||j                  |	      z
  t)        |	      |d        |
|||	||      \  }}t%        |dk(         t'        ||j                         j                  j                  |	      z
  t)        |	      |d        |
|||	d|      \  }}t%        |dk(         t'        ||	j                  |      z
  t)        |	      |d        |
|||	d||      \  }}t%        |dk(         t'        ||	j                  |j                         j                        z
  t)        |	      |d       D y
c c}w )a  
    This test performs a matrix multiplication with an arbitrary m x n matric C
    and a unitary matrix Q without explicitly forming the array. The array data
    is encoded in the rectangular part of A which is obtained from ?TZRZF. Q
    size is inferred by m, n, side keywords.
    r   )ru   r  r  r  r   rP   )ormrzormrz_lworkr,   )unmrzunmrz_lworkr   Nrx   r{   ru   r   r   r  r+  r   r  )r  r   )r  r   r   )r   r   r   r&   r!   r   r   r0   r.   r-  r   r2  rx   r   r  r   r  r   r   r   r   )qmqncnr   r2   r  r  lwork_rzr  r{   orun_mrzorun_mrz_lw	lwork_mrzr   rr   rh   r  r  r   r   r  r   tolcqs                           r3   test_ormrz_unmrzr  w  s    	JJBB' .!
U*+C168x!(B37T"b\((/0AR##E*A$45M;@%B!Hk d2rlT"b\"_4<<UCDAb"RR/77>A$45M;@%B!Hk #;B7	ax0C IIrvvb.1bc6
;<VVBe$DI"INqr#a&A36A36)9:::NN2663 QwCE#JOO,,BQi8D	QUU1Xz!}3RHBQe9ED	QVVXZZ^^A..
1C	! BQS	BD	QUU1Xz!}3RHBQSYOD	QUU1668::..
1C	![.!, Os   =A	M'c            	         t        d       t        t              D ]5  \  } }d}| dkD  r.t        ||      t        ||      dz  z   j	                  |      }d}nt        ||      j	                  |      }d}t        d|      \  }} ||      \  }}t        |d	k(          ||d
      \  }	}t        |d	k(          |||d      \  }
}t        |d	k(          |||d
      \  }}t        |d	k(         t        |dz   |dz  f|      }t        |      dd|dz  df   |ddddf<   ||dz  dz   dddfxx   t        |      d|dz  d|dz  f   j                         j                  z  cc<   t        |dz   |dz  f|      }t        |      ddd|dz  f   |ddddf<   |d|dz  ddfxx   t        |      |dz  d|dz  df   j                         j                  z  cc<   t        ||j                  dd             t        |
|j                         j                  j                  dd             t        |	|j                  dd             t        ||j                         j                  j                  dd              |||      \  }}t        |d	k(          |||	d
      \  }}t        |d	k(          |||
|d      \  }}t        |d	k(          ||||d
      \  }}t        |d	k(         t        |t        |             t        |t        |             t        |t        |             t        |t        |             8 y)z
    Test conversion routines between the Rectengular Full Packed (RFP) format
    and Standard Triangular Array (TR)
    r   r   rO   r,   r{   rx   )r  r  r   r   rG  rJ  rQ  )transrrJ  rP   Nr   F)order)r   r   r   r   r0   r&   r   r   r   r  rx   r   r   reshape)r   r2   r   A_fullr   r  r  A_tf_Urh   A_tf_LA_tf_U_TA_tf_L_TA_tf_U_mA_tf_L_mA_tr_UA_tr_LA_tr_U_TA_tr_L_Ts                     r3   test_tfttr_trttfr/    s>   
 	J' 1:
U71aj41:b=088?FF1aj((/FF'(:%HuV}	V#.	vf3?$	vf3?$	 !A#q!tE2<1a451"aAa!VUadUEQTE\ : ? ? A C CC!A#q!tE2v,q%1a4%x0Q!Q$d6l1a45!Q$%<8==?AAA!&(*:*:2S*:*IJ!("*--/"3"3";";Bc";"J	L 	"&(*:*:2S*:*IJ!("*--/"3"3";";Bc";"J	L Q'	QS1	q(6D$	q(6D$	!&$v,7!(DL9!&$v,7!(DL9c1:r5   c                  P   t        d       t        t              D ]  \  } }d}| dkD  r,t        ||      t        ||      dz  z   j	                  |      }nt        ||      j	                  |      }t        d|      \  }} ||      \  }}t        |dk(          ||d	      \  }}t        |dk(         t        |      }	t        ||dz   z  d
z  |      }
t        |      j                  |	   |
dd t        |      }	t        ||dz   z  d
z  |      }t        |      j                  |	   |dd t        ||
       t        ||        |||      \  }}t        |dk(          |||d	      \  }}t        |dk(         t        |t        |             t        |t        |              y)r  r   r   rO   r,   )trttptpttrr   r   rG  r  rP   N)r   r   r   r   r0   r&   r   r   r   r   rx   r   r   r   )r   r2   r   r$  r1  r2  A_tp_Urh   A_tp_LindsA_tp_U_mA_tp_L_mr+  r,  s                 r3   test_tpttr_trttpr8    s   
 	J'  8
U71aj41:b=088?F1aj((/F'(:%HuV}	V#.	 AAaC!51F|~~t,AAaC!51F|~~t,!&(3!&(3 Q'	QS1	!&$v,7!&$v,7A 8r5   c                  *   t        d       t        t              D ]  \  } }d}| dkD  rXt        ||      t        ||      dz  z   j	                  |      }||j                         j                  z   |t        |      z  z   }n9t        ||      j	                  |      }||j                  z   |t        |      z  z   }t        d|      \  }}} ||      \  }} |||      \  }	}t        |dk(          |||	      \  }
}t        |      }t        |
|        y)	zk
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array
    r   r   rO   r,   )pftrfr  r  r   r   N)r   r   r   r   r0   r  rx   r   r&   r   r   r   )r   r2   r   r  r:  r  r  r
  rh   	Achol_rfpA_chol_rr>   Achols                r3   
test_pftrfr>    s   
 	J' 3
U7ad1ajm+33E:AAFFHJJ3q6)Aa##E*AACC!CF("A./J5:<ue !H	T3-	4	Ay)!!(E2%3r5   c                  r   t        d       t        t              D ]  \  } }d}| dkD  rXt        ||      t        ||      dz  z   j	                  |      }||j                         j                  z   |t        |      z  z   }n9t        ||      j	                  |      }||j                  z   |t        |      z  z   }t        d|      \  }}}} ||      \  }}	 |||      \  }
}	 |||
      \  }}	t        |	dk(          |||      \  }}t        |      }t        |t        |      | dz  dk(  rd	nd
        y)z
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array to find its inverse
    r   r   rO   r,   )pftrir:  r  r  r   r   rP   rR   rT   r~   N)r   r   r   r   r0   r  rx   r   r&   r   r   r   r   )r   r2   r   r  r@  r:  r  r  r
  rh   
A_chol_rfp	A_inv_rfpA_inv_rr>   Ainvs                  r3   
test_pftrirE  /  s:   
 	J' D
U7ad1ajm+33E:AAFFHJJ3q6)Aa##E*AACC!CF("A%5 7@ =B	&C"ueU !H	T C=
D:.	4	1i(
1v!'4:/2Qw!|!	D-Dr5   c                  
   t        d       t        t              D ]e  \  } }d}| dkD  rXt        ||      t        ||      dz  z   j	                  |      }||j                         j                  z   |t        |      z  z   }n9t        ||      j	                  |      }||j                  z   |t        |      z  z   }t        |df|      }t        |dz   df|      }t        |dz
  df|      }t        d|      \  }}}	}
 |	|      \  }} |||      \  }} ||||      \  }}t        |d	k(         t        t        ||||        ||||      \  }}t        |d	k(         t        t        ||      || dz  d	k(  rd
nd       h y)z
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array and solve a linear system
    r   r   rO   r,   rQ   r   rP   )pftrsr:  r  r  r   rR   rT   r~   N)r   r   r   r   r0   r  rx   r   r   r&   r   r  r  r   r   )r   r2   r   r  r  Bf1Bf2rG  r:  r  r  r
  rh   rA  r  s                  r3   
test_pftrsrJ  O  s   
 	J' D
U7ad1ajm+33E:AAFFHJJ3q6)Aa##E*AACC!CF("A!Qu%AaC85)AaC85)%5 7@ =B	&C"ueU !H	T C=
D1j#.
d	i:s;1j!,
d	!%1+t/2Qw!|!	D7Dr5   c            
         t        d       t        t              D ]l  \  } }d}| dkD  rXt        ||      t        ||      dz  z   j	                  |      }||j                         j                  z   |t        |      z  z   }n9t        ||      j	                  |      }||j                  z   |t        |      z  z   }| dk  rdnd}t        dd	d
j                  |      f|      \  }}} ||      \  }}	t        j                  j                  |d      j	                  |      }
 ||dd|
d|      } |||      \  }}	t        |t        |
j                  |
j                         j                         d|z  z         | dz  dk(  rdnd       o y)zT
    Test for performing a symmetric rank-k operation for matrix in RFP format.
    r   r   rO   r,   rP   r   hr  r  z{}frkr   r   r   rR   rT   r~   N)r   r   r   r   r0   r  rx   r   r&   rT  r.   r/   r   r   r   )r   r2   r   r  prefixr  r  shfrkr
  r>   r{   Afp_outA_outs                r3   test_sfrk_hfrkrQ  t  sr    	J' D
U7ad1ajm+33E:AAFFHJJ3q6)Aa##E*AACC!CF("AQwC. C3396&>0C5:<ue qQIINN1a ''.1b!Q,G$q!%quuQVVXZZ/@.@1Q3.F)G/2Qw!|!	D%Dr5   c            
         t        d       t        t              D ]  \  } }d}| dkD  rOt        dd||f      t        dd||f      dz  z   j	                  |      }||j                         j                  z   }n<t        dd||f      j	                  |      }||j                  z   |t        |      z  z   }dt        j                   |d      j                        z  }t        d	|
      \  }}}t        ||d      }t        |dd      \  }	}
}t        ||d      } ||d|      \  }}} |||d      \  }}}t        t        |d      t        |	|ddf   d      |d       t        |dd      \  }}
} ||d      \  }}} |||d      \  }}}t        t!        |d      t!        ||ddf   d      |d        y)zt
    Test for going back and forth between the returned format of he/sytrf to
    L and D factors/permutations.
    r   ru   rO   i   r,   r*  r   )syconvr  r  r   r  F)r  	hermitianr  r   Nr  r+  r   )r   r   r   r   r0   r  rx   r   r.   r  r   r&   r!   r   r   r   r   )r   r2   r   r  r  rT  trf	trf_lworklwrG  Dpermr  r  rh   r`   r  rQ  s                     r3   test_syconvr[    s   
 	J' L
U7b1a&)b1a&)",-.4fUm  AFFHJJAR!Q(//6AACC!CF("A"**U3Z__--!1 3BIN"PYIq2!u5
1dIq2aq3T4CQ/
1dQd1T1W:r&:2N !u5
1daq/T4CQ/
1dQ
D47Q$7cK5Lr5   c                       e Zd ZdZd Zd Zy)TestBlockedQRzd
    Tests for the blocked QR factorization, namely through geqrt, gemqrt, tpqrt
    and tpmqr.
    c           
      ,   t        d       t        t              D ]v  \  }}d}|dkD  r,t        ||      t        ||      dz  z   j	                  |      }nt        ||      j	                  |      }dt        j                   |d      j                        z  }t        d|      \  }} |||      \  }}	}
|
d	k(  sJ t        j                  |d
      t        j                  ||      z   }t        j                  ||      ||	z  |j                  j                         z  z
  }t        j                  |      }t        |j                  j                         |z  t        j                  ||      |d       t        ||z  ||d       |dkD  r.t        ||      t        ||      dz  z   j	                  |      }d}nt        ||      j	                  |      }d}dD ]  }d|fD ]  } |||	|||      \  }}
|
d	k(  sJ ||k(  r|j                  j                         }n|}|dk(  r||z  }n||z  }t        |||d       ||fdk(  sc |||	|      \  }}
|
d	k(  sJ t        ||         t!        t"        |||	|d       t!        t"        |||	|d       y y )Nr   r   rO   r,   r*  r   )geqrtgemqrtr   r   r   r  r+  r{   rx   rG  r  rP  r  r   rG  rG  rP  r  r  r	  )r   r   r   r   r0   r.   r  r   r&   r   r   rx   r  r   r   r   r  r  )r_   r   r2   r   r  r  r_  r`  r`   trh   r   r  r  r{   	transposer  r   r   qqC	c_defaults                         r3   test_geqrt_gemqrtzTestBlockedQR.test_geqrt_gemqrt  sw   T
#F+ :	AJCAQw!QZ$q!*R-/77>!QZ''.bjjs11C,-@NME6q!JAq$199 2!77Aq&Q);;A
A ACCHHJNBFF1E,B!#%AE13R8Qw!QZ$q!*R-/77>	!QZ''.	" 3!9- 3E$Q14uEGAt19$9	)CCHHJs{UU#Ar"= e}
2*0Aq/	4#qy(y$Y2)330 )VQ13?)VQ1C@u:	Ar5   c                 T	   t        d       t        t              D ]  \  }}d}|dkD  rWt        ||      t        ||      dz  z   j	                  |      }t        ||      t        ||      dz  z   j	                  |      }n6t        ||      j	                  |      }t        ||      j	                  |      }dt        j                   |d      j                        z  }t        d|      \  }}d	|d
z  |fD ]  }	 ||	|||      \  }
}}}|d	k(  sJ t        t        j                  |
d      t        j                  |d             t        t        j                  ||	|z
  dz
        t        j                  ||	|z
  dz
               t        j                  ||	|z
        t        j                  ||	|z
        }}t        j                  t        j                  ||      |f      }t        j                  d
|z  |      ||z  |j                  j                         z  z
  }t        j                  t        j                  |
      t        j                   |
      f      }t#        |j                  j                         |z  t        j                  d
|z  |      |d       t#        ||z  t        j                  t        j                  |      |f      |d       |dkD  rYt        ||      t        ||      dz  z   j	                  |      }t        ||      t        ||      dz  z   j	                  |      }d}n8t        ||      j	                  |      }t        ||      j	                  |      }d}dD ]  }d|fD ]  } ||	||||||      \  }}}|d	k(  sJ ||k(  r|j                  j                         }n|}|dk(  r8t        j                  ||fd	      }t        j                  ||fd	      }||z  }n7t        j                  ||fd      }t        j                  ||fd      }||z  }t#        |||d       ||fdk(  s ||	||||      \  }}}|d	k(  sJ t        ||       t        ||         t%        t&        ||	||||d       t%        t&        ||	||||d         y )Nr   r   rO   r,   r*  r   )tpqrttpmqrtr   r   rP   r   r  r+  r{   rx   ra  rP  rb  rG  r   rc  r  r  r	  )r   r   r   r   r0   r.   r  r   r&   r   r   r   r1  r   rx   r  r   r   r  r  ) r_   r   r2   r   r  r  r  rk  rl  lr`   r   rd  rh   B_pentb_pentr   r  r  r{   rY  re  r  r   r   ro   rf  cdCDqCDrh  	d_defaults                                    r3   test_tpqrt_tpmqrtzTestBlockedQR.test_tpqrt_tpmqrt  s:   T
#F+ O	KJCAQw!QZ$q!*R-/77>!QZ$q!*R-/77>!QZ''.!QZ''.bjjs11C,-@NME6 a^ @K %aAq 11aqy y RWWQ^RWWQ^< RWWQA	2BGGAq1uqy4IJ "$AE!2BGGAq1u4E NNBFF1E$:F#CDFF1q5.Q1CCNNBGGAJa0@#AB  
Qq1uE0J%(r3Ar~~rwwqz66J'K%(r3 7ad1ajm3;;EBAad1ajm3;;EBA #Ia++E2Aa++E2A #I& 7D"%y!1 7%+Aq!Q27&9
1d#qy(y I- !
A !A3;!#AQ!?B!#AQ!?B"#b&C!#AQ!?B!#AQ!?B"$q&C'CcC %=J69?1aA9N6Iy$#'19,9(A6(A6377: iAq!QSIiAq!QcJA@KO	Kr5   N)r   r   r   r?   ri  rt  r   r5   r3   r]  r]    s    
<A|QKr5   r]  c                     t        d       t        t              D ]W  \  } }d}d}t        d|      }| dkD  r^t	        |||z
        j                  |      dt	        |||z
        j                  |      z  z   }||j                         j                  z  }n-t	        |||z
        j                  |      }||j                  z  } ||      \  }}}}	t        |      }
d|
||z
  d ||z
  d f<   t        |	d       d	t        j                  t        j                        j                  z  }d	t        j                  t        j                        j                  z  }| d
v r|n|}t        ||dz
     d d |dz
  f   |
j                         j                  |
z  d|        ||d      \  }}}}	t!        |      }d|||z
  d ||z
  d f<   t        |	d       d	t        j                  t        j                        j                  z  }d	t        j                  t        j                        j                  z  }| d
v r|n|}t        ||dz
     d d |dz
  f   ||j                         j                  z  d|       Z y )Nr   ru   rP   pstrfr   rO   r,   r    r   rP   rL  r  r   r   r   r&   r   r0   r  rx   r   r   r.   r   r  r   r5  r   r   )r   r2   r   r}  rv  r  r   pivr_crh   rQ  single_atoldouble_atolr,  rG  s                  r3   
test_pstrfr~  J  +   J' #P
U 6 7Q!##E*R$q!A#,2E2Ee2L-LLAAFFHJJAQ!##E*AACCA!!H3TG "#'(C!GH
T1 RXXbjj1555RXXbjj1555!Vm{#a%CE*AFFHJJN$O!!1-3TG "#'(C!GH
T1RXXbjj1555RXXbjj1555!Vm{#a%CE*A

N$OG#Pr5   c                     t        d       t        t              D ]W  \  } }d}d}t        d|      }| dkD  r^t	        |||z
        j                  |      dt	        |||z
        j                  |      z  z   }||j                         j                  z  }n-t	        |||z
        j                  |      }||j                  z  } ||      \  }}}}	t        |      }
d|
||z
  d ||z
  d f<   t        |	d       d	t        j                  t        j                        j                  z  }d	t        j                  t        j                        j                  z  }| d
v r|n|}t        ||dz
     d d |dz
  f   |
j                         j                  |
z  d|        ||d      \  }}}}	t!        |      }d|||z
  d ||z
  d f<   t        |	d       d	t        j                  t        j                        j                  z  }d	t        j                  t        j                        j                  z  }| d
v r|n|}t        ||dz
     d d |dz
  f   ||j                         j                  z  d|       Z y )Nr   ru   rP   pstf2r   rO   r,   r  rw  rx  rL  r  ry  )r   r2   r   r}  r  r  r   rz  r{  rh   rQ  r|  r}  r,  rG  s                  r3   
test_pstf2r  r  r  r5   c                     t        j                  g dg dg dg dg      } t        j                  g dg dg dg      }t        t              D ]  \  }}|dk  r3t        j                  g d	g d
g dg dg      }|j	                  |      }nUt        j                  g dg dg dg|      }|t        j                  g dg dg dg      dz  z  }|j	                  |      }t        d|      } ||      \  }}}}	}
}|dk  r,t        | j	                  |      |d d d f   |z  |z  dd       t        |j	                  |      |d d d f   |z  |z  dd        y )N)g      ?r   g1w-!?gd`TRۿ)r   gsr  r  )gs?r  g2%䃮g,eX)r  gsFg%ug??)y/nҿ&?yDioɴ?Af?y o_[ Acп)ysֿAfҿyPkw?JY8y5;NёCl?)yYڊ?1*?y=yXѿ@a+?yh oſFxrP   )g   ЈBg   tBgffffff @g   ٓ )      @gg#fDgffffff)gHzG?gQg'Vgp=
ף)g(\r  gS7нrv  )gq=
ףpg   Ag(\)g333333g   Bg333333ÿ)gZ9=gQgֽr   )gffffff@g   tޅBr#  )g(\g   Zgq=
ףp?)gEop=gQ?gZEqҽr,   geequr   r  rL  )r.   r   r   r   r0   r&   r   )desired_realdesired_cplxr   r2   r  r  r}  r   rowcndcolcndamaxrh   s               r3   
test_geequr    sy   88>@@@B CL
 88 1112 3L  ' /
U7CEEEG HA A:::<CHJA :;:< ==?@ @A A 6+08(1ffdD7L//6!T'
1Q!"/ L//6!T'
1Q!"/3/r5   c            	         t        j                  g d      } t        t              D ]  \  }}t        j                  d|      } ||dk  rdnd      }t        j                  t        dd      D cg c]
  }|d	|z  z   c}|      }|t        j                  t        j                  |            z  }t        d
|      } ||      \  }}	}
}t        t        j                  |      j                  t              |         y c c}w )N)
r   r   r   r   r   r   r   r   r  rE  ru   r   rP   r   r,   rS   r   syequb)r.   r   r   r   r   r2  rot90r/  r&   r   log2r0   r   )desired_log2sr   r2   r  r  r   ro   r  r   scondr  rh   s               r3   test_syequbr    s    HH?@M' 	<
UFF2U#C!Gb-HHU2q\:eb!em:%H	RXXbggaj!!!(%8%ay5$RWWQZ&&s+];	< ;s   0D
Tz.Failing on some OpenBLAS version, see gh-12276)reasonc            	         t        j                  dgdz  dgdz  z         t        j                  t        j                  d      d      dz  z   } t        j                  |       \  }}}}t        |d       t        t        j                  |      d	d
gdz  d	gz   dgdz  z          t        j                  dt        j                  t        j                  dd            z  dz         } d| d<   d| d<   t        j                  | j                  t         j                        d      \  }}}}t        |d       t        t        j                  |      g d       y )NrP   rS   i  rW   rO   )rc  r,   r   r  r  r  rT                   i   rS   rS   y              0@)rS   r   r  )r  r   r   r   r   r  r   r   r   r  r  )r.   r/  r   r   zheequbr   r   r  r   r  cheequbr0   	complex64)r  r   r  r  rh   s        r3   test_heequbr    s    	Aq !BGGBGGAJ!$<R$??A!>>!,AudDqBGGAJS	!rd 2bT!V ;<
266"))B*++b01AAdGAdG!>>!((2<<*@JAudDqBGGAJ IJr5   c                     t         j                  j                  d       d} t         j                  j                  |       }t         j                  j                  |       t         j                  j                  |       dz  z   }t	        t
              D ]>  \  }}|dk  rHt         j                  j                  | |       }|j                  |      }||z  }|j                  |      }nkt         j                  j                  | |       t         j                  j                  | |       dz  z   }|j                  |      }||z  }|j                  |      }t        d|      }t        d|      } ||d	      \  }	}
}} ||	||
|d
      \  }}|dk  r"t        |j                  |      ||z  d       t        |j                  |      ||z  d       A y )Nr  ru   r,   rP   getc2r   gesc2r   r&  )overwrite_rhsrR   r~   )	r.   r/   r   r   r   r   r0   r&   r   )r   r  r  r   r2   r  r   r  r  lur  jpivrh   r   r[   s                  r3   test_getc2_gesc2r    s   IINN2
A99>>!$L99>>!$ryy~~a'8';;L' :
U7		q!$AAL AA		q!$ryy~~a';B'>>AAL AA 6 6$QA6D$Qd!<57%l&9&9%&@&'gq: &l&9&9%&@&'gq:+:r5   r  )rT   rS   r  jobarT   joburR   jobvjobrrO   jobpc                    t        d       | \  }}	dt        j                  |      j                  z  }
t	        | |      }t        d|      }|dk  }|dk  }|dk(  xr ||	k(  }t        j                  |      }|dk(  xr | xr | }|dk(  xr |xr | xr |}|dk(  xr |xr | xr |}|rd}n	|s|rd}nd	}|dkD  r|dk(  rt        t        ||||||||	       y ||||||||
      \  }}}}}}t        ||       |sW|d	   |d   z  |d|	 z  }t        |t        |d      |
       |dk(  r|ddd|	f   }|rA|r?t        |t        j                  |      z  |j                         j                  z  ||
       |r<t        |j                         j                  |z  t        j                  |	      |
       |r<t        |j                         j                  |z  t        j                  |	      |
       t        |d	   t        j                   j#                  |             t        |d   t        j$                  |             t        |d   d	       yy)a  Test the lapack routine ?gejsv.

    This function tests that a singular value decomposition can be performed
    on the random M-by-N matrix A. The test performs the SVD using ?gejsv
    then performs the following checks:

    * ?gejsv exist successfully (info == 0)
    * The returned singular values are correct
    * `A` can be reconstructed from `u`, `SIGMA`, `v`
    * Ensure that u.T @ u is the identity matrix
    * Ensure that v.T @ v is the identity matrix
    * The reported matrix rank
    * The reported number of singular values
    * If denormalized floats are required

    Notes
    -----
    joba specifies several choices effecting the calculation's accuracy
    Although all arguments are tested, the tests only check that the correct
    solution is returned - NOT that the prescribed actions are performed
    internally.

    jobt is, as of v3.9.0, still experimental and removed to cut down number of
    test cases. However keyword itself is tested externally.
    r  r*  gejsvr   rP   rO   r  rE  r   )r  r  r  r  jobtr  NF)r%  r  )r   r.   r   r   r4   r&   rw  r  r  r   r   r   r/  r  rx   identityr  matrix_rankcount_nonzero)r  r2   r  r  r  r  r  r  r   r   r,  r  r  lsvecrsvecl2tran
is_complexinvalid_real_jobvinvalid_cplx_jobuinvalid_cplx_jobvexit_statussvar  r   r   r   rh   sigmas                               r3   test_gejsv_generalr  	  sT   B 	H DAq%$$$D#D%0AWE2E
 1HE1HEai%a1fF#JHUHZMU-=v(>M:MU-=v(>M:
 	/qtqyi4tT4N',Q262626262626(8$Q4 	T;'  !WtAw&#bq'1EE3qU#;$Gqy a!eHBGGEN 2QVVXZZ ?N

QATJ

QATJq299#8#8#;<q2#3#3E#:; q1%5 r5   c                 
   t        d|       } |d      \  }}}}}}t        |d       t        |j                  d       t        |j                  d       t        |t        j                  dg|              t        j
                  d|       } ||      \  }}}}}}t        |d       t        |j                  d       t        |j                  d       t        |t        j                  dg|              t        j
                  d|       } ||      \  }}}}}}t        |d       t        |j                  d       t        |j                  d       t        |t        j                  g |              t        j                  t        j                  d      j                  d	d	            j                  |       }t        j                  ||j                  z         }|j                  d
      }	 ||      }
t        ||	       y)z*Test edge arguments return expected statusr  r   r   r   rO   rO   )rO   r  r*  ru   r  N)r&   r   r1   r.   r   r   sinr  r#  r0   asfortranarrayrx   r  r   )r2   r  r  r  r   r   r   rh   r  Acr>   s              r3   test_gejsv_edge_argumentsr  u  s    WE2E $)9 CAtUDq&!&!bhht512 	E"A#(8 CAtUDq&!&!bhht512 	e$A#(8 CAtUDq&!&!bhhr/0 	ryy~%%b"-.55e<A
!acc'"A	
BaAArr5   kwargsrW   r  c                     t        j                  dt              }t        dt              }t	        t
        ||fi |  y)z-Test invalid job arguments raise an Exception)rP   rP   r   r  Nrl  )r  r  r  s      r3    test_gejsv_invalid_job_argumentsr    s1     	e$AWE2E)UA00r5   zA,sva_expect,u_expect,v_expect)g)\(@gp=
ףgffffff?g
ףp=
)gQ?gQgGz?g(\)gQ޿gQgGz?gzGʿ)gQ?gQ?gHzG?g)\(?)ggq=
ףp@g333333r  )ףp=
?g(\r  g(\)g cZB#@gI.!v@g?ܵ?r  )gC?g=yX5gc=yXga4?)gB`"?g:pΈҞgʡE?gn4@?)g[B>٬?g٬\m?gJ{/L?gOe?)gc]Fgꕲq׿g\m?fc]F)g؁sFڿgZB>?g0L
F%?gq=
ףp)g ?gR!u?guVſg&Sٿ)gǘ?gV-g	^)p?g()gFx$g6[ ٿgUN@giq?)g1Zd?gOnӿgΈ?g_vO?)g}?5^Iؿg58EGr?gi o?g7[ Ac                     d}t        d| j                        } ||       \  }}}}	}
}t        |||       t        |||       t        |||       y)z~
    This test implements the example found in the NAG manual, f08khf.
    An example was not found for the complex case.
    r  r  r   r  N)r&   r2   r   )r  
sva_expectu_expectv_expectr,  r  r  r  r   r   r   rh   s               r3   test_gejsv_NAGr    sS    0 DWAGG4E#(8 CAtUDJ$/Had+Had+r5   c           	         t        d       d}dt        j                  |       j                  z  }t	        |dz
  f|       }t	        |f|       }t	        |dz
  f|       }|j                         |j                         |j                         g}t        j                  |      t        j                  |d      z   t        j                  |d      z   }t        j                  j                  |      }||z  }	t        d|       \  }
} |
|||      \  }}}}}}t        ||d          t        ||d          t        ||d	          t        j                  |d      t        j                  |d      z   t        j                  |d	      z   }t        j                  ||       }t        |      D ]?  \  }}||   dz
  }|d d ||gf   |d d ||gf<   |d d |fxx   |d d |dz   f   |z  z  cc<   A d|d   dz
  }}|d d ||gf   |d d ||gf<   t        |||z  |
       |	j                         } |||||||	      \  }}t        |	|       t        |||
       | t        v rd}|j                  |z  }nd}|j!                         j                  |z  } ||||||||      \  }}t        |||
       t#        t$              5   |
|d d ||       d d d        t#        t$              5   |
||d d |       d d d        t#        t$              5   |
|||d d        d d d        t#        t&              5   |
|d   |d d |d          d d d        d|d<   d|d<    |
|||      \  }}}}}} t        j(                  j+                  ||dz
     dk(  dj-                  ||dz
                  y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr  ru   r*  rO   r   r   gttrfgttrsr   rP   r  rx   r{   r	  z3?gttrf: _d[info-1] is {}, not the illegal value :0.)r   r.   r   r   r4   r  r/  r/   r   r&   r	   r   r   r   r   rx   r  r  rM  r  testingr   rT  )!r2   r   r,  duro   dldiag_cpyr  r   r   r  r  _dl_d_dudu2r  rh   rQ  rG  r>  r   rz  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos!                                    r3   test_gttrf_gttrsr    s    	H
A%$$$D 
%acV5	9B#QD6A	$acV5	9B	1668RWWY/H

RWWR_$rwwr1~5A
		qA	AA#$6eDLE5$)"a$4!CS#tTr8A;'q(1+&r8A;' 	Aa(2773?:A
qA# 1 1gk1sAh;!aX+	!Q$1Q!V9Q; bAsAq3({^Aa!SkN Aq1u4(FFHE#r3T15MGTq% AwT* ##'&&(**q.#r3T7%HMGTAwT* 
z	" b"gq"	z	" b!CR&"	z	" b!RW 
y	! #beQrUBqE"# BqEAaD*/Ar*:'D#tT5%JJs4!8})Ls4!8}-/   # #s0   =N""N.N:,O"N+.N7:OOz1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, x)g @r  ffffff?r   )r"  r  g      ffffff@)333333@@r   g      )r  r  r  r  )r  r  rU   gC>)r   r  rV   )rP   rQ   rR   rS   rS   g@gffffff@      g%@g@g	ru  gffffff&g3@r  rS   rU   rQ   rE  r  )       @             @      ?            ?      ?      )?r  ffffff
@333333ӿ333333@ffffff
?)      ?             ?      ?       @      r  )r  r  r  r  )r  r  r  r  y ~:pffffff?)r  r  r  y333333@      y@@y333333@3333332@y333333yffffff-ffffff#@y      333333yfffff?@y333333"@y      𿚙?y      ffffff(@r  r  y      @      y      ?       @y      @      @r  y             r  r  y       @       c	                     t        d| d   | d   f      \  }	}
 |	|||       \  }}}}}}t        ||       t        ||       t        ||d       t        ||        |
||||||      \  }}t        ||       y )Nr  r   r  r  )r&   r   )r  ro   r  du_expd_expdu2_expipiv_expr   r   r  r  r  r  r  r  r  rh   r  s                     r3   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfr  '  s    d $$6A1GLE5$)"a$4!CS#tTC!C BD)D(##r3T15MGTGQr5   ))rQ   rU   )rU   rQ   r   c                 Z    t        d|       }|\  }} |||      \  }}t        |d       y )Ngeqrfp_lworkr   r  r   r  )r2   r1   r  r   r   r   rh   s          r3   test_geqrfp_lworkr  f  s3     $^EBLDAqa(KE4qr5   zddtype,dtypec                    t        d       dt        j                  |      j                  z  }d}t	        |f|       dz   }t	        |dz
  f|      }t        j
                  |      t        j
                  |d      z   t        j
                  t        j                  |      d      z   }|j                         |j                         g}t        d|      } |||      \  }	}
}t        ||d	          t        ||d          t        |d	d
| d       t        j
                  |
d      t        j
                  t        j                  |            z   }t        j
                  |	      }t        |||z  |j                         j                  z  |       t	        |f|      }||z  }t        d|      } ||	|
j                         |      \  }}t        |d	d| d       t        |||       y )Nr  r*  ru   rR   rO   r   pttrfr   r   zpttrf: info = z, should be 0)err_msgr  pttrszpttrs: info = )r   r.   r   r   r4   r/  r  r  r&   r	   r   r   r   r   rx   )ddtyper2   r,  r   ro   r  r  r  r  r  _erh   rG  rY  r   r   r  _xs                     r3   test_pttrf_pttrsr  o  s    	Hrxx"""D
A
 	$QD&1A5A#QqSFE2A 	
RWWQ^#bggbggaj!&<<A!&&(#HWE2EA;LBDq(1+&q(1+&qN4&"FG 	B"''"''!*--A
AAqs1;;=??*6 	$QD%0A	!A WE2ERA&HBqN4&"FG Ar%r5   c                     d}t        d|      }t        |f|       dz   }t        |dz
  f|      }t        t        ||d d |       t        t        |||d d        y )Nru   r  r   rP   rO   r   )r&   r4   r  rM  )r   r2   r   r  ro   r  s         r3   *test_pttrf_pttrs_errors_incompatible_shaper    sb     	AWE2E#QD&1A5A#QqSFE2A*eQsVQ/*eQ#2/r5   c           	      2   d}t        d|      }t        |f|       dz   }t        |dz
  f|      }d|d<   d|d<    |||      \  }}}t        ||dz
     ddj                  ||dz
                  t        |f|       } |||      \  }}}t	        |dk7  d       y )	Nru   r  r   rP   rO   r   z3?pttrf: _d[info-1] is {}, not the illegal value :0.z2?pttrf should fail with non-spd matrix, but didn't)r&   r4   r   rT  r   )	r   r2   r   r  ro   r  r  r  rh   s	            r3   'test_pttrf_pttrs_errors_singular_nonSPDr    s     	AWE2E#QD&1A5A#QqSFE2AAaDAaDA;LBDD1HqF&D1H&(
 	$QD&1AA;LBDDAIKLr5   z%d, e, d_expect, e_expect, b, x_expect)rR   ru      r   rS   )r  r  r  rV   )rR   rW   r      rO   )r  gK=Uru  r  ru   rP      A      g      @r   r  )r	  )   .      )y      0@      0@y      2@      "      ?      )r	  rW   rO   rR   )r  r  r  y      P@      0@y      0      @y     @W@      O@y     N@     Py     S@      Ty     Q@     Ry      ,@      ;y     A@      .@y             r  c                 L   d}t        d|d         } || |      \  }}	}
t        |||       t        |	||       t        d|d         } |||	j                         |      \  }}
t        |||       |j                  t        v r |||	|d      \  }}
t        |||       y y )	Nr  r  r   r   r  r  rO   r  )r&   r   r  r2   r-   )ro   r  d_expecte_expectr   x_expectr,  r  r  r  rh   r  r  s                r3   test_pttrf_pttrs_NAGr    s    4 DWAaD1EA;LBDBt,Bt,WAaD1ERA&HBBt, 	ww. R!,DH40 !r5   c                 N   |dk(  rt        ||f|       }|t        j                  t        j                  |      d|z  z         z   }||j	                         j
                  z   dz  }t        |      d   }t        |f|      dz   }t        |dz
  f|      }t        j                  |      t        j                  |d      z   t        j                  |d      z   }||z  |j	                         j
                  z  }	|}
nt        |f|      }t        |dz
  f|      }|dz   }t        j                  |      t        j                  |d      z   t        j                  |d      z   }	t        j                  |      t        j                  |d      z   t        j                  |d      z   }
|||	|
fS )NrO   rR   rP   r   )r4   r.   r/  r   r  rx   r    )r2   realtyper   	compute_zA_eigvrro   r  trir  zs              r3   pteqr_get_d_e_A_zr    sc    A~+QFE:ac 122'1,%[^'h7!;'19ggaj2771a=(2771b>9Hrwwy{{" (h7'19 EGGAJA&B7GGAJB'"''!Q-7q!Q<r5   zdtype,realtyper  c                 v   t        d       dt        j                  |       j                  z  }t	        d|       }d}t        | |||      \  }}}}	 ||||	|      \  }
}}}t        |dd| d	       t        t        j                  t        |      d         t        j                  |
      |
       |rt        |t        j                  |      j                  z  t        j                  |      |
       t        |t        j                  |
      z  t        j                  |      j                  z  ||
       yy)a  
    Tests the ?pteqr lapack routine for all dtypes and compute_z parameters.
    It generates random SPD matrix diagonals d and e, and then confirms
    correct eigenvalues with scipy.linalg.eig. With applicable compute_z=2 it
    tests that z can reform A.
    r  rw  pteqrr   ru   ro   r  r  r  r   zinfo = z, should be 0.r  N)r   r.   r   r   r&   r  r   r   sortr    r  rx   r  r/  )r2   r  r  r,  r  r   ro   r  r  r  d_pteqre_pteqrz_pteqrrh   s                 r3   
test_pteqrr%  
	  s    	H###Dge4E
A"5(AyAJAq!Q&+a1Y&O#GWgtqGD689 BGGDGAJ')9E"'''"2"4"44bkk!n!	# 	"'''"22RWWW5E5G5GG	& r5   c                     t        d       t        d|       }d}t        | |||      \  }}}} ||dz
  |||      \  }	}
}}|dkD  sJ y )Nr  r  r   ru   rR   r  r  r   r   r&   r  r2   r  r  r  r   ro   r  r  r  r"  r#  r$  rh   s                r3   test_pteqr_error_non_spdr*  +	  s^     	Hge4E
A"5(AyAJAq!Q ',AE1Y&O#GWgt!8O8r5   c           	          t        d       t        d|       }d}t        | |||      \  }}}}t        t        ||d d |||       t        t        |||d d ||       |rt        t        ||||d d |       y y )Nr  r  r   ru   r   r'  )r   r&   r  r  rM  )	r2   r  r  r  r   ro   r  r  r  s	            r3   "test_pteqr_raise_error_wrong_shaper,  :	  s     	Hge4E
A"5(AyAJAq!Q*eQsVQ!yI*eQ#2!yIj%A3B9M r5   c                     t        d       t        d|       }d}t        | |||      \  }}}}d|d<   d|d<    |||||      \  }	}
}}|dkD  sJ y )Nr  r  r   ru   r   r'  r(  r)  s                r3   test_pteqr_error_singularr.  I	  sj     	Hge4E
A"5(AyAJAq!QAaDAaD&+AqA&K#GWgt!8O8r5   zcompute_z,d,e,d_expect,z_expect)gp=
ף@r  gq=
ףp?r  )g\(\	@g
ףp=
g?)gŏ1w- @gR'?g/n?g&䃞ͪ?)g cZB>?gCl?g:pΈڿg??)gaTR'?gSۿg}гY?g%uο)g\mg٬\m?gAf?gL
F%u)gǘgŏ1w-!?g333333?gz6?c                 b   d}t        d|j                        }t        j                  |      t        j                  |d      z   t        j                  |d      z   } |||||       \  }}	}
}t	        |||       t	        t        j
                  |
      t        j
                  |      |       y)	zb
    Implements real (f08jgf) example from NAG Manual Mark 26.
    Tests for correct outputs.
    r  r  r   rO   r   r   r  N)r&   r2   r.   r/  r   r   )r  ro   r  r  z_expectr,  r  r  r  r  _zrh   s               r3   test_pteqr_NAG_f08jgfr2  X	  s      Dgagg6E

RWWQ]"RWWQ^3AqAi@BBBt,BFF2Jx 0t<r5   matrix_size)r   )rU   rT   rT   rT   c                    t         j                  j                  d       dt        j                  |       j                  z  }dt        j                  |       j                  z  }t        d|       }t        d|       }|\  }}t        ||f|       } ||      \  }	}
}t        j                  |	      }||kD  r3t        j                  ||f|       }|	|d d d |f<    |||
|      d   }n ||	d d d |f   |
|      d   }t        ||z  ||	       t        t        j                  |j                  d         ||j                         j                  z  ||
       t        |t        j                  |      |	       t        t        j                  t        j                   |      t        j                  t#        t        j                   |                  kD               t        |dk(         t        ||f|       dz  }t%        |      \  }} ||      \  }}}t        t        j&                  t        j                   |      dk        xr+ t        j                  t        j                   |      dkD               y )Nr     r*  geqrfpr   orgqr)rr   r   r   r   rL  r   )r.   r/   r   r   r   r&   r4   r   r   r   r   r1   r  rx   r   allr/  r^   r   r3  )r2   r3  r   r,  r7  gqrr   r   r  qr_Arr   rh   r}  qqrrf  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                        r3   test_geqrfprC  q	  s    IINN2rxx"""Drxx"""Dx6F
GE
2CDAq 	$QF%8AQiOD#t 	A
 	1u hh1vU+ArrE
 A&q)QUA.q1 AaC&BFF1771:&1668::T Arwwqz-BFF2771:RWWQZ 99:;DAI -aV5ABFJJHh"("4Hgx BFF2778$q() #FF2771:>"$r5   c                  ~    t        j                  g       } t        d| j                        }t	        t
        ||        y )Nr7  r   )r.   r   r&   r2   r  r  )A_emptyr7  s     r3   #test_geqrfp_errors_with_empty_arrayrF  	  s+    hhrlGhgmm<F)VW-r5   driver)evevdevrevxpfxsyhec                 8   d}| dk(  rt         nt        }t        | |z   dz   |d         }t        | |z   dz   |d         }	 t        ||d       t        ||d       y # t        $ r2}t        j                  dj                  | |z   |             Y d }~y d }~ww xY w)	N  rM  _lworkr   r   rO   r  ({}_lwork raised unexpected exception: {}r   r-   r&   r!   r  r@   failrT  rL  rG  r   r2   sc_dlwdz_dlwr  s          r3   test_standard_eigh_lworksrX  	  s     	A$;KNEc&j1qBFc&j1qBF.vq*vq* . vc&j!,	. 	..   A 	B'(BBgvgvxc                 8   d}| dk(  rt         nt        }t        | |z   dz   |d         }t        | |z   dz   |d         }	 t        ||d       t        ||d       y # t        $ r2}t        j                  d	j                  | |z   |             Y d }~y d }~ww xY w)
NrP  rM  rQ  r   r   rO   rG  r  rR  rS  rU  s          r3   test_generalized_eigh_lworksr]  	  s     	A$;KNEc&j1qBFc&j1qBF.vqs+vqs+ . vc&j!,	. 	..rY  dtype_r   )rO   ru   r*  rw  c                     t        d       t        d|      }||z
  }| t        v rdnd}|dz   }t        ||       }t	        ||||      }|dk(  r|n|f}t        |D cg c]  }|dkD  	 c}      sJ y c c}w )Nr   r   orun	csd_lworkr   )r   r   r   r&   r!   r9  )	r^  r   rb   rf  rL  dlwrX  lwvalr   s	            r3   test_orcsd_uncsd_lworkre  	  s     	J1A	AAK'$TC

C	#V	,B2q!Q'ED[EuhEu%!A%&&&%s   A2c           
         d\  }}}| t         v rdnd}|dk(  rt        j                  |      nt        j                  |      }t	        |dz   |dz   f|       \  }}t        ||||      }|dk(  rd|int        t        ddg|            }	 ||d |d |f   |d ||d f   ||d d |f   ||d |d f   fi |	\
  }
}}}}}}}}}|d	k(  sJ t        ||      }t        ||      }t        t        ||      t        ||z
  ||z
              }t        ||      |z
  }t        |||z
        |z
  }t        ||z
  |      |z
  }t        ||z
  ||z
        |z
  }t        j                  ||f|       } | d
      }t        |      D ]	  }||||f<    t        |      D ]  }||||z   ||z   f<    t        |      D ]  }| |||z   |z   ||z   |z   |z   |z   |z   f<   ! t        |      D ]  }||||z   |z   |z   ||z   |z   f<    t        |      D ]  }t        j                  ||         |||z   ||z   f<   t        j                  ||         |||z   |z   ||z   |z   |z   f<   t        j                  ||          |||z   ||z   |z   |z   |z   f<   t        j                  ||         |||z   |z   ||z   f<    ||z  |z  }t        ||ddt        j                   |       j"                  z         y )N)r6  P      r`  ra  csdrb  r   r   lrworkr   r   r  g     @rL  )r   r"   rvsr#   r&   r!   dictr  r   rX  r.   r   r2  cosr  r   r   r   )r^  r   rb   rf  rL  Xdrvrc  rd  lwvalscs11cs12cs21cs22thetau1u2v1tv2trh   rQ  VHr}  n11n12n21n22Soner>  Xcs                                  r3   test_orcsd_uncsdr  	  s_   GAq!K'$TC!Tk}/@/@/CAucK.? @OHC31a(E!$gu$sG<D<FGL8N 3OF 	Abqb"1"fIq!QRy!ABF)Qqr12vYA&A :D$dE2r3T 1992rA	C	BC1Is1Q3!}%A
a)a-C
a1+/C
ac1+/C
ac1Q3-!
C
!Qv&A
*C3Z !Q$3Z !A#qs(3Z -),!C%'1S573;s?1$
$%-3Z $ #!C%'!)SU1W
$ 1X -&&q*!C%3,"$&&q"2!C%'1Q3s73;
%'VVE!H%5$5!C%3s3q
 !FF58,!C%'1S5.- 
QBArRXXf-=-A-A)ABr5   
trans_boolFfactr!  rP  c                    t        d       dt        j                  |       j                  z  }t	        d|       \  }}d}t        |dz
  f|       }t        |f|       }t        |dz
  f|       }	t        j                  |d      t        j                  |      z   t        j                  |	d      z   }
t        |df|       }|r| t        v rd	nd
nd}|r|
j                         j                  n|
|z  }|j                         |j                         |	j                         |j                         g}|dk(  r
 ||||	      ndgdz  \  }}}}}} ||||	||||||||      }|\
  }}}}}}}}}}t        |dk(  d| d       t        ||d          t        ||d          t        |	|d          t        ||d          t        |||       t        t        |d      dud|        t        |j                  d   |j                  d   k(  dj!                  |j                  d   |j                  d                t        |j                  d   |j                  d   k(  dj!                  |j                  d   |j                  d                y)aS  
    These tests uses ?gtsvx to solve a random Ax=b system for each dtype.
    It tests that the outputs define an LU matrix, that inputs are unmodified,
    transposal options, incompatible shapes, singular matrices, and
    singular factorizations. It parametrizes DTYPES and the 'fact' value along
    with the fact related inputs.
    r  r*  gtsvxr  r   ru   rO   r   rP   rx   r{   rP  r!  NrT   r  r   dlfdfdufr  r  r   z?gtsvx info = z, should be zerorQ   r  __len__Trcond should be scalar but is z!ferr.shape is {} but shoud be {},z!berr.shape is {} but shoud be {},)r   r.   r   r   r&   r4   r/  r   r  rx   r  r   r	   r   r   r1   rT  ) r2   r  r  r,  r  r  r   r  ro   r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr  x_solnr  ferrberrrh   s                                    r3   
test_gtsvxr  
  sd    	H%$$$D#$6eDLE5
A	$acV5	9B#QD6A	$acV5	9B
B"''!*$rwwr1~5A#QF%8A6@E[(SccE!qA-A '')QVVXrwwy!&&(;J !CKb!RdVAX )D#tUE5 b!RUE7I@I=CS$feT4DAIv-=>? r:a=)q*Q-(r:a=)q*Q-( AvD) GE9%T1,UG46 DJJqMQWWQZ')LVDJJqM1771:.0 DJJqMQWWQZ')LVDJJqM1771:.0r5   c                    t        d       t        d|       \  }}d}t        |dz
  f|       }t        |f|       }t        |dz
  f|       }t        j                  |d      t        j                  |      z   t        j                  |d      z   }	t        |df|       }
| t
        v rdnd	}|r|	j                         j                  n|	|
z  }|d
k(  r
 ||||      nd gdz  \  }}}}}} ||||||||||||      }|\
  }}}}}}}}}}|dk(  r/d|d<   d|d<    |||||      }|\
  }}}}}}}}}}|dkD  sJ d       y |d
k(  r;d|d<   d|d<   d|d<    |||||||||||
      }|\
  }}}}}}}}}}|dkD  sJ d       y y )Nr  r  r   ru   rO   r   rP   rx   r{   r!  rT   r  rP  r   z&info should be > 0 for singular matrix)r  r  r  r  r  r  )r   r&   r4   r.   r/  r   r  rx   )r2   r  r  r  r  r   r  ro   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rh   s                                 r3   test_gtsvx_error_singularr  S
  s    	H#$6eDLE5
A	$acV5	9B#QD6A	$acV5	9B
B"''!*$rwwr1~5A#QF%8AK'CSE!qA-A !CKb!RdVAX )D#tUE5 b!RUE7I@I=CS$feT4 s{"2"aQ'	DMARdD&%tTaxAAAx	BRb	"aQTt#%1	DMARdD&%tTaxAAAx 
r5   c                    t        d       t        d|       \  }}d}t        |dz
  f|       }t        |f|       }t        |dz
  f|       }t        j                  |d      t        j                  |      z   t        j                  |d      z   }	t        |df|       }
| t
        v rdnd	}|r|	j                         j                  n|	|
z  }|d
k(  r
 ||||      nd gdz  \  }}}}}}|dk(  r}t        t        ||d d ||||||||||       t        t        |||d d |||||||||       t        t        ||||d d ||||||||       t        t        |||||d d |||||||       y t        t        ||||||||d d ||||       t        t        |||||||||d d |||       t        t        ||||||||||d d ||       t        t        |||||||||||d d |       y )Nr  r  r   ru   rO   r   rP   rx   r{   r!  rT   rP  r  )r   r&   r4   r.   r/  r   r  rx   r  rM  r  )r2   r  r  r  r  r   r  ro   r  r  r   r   r   r  r  r  r  r  r  s                      r3   "test_gtsvx_error_incompatible_sizer  
  sH    	H#$6eDLE5
A	$acV5	9B#QD6A	$acV5	9B
B"''!*$rwwr1~5A#QF%8AK'CSE!qA-A !CKb!RdVAX )D#tUE5 s{j%CR!Ru$3E	7 	j%QsVRu$3E	7 	j%Q3Bu$3E	7 	iAr1Sb6u$3E	7 	j%QAu$s)E	7 	j%QAu$3s8E	7 	j%QAu$3s)U	< 	j%QAu$3E#2JU	<r5   zdu,d,dl,b,xc           
      z    t        d|j                        } |||| |      }|\
  }}}	}
}}}}}}t        ||       y )Nr  r   r&   r2   r   )r  ro   r  r   r   r  r  r  r  r  r  r  r  r  r  r  rh   s                    r3   test_gtsvx_NAGr  
  sH    . WAGG4Eb!R#I@I=CS$feT4a(r5   zfact,df_de_lambdac                 >     t        d|j                        | |      S Nr  r   r&   r2   ro   r  s     r3   <lambda>r  
  '     (G'7>?gg(GGH!(M r5   c                      yN)NNNr   r  s     r3   r  r  
      r5   c                    t        d       dt        j                  |       j                  z  }t	        d|       }d}t        |f|      dz   }t        |dz
  f|       }t        j                  |      t        j                  |d      z   t        j                  t        j                  |      d      z   }	t        |d	f|       }
|	|
z  } |||      \  }}}|j                         |j                         |j                         g} |||||||
      \  }}}}}}}t        ||d          t        ||d          t        ||d	          t        |dk(  d| d       t        |
|       t        j                  |d      t        j                  t        j                  |            z   }t        j                  |      }t        |	||z  t        j                  |      j                  z  |       t        |d      r
J d|        t        |j                   dk(  dj#                  |j                   |
j                   d                t        |j                   dk(  dj#                  |j                   |
j                   d                y)a  
    This tests the ?ptsvx lapack routine wrapper to solve a random system
    Ax = b for all dtypes and input variations. Tests for: unmodified
    input parameters, fact options, incompatible matrix shapes raise an error,
    and singular matrices return info of illegal value.
    r  r*  ptsvxr   rS   rR   rO   r   rP   r  r  efr   zinfo should be 0 but is .r  r  r  )rP   z#ferr.shape is {} but shoud be ({},)z#berr.shape is {} but shoud be ({},)N)r   r.   r   r   r&   r4   r/  r  r  r	   r   r   r   r   rx   r   r1   rT  )r2   r  r  df_de_lambdar,  r  r   ro   r  r  r  r   r  r  rh   r  r   r  r  r  rG  rY  s                         r3   
test_ptsvxr  
  s(    	H%$$$DWE2E	A#QD(3a7A#QqSFE2A

RWWQ^#bggbggaj!&<<A(!Qu=F	F
A  1%LBD !&&(AFFH-H */q!QT24*=&BAudD$ q(1+&q(1+&q(1+&DAI1$q9:fa( 	B"''"''!*--A
AAqsBGGAJLL)5 ui( 1
(01( DJJ$ EVDJJQ02 DJJ$ EVDJJQ02r5   c                 >     t        d|j                        | |      S r  r  r  s     r3   r  r    r  r5   c                      yr  r   r  s     r3   r  r    r  r5   c           
         t        d       t        d|       }d}t        |f|      dz   }t        |dz
  f|       }t        j                  |      t        j                  |d      z   t        j                  t        j
                  |      d      z   }t        |df|       }	||	z  }
 |||      \  }}}t        t        ||d d ||
|||	       t        t        |||d d |
|||	       t        t        ||||
d d |||	       y )
Nr  r  r   rS   rR   rO   r   rP   r  )	r   r&   r4   r.   r/  r  r  rM  r  )r2   r  r  r  r  r   ro   r  r  r  r   r  r  rh   s                 r3   test_ptsvx_error_raise_errorsr    s     	HWE2E	A#QD(3a7A#QqSFE2A

RWWQ^#bggbggaj!&<<A(!Qu=F	F
A  1%LBD *eQsVQK*eQ#2K)UAq!CR&trJr5   c                 >     t        d|j                        | |      S r  r  r  s     r3   r  r  2  r  r5   c                      yr  r   r  s     r3   r  r  4  r  r5   c                    t        d       t        d|       }d}t        |f|      dz   }t        |dz
  f|       }t        j                  |      t        j                  |d      z   t        j                  t        j
                  |      d      z   }t        |df|       }	||	z  }
 |||      \  }}}|d	k(  r\d
|d<    |||      \  }}} ||||
      \  }}}}}}}|d
kD  r||k  sJ t        |f|      } ||||
      \  }}}}}}}|d
kD  r||k  sJ y  |||      \  }}}d
|d
<   d
|d
<    ||||
|||      \  }}}}}}}|d
kD  sJ y )Nr  r  r   rS   rR   rO   r   rP   rP  r   rQ   r  )r   r&   r4   r.   r/  r  )r2   r  r  r  r  r   ro   r  r  r  r   r  r  rh   r   r  r  r  s                     r3   test_ptsvx_non_SPD_singularr  .  s    	HWE2E	A#QD(3a7A#QqSFE2A

RWWQ^#bggbggaj!&<<A(!Qu=F	F
A  1%LBDs{!#Aq)B-21a^*B5$daxDAI%% (h7-21a^*B5$daxDAI%%I $Aq)B11-21a68R.A*B5$daxxr5   zd,e,b,xc                 n    t        d|j                        } || ||      \  }}}}}	}
}t        ||       y )Nr  r   r  )ro   r  r   r   r  r  r  x_ptsvxr  r  r  rh   s               r3   test_ptsvx_NAGr  Z  s:    . WAGG4E/4Q1~,BGUD$a)r5   r  c           	         t        d       t        j                  |       j                  dz  }d\  }}t	        ||g|       }t	        ||g|       }|j                         j                  |z   t        j                  ||        | d      z  z   }|rYt        |      D cg c]  }t        ||      D ]  }|  c}}t        |      D cg c]  }t        ||      D ]  }|  c}}f}	nat        d|dz         D cg c]  }t        |      D ]  }|  c}}t        d|dz         D cg c]  }t        |      D ]  }|dz
  	  c}}f}	||	   }
t        d| d	      \  }}}}} |||
|
      \  }}t        |d       t        ||
      |	   }t        ||d|        ||||
      \  }}t        |d       t        |      |	   }t        ||d|        |||||
      \  }}t        |d       t        ||      }t        ||d|        |||
||
      \  }}t        |d       t        ||d|       t        j                  j!                  |d      } |||
||      \  }}t        |d       t#        t%        d|z  t        j                  j'                  |d      z
        |z  dk         y c c}}w c c}}w c c}}w c c}}w )Nr   r*  )ru   rR   r   r   rO   )ppsvpptrfpptrspptrippconr  r  r  r   rL  )r  r  r  )r   r.   r   r   r4   r  rx   r   r2  r&   r   r   r   r   r   r  r   r   r   r  )r2   r  r,  r   r   r`   r   yr   r5  apr  r  r  r  r  ulrh   aululiaulibxxvr  r  s                            r3   !test_pptrs_pptri_pptrf_ppsv_ppconr  x  s    	J88E?s"DGAt#QF%8A#QIU;A	

Q/%);;A!!H:qeAqk:::!!H:qeAqk:::< "!QqSM<q58<a<<#Aqsm>U1X>1>>@	
4B'74($D%u
 Q%(HBq
1E
"4
(CB!$/a5)ICqq6$<DCAD1Ar1E*GAtq	q!BAr-Ar1E*HBqB.IINN1a E2U%8KE4qC%"))..a.001%7!;<C ;:<>s   J/
J5<J;*Kc                    t        d       t        j                  |       j                  dz  }d}t	        ||g|       }t        d|       \  }} |d |d      }t        |d	   d
       |d
   }|d   }|d   }	| t        v r"t        |t        j                  |      d
|       t        ||z  |j                         j                  z  |d
|        |||dd      }t        |d	   d
       |d
   }|d   }| t        v r"t        |t        j                  |      d
|       t        ||z  |j                         j                  z  |d
|       t        |d   |	d
|       y )Nr   r*  ru   r   )geestrexcc                      y Nr   r   s    r3   r  z!test_gees_trexc.<locals>.<lambda>  r  r5   Fr  r   r   rE  r4  rL  rU   rO   r  r   )r   r.   r   r   r4   r&   r   r-   r   r   r  rx   )
r2   r,  r   r`   r  r  r  rd  r  d2s
             r3   test_gees_trexcr    s>   J88E?s"D
A#QF%8A"#4EBKD%.!7FQq	Ar
A	
4B2771:AD9AEAFFHJJ&=1aAFQq	Ar
A2771:AD9AEAFFHJJ&=AdGRad3r5   zt, expect, ifst, ilst)rv  g)\({Gz?gQ?)r  皙r  ffffff?)r  gr  g?)r  r  r  r  )r  lV}gV_?g|?5^?)g?r  gV/?g;On?)r  r  rv  ggj+)            y
ףp=
?
ףp=
׿yRQȿQ?y)\(?      п)r               @yQ
ףp=
yq=
ףpͿp=
ף?)r  r         @      yGz?(\?)r  r  r        @      )r  y1%Ŀq?ys??ܵ|ȿyHzG??ܵ?)r  r  yV/?ݓ?yjt?vտ)r  r  r  yB>٬?=U?)r  r  r  r  c                     d}t        d| j                        } || | ||d      }t        |d   d       |d   } t        || |       y)	zg
    This test implements the example found in the NAG manual,
    f08qfc, f08qtc, f08qgc, f08quc.
    r  r  r   r   )wantqr   r  N)r&   r2   r   r   )rd  ifstilstexpectr,  r  r  s          r3   test_trexc_NAGr    sN    < DWAGG4E1at1-FQq	AFAD)r5   c                 >   | t         j                  k(  r:t        j                  dk(  r't        dk(  rt
        dk  rt        j                  d       t        d       t        j                  |       j                  dz  }d}t        ||g|       }t        ||g|       }t        d	|       \  }} |d
 ||dd      }t        |d   d       |d   }|d   }	|d   }
|d   }|d   |	d   z  }|d   |	d   z  }| t        v rDt        |t        j                   |      d|       t        |	t        j                   |	      d|       t        |
|z  |j#                         j$                  z  |d|       t        |
|	z  |j#                         j$                  z  |d|        |||	|
|dd      }t        |d   d       |d   }|d   }	|d   }
|d   }| t        v rDt        |t        j                   |      d|       t        |	t        j                   |	      d|       t        |
|z  |j#                         j$                  z  |d|       t        |
|	z  |j#                         j$                  z  |d|       t        |d   |	d   z  |d|       t        |d   |	d   z  |d|       y )Ndarwinopenblas
0.3.21.dev8gges[float32] broken for OpenBLAS on macOS, see gh-16949r   r*  ru   r   )ggestgexcc                      y r  r   r  s    r3   r  z!test_gges_tgexc.<locals>.<lambda>  r  r5   Fr&  overwrite_br   r   rO   r  rE  r   r4  rL  rU   rP   rQ   r  )r.   r  sysplatformblas_providerblas_versionr@   xfailr   r   r   r4   r&   r   r-   r   r   r  rx   )r2   r,  r   r`   r   r  r  r  r   rd  rf  r  d1r  s                 r3   test_gges_tgexcr    s^    	 #|#OPJ88E?s"D
A#QF%8A#QF%8A"#4EBKD%.!QEuMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=1aAq!$FQq	Aq	Aq	Aq	A2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=AdGag%r=AdGag%r=r5   c                 @   t        d       t        j                  |       j                  dz  }d}t	        ||g|       }t        d|       \  }}} |d |d      }t        |d	   d
       |d
   }|d   }	|d   }
| t        v r"t        |t        j                  |      d
|       t        |	|z  |	j                         j                  z  |d
|       t        j                  |      }d|d<   t        |||      }| t        v r ||||	|      }n ||||	||d         }t        |d	   d
       |d
   }|d   }	| t        v r"t        |t        j                  |      d
|       t        |	|z  |	j                         j                  z  |d
|       t        |d   |
d
|       y )Nr   r*  ru   r   )r  trsentrsen_lworkc                      y r  r   r  s    r3   r  z!test_gees_trsen.<locals>.<lambda>8  r  r5   Fr  r   r   rE  r4  rL  rO   rT   r   r   liworkr   )r   r.   r   r   r4   r&   r   r-   r   r   r  rx   r   r!   )r2   r,  r   r`   r  r  r  r  rd  r  r  selectr   s                r3   test_gees_trsenr  -  s   J88E?s"D
A#QF%8A/( 7D% .!7FQq	Ar
A	
4B2771:AD9AEAFFHJJ&=XXa[FF1I;2Evq!51vq!5qBQq	Aq	A2771:AD9AEAFFHJJ&=AdGRad3r5   z*t, q, expect, select, expect_s, expect_sep)g/$?gQIg~jtx?gJ4?)r  58EGrgGr?gyX5;?)r  g?߾r  gt?)r  r  r  gyǹ)g؁sF?g_L?gGz?gUN@?)goT?g0*g'gz6>W)g(g&䃞ͪӿgbX9ҿg-!lV?)gb=y?gۊe?r  g8EGr?)r  g?gQg(\ſ)g
ףp=
?gQ?r  r  )g)\(ܿgQտgQg(\?)r  g{GzԿgp=
ףg)\(?)rO   r   r   rO   g      ?g(\	@)yqh yfc]F?ڊe׿yMbȿ&S?y&1??п)r  y      ?5^I @yo0*yZd;OͿ~:p?)r  r  yx$(@4@y[ A?&?)r  r  r  y?ܵ@St$)y?ܵ꿽R!uy2U0*6[?yV-?=yXy8m4?1%̿)ySt$?\mҿyʡE?S㥛?y~:p	cڿyK7A`?[ A?)y:pΈ~jtԿyH}?9#J{yH}?	cZy+eXw?-ٿ)y"u?	c?y?տN@ayRQȿ{GzĿyh"lxz?EGrǿ)y47)yS!uqF%u@yyտGx$(?y3ı.n?rh|)yv?
F%uyd`TR?I&ۿyN@?ݓy4@
@	^)?)ys{
@ o_yH.@|Pk@y0*?*:Hy]m{?Gz)y)0[<?yI.!? ryqh 
@ׁsF?y1w-!?h ogRQ?gK?c                    d}d}t        d| j                        \  }}	t        |	||       }
| j                  t        v r ||| ||
      }n ||| ||
|
d         }t	        |d   d	       |d	   } |d   }| j                  t        v r|d
   }|d   }n
|d   }|d   }t        ||| z  |j                         j                  z  |       t        |d|z  |       t        |d|z  |       y)zW
    This test implements the example found in the NAG manual,
    f08qgc, f08quc.
    r  r  )r  r  r   r   rO   r  r   r   rR   rS   rT   r  N)r&   r2   r!   r-   r   r   r  rx   )rd  rf  r  r  expect_s
expect_sepr,  atol2r  r  r   r  r   seps                 r3   test_trsen_NAGr  [  s    ` DE) 1E; ;2Eww. vq!51vq!5qBQq	Aq	Aww. 1IQi1IQiFAEAFFHJJ.T:Ha!e%0JCe4r5   c                    | t         j                  k(  r:t        j                  dk(  r't        dk(  rt
        dk  rt        j                  d       t        d       t        j                  |       j                  dz  }d}t        ||g|       }t        ||g|       }t        d	|       \  }}} |d
 ||dd      }t        |d   d       |d   }	|d   }
|d   }|d   }|	d   |
d   z  }|	d   |
d   z  }| t        v rDt        |	t        j                   |	      d|       t        |
t        j                   |
      d|       t        ||	z  |j#                         j$                  z  |d|       t        ||
z  |j#                         j$                  z  |d|       t        j&                  |      }d|d<   t)        |||	|
      }|d   dz   |d   f} |||	|
|||      }t        |d   d       |d   }	|d   }
|d   }|d   }| t        v rDt        |	t        j                   |	      d|       t        |
t        j                   |
      d|       t        ||	z  |j#                         j$                  z  |d|       t        ||
z  |j#                         j$                  z  |d|       t        |	d   |
d   z  |d|       t        |	d   |
d   z  |d|       y )Nr  r  r  r  r   r*  ru   r   )r  tgsentgsen_lworkc                      y r  r   r  s    r3   r  z!test_gges_tgsen.<locals>.<lambda>  r  r5   Fr  r   r   rO   r  rE  r   r4  rL  rT   r   ir  r  )r.   r  r  r  r  r  r@   r  r   r   r   r4   r&   r   r-   r   r   r  rx   r   r!   )r2   r,  r   r`   r   r  r  r  r  r   rd  rf  r  r  r  r  r   s                    r3   test_gges_tgsenr    s    	 #|#OPJ88E?s"D
A#QF%8A#QF%8A/( 7D% .!QEuMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=XXa[FF1I;15E 1XaZq"E61aAU3FQq	Aq	Ar
Ar
A2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=AdGag%r=AdGag%r=r5   r(  )r  	functoolsr   numpy.testingr   r   r   r   r   r	   r@   r
   r  numpyr.   r   r   r   r   r   r   r   r   numpy.randomr   r   r   scipy.linalgr   r8   r   r   r   r   r   r   r   r   r   r    scipy.linalg.lapackr!   scipy.statsr"   r#   scipy.sparsesparserU  scipy.__config__r$   ImportErrorr%   r7   r&   scipy.linalg.blasr'   r  r5  r   r  
complex128r-   r   r  r  r4   rK   rM   r   r   rp  rq  r  r  r  r   rB  r~  r  r  r  r  r  r  r  r  r  r  r  r  r/  r8  r>  rE  rJ  rQ  r[  r]  r~  r  r  r  skipifr  r  r2  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r%  r*  r,  r.  r2  rC  rF  rX  r]  re  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r5   r3   <module>r     s6  
  / /  * ! ! ! - ,B B B B / 2 '0 1 ,zz2::&,,.	~	%# #	/08@M./7	BL0O"]- ]-@
 
p9 p9f &)"BC D *- -*C C(; ;@I/ I/X).'4T'6T48AG AGHL L^.?bA61>1>FD&DR7!t7:t&8R36D@"DJD6 LFUK UKp%PP%PP*/Z< DK  MKMK$:> &&!12+.q*q*q*!Q(!Q(b& ) ) + + + / 3b&J +.  / F (!1+!1+!1+!1+!1+!1+'11 9#288%?%?%@%=%?%?%A B $288$DE#288%G%F%E%H%G%G%I J $288%G%H%F%G%I JK LM$,%M$,  &)Y/ *Y/x L#288$9:%RXX&@A%RXX&;<%RXX&9:%RXX&BC%RXXl3%RXXo6%RXXSz(,d|(+T{(+U|(+T{	') * &RXXAw()2w()2w(*Bx(*Aw	'0 12& &RXX&GH%RXX '4 5 &RXX&FG%RXX 'A B%RXX ': ;%RXX&?@%RXXo6%RXX*'=(3\'B(4i'@(3['A(1:'>	'@ A
 &RXX'7(.'7(.'8(/'8(.'7	'9 :%%)* V W* V ( &)"BC D * [;6?A,&A,&^ [;6?A0A0 [;6?AMAM& A""((#56""((?3""((#45""((#89""((QGaVaVb"X%&G$- .""((S!Hq"g2wQ%&G$- . #"((#34""((#>?""((=1""((#56""((VW$57G%+V$4vv6F$H I""((T5MD$<$%)4L$2 3	E &1'&1.> )V[;%>?AeAh/& 0A&< )V[;%>?AeAh/	 0A	 )V[;%>?AeAh/	N 0A	N )V[;%>?AeAh/	 0A	 :#288$;<#288$56#288$DE#288%F%G%G%F%H I	J 	=	= &)(@A=$ B *=$@. #>?t-
. . @
. D%=1t-. . 2. 6*01	' 2 +	' 6*+C ++C\ &)t}5#s,70 - 6 *70t &)1v.#s,-B - / *-B` &(+t}5#s,-< - 6 ,-<` #288$9:#288$?@#288$9:#288c3Z#tsDk&(%[3+%? @#288b!Wq"g2wR&(!W%. /0 $288$EF#288 %> ?#288$DE#288h
%;&1;%?&2H%=&1;%?&/%<	%> ?
 $288ff%57G&,g%6&8I&,f%5%7 89:;());() )3v{1<8= ,> ?,MN  ?@BC
12C?12h )3v{1<8= ,> ?,MN  ?@BC
KC?K( )3v{1<8= ,> ?,MN  ?@BC
"C?"J #288$67#288O4#288aWq!fq!fr2h&'W%. /#288c1X2wB&(!Wq"g%7 8	9 $288$45#288$?@#288h	%:&.%9&.%9&.%9%; < $288fg%6&,f%5&,f%5&,f%5%7 8	9:;"
*#;"
* 5$-0&)+= * 1+=\ &)!4 *!4H bhh))*)+ , bhh21113 4  bhhJKHHJ K bhh 55567 8 0*10*  &)4> *4>n &)*4 **4Z 0bhh11213 4 bhh03313 4 bhh21324 5 bhh| bhh 67556 7 bhh 56567 8 bhh 65556 7 bhh|3')T5U)T5B &)=> *=>Ud  F
  Gs.   6AE =AE& EAE#E"AE#E&AE1E0AE1