
    ge!                    x#   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 n# e2$ r dZ1Y nw xY w	 d dlm3Z4 n# e2$ r dZ4Y nw xY wd dl(m5Z5 d dl6m7Z7 ej8        ej9        gZ:ej;        ej<        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
jF        G                    de>          e
jF        G                    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
jF        f                    dBdCD          dE             ZgdF Zhe
jF        G                    dGdHdIg          e
jF        G                    de:          e
jF        G                    dJ eidK                    e
jF        G                    dL eidM                    e
jF        G                    dN eidM                    e
jF        G                    dOd dPg          e
jF        G                    dQd dPg          d.dR                                                                                    Zje
jF        G                    de:          dS             Zke
jF        G                    dTdJdUidLdUidNdUidOdUidVdUidQdUif          dW             Zle
jF        G                    dX ejm        g dYg dZg d[g d\g d]g d^g           ejm        g d_           ejm        g d`g dag dbg dcg ddg deg           ejm        g dfg dgg dhg dig          fg          dj             Zne
jF        G                    de>          dk             Zoe
jF        G                    dl ejm        g dm           ejm        g dn           ejm        g do           ejm        g dp           ejm        g dq           ejm        g dr           ejm        g ds           ejm        dtdugdvdwgdxdygdzd{gdtd|gg           ejm        d}d~gdd}gddgd}dgddPgg          f	 ejm        g d           ejm        g d           ejm        g d           ejm        g d           ejm        g d           ejm        g d           ejm        g ds           ejm        ddgddgddgddgddgg           ejm        ddgddgddgddgddgg          f	g          d             Zpe
jF        G                    de>          e
jF        G                    dg d          d                         Zqe
jF        G                    d ere:e:z   e>                    d             Zse
jF        G                    d ere:e:z   e>                    d             Zte
jF        G                    d ere:e:z   e>                    d             Zue
jF        G                    d ejm        g d           ejm        g d           ejm        g d           ejm        g d           ejm        dKdgdUdMgddUgddgddgg           ejm        ddgddgdPdgddKgddgg          f ejm        g d           ejm        g d           ejm        g d           ejm        g d           ejm        ddgddgddgddgg           ejm        ddgddgddgddgg          fg          d             Zvd Zwe
jF        G                    d ere>e:e:z                       e
jF        G                    d eid                    dÄ                         Zxe
jF        G                    d ere>e:e:z                       e
jF        G                    d eid                    dĄ                         Zye
jF        G                    d ere>e:e:z                       e
jF        G                    d eid                    dń                         Zze
jF        G                    d ere>e:e:z                       e
jF        G                    d eid                    dƄ                         Z{e
jF        G                    dd ejm        g dȢ           ejm        g dɢ           ejm        g dʢ           ejm        g dˢg d̢g d͢g d΢g          fg          dτ             Z|e
jF        G                    de>          e
jF        G                    dg dѢ          d҄                         Z}dӄ Z~e
jF        G                    dg dբ          e
jF        G                    dddg          dل                         Ze
jF        G                    dddg          e
jF        G                    dddg          d܄                         Ze
jF        G                    de>          e
jF        G                    dg dߢ          d                         Ze
jF        G                    de>          d             Ze
jF        G                    de>          e
jF        G                    dddBg          e
jF        G                    dddg          d                                     Ze
jF        G                    de>          e
jF        G                    dd dPg          e
jF        G                    dddg          d                                     Ze
jF        G                    de>dz            e
jF        G                    dddBg          e
jF        G                    dddg          d                                     Ze
jF        G                    d ejm        g dm           ejm        g dn           ejm        g do           ejm        dtdugdvdwgdxdygdzd{gdtd|gg           ejm        d}d~gdd}gddgd}dgddPgg          f ejm        g d           ejm        g d           ejm        g d           ejm        ddgddgddgddgddgg           ejm        ddgddgddgddgddgg          fg          d             Ze
jF        G                    d ere>e:e:z                       e
jF        G                    ddd fdd fg          d                         Ze
jF        G                    d ere>e:e:z                       e
jF        G                    ddd fdd fg          d                         Ze
jF        G                    d ere>e:e:z                       e
jF        G                    ddd fdd fg          d                         Ze
jF        G                    d ejm        g d           ejm        g d           ejm        dKdgdUdMgddUgddgddgg           ejm        ddgddgdPdgddKgddgg          f ejm        g d           ejm        g d           ejm        ddgddgddgddgg           ejm        ddgddgddgddgg          fg          d             Ze
jF        G                    dddBg          e
jF        G                    de>          d                         Ze
jF        G                    de>          d             Ze
jF        G                    d ejm        g dg dg dg dg           ejm        g d g dg dg dg          ddPf ejm        g dg dg dg dg           ejm        g dg dg d	g d
g          dPdMfg          d             Ze
jF        G                    de>          d             Ze
jF        G                    de>          d             Ze
jF        G                    d ejm        g dg dg dg dg           ejm        g dg dg dg dg           ejm        g dg dg dg dg           ejm        g d          ddf ejm        g dg dg d g d!g           ejm        g d"g d#g d$g d%g           ejm        g d&g d'g d(g d)g           ejm        g d          d*d+fg          d,             Ze
jF        G                    de>          d-             ZdS (/      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 r=t          j        j        |  t          j        j        |  dz  z                       |          S t          j        j        |                      |          S )N              ?)COMPLEX_DTYPESnprandomr   astype)shapedtypes     >lib/python3.11/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr4   1   s\    	&).%(-./5ve}}	=9>5!((///    c                  r   t           j        t          j        d           t	          t           j                                                  } h d}t                      }t          t                     D ]4}|                    d          s||vr|| vr|	                    |           5|g k    s
J d            dS )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 ffGF ! !$$ 	![)@)@E!!NN4   b===N=====r5   c                   &    e Zd Zd Zd Zd Zd ZdS )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          |	                     d S )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   s6   YY			999-oooollll  	* 	*A7D11Ay)*1&BB$Hd4jj)))%b!,,,"bAs1Q4yy{#3444%hA@@@)*2q)B)B)B&BB$Hd4jj))))	* 	*r5   c                     g dg dg dg}dD ]K}t          t          |dz   d           }| ||          \  }}}t          | t          |                     Ld S )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11AyAaDDMBTHd4jj))))	* 	*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 ]}|                    |          |                    |          |                    |          }}}t          d|f          \  }	|                                r|dxx         dz  cc<   d} |	|||          \  }
}}t          t          j        ||
          t          j        |
|          z   ||z              |	|||||          \  }
}}t          t          j        |                                j        |
          t          j        |
|                                j                  z   ||z  d            |	|||d          \  }
}}t          t          j        ||
          t          j        |
|          z
  ||z  d           d S )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   Hq!fq!f%&&Hq!fq!f%&&Hq"gBx())  	= 	=E%!((5//188E??BB%j2%88FE}} 1"U2r2..NAud%bfRmmbfQmm&C&+bj2 2 2 #U2r2U%HHHNAud%F2<<>>+Q//"&BLLNN<L2M2MMBJ+ + + + #U2r2B777NAud%bfRmmbfQmm&C&+bj!= = = = =#	= 	=r5   c                 N   t          j        g dg dg dg          }dD ]}dD ]|}|                    |          }|                                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                    }n>|dv r:t          j
        t          j        t          j        |          d                    }t          ||           ~d S )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   s   HOONN  
  	- 	-E) - -XXe__==?? #tHHHNHHH)*re<<h++v%%}}"#"#'"&26"::)>)>"?"?@@C'sG<<<<4'' fRVBZZ00!U** fRVBF2JJQ%?%?%?@@!T)) fRVBF2JJQ%?%?%?@@ ,,,,1-	- 	-r5   N)__name__
__module____qualname__ri   rs   r   r    r5   r3   rM   rM   J   sP        * * **	* 	* 	*= = =8- - - - -r5   rM   c                       e Zd Zd Zd ZdS )
TestLapackc                 4    t          t          d          rd S d S Nempty_module)hasattrr8   r_   s    r3   test_flapackzTestLapack.test_flapack   #    7N++ 	D	 	r5   c                 4    t          t          d          rd S d S r   )r   r7   r   s    r3   test_clapackzTestLapack.test_clapack   r   r5   N)r   r   r   r   r   r   r5   r3   r   r      s2          
    r5   r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestLeastSquaresSolversc           	      @   t          d           t          t                    D ]\  }}d}d}d}t          ||                              |          }t          |                              |          }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!          ||           d S )!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)*@NNNJC #5!Q55ER5111JAq$DAIR6#;eDDDJAq$DAI  	/ 	/EC:::'.35 5 5B ,,,E:::B&63b"X'? '?#D*e 8DAq28}}!!x{ #:q!T::E4Be444LCDAcrcFBH.A.@.B38%: %: %: "$BHUOO$7!79 9 9 9 "'rIq!QsI....# 	/ 	/EHc?$h/$h/18=? ? ?B 666eDDDB&63b"X'? '?#D*e 8DAq28}}!!x{ #:q!T::E4Be444LCDAcrcFH&J&J&L+02 2 28:28E??;N8NP P P P "'rIq!QsI..../	/ 	/r5   c                    t           D ]X}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             Zt          D ]i}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             kd S )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     	9 	9EC:::'.35 5 5B ,,,E:::B!12J35r("< "<E; 8DAq28}}!!x{ !,Aq$ ; ;D%&&EJ$uRUJ%' 7  7Aq$AcrcFBH.A.@.B38%: %: %: "$BHUOO$7!79 9 9 9 Arx);):)<CH J  J  J!#BHUOO$7!79 9 9 9 9 $ 	P 	PEHc?$h/$h/18=? ? ?B 666eDDDB!12J35r("< "<E; 8DAq28}}!!x{ (3{1ar'B'B$D%&&EUJJ$uRUJ
%' 7  7Aq$AcrcFH&J&J&L+02 2 28:28E??;N8NP P P P AH&8:K%L+02 2 28:28E??;N8NP P P P P5	P 	Pr5   c           	         t           D ]V}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             Xt          D ]V}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             Xd S )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  sw     	9 	9EC:::'.35 5 5B ,,,E:::B!12J35r("< "<E; 8DAq28}}!!x{ %Q444JD$&&E(-b"b%(N(N%Aq!T4AcrcFBH.A.@.B38%: %: %: "$BHUOO$7!79 9 9 9 Arx);):)<CH J  J  J!#BHUOO$7!79 9 9 9 9 $ 	9 	9EHc?$h/$h/18=? ? ?B 666eDDDB!12J35r("< "<E; 8DAq28}}!!x{ %Q444JD$&&E(-b"b%(N(N%Aq!T4AcrcFH&J&J&L+02 2 2 "$BHUOO$7!7	9 9 9 9
 Arx);):)<CH J  J  J!#BHUOO$7!79 9 9 9 91	9 	9r5   c           
         t           D ]r}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             tt          D ]r}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             td S )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  sU     	9 	9EC:::'.35 5 5B ,,,E:::B!12J35r("< "<E; 8DAq28}}!!x{ %Q4BHUOO4G1GHHJD$&&E8RXa[!,BH===D"'%Bbhuoo6I(-ue#= #=Aq!T4AcrcFBH.A.@.B38%: %: %: "$BHUOO$7!79 9 9 9 9
 $ 	9 	9EHc?$h/$h/18=? ? ?B 666eDDDB!12J35r("< "<E; 8DAq28}}!!x{ %Q4BHUOO4G1GHHJD$&&E8RXa[!,BH===D"'%Bbhuoo6I(-ue#= #=Aq!T4AcrcFH&J&J&L+02 2 2 "$BHUOO$7!7	9 9 9 9 9+	9 	9r5   N)r   r   r   r   r   r   r   r   r5   r3   r   r      sY        B/ B/ B/H:P :P :Px79 79 79r59 59 59 59 59r5   r   r2   r1   )rQ   rR   )rS   rP      r   c                 r    t          d|           }|\  }} |||          \  }}t          |d           d S )Ngeqrf_lworkr   r   r   r   r&   r   )r2   r1   r  r   r   r   rh   s          r3   test_geqrf_lworkr    sM     #M%@@@KDAq+Q'''KE4qr5   c                       e Zd Zd ZdS )TestRegressionc                    t           D ]}t          j        d|          }t          dg|g          \  }t	          t
          ||d            ||          \  }}}}|t          v rLt          dg|g          \  }t	          t
          ||dd          |d            ||dd          |d           |t          v rKt          d	g|g          \  }	t	          t
          |	|dd          |d            |	|dd          |d           d S )
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  s5    	- 	-E///A%wi!55FE)UAQ7777"'%((BT4##)7)aS99i233AFFFFbgs!,,,,,.(()7)aS99i233AFFFFbgs!,,,,	- 	-r5   N)r   r   r   r  r   r5   r3   r  r    s#        - - - - -r5   r  c                       e Zd Zd ZdS )	TestDpotrc           
      L   dD ]}dD ]}t           j                            d           t           j                            d          }|                    |j                  }t          d|f          \  }} ||||          \  }} |||          d         }	|rBt          t          j        |	          t          j        t          |                               t          t          j
        |	          t          j
        t          |                               !d S )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 	CE& C C	r"""I$$&$11EE!#JJ!12Dqe!L!L &E7774fQ&&q) C#BGCLL"'#a&&//BBBB#BGCLL"'#a&&//BBBBC	C 	Cr5   N)r   r   r   r  r   r5   r3   r  r    s(        C C C C Cr5   r  c                       e Zd Zd ZdS )
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 ]G}
 ||
||          }|	                    |d                    t          |d
         dk    d|
z             Ht          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             d S )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  s9   ///**00011Iry"'&2,"7"7"$(As5zzA~+>"?"?"A B BQQQ
]+- . . %Eu#% % % VnfTTrTlVAYU9K-K,LMNNneDDbDk4011 6)44q&!! 	@ 	@A%3$$CLLQ   SVq[ $;=>$? @ @ @ @"%RVBHUOO,,,.CDEEEEBHRZ,@,@,D(D "*!5!5!99	; 	; 	; 	; 	; 	;r5   N)r   r   r   r@  r   r5   r3   r   r     s#        ; ; ; ; ;r5   r   c                      e Zd Zej                            de          d             Zej                            dd eD                       ej                            dddg          ej                            dd	dg          d
                                     Zej                            dg dg dg dg          d             Z	d Z
ej                            dddg          d             ZdS )	TestTbtrsr2   c                 d   |t           v rat          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 rdt          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,-           d.S )/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442224 %' ' 'B 65/!6* %.!5/+  %	& & &A
 Hq!f!2h !f "g' $)	* * *EE
 n$$KKKFFF:::< !&' ' 'B =.9*N;)>:)>:<  %	& & &A
 Hr6l%w/46JK35JKM $)	* * *EE @@@@AAA '%888%2---4T15qt444444r5   zdtype,transc                 >    g | ]}d D ]}|dk    r	|t           v ||fS ))Nrx   r{   r{   )r   ).0r2   r   s      r3   
<listcomp>zTestTbtrs.<listcomp>-  sP     N N N"'N N6;&+sllu7K7K  %en7K7K7K7Kr5   rJ  UrG  r/  rQ  c           	      ^   t          d           d\  }}t          d          }|dk    }||z  }	||	z
  }
t          |	|
 dz
  d          }fd|D             }fd	|D             }|dk    rt          j                  ||	<   t          j        ||d
          }t          j        |dz   f          }t          |          D ]@\  }}|	                    |          ||t          |d          t          |z             f<   At          |f          } ||||||          \  }}t          |d           |dk    rt          ||z  |d           d S |dk    rt          |j        |z  |d           d S |dk    rt          |j        |z  |d           d S t#          d          )Ni  )rR   rQ   rP   rF  r   rT  rO   r   c                 4    g | ]}t          |          z
  S r   )r   )rR  r   r   s     r3   rS  z2TestTbtrs.test_random_matrices.<locals>.<listcomp>A  s#    888aq3q66z888r5   c                 2    g | ]}t          |f          S r   )r4   )rR  widthr2   s     r3   rS  z2TestTbtrs.test_random_matrices.<locals>.<listcomp>B  s5     + + + -eXu== + + +r5   dia)formatr   )rI  r   rJ  r   r/  rQ  g-C6
?r   rx   r{   zInvalid trans argument)r   r&   r2  r.   r   spsdiagsr   r   diagonalr   minr4   r   r   rx   HrM  )r_   r2   r   rJ  r/  r   kdrF  is_upperkuklband_offsetsband_widthsbandsr`   rI  rowkr   r   rh   r   s    `                   @r3   test_random_matriceszTestTbtrs.test_random_matrices,  s    	T


 4 666CK(]"W R"q"--8888<888+ + + +)+ + + 3;;///E"I Ie\%888 XrAvqk5))-- 	; 	;FC-.ZZ]]BsC1IIc!A#qkk))** (D	599%2UFFF4T1C<<AE14000000c\\AC!GQT222222c\\AC!GQT2222225666r5   zuplo,trans,diag)rT  rQ  Invalid)rT  rj  rQ  )rj  rQ  rQ  c           	          t          dt          j                  }t          dd          }t          dd          }t	          t
          ||||||           dS )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_  sR     !
;;;!QZZAJJiAtUDAAAAAr5   c                     t          j        dt                    }t          j        dt                    }t          dt                    }d|d<    |||d          \  }}t	          |d           d	S )
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   rT  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  sw     WV5)))GAU### 66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
          |||           dS )z2Test ?tbtrs fails correctly if shapes are invalid.r   rF  Nr.   r   rn  r&   r  r  )r_   ldabr   ldbr   rI  r   rF  s           r3   test_invalid_matrix_shapesz$TestTbtrs.test_invalid_matrix_shapes|  s`     WdAYe,,,GS$Ku--- 666iA.....r5   N)r   r   r   r@   markparametrizer   rO  ri  rl  ro  rt  r   r5   r3   rB  rB    s       [Wf--+5 +5 .-+5Z []N N+1N N NO O [Vc3Z00[Vc3Z00+7 +7 10 10	O O+7Z [.33333333356 6B B	6 6B    [.**1  / /	 / / /r5   rB  c                     dD ]} t          d|           }t          j        d|           }t          j        d|           }t          j        |          r|dz  } |||          \  }}}t	          |d           t	          |d           t          j        |          r[t	          |d	           t          t          |          t          k               t          t          |          t          k               t	          |d
           d S )Nry   lartgr   rQ   rR   r,   333333?r   y       皙?)	r&   r.   r   iscomplexobjr   r   typecomplexrn  )r2   rx  rc   gcssnrs          r3   
test_lartgr    s	    ) ) 666HQHQ?1 	GAE!QKK	BG$$$3?1 	)B	***DGGw&'''DHH%&&&&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|           d S )Nry   ry  rz  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    s4     $4 $4GAq%  GAq%  RXe__.q011D== e444CAA"5666CHAGAAAq!Q,,,*6,,*8>B	D 	D 	D 	DAq!Q!,,,|||011a|/=CG	I 	I 	I 	IAq!QQQ777%1a|44	A 	A 	A 	AAq!QQQ!<<<%1a|44	A 	A 	A 	AAq!QQQ!<<<%1a|44	A 	A 	A 	AAq!QQQQQ!LLL%1a|44	A 	A 	A 	AAq!QRbA>>>%1a|44	A 	A 	A 	A s1aA1!<<<1QQ<<<d3333<<<d33333I$4 $4r5   c            
         t           j                            d           t           j                            d          } | j                            |           } t           j                            d          dt           j                            d          z  z   }|j                                                            |          }dD ]}t          ddg|          \  }}|dv r|                                }n|                                 } ||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 <    ||
|
                                |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           d S )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^   INN4			&	!	!B	"B
)

6
"
"R	(8(8(@(@%@
@C
%**,,

3

C
  6 6&'8FFFtD==

AA		A agajlAdGQqrr1uX>>q# =111a4))g M!ABBE(##!!"" 43==??Aabb!!!eHbhqwqz6J6JKK!""aaa% 43!!!QRR%"(171:*>*>SIII!!!QRR%!!!Q$5555!QQQ$5555596 6r5   c                      t          dt          j        d          } d}t          | ||dd          }|dk    s|dk    sJ d S d S )	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7 7 7LA<A&*$@ @ @E  I)!3!3!3!3!3!3r5   c                       e Zd Zej                            de          d             Zej                            de          ej                            dd          d                         ZdS )	TestSytrdr2   c                     t          j        d|          }t          d|f          }t          t          ||           d S )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  sA     HV5))) 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 ]|}t          j        ||          }|d ||dz   f         |d |<   d||<   t          j        |||          ||         t          j        ||          z  z
  }t          j        ||          }}t          j        |d          }|j        |         ||<   t          j        |j        t          j        ||                    }t          ||dt          j        |          j        z  d	           d S )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   rh  k2Qr>  r   r_  i_lowerQTAQs                        r3   
test_sytrdzTestSytrd.test_sytrd  s    HaV5))) 5t<< 	{
 IaAaC!AU333 	
"
q
!
!" "k!nntT1 !&aq > > >aCT1aa(;&;#FFFF271::&&&3S!!! !&au 5 5 5aCT1
 M!5)))Iagaj!!!Q$Yqwqz!|$$"Q$("bd( F1au%%%qs 	 	A%(((A!QqSMAbqbEAaDq!5)))CFRXa^^,CCAq!AA /!R((S\'
vac26!Q<<(( 	aa(;&;#FFFFFFr5   N)	r   r   r   r@   ru  rv  r   r  r  r   r5   r3   r  r    s        [Wk22, , 32, [Wk22[S&))7G 7G *) 327G 7G 7Gr5   r  c                       e Zd Zej                            de          d             Zej                            d ee	e                    ej                            dd          d                         Z
dS )	TestHetrdcomplex_dtypec                     t          j        d|          }t          d|f          }t          t          ||           d S )Nr   r   hetrdr  )r_   r  r  r  s       r3   test_hetrd_with_zero_dim_arrayz(TestHetrd.test_hetrd_with_zero_dim_arrayT  sA     HV=11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           d S )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   rh  r  r  r>  r   r_  r  QHAQs                           r3   
test_hetrdzTestHetrd.test_hetrd[  s    HaV=1115t<< 	{
 IaAaC!AZ88829Q1Q3
1J????@ 	
"
q
!
!" 	BGBGAJJ//000  	" 	"A!k!1---GAtq!!!! {A.. !&aq > > >aCT1aa(<(<(@&@sKKKK27271::..///3S!!! !&au 5 5 5aCT1
 M!:...Iagaj,,,!Q$Yqwqz!|3///"Q$("bd( F1a}---qs 	 	A-000A!QqSMAbqbEAaDq!=111a&28Arwqzz2223Aq!AA /!R((WQS\**'
vbgacllBF1aLL11 	!"RXj1155C	 	 	 	 	 	r5   N)r   r   r   r@   ru  rv  r-   r  zipr   r  r   r5   r3   r  r  S  s        [_n==, , >=, [7 Sn==? ?[S&))A A *)? ?A A Ar5   r  c            
         t          t                    D ]_\  } }t          d|          \  }}t          |ddd          }| dk     rYt	          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            ad S )!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    sF   '' ,? ,?
U+,D279 9 9jzQ!q999775555553334443334446
 >CD D DA AAAOOOA"b///AA MMMNNNKKKKKKKKKKKKM N NA ;-%,&-%,&-%,( ) )A %(((AH'''):):):;5III!T!Q1E:::1a77x !- !- !- . .HH
 x !: !: !: ; ;H 	"&(A>>>>>Y,? ,?r5   c            
      P   t          d           t          t          t          z             D ]x\  } }d}| dk     rIt	          d|          }t	          d|          \  }}t          ||                              |          }n\t	          d|          }t	          d|          \  }}t          ||          t          ||          d	z  z                       |          }||                                j        z   d
z  d
t          j
        ||          z  z   }t          |d          }t          ||          } |||d          \  }	}
} ||	|
|d          \  }}t          t          d|z  t          j                            |d          z
            |z  dk                zd S )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    s   JJJ~ 566 A A
U77)-uEEEJ./AOOOOFGa##E**AA *-uEEEJ./AOOOOFGad1ajjm+33E::A ^Q26!5#9#9#9!99Q

z1--wqQ777T16Cd%qAAAqAeGbinnQ!n44455e;a?@@@@-A Ar5   c                     t          d           t          t                    D ]2\  } }d}t          d|          \  }}}}t	          ||                              |          }||j        z   dz  }t	          ||                              |          }||j        z   dz  dt          j        ||          z  z   } |||          \  }	}
}t          |dk                ||          \  }}t          |dk                |||          \  }}t          |dk                ||          \  }}
}t          |dk               t          ||	d           4d S )	Nr   ru   )r  sygstsyevdsygvdr   rP   r   -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   JJJ,, 1 1
U%5 7I<A&C &C &C"ueU AJJe$$WaKAJJe$$WaK!bfQe44444 !5A;;D	 %((4	%1++4	uQxxQ	W40000051 1r5   c                     t          d           t          t                    D ]\  } }d}t          d|          \  }}}}t	          ||                              |          dt	          ||                              |          z  z   }||                                j        z   dz  }t	          ||                              |          dt	          ||                              |          z  z   }||                                j        z   dz  dt          j	        ||          z  z   } |||          \  }	}
}t          |dk                ||          \  }}t          |dk                |||          \  }}t          |dk                ||          \  }}
}t          |dk               t          ||	d	           d S )
Nr   ru   )r  hegstheevdhegvdr   r,   rP   r   r  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    s   JJJ// 1 1
U%5 7I<A&C &C &C"ueU AJJe$$rDAJJ,=,=e,D,D'DD^QAJJe$$rDAJJ,=,=e,D,D'DD^QRVAU%;%;%;!;; !5A;;D	 %((4	%1++4	uQxxQ	W40000051 1r5   c                  \   t          d           d\  } }t          t                    D ]\  }}t          d|          \  }}t	          || |          }|dk     r1t          t          | |                              |                    }nDt          t          | |          t          | |          dz  z                       |                    }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        ||          fd
t!          |           D             }t#          t          j        |          }t'          |
                    |          |z
  t)          ||          dt          j         |d          j                  z  d            d	S )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   Nc           
          g | ]P}|         |gd d f         j                             |gd d f                                                   z  z
  QS Nrx   r   r  rR  r   IdVrr   s     r3   rS  ztest_tzrzf.<locals>.<listcomp>H  s[    MMMqr#a&A36A36)9)9::::MMMr5   ru   r   r  r+  )r   r   r   r&   r!   r   r   r0   r  r  rx   r   r.   r-  r   r   r2  r   r   r   r   spacingr   )r   r   r   r2   r   tzrzf_lwr   r  rzrh   r  r   Zr  r  rr   s                @@@r3   
test_tzrzfr  ,  s/    	JJJDAq'' F F
U*+C168 8 8xxA..77T!QZZ&&u--..AAd1ajj41::b=088??@@A 	i,,,au---C	 Ir!!!RaR%y"(Aqs85"A"A"ABCCIrvau---r!!!QRR%y9::VAU###MMMMMME!HHMMM263a1j%&@&@&@
55::? ; ;;"	F 	F 	F 	F 	F-F Fr5   c            	      F   t          d           t          t                    D ]{\  } }d}| dk    rWt          t	          ||          t	          ||          dz  z   t          |          z                                 |          }d}nBt          t	          ||          t          |          z                                 |          }d}t          d|          \  }}} ||          \  }}	t	          |d	                              |          }
 |d
||
          }t          |t          | |
          | d	z  dk    rdnd            |d
||
|          }t          |t          |
                                j         |
          | d	z  dk    rdnd            |d          |t          j        |          t          j        |          f<    |d
||
|d          }t          |t          |
                                j         |
          | d	z  dk    rdnd           t	          d|                              |          } |d
|||dd          }t          |t          | |j                  
                                j        | d	z  dk    rdnd           }dS )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   rT  )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   
 	JJJ''  D  D
U77T!QZZ$q!**R-/#a&&899@@GGAEET!QZZ#a&&())0077AE-.H49; ; ;ud qQAJJe$$tBQ!$qb!/2Qw!||!!	D 	D 	D 	D tBQe,,,!$qvvxxzk1(=(=/2Qw!||!!	D 	D 	D 	D ).b		")A,,	!
$%tBQe#666!$qvvxxzk1(=(=/2Qw!||!!	D 	D 	D 	D !QZZu%%tBRu3SAAA!$qb"$(<(<(>(>(@/2Qw!||!!	D 	D 	D 	D 	D? D  Dr5   c            	         t          d           d\  } }}t          t                    D ]\  }}t          d|          \  }}t	          || |          }|dk     rht          t          | |                              |                    }t          ||                              |          }	t          d|          \  }
}nt          t          | |          t          | |          dz  z                       |                    }t          ||          t          ||          dz  z                       |          }	t          d|          \  }
}t	          |||          } |||	          \  }}t          j	        t          j
        | |          |d
d
| d
f         f          t          j
        ||          fdt          |           D             }t          t          j        |          }|dk     rdnd}dt          j         |d          j                  z  } |
||	|	          \  }}t!          |dk               t#          ||                    |	          z
  t%          |	          |d            |
||	||          \  }}t!          |dk               t#          ||                                j                            |	          z
  t%          |	          |d            |
||	d|          \  }}t!          |dk               t#          ||	                    |          z
  t%          |	          |d            |
||	d||          \  }}t!          |dk               t#          ||	                    |                                j                  z
  t%          |	          |d           d
S )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   Nc           
          g | ]P}|         |gd d f         j                             |gd d f                                                   z  z
  QS r  r  r  s     r3   rS  z$test_ormrz_unmrz.<locals>.<listcomp>  s[    NNNqr#a&A36A36)9)9::::NNNr5   rx   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  r   r   r  r   r   r   r   r  rx   )qmqncnr   r2   r   r	  lwork_rzr  r{   orun_mrzorun_mrz_lw	lwork_mrzr
  rh   r   r  r   tolcqr  r  rr   s                       @@@r3   test_ormrz_unmrzr%  w  s    	JJJJBB'' .! .!
U*+C168 8 8x!(B3377T"b\\((//00AR##E**A$45M;@%B %B %B!Hkk d2rllT"b\\"_4<<UCCDDAb"RR/77>>A$45M;@%B %B %B!Hk #;B77	ax000C Irvb...111bcc6
;<<VBe$$$NNNNNNE"IINNN263 QwwCEE#JJO,,,8BQi888D	QUU1XXz!}}3RHHHH8BQe9EEED	QVVXXZ^^A...
1C	! 	! 	! 	! 8BQS	BBBD	QUU1XXz!}}3RHHHH8BQSYOOOD	QUU16688:...
1C	! 	! 	! 	! 	![.! .!r5   c            	      8   t          d           t          t                    D ]\  } }d}| dk    r:t          ||          t          ||          dz  z                       |          }d}n%t          ||                              |          }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
        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
        z  cc<   t          ||                    dd                     t          |
|	                                j
                            dd                     t          |	|                    dd                     t          ||	                                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          |                     dS )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  rT  )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_trttfr8    sm   
 	JJJ'' 1: 1:
U771ajj41::b=088??FFF1ajj((//FF'(:%HHHuuV}}	uV#...	vf3???$	vf3???$	 !A#q!tE222<<1a4551"aaaAa!!!VUadUEQTE\ : ? ? A A CC!A#q!tE222v,,qqq%1a4%x0QQQ!Q$d6ll1a455!Q$%%<8==??AA!&(*:*:2S*:*I*IJJJ!("*--//"3";";Bc";"J"J	L 	L 	L 	"&(*:*:2S*:*I*IJJJ!("*--//"3";";Bc";"J"J	L 	L 	L uQ''	uQS111	q(6DDD$	q(6DDD$	!&$v,,777!(DLL999!&$v,,777!(DLL9999c1: 1:r5   c                  2   t          d           t          t                    D ]\  } }d}| dk    r8t          ||          t          ||          dz  z                       |          }n#t          ||                              |          }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          |                     dS )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-  r:  r;  A_tp_Urh   A_tp_LindsA_tp_U_mA_tp_L_mr4  r5  s                 r3   test_tpttr_trttprA    s   
 	JJJ''  8  8
U771ajj41::b=088??FF1ajj((//F'(:%HHHuuV}}	uV#...	 AAaC!5111F||~t,AAaC!5111F||~t,!&(333!&(333 uQ''	uQS111	!&$v,,777!&$v,,7777A 8  8r5   c                     t          d           t          t                    D ](\  } }d}| dk    rgt          ||          t          ||          dz  z                       |          }||                                j        z   |t          |          z  z   }n@t          ||                              |          }||j        z   |t          |          z  z   }t          d|          \  }}} ||          \  }} |||          \  }	}t          |dk                |||	          \  }
}t          |          }t          |
|           *dS )	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  rC  r  r  r  rh   	Achol_rfpA_chol_rr>   Achols                r3   
test_pftrfrG    sS   
 	JJJ'' 3 3
U77ad1ajjm+33E::AAFFHHJ3q66)AAa##E**AAC!CFF("A./J5:< < <ue E!HH	T%3--	4	eAy))!!(E2222%3 3r5   c                     t          d           t          t                    D ]R\  } }d}| dk    rgt          ||          t          ||          dz  z                       |          }||                                j        z   |t          |          z  z   }n@t          ||                              |          }||j        z   |t          |          z  z   }t          d|          \  }}}} ||          \  }}	 |||          \  }
}	 |||
          \  }}	t          |	dk                |||          \  }}t          |          }t          |t          |          | dz  dk    rd	nd
           TdS )z
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array to find its inverse
    r   r   rO   r,   )pftrirC  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  rI  rC  r  r  r  rh   
A_chol_rfp	A_inv_rfpA_inv_rr>   Ainvs                  r3   
test_pftrirN  /  s   
 	JJJ'' D D
U77ad1ajjm+33E::AAFFHHJ3q66)AAa##E**AAC!CFF("A%5 7@ =B	&C &C &C"ueU E!HH	T 5C==
D%:..	4	U1i((
1vv!'4::/2Qw!||!!	D 	D 	D 	D 	D-D Dr5   c                     t          d           t          t                    D ]\  } }d}| dk    rgt          ||          t          ||          dz  z                       |          }||                                j        z   |t          |          z  z   }n@t          ||                              |          }||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           dS )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   )pftrsrC  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Bf2rP  rC  r  r  r  rh   rJ  r  s                  r3   
test_pftrsrS  O  s   
 	JJJ'' D D
U77ad1ajjm+33E::AAFFHHJ3q66)AAa##E**AAC!CFF("A!Qu%%%AaC85)))AaC85)))%5 7@ =B	&C &C &C"ueU E!HH	T 5C==
DU1j#..
d	i:s;;;U1j!,,
d	!%1++t/2Qw!||!!	D 	D 	D 	D 	D7D Dr5   c            
         t          d           t          t                    D ]\  } }d}| dk    rgt          ||          t          ||          dz  z                       |          }||                                j        z   |t          |          z  z   }n@t          ||                              |          }||j        z   |t          |          z  z   }| dk     rdnd}t          dd	d
	                    |          f|          \  }}} ||          \  }}	t          j                            |d                              |          }
 ||dd|
d|          } |||          \  }}	t          |t          |
                    |
                                j                   d|z  z             | dz  dk    rdnd           dS )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&   rZ  r.   r/   r   r   r   )r   r2   r   r  prefixr  r  shfrkr  r>   r{   Afp_outA_outs                r3   test_sfrk_hfrkrZ  t  s    	JJJ'' D D
U77ad1ajjm+33E::AAFFHHJ3q66)AAa##E**AAC!CFF("AQwwC. C3396&>>0C5:< < <ue qQINN1a  ''..%1b!Q,,5G$$q!%quuQVVXXZ/@/@.@1Q3.F)G)G/2Qw!||!!	D 	D 	D 	D 	D%D Dr5   c            
      ,   t          d           t          t                    D ]\  } }d}| dk    rZt          dd||f          t          dd||f          dz  z                       |          }||                                j        z   }nCt          dd||f                              |          }||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           dS )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#  r]  trf	trf_lworklwrG  Dpermr  r  rh   r`   r  rT  s                     r3   test_syconvrd    sU   
 	JJJ'' L L
U77b1a&))b1a&))",-.4fUmm  AFFHHJAAR!Q((//66AAC!CFF("A"*UU3ZZ_---!1 3BIN"P "P "PYIq222!u555
1dIq222#aq333T4VCQ///
1dQd1T111W:r&:&:2NNNN !u555
1d#aq///T4VCQ///
1dQ

D47Q$7$7cKKKKK5L Lr5   c                       e Zd ZdZd Zd ZdS )TestBlockedQRzd
    Tests for the blocked QR factorization, namely through geqrt, gemqrt, tpqrt
    and tpmqr.
    c           
         t          d           t          t                    D ]\  }}d}|dk    r8t          ||          t          ||          dz  z                       |          }n#t          ||                              |          }dt          j         |d          j                  z  }t          d|          \  }} |||          \  }}	}
|
d	k    sJ t          j	        |d
          t          j
        ||          z   }t          j
        ||          ||	z  |j                                        z  z
  }t          j        |          }t          |j                                        |z  t          j
        ||          |d           t          ||z  ||d           |dk    r:t          ||          t          ||          dz  z                       |          }d}n%t          ||                              |          }d}dD ]}d|fD ]} |||	|||          \  }}
|
d	k    sJ ||k    r|j                                        }n|}|dk    r||z  }n||z  }t          |||d           ||fdk    r( |||	|          \  }}
|
d	k    sJ t          ||           t!          t"          |||	|d           t!          t"          |||	|d           d S )Nr   r   rO   r,   r*  r   )geqrtgemqrtr   r   r   r  r+  r{   rx   rG  r  rQ  r  r   rG  rG  rQ  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#  rh  ri  r`   trh   r   r  r  r{   	transposer  r   r   qqC	c_defaults                         r3   test_geqrt_gemqrtzTestBlockedQR.test_geqrt_gemqrt  s    T


#F++ :	A :	AJCAQww!QZZ$q!**R-/77>>!QZZ''..bjs111C,-@NNNME6q!JAq$19999 2!7!7!77Aq&&&Q);;A

A ACHHJJNBF1E,B,B,B!#% % % %AE13R8888Qww!QZZ$q!**R-/77>>		!QZZ''..	" 3 3!9- 3 3E$fQ14uEEEGAt19999	))CHHJJs{{UU#Ar"==== e}
22*0&Aq//	4#qyyyy$Y222)3. )VQ13????)VQ1C@@@@@u:	A :	Ar5   c                 >
   t          d           t          t                    D ]\  }}d}|dk    rot          ||          t          ||          dz  z                       |          }t          ||          t          ||          dz  z                       |          }nFt          ||                              |          }t          ||                              |          }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                                        z  z
  }t          j        t          j        |
          t          j        |
          f          }t#          |j                                        |z  t          j        d
|z  |          |d           t#          ||z  t          j        t          j        |          |f          |d           |dk    rqt          ||          t          ||          dz  z                       |          }t          ||          t          ||          dz  z                       |          }d}nHt          ||                              |          }t          ||                              |          }d}dD ]}d|fD ]
} ||	||||||          \  }}}|d	k    sJ ||k    r|j                                        }n|}|dk    r6t          j        ||fd	          }t          j        ||fd	          }||z  }n5t          j        ||fd          }t          j        ||fd          }||z  }t#          |||d           ||fdk    r; ||	||||          \  }}}|d	k    sJ t          ||           t          ||           t%          t&          ||	||||d           t%          t&          ||	||||d           d S )Nr   r   rO   r,   r*  r   )tpqrttpmqrtr   r   rP   r   r  r+  r{   rx   rj  rQ  rk  rG  r   rl  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#  rt  ru  lr`   r   rm  rh   B_pentb_pentr   r  r  r{   rb  rn  r  r   r   ro   ro  cdCDqCDrq  	d_defaults                                    r3   test_tpqrt_tpmqrtzTestBlockedQR.test_tpqrt_tpmqrt  s:   T


#F++ O	K O	KJCAQww!QZZ$q!**R-/77>>!QZZ$q!**R-/77>>!QZZ''..!QZZ''..bjs111C,-@NNNME6 a^ @K @K %aAq 1 11aqyyyy RWQ^^RWQ^^<<< RWQA	22BGAq1uqy4I4IJJJ "$AE!2!2BGAq1u4E4E NBF1E$:$:$:F#CDDF1q5...Q1CCNBGAJJa0@0@#ABB  

Qq1uE0J0J0J%(r3 3 3 3Ar~rwqzz66J'K'K%(r3 3 3 3 77ad1ajjm3;;EBBAad1ajjm3;;EBBA #IIa++E22Aa++E22A #I& 7 7D"%y!1 7 7%+VAq!Q27&9 &9 &9
1d#qyyyy I-- !

AA !A3;;!#AQ!?!?!?B!#AQ!?!?!?B"#b&CC!#AQ!?!?!?B!#AQ!?!?!?B"$q&C'CcCCCC %=J669?1aA9N9N6Iy$#'19999(A666(A666378 iAq!QSIIIIiAq!QcJJJJJA@KO	K O	Kr5   N)r   r   r   r?   rr  r}  r   r5   r3   rf  rf    sJ         
<A <A <A|QK QK QK QK QKr5   rf  c                  ,   t          d           t          t                    D ]n\  } }d}d}t          d|          }| dk    rmt	          |||z
                                |          dt	          |||z
                                |          z  z   }||                                j        z  }n0t	          |||z
                                |          }||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        |
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        z  d|           pd S )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  r  r  r   pivr_crh   rT  single_atoldouble_atolr,  rG  s                  r3   
test_pstrfr  J     JJJ'' #P #P
U 666 77Q!##E**R$q!A#,,2E2Ee2L2L-LLAAFFHHJAAQ!##E**AACA!E!HH3TGG "#'((C!GHH
T1 RXbj1155RXbj1155!Vmm{{#a%CE*AFFHHJN$OOOO!E!1---3TGG "#'((C!GHH
T1RXbj1155RXbj1155!Vmm{{#a%CE*A
N$OOOOOG#P #Pr5   c                  ,   t          d           t          t                    D ]n\  } }d}d}t          d|          }| dk    rmt	          |||z
                                |          dt	          |||z
                                |          z  z   }||                                j        z  }n0t	          |||z
                                |          }||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        |
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        z  d|           pd S )Nr   ru   rP   pstf2r   rO   r,   r  r  r  rL  r  r  )r   r2   r   r  r  r  r   r  r  rh   rT  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     r6t          j        g d	g d
g dg dg          }|                    |          }nWt          j        g dg dg dg|          }|t          j        g dg dg dg          dz  z  }|                    |          }t          d|          } ||          \  }}}}	}
}|dk     r7t          |                     |          |d d d f         |z  |z  dd           t          |                    |          |d d d f         |z  |z  dd           1d S )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нrz  )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    sZ   8>>>@@@@@@@@@B C CL
 8 1 1 11 1 11 1 12 3 3L  '' / /
U77CCCEEEEEEEEEG H HA AA:::::::::<CHJ J JA :::;;;:::< = ==?@ @A A 666+0588(1ffdD77L//66!!!T'
1Q!"/ / / / / L//6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        
fdt          dd	          D             |          }|t          j        t          j        |                    z  }t          d
|          } ||          \  }}}}	t          t          j
        |                              t                    |            d S )N)
r   r   r   r   r   r   r   r   r  rE  ru   r   rP   r   r,   c                      g | ]
}d |z  z  S )r   r   )rR  r   r  s     r3   rS  ztest_syequb.<locals>.<listcomp>  s!    :::eb!em:::r5   rS   syequb)r.   r   r   r   r   r2  rot90r/  r&   r   log2r0   r   )desired_log2sr   r2   r  ro   r  r   scondr  rh   r  s             @r3   test_syequbr    s   H???@@M'' 	< 	<
UF2U###C!GGbb--H::::U2q\\:::%HHH	RXbgajj!!!!(%888%vayy5$RWQZZ&&s++];;;;	< 	<r5   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
        |                     t           j                  d          \  }}}}t          |d           t          t          j        |          g d           d S )NrP   rS   i  rW   rO   )rh  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 !!BGBGAJJ!$<$<$<R$??A!>!,,AudDqBGAJJS	!rd 2bT!V ;<<<
26")B**+++b011AAdGAdG!>!((2<*@*@JJJAudDqBGAJJ I I IJJJJJr5   c                     t           j                            d           d} t           j                            |           }t           j                            |           t           j                            |           dz  z   }t	          t
                    D ]n\  }}|dk     rPt           j                            | |           }|                    |          }||z  }|                    |          }nst           j                            | |           t           j                            | |           dz  z   }|                    |          }||z  }|                    |          }t          d|          }t          d|          } ||d	          \  }	}
}} ||	||
|d
          \  }}|dk     r*t          |                    |          ||z  d           Ft          |                    |          ||z  d           pd S )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   INN2
A9>>!$$L9>>!$$ry~~a'8'8';;L'' : :
U77	q!$$AAL AAA	q!$$ry~~a';';B'>>AAL AA 666 666$uQA666D$5Qd!<<<577%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    o||	k    }t          j        |          }|dk    o| o| }|dk    o|o| o|}|dk    o|o| o|}|rd}n	|s|rd}nd	}|dk    r$|dk    rt          t          ||||||||	  	         dS  ||||||||
          \  }}}}}}t          ||           |s|d	         |d         z  |d|	         z  }t          |t          |d          |
           |dk    r|ddd|	f         }|rC|rAt          |t          j        |          z  |                                j        z  ||
           |r>t          |                                j        |z  t          j        |	          |
           |r>t          |                                j        |z  t          j        |	          |
           t          |d	         t          j                            |                     t          |d         t          j        |                     t          |d         d	           dS dS )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&   r{  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  	  s   B 	HHH DAq%$$D#D%00AWE222E
 1HE1HEai%a1fF##JHUHZMU-=v(>M:MU-=v(>M:
  	 / qtqyyi4tT4NNNNN',uQ262626262626(8 (8 (8$Q4 	T;'''  	& !WtAw&#bqb'1EE3qU#;#;#;$GGGGqyy aaa!eH O OBGENN 2QVVXXZ ?NNNN K
QATJJJJ K
QATJJJJq29#8#8#;#;<<<q2#3E#:#:;;; q1%%%%%5	& 	&r5   c                 V   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                              d	d	                    	                    |           }t          j
        ||j        z             }|                    d
          }	 ||          }
t          ||	           dS )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222E $)599 CAtUDq&!!!&!!!bht5111222 	E"""A#(588 CAtUDq&!!!&!!!bht5111222 	e$$$A#(588 CAtUDq&!!!&!!!bhr///000 	ry~~%%b"--..55e<<A
!ac'""A	
BaAArr5   kwargsrW   r  c                     t          j        dt                    }t          dt                    }t	          t
          ||fi |  dS )z-Test invalid job arguments raise an Exception)rP   rP   r   r  Nrq  )r  r  r  s      r3    test_gejsv_invalid_job_argumentsr    sJ     	e$$$AWE222E)UA00000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          |||           dS )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    s|    0 DWAG444E#(588 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|           }|                                |                                |                                g}t          j        |          t          j        |d          z   t          j        |d          z   }t          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 ]K\  }}||         dz
  }|d d ||gf         |d d ||gf<   |d d |fxx         |d d |dz   f         |z  z  cc<   Ld|d         dz
  }}|d d ||gf         |d d ||gf<   t          |||z  |
           |	                                } |||||||	          \  }}t          |	|           t          |||
           | t          v rd}|j        |z  }nd}|                                j        |z  } ||||||||          \  }}t          |||
           t#          t$                    5   |
|d d         ||           d d d            n# 1 swxY w Y   t#          t$                    5   |
||d d         |           d d d            n# 1 swxY w Y   t#          t$                    5   |
|||d d                    d d d            n# 1 swxY w Y   t#          t&                    5   |
|d         |d d         |d                    d d d            n# 1 swxY w Y   d|d<   d|d<    |
|||          \  }}}}}} t          j                            ||dz
           dk    d                    ||dz
                                d S )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   rZ  )!r2   r   r,  duro   dldiag_cpyr  r   r   r  r  _dl_d_dudu2r  rh   rT  rG  r>  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos!                                    r3   test_gttrf_gttrsr    s    	HHH
A%$$D 
%acV5	9	9	9B#QD666A	$acV5	9	9	9B		16688RWWYY/H


RWR__$rwr1~~5A
	qA	AA#$6eDDDLE5$)E"a$4$4!CS#tTr8A;'''q(1+&&&r8A;''' 	Aa(273??:A
qA#  1 1gk111sAh;!!!aX+	!!!Q$1QQQ!V9Q; bAsAqqq3({^Aaaa!SkN Aq1u4((((FFHHEE#r3T155MGTq%   AwT**** #'&&((*q.E#r3T7%HHHMGTAwT**** 
z	"	"  b"gq"              	z	"	"  b!CRC&"              	z	"	"  b!RW               
y	!	! # #beQrrUBqE"""# # # # # # # # # # # # # # # BqEAaD*/%Ar*:*:'D#tT5%Js4!8})Ls4!8}--/ / / / /sH   L88L<?L<M99M= M=N::N>N>"PPP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	ry  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          ||           d S )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GGLE5$)E"a$4$4!CS#tTC!!!C   BD))))D(###E#r3T155MGTGQr5   ))rQ   rU   )rU   rQ   r   c                 r    t          d|           }|\  }} |||          \  }}t          |d           d S )Ngeqrfp_lworkr   r  r   r  )r2   r1   r  r   r   r   rh   s          r3   test_geqrfp_lworkr  f  sM     $^EBBBLDAq,a(((KE4qr5   zddtype,dtypec                 J   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   }|                                |                                g}t          d|          } |||          \  }	}
}t          ||d	                    t          ||d                    t          |d	d
| d           t          j        |
d          t          j        t          j        |                    z   }t          j        |	          }t          |||z  |                                j        z  |           t	          |f|          }||z  }t          d|          } ||	|
                                |          \  }}t          |d	d| d           t          |||           d S )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  rb  r   r   r
  _xs                     r3   test_pttrf_pttrsr  o  s    	HHHrx""D
A
 	$QD&11A5A#QqSFE22A 	

RWQ^^#bgbgajj!&<&<<A!&&((#HWE222E5A;;LBDq(1+&&&q(1+&&&q"F4"F"F"FGGGG 	B"'"'!**---A
AAqs1;;==?*6666 	$QD%00A	!A WE222EuRA&&HBq"F4"F"F"FGGGG Ar%%%%%%r5   c                     d}t          d|          }t          |f|           dz   }t          |dz
  f|          }t          t          ||d d         |           t          t          |||d d                    d S )Nru   r  r   rP   rO   r   )r&   r4   r  rM  )r  r2   r   r  ro   r  s         r3   *test_pttrf_pttrs_errors_incompatible_shaper    s     	AWE222E#QD&11A5A#QqSFE22A*eQssVQ///*eQ#2#/////r5   c           	         d}t          d|          }t          |f|           dz   }t          |dz
  f|          }d|d<   d|d<    |||          \  }}}t          ||dz
           dd                    ||dz
                                t          |f|           } |||          \  }}}t	          |dk    d           d S )	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   rZ  r   )	r  r2   r   r  ro   r  r  r  rh   s	            r3   'test_pttrf_pttrs_errors_singular_nonSPDr    s     	AWE222E#QD&11A5A#QqSFE22AAaDAaD5A;;LBDD1HqF&D1H&&( ( (
 	$QD&11A5A;;LBDDAIKLLLL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=Ury  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                    d}t          d|d                   } || |          \  }}	}
t          |||           t          |	||           t          d|d                   } |||	                                |          \  }}
t          |||           |j        t          v r& |||	|d          \  }}
t          |||           d S d S )	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111E5A;;LBDBt,,,,Bt,,,,WAaD111EuRA&&HBBt,,,, 	w.  5R!,,,DH4000000 ! r5   c                 l   |dk    rt          ||f|           }|t          j        t          j        |          d|z  z             z   }||                                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        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(    sy    A~~+QFE::ac 1222'1,%[[^'h77!;'199gajj271a==(271b>>9Hrwwyy{" (h77'199 EGAJJA&B7GAJJB'"'!Q--7q!Q<r5   zdtype,realtyper#  c                    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  ||
           dS dS )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  r  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_pteqrr0  
	  s_    	HHH##Dge444E
A"5(AyAAJAq!Q&+ea1Y&O&O&O#GWgtq8D888999 BGDGGAJ'')9)9EEEE &"''"2"2"44bk!nn!	# 	# 	# 	# 	"''"2"22RWW5E5E5GG	& 	& 	& 	& 	& 	&& &r5   c                     t          d           t          d|           }d}t          | |||          \  }}}} ||dz
  |||          \  }	}
}}|dk    sJ d S )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_spdr5  +	  sy     	HHHge444E
A"5(AyAAJAq!Q ',eAE1Y&O&O&O#GWgt!888888r5   c           	      L   t          d           t          d|           }d}t          | |||          \  }}}}t          t          ||d d         |||           t          t          |||d d         ||           |r$t          t          ||||d d         |           d S d S )Nr  r*  r   ru   r   r2  )r   r&   r(  r  rM  )	r2   r"  r#  r*  r   ro   r  r  r'  s	            r3   "test_pteqr_raise_error_wrong_shaper7  :	  s     	HHHge444E
A"5(AyAAJAq!Q*eQssVQ!yIIII*eQ#2#!yIIII Nj%A3B39MMMMMMN Nr5   c                     t          d           t          d|           }d}t          | |||          \  }}}}d|d<   d|d<    |||||          \  }	}
}}|dk    sJ d S )Nr  r*  r   ru   r   r2  r3  r4  s                r3   test_pteqr_error_singularr9  I	  s     	HHHge444E
A"5(AyAAJAq!QAaDAaD&+eAqA&K&K&K#GWgt!888888r5   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                 n   d}t          d|j                  }t          j        |          t          j        |d          z   t          j        |d          z   } |||||           \  }}	}
}t	          |||           t	          t          j        |
          t          j        |          |           dS )	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_f08jgfr=  X	  s      Dgag666E


RWQ]]"RWQ^^3AuqAi@@@BBBt,,,,BF2JJx 0 0t<<<<<<r5   matrix_size)r   )rU   rT   rT   rT   c                 V   t           j                            d           dt          j        |           j        z  }dt          j        |           j        z  }t          d|           }t          d|           }|\  }}t          ||f|           } ||          \  }	}
}t          j        |	          }||k    r8t          j        ||f|           }|	|d d d |f<    |||
|          d         }n  ||	d d d |f         |
|          d         }t          ||z  ||	           t          t          j
        |j        d                   ||                                j        z  ||
           t          |t          j        |          |	           t          t          j        t          j        |          t          j        t#          t          j        |                              k                         t          |dk               t          ||f|           dz  }t%          |          \  }} ||          \  }}}t          t          j        t          j        |          dk               o)t          j        t          j        |          dk                         d S )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   r>  r   r,  rB  gqrr   r   r  qr_Arr   rh   r  qqrro  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                        r3   test_geqrfprN  q	  s    INN2rx""Drx""Dx666F
GE
2
2
2CDAq 	$QF%888AfQiiOD#t 	A
 	1uu h1vU+++AAArrE
 CA&&&q)CQQQUA...q1 AaC&&&&BF171:&&16688:T    Arwqzz----BF271::RWQZZ 9 99::;;;DAI -aV5AAABFJJHh"(&"4"4Hgx BF278$$q()) #F271::>""$ $ $ $ $r5   c                      t          j        g           } t          d| j                  }t	          t
          ||            d S )NrB  r   )r.   r   r&   r2   r  r  )A_emptyrB  s     r3   #test_geqrfp_errors_with_empty_arrayrQ  	  s;    hrllGhgm<<<F)VW-----r5   driver)evevdevrevxpfxsyhec                 v   d}| dk    rt           nt          }t          | |z   dz   |d                   }t          | |z   dz   |d                   }	 t          ||d           t          ||d           d S # t          $ r6}t          j        d                    | |z   |                     Y d }~d S d }~ww xY w)	N  rX  _lworkr   r   rO   r  ({}_lwork raised unexpected exception: {}r   r-   r&   r!   r  r@   failrZ  rW  rR  r   r2   sc_dlwdz_dlwr  s          r3   test_standard_eigh_lworksrc  	  s     	A$;;KKNEc&j1qBBBFc&j1qBBBF.vq****vq****** . . . vc&j!,,	. 	. 	. 	. 	. 	. 	. 	. 	..   $A8 8
B8+B33B8gvgvxc                 v   d}| dk    rt           nt          }t          | |z   dz   |d                   }t          | |z   dz   |d                   }	 t          ||d           t          ||d           d S # t          $ r6}t          j        d	                    | |z   |                     Y d }~d S d }~ww xY w)
Nr[  rX  r\  r   r   rO   rG  r(  r]  r^  r`  s          r3   test_generalized_eigh_lworksrh  	  s     	A$;;KKNEc&j1qBBBFc&j1qBBBF.vqs++++vqs++++++ . . . vc&j!,,	. 	. 	. 	. 	. 	. 	. 	. 	..rd  dtype_r   )rO   ru   r*  r  c                    t          d           t          d|          }||z
  }| t          v rdnd}|dz   }t          ||           }t	          ||||          }|dk    r|n|f}t          d |D                       sJ d S )Nr   r   orun	csd_lworkr   c                     g | ]}|d k    	S r(  r   )rR  r   s     r3   rS  z*test_orcsd_uncsd_lwork.<locals>.<listcomp>	  s    %%%!A%%%r5   )r   r   r   r&   r!   rD  )ri  r   rb   ro  rW  dlwra  lwvals           r3   test_orcsd_uncsd_lworkrq  	  s     	JJJ1A	AAK''$$TC

C	#V	,	,	,B2q!Q''ED[[EEuhE%%u%%%&&&&&&&r5   c           
      n   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             d S )N)rA  P      rk  rl  csdrm  r   r   lrworkr   r   r  g     @rL  )r   r"   rvsr#   r&   r!   dictr  r   r^  r.   r   r2  cosr  r   r   r   )ri  r   rb   ro  rW  Xdrvro  rp  lwvalscs11cs12cs21cs22thetau1u2v1tv2trh   rT  VHr  n11n12n21n22Soner>  Xcs                                  r3   test_orcsd_uncsdr  	  s   GAq!K''$$TC!Tkk}/@/C/CAucK.? @OOOHC31a((E!$gu$sG<D<FGL8N 8N 3O 3OF 	Abqb"1"fIq!QRRy!ABBF)Qqrr122vYAA&AA :D$dE2r3T 199992rA	C		BC1IIs1Q3!}}%%A
a))a-C
a1++/C
ac1++/C
ac1Q3--!
C
!Qv&&&A
&**C3ZZ  !Q$3ZZ  !A#qs(3ZZ - -),!C%'1S573;s?1$
$%%3ZZ $ $ #!C%'!)SU1W
1XX - -&q**!C%3,"$&q"2"2!C%'1Q3s73;
%'VE!H%5%5$5!C%3s3q
 !F58,,!C%'1S5.	
QBArRXf-=-=-A)ABBBBBBr5   
trans_boolFfactr*  rQ  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	        n|
|z  }|
                                |
                                |	
                                |
                                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        d         |j        d                              t          |j        d         |j        d         k    d                    |j        d         |j        d                              dS )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{   rQ  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   rZ  ) 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  
  s    	HHH%$$D#$6eDDDLE5
A	$acV5	9	9	9B#QD666A	$acV5	9	9	9B
B"'!**$rwr1~~5A#QF%888A6@IE[((SScccE!	(qA-A ''))QVVXXrwwyy!&&((;J !CKKb!RdVAX )D#tUE5 b!RUE7 7 7I@I=CS$feT4DAI>>>>??? r:a=)))q*Q-(((r:a=)))q*Q-((( AvD)))) GE9%%T14U446 6 6 DJqMQWQZ')LVDJqM171:..0 0 0 DJqMQWQZ')LVDJqM171:..0 0 0 0 0r5   c                 Z   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        n|	|
z  }|d
k    r ||||          nd gdz  \  }}}}}} ||||||||||||          }|\
  }}}}}}}}}}|dk    r7d|d<   d|d<    |||||          }|\
  }}}}}}}}}}|dk    s
J d            d S |d
k    rAd|d<   d|d<   d|d<    |||||||||||
  
        }|\
  }}}}}}}}}}|dk    sJ d            d S d S )Nr  r  r   ru   rO   r   rP   rx   r{   r*  rT   r  rQ  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
  sO    	HHH#$6eDDDLE5
A	$acV5	9	9	9B#QD666A	$acV5	9	9	9B
B"'!**$rwr1~~5A#QF%888AK''CCSE!	(qA-A !CKKb!RdVAX )D#tUE5 b!RUE7 7 7I@I=CS$feT4 s{{"2E"aQ''	DMARdD&%tTaxxxAxxxxx	BRb	E"aQTt#%1 1 1	DMARdD&%tTaxxxAxxx 
 xr5   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        n|	|
z  }|d
k    r ||||          nd gdz  \  }}}}}}|dk    rt          t          ||d d         ||||||||||           t          t          |||d d         |||||||||           t          t          ||||d d         ||||||||           t          t          |||||d d         |||||||           d S t          t          ||||||||d d         ||||           t          t          |||||||||d d         |||           t          t          ||||||||||d d         ||           t          t          |||||||||||d d         |           d S )Nr  r  r   ru   rO   r   rP   rx   r{   r*  rT   rQ  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  
  s    	HHH#$6eDDDLE5
A	$acV5	9	9	9B#QD666A	$acV5	9	9	9B
B"'!**$rwr1~~5A#QF%888AK''CCSE!	(qA-A !CKKb!RdVAX )D#tUE5 s{{j%CRC!Ru$3E	7 	7 	7 	7 	j%QssVRu$3E	7 	7 	7 	7 	j%Q3B3u$3E	7 	7 	7 	7 	iAr1SbS6u$3E	7 	7 	7 	7 	7 	7 	j%QAu$ss)E	7 	7 	7 	7 	j%QAu$3ss8E	7 	7 	7 	7 	j%QAu$3ss)U	< 	< 	< 	< 	j%QAu$3E#2#JU	< 	< 	< 	< 	< 	<r5   zdu,d,dl,b,xc           
          t          d|j                  } |||| |          }|\
  }}}	}
}}}}}}t          ||           d S )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  
  s]    . WAG444Eb!R##I@I=CS$feT4a(((((r5   zfact,df_de_lambdac                 B     t          d|j                  | |          S Nr  r   r&   r2   ro   r  s     r3   <lambda>r  
  7     (G'7>?g(G (G (GGH!(M (M r5   c                     dS N)NNNr   r  s     r3   r  r  
      -? r5   c                 n   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  } |||          \  }}}|                                |                                |                                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        d                              t          |j        dk    d                    |j        |
j        d                              dS )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   rZ  )r2   r"  r  df_de_lambdar,  r  r   ro   r  r  r  r   r  r  rh   r  r   r  r  r  rG  rb  s                         r3   
test_ptsvxr  
  s    	HHH%$$DWE222E	A#QD(33a7A#QqSFE22A


RWQ^^#bgbgajj!&<&<<A(!Qu===F	F
A  <1%%LBD !&&((AFFHH-H */q!QT24*= *= *=&BAudD$ q(1+&&&q(1+&&&q(1+&&&DAI9$999:::fa((( 	B"'"'!**---A
AAqsBGAJJL)5555 ui(( 1 10001 1 1 DJ$ EVDJQ002 2 2 DJ$ EVDJQ002 2 2 2 2r5   c                 B     t          d|j                  | |          S r  r  r  s     r3   r  r    r  r5   c                     dS r  r   r  s     r3   r  r    r  r5   c           
      f   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         |||	           d S )
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;    	HHHWE222E	A#QD(33a7A#QqSFE22A


RWQ^^#bgbgajj!&<&<<A(!Qu===F	F
A  <1%%LBD *eQssVQKKKK*eQ#2#KKKK)UAq!CRC&trJJJJJJr5   c                 B     t          d|j                  | |          S r  r  r  s     r3   r  r  2  r  r5   c                     dS 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    rnd
|d<    |||          \  }}} ||||
          \  }}}}}}}|d
k    r||k    sJ t          |f|          } ||||
          \  }}}}}}}|d
k    r||k    sJ d S  |||          \  }}}d
|d
<   d
|d
<    ||||
|||          \  }}}}}}}|d
k    sJ d S )Nr  r  r   rS   rR   rO   r   rP   rQ  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    	HHHWE222E	A#QD(33a7A#QqSFE22A


RWQ^^#bgbgajj!&<&<<A(!Qu===F	F
A  <1%%LBDs{{!#|Aq))B-2U1a^^*B5$daxxDAIIII (h77-2U1a^^*B5$daxxDAIIIIII $|Aq))B11-2U1a68R.A .A .A*B5$daxxxxxxr5   zd,e,b,xc                 |    t          d|j                  } || ||          \  }}}}}	}
}t          ||           d S )Nr  r   r  )ro   r  r   r   r  r  r  x_ptsvxr  r  r  rh   s               r3   test_ptsvx_NAGr  Z  sN    . WAG444E/4uQ1~~,BGUD$a)))))r5   r  c           	         t          d           t          j        |           j        dz  }d\  }t	          g|           }t	          |g|           }|                                j        |z   t          j        |            | d          z  z   }|r7fdt                    D             fdt                    D             f}n:d t          d	d	z             D             d
 t          d	d	z             D             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                            |d	          } ||||          \  }}t          |d           t#          t%          d	|z  t          j                            |d	          z
            |z  d	k                d S )Nr   r*  )ru   rR   r   r   c                 :    g | ]}t          |          D ]}|S r   r2  rR  yr   r   s      r3   rS  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  .    :::qeAqkk::::::r5   c                 :    g | ]}t          |          D ]}|S r   r  r  s      r3   rS  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  r  r5   c                 6    g | ]}t          |          D ]}|S r   r  rR  r  r   s      r3   rS  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  s+    <<<q588<<a<<<<r5   rO   c                 <    g | ]}t          |          D ]}|d z
  S r  r  r  s      r3   rS  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  s/    >>>U1XX>>1>>>>r5   )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>  apr  r  r  r  r  ulrh   aululiaulir   bxxvr  r  r   s                          @r3   !test_pptrs_pptri_pptrf_ppsv_ppconr  x  s    	JJJ8E??s"DGAt#QF%888A#QIU;;;A	
Q///%%));;A @::::E!HH:::::::E!HH:::< =<E!QqSMM<<<>>eAqsmm>>>@	
4B'74( ( ($D%u
 uQ%(((HBq
1E
"
"
"4
(CB!$////a5)))ICqq66$<DCAD1111eAr1E***GAtq	q!BAr----tAr1E***HBqB....INN1a  E%2U%888KE4qC%")..a.00011%7!;<<<<<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        z  |d
|            |||dd          }t          |d	         d
           |d
         }|d         }| t          v r%t          |t          j	        |          d
|           t          ||z  |
                                j        z  |d
|           t          |d         |	d
|           d S )Nr   r*  ru   r   )geestrexcc                     d S r  r   r   s    r3   r  z!test_gees_trexc.<locals>.<lambda>      D r5   Fr  r   r   rE  r?  rL  rU   rO   r  r   )r   r.   r   r   r4   r&   r   r-   r   r   r  rx   )
r2   r,  r   r`   r  r  r  rm  r'  d2s
             r3   test_gees_trexcr    s   JJJ8E??s"D
A#QF%888A"#4EBBBKD%T..!777FQq	Ar
A	
4B271::AD9999AEAFFHHJ&====U1aAFQq	Ar
A271::AD9999AEAFFHHJ&====AdGRad333333r5   zt, expect, ifst, ilst)rz  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  rz  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          || |           dS )	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   )rm  ifstilstexpectr,  r  r  s          r3   test_trexc_NAGr    so    < DWAG444EU1a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 rJt          |t          j        |          d|           t          |	t          j        |	          d|           t          |
|z  |                                j        z  |d|           t          |
|	z  |                                j        z  |d|            |||	|
|dd          }t          |d         d           |d         }|d         }	|d         }
|d         }| t          v rJt          |t          j        |          d|           t          |	t          j        |	          d|           t          |
|z  |                                j        z  |d|           t          |
|	z  |                                j        z  |d|           t          |d         |	d         z  |d|           t          |d         |	d         z  |d|           d S )Ndarwinopenblas
0.3.21.dev8gges[float32] broken for OpenBLAS on macOS, see gh-16949r   r*  ru   r   )ggestgexcc                     d S r  r   r  s    r3   r  z!test_gges_tgexc.<locals>.<lambda>  r  r5   Fr&  overwrite_br   r   rO   r  rE  r   r?  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   rm  ro  r'  d1r  s                 r3   test_gges_tgexcr    s    	  ##|##OPPPJJJ8E??s"D
A#QF%888A#QF%888A"#4EBBBKD%T..!QEuMMMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B271::AD9999271::AD9999AEAFFHHJ&====AEAFFHHJ&====U1aAq!$$FQq	Aq	Aq	Aq	A271::AD9999271::AD9999AEAFFHHJ&====AEAFFHHJ&====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        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        z  |d
|           t          |d         |
d
|           d S )Nr   r*  ru   r   )r  trsentrsen_lworkc                     d S r  r   r  s    r3   r  z!test_gees_trsen.<locals>.<lambda>8  r  r5   Fr  r   r   rE  r?  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  rm  r'  r  selectr   s                r3   test_gees_trsenr  -  s   JJJ8E??s"D
A#QF%888A/( 7  7  7D% T..!777FQq	Ar
A	
4B271::AD9999AEAFFHHJ&====Xa[[FF1I;22Evq!5111vq!5qBBBQq	Aq	A271::AD9999AEAFFHHJ&====AdGRad33333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        z  |           t          |d|z  |           t          |d|z  |           dS )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   )rm  ro  r  r  expect_s
expect_sepr,  atol2r  r	  r   r  r   seps                 r3   test_trsen_NAGr  [  s@   ` DE) 1 1 1E; ;22Ew.  vq!5111vq!5qBBBQq	Aq	Aw.  1IQi1IQiFAEAFFHHJ.T::::Ha!e%0000JCe44444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 rJt          |	t          j        |	          d|           t          |
t          j        |
          d|           t          ||	z  |                                j        z  |d|           t          ||
z  |                                j        z  |d|           t          j        |          }d|d<   t)          |||	|
          }|d         dz   |d         f} |||	|
|||          }t          |d         d           |d         }	|d         }
|d         }|d         }| t          v rJt          |	t          j        |	          d|           t          |
t          j        |
          d|           t          ||	z  |                                j        z  |d|           t          ||
z  |                                j        z  |d|           t          |	d         |
d         z  |d|           t          |	d         |
d         z  |d|           d S )Nr  r  r  r  r   r*  ru   r   )r  tgsentgsen_lworkc                     d S r  r   r  s    r3   r  z!test_gges_tgsen.<locals>.<lambda>  r  r5   Fr  r   r   rO   r  rE  r   r?  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   rm  ro  r'  r  r  r  r   s                    r3   test_gges_tgsenr    sM    	  ##|##OPPPJJJ8E??s"D
A#QF%888A#QF%888A/( 7  7  7D% T..!QEuMMMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B271::AD9999271::AD9999AEAFFHHJ&====AEAFFHHJ&====Xa[[FF1I;155E 1XaZq"EU61aAU333FQq	Aq	Ar
Ar
A271::AD9999271::AD9999AEAFFHHJ&====AEAFFHHJ&====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sparser[  scipy.__config__r$   ImportErrorr%   r7   r&   scipy.linalg.blasr'   r  r5  r   r  
complex128r-   r   r  r  r4   rK   rM   r   r   ru  rv  r  r  r  r   rB  r  r  r  r  r  r  r  r  r  r  r  r  r%  r8  rA  rG  rN  rS  rZ  rd  rf  r  r  r  r  skipifr  r  r2  r  r  r  r   r  r  r  r  r  r  r  r  r   r(  r0  r5  r7  r9  r=  rN  rQ  rc  rh  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r5   r3   <module>r)     s  
 


      / / / / / / / / / / / / / / / /  * * * * * *    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! - , , , , , , , , ,B B B B B B B B B B B B B B B B B B B B B B B B B B / . . . . . 2 2 2 2 2 2 2 2      '''''''   FFF0000000   GGG 0 0 0 0 0 0 , , , , , ,z2:&,.	~	%# #	/08@M./7	BL0 0 0O O O"]- ]- ]- ]- ]- ]- ]- ]-@
 
 
 
 
 
 
 
p9 p9 p9 p9 p9 p9 p9 p9f &))"B"B"BCC  DC *)- - - - - - - -*C C C C C C C C(; ; ; ; ; ; ; ;@I/ I/ I/ I/ I/ I/ I/ I/X) ) ).'4 '4 '4T'6 '6 '6T4 4 48AG AG AG AG AG AG AG AGHL L L L L L L L^.? .? .?bA A A61 1 1>1 1 1>F F FD&D &D &DR7! 7! 7!t7: 7: 7:t&8 &8 &8R3 3 36D D D@"D "D "DJD D D6 L  L  LFUK UK UK UK UK UK UK UKp%P %P %PP%P %P %PP*/ */ */Z< < < DK  M MK KM MK$: : :> &&!122+..q**q**q**!Q((!Q((b& b& b& )( )( +* +* +* /. 32b&J +..    /. F (!1+!1+!1+!1+!1+!1+' 1 1 1 9#28%?%?%?%?%?%?%@%@%@%=%=%=%?%?%?%?%?%?%A B B $28$D$D$DEE#28%G%G%G%F%F%F%E%E%E%H%H%H%G%G%G%G%G%G%I J J $28%G%G%G%H%H%H%F%F%F%G%G%G%I J JK LM M$, ,%M M$,  &))Y/ Y/ *)Y/x L#28$9$9$9::%RX&@&@&@AA%RX&;&;&;<<%RX&9&9&9::%RX&B&B&BCC%RXlll33%RXooo66%RXSz(,d|(+T{(+U|(+T{	') * * &RXAw()2w()2w(*Bx(*Aw	'0 1 12& &RX&G&G&GHH%RX '4 '4 '4 5 5 &RX&F&F&FGG%RX 'A 'A 'A B B%RX ': ': ': ; ;%RX&?&?&?@@%RXooo66%RX*'=(3\'B(4i'@(3['A(1:'>	'@ A A
 &RX'7(.'7(.'8(/'8(.'7	'9 : :%%)*  * V   W*  * V ( &))"B"B"BCC  DC *) [;6??A A,& ,&A A,&^ [;6??A A0 0A A0 [;6??A AM MA AM& A""(#5#5#566""(???33""(#4#4#455""(#8#8#899""(QGaVaVb"X%&G$- . .""(S!Hq"g2wQ%&G$- . . #"(#3#3#344""(#>#>#>??""(===11""(#5#5#566""(VW$57G%+V$4vv6F$H I I""(T5MD$<$%)4L$2 3 3	E  &1 1' &1.  > )V[;%>??A AeeAhh//& & 0/A A&< )V[;%>??A AeeAhh//	 	 0/A A	 )V[;%>??A AeeAhh//	N 	N 0/A A	N )V[;%>??A AeeAhh//	 	 0/A A	 :#28$;$;$;<<#28$5$5$566#28$D$D$DEE#28%F%F%F%G%G%G%G%G%G%F%F%F%H I I	J 	 	= =	 	= &))(@(@(@AA=$ =$ BA *)=$@. . . #>#>#>??t--
. 
. .- @?
. D%=11t--. . .- 21. 6**00011	' 	' 21 +*	' 6**+C +C +*+C\ &))t}55#s,,70 70 -, 65 *)70t &))1v..#s,,-B -B -, /. *)-B` &(++t}55#s,,-< -< -, 65 ,+-<` #28$9$9$9::#28$?$?$?@@#28$9$9$9::#28c3Z#tsDk&(%[3+%? @ @#28b!Wq"g2wR&(!W%. / /0 $28$E$E$EFF#28 %> %> %> ? ?#28$D$D$DEE#28h
%;&1;%?&2H%=&1;%?&/%<	%> ? ?
 $28ff%57G&,g%6&8I&,f%5%7 8 89:; ;() )); ;() )33v{1<8= ,> ,> ? ?,M MN  ? ?@BC C
12 12C C? ?12h )33v{1<8= ,> ,> ? ?,M MN  ? ?@BC C
K KC C? ?K( )33v{1<8= ,> ,> ? ?,M MN  ? ?@BC C
" "C C? ?"J #28$6$6$677#28OOO44#28aWq!fq!fr2h&'W%. / /#28c1X2wB&(!Wq"g%7 8 8	9 $28$4$4$455#28$?$?$?@@#28h	%:&.%9&.%9&.%9%; < < $28fg%6&,f%5&,f%5&,f%5%7 8 8	9:; ;"
* 
*#; ;"
* 5$-00&))+= += *) 10+=\ &))!4 !4 *)!4H bh))))))***)))+ , , bh2221111111113 4 4  bhJJJKKKHHHHHHJ K K bh 5 5 55 5 55 5 56 6 67 8 8  0* *1 0*  &))4> 4> *)4>n &))*4 *4 *)*4Z 0bh1111112221113 4 4 bh0003333331113 4 4 bh2221113332224 5 5 bh||| bh 6 6 67 7 75 5 55 5 56 7 7 bh 5 5 56 6 65 5 56 6 67 8 8 bh 6 6 65 5 55 5 55 5 56 7 7 bh|||3') )T5 5U) )T5B &))=> => *)=> => =>s$   6A= =BBB BB