
     h|                    "   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
lm0Z1 n# e2$ r dZ1Y nw xY wd dl(m3Z3 d dl4m5Z5 ej6        ej7        gZ8ej9        ej:        gZ;e8e;z   Z<d Z=d Z> G d d          Z? G d d          Z@ G d d          ZAe
jB        C                    de<          e
jB        C                    dg d          d                         ZD G d d          ZE G d d          ZF G d d          ZG G d d           ZHd! ZId" ZJd# ZKd$ ZL G d% d&          ZM G d' d(          ZNd) ZOd* ZPd+ ZQd, ZRd- ZSd. ZTd/ ZUd0 ZVd1 ZWd2 ZXd3 ZYd4 ZZd5 Z[d6 Z\ G d7 d8          Z]d9 Z^d: Z_d; Z`d< Zae
jB        b                    d=d>?          d@             ZcdA Zde
jB        C                    dBdCdDg          e
jB        C                    de8          e
jB        C                    dE eedF                    e
jB        C                    dG eedH                    e
jB        C                    dI eedH                    e
jB        C                    dJd dKg          e
jB        C                    dLd dKg          d)dM                                                                                    Zfe
jB        C                    de8          dN             Zge
jB        C                    dOdEdPidGdPidIdPidJdPidQdPidLdPif          dR             Zhe
jB        C                    dS eji        g dTg dUg dVg dWg dXg dYg           eji        g dZ           eji        g d[g d\g d]g d^g d_g d`g           eji        g dag dbg dcg ddg          fg          de             Zje
jB        C                    de<          df             Zke
jB        C                    dg eji        g dh           eji        g di           eji        g dj           eji        g dk           eji        g dl           eji        g dm           eji        g dn           eji        dodpgdqdrgdsdtgdudvgdodwgg           eji        dxdygdzdxgd{d|gdxd}gd|dKgg          f	 eji        g d~           eji        g d           eji        g d           eji        g d           eji        g d           eji        g d           eji        g dn           eji        ddgddgddgddgddgg           eji        ddgddgddgddgddgg          f	g          d             Zle
jB        C                    de<          e
jB        C                    dg d          d                         Zme
jB        C                    d ene8e8z   e<                    d             Zoe
jB        C                    d ene8e8z   e<                    d             Zpe
jB        C                    d ene8e8z   e<                    d             Zqe
jB        C                    d eji        g d           eji        g d           eji        g d           eji        g d           eji        dFdgdPdHgddPgddgdzdgg           eji        ddgddgdKd|gddFgd{dgg          f eji        g d           eji        g d           eji        g d           eji        g d           eji        ddgddgddgddgg           eji        ddgddgddgddgg          fg          d             Zrd Zse
jB        C                    d ene<e8e8z                       e
jB        C                    d eed{                    d                         Zte
jB        C                    d ene<e8e8z                       e
jB        C                    d eed{                    d                         Zue
jB        C                    d ene<e8e8z                       e
jB        C                    d eed{                    d                         Zve
jB        C                    d ene<e8e8z                       e
jB        C                    d eed{                    d                         Zwe
jB        C                    dd eji        g dâ           eji        g dĢ           eji        g dŢ           eji        g dƢg dǢg dȢg dɢg          fg          dʄ             Zxe
jB        C                    de<          e
jB        C                    dg d̢          d̈́                         Zyd΄ Zze
jB        C                    dg dТ          e
jB        C                    dddg          dԄ                         Z{e
jB        C                    dddg          e
jB        C                    dddg          dׄ                         Z|e
jB        C                    de<          e
jB        C                    dg dڢ          dۄ                         Z}e
jB        C                    de<          d܄             Z~e
jB        C                    de<          e
jB        C                    ddd=g          e
jB        C                    dddg          d                                     Ze
jB        C                    de<          e
jB        C                    dd dKg          e
jB        C                    dddg          d                                     Ze
jB        C                    de<dz            e
jB        C                    ddd=g          e
jB        C                    dddg          d                                     Ze
jB        C                    d eji        g dh           eji        g di           eji        g dj           eji        dodpgdqdrgdsdtgdudvgdodwgg           eji        dxdygdzdxgd{d|gdxd}gd|dKgg          f eji        g d~           eji        g d           eji        g d           eji        ddgddgddgddgddgg           eji        ddgddgddgddgddgg          fg          d             Ze
jB        C                    d ene<e8e8z                       e
jB        C                    ddd fdd fg          d                         Ze
jB        C                    d ene<e8e8z                       e
jB        C                    ddd fdd fg          d                         Ze
jB        C                    d ene<e8e8z                       e
jB        C                    ddd fdd fg          d                         Ze
jB        C                    d eji        g d           eji        g d           eji        dFdgdPdHgddPgddgdzdgg           eji        ddgddgdKd|gddFgd{dgg          f eji        g d           eji        g d           eji        ddgddgddgddgg           eji        ddgddgddgddgg          fg          d             Ze
jB        C                    ddd=g          e
jB        C                    de<          d                         Ze
jB        C                    de<          d             Ze
jB        C                    d eji        g dg dg dg dg           eji        g dg dg dg dg          ddKf eji        g dg dg d g dg           eji        g dg dg dg dg          dKdHfg          d             Ze
jB        C                    de<          d             Ze
jB        C                    de<          d             Ze
jB        C                    d	 eji        g d
g dg dg dg           eji        g dg dg dg dg           eji        g dg dg dg dg           eji        g d          ddf eji        g dg dg dg dg           eji        g dg dg dg d g           eji        g d!g d"g d#g d$g           eji        g d          d%d&fg          d'             Ze
jB        C                    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)_clapack)get_lapack_funcs)get_blas_funcsc                     |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     Z/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr0   )   s\    	&).%(-./5ve}}	=9>5!((///    c                     t           j        t          j        d           t	          t           j                                                  } t	          g 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)absolute_importclapackdivisionfind_best_lapack_typeflapackprint_function	HAS_ILP64_z2Name(s) missing from lapack.__doc__ or ignore_list)
r   __doc__pytestskipsetsplitlistdir
startswithappend)namesignore_listmissingnames       r/   test_lapack_documentedrH   1   s    ~,---$$&&''E     K ffGF ! !$$ 	![)@)@E!!NN4   b===N=====r1   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)         )         )      	   )rL   r   r   ga2U0*3?)rO   r   r   gMb`?)rR   rL   r   r   )r   rL   r   r   sdzcgebalr   rL   )permutescale)	getattrr7   r   reprr   r   lenr*   r   )
selfaa1pfbalohipivscaleinfos
             r/   
test_gebalzTestFlapackSimple.test_gebalD   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))))	* 	*r1   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)rY   r7   r   rZ   )r\   r]   r_   r`   httaure   s          r/   
test_gehrdzTestFlapackSimple.test_gehrdY   s    __^^  	* 	*A7D11AyAaDDMBTHd4jj))))	* 	*r1   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 )NrL   rM   r   rO   rP   rQ   rS   rT   
         TfdFD)trsylr(   C)tranatranbdecimal)isgn)	r*   arrayr,   r%   isupperr   dot	conjugateru   )r\   r]   bctransr.   r^   b1c1rw   xrX   re   s                r/   
test_trsylzTestFlapackSimple.test_trsyld   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!= = = = =#	= 	=r1   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 )Nrh   ri   rk   rv   Mm1OoIiFfEer   r   r(   )langeFfEeFfrN   rR   Mm1Oor   axisIirL   )r*   r   r,   r   r%   sqrtsumsquareabsr   maxr   )	r\   r]   r.   norm_strr^   r   valuer|   refs	            r/   
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-	- 	-r1   N)__name__
__module____qualname__rf   rp   r   r    r1   r/   rJ   rJ   B   sP        * * **	* 	* 	*= = =8- - - - -r1   rJ   c                       e Zd Zd Zd ZdS )
TestLapackc                 4    t          t          d          rd S d S Nempty_module)hasattrr7   r\   s    r/   test_flapackzTestLapack.test_flapack   #    7N++ 	D	 	r1   c                 4    t          t          d          rd S d S r   )r   r4   r   s    r/   test_clapackzTestLapack.test_clapack   r   r1   N)r   r   r   r   r   r   r1   r/   r   r      s2          
    r1   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  rr      rL   )gels
gels_lworkr.   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrM   r}   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r   	enumerateDTYPESr   r,   r%   r!   r   REAL_DTYPESr*   r   r-   r[   r   finfoepsr	   r)   )r\   indr.   mnnrhsr^   r   glsglslwr   r:   re   r   r   r   lqrr   	lqr_truths                      r/   	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..../	/ 	/r1   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_lworkrM   rL   r}   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r*   r   r%   r-   r[   intrealr   r   r   r)   )r\   r.   r^   r   r   r   r   r   r   workiworkre   r   
iwork_sizer   srankrwork
rwork_sizes                      r/   
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r1   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_lworkrM   rL   r}   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r\   r.   r^   r   r   r   r   r   r   r   re   r   vr   r   r   s                   r/   
test_gelssz"TestLeastSquaresSolvers.test_gelss1  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 	9r1   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   rM   rL   rr   Fr}   r   r   r   r   r   r   r   r   r   r   r   r   )r   r*   r   r%   r-   r[   r   r   r   r   r   int32r   r)   )r\   r.   r^   r   r   gelsy_lworkr   r   r   r   re   r   jptvr   r   jr   s                    r/   
test_gelsyz"TestLeastSquaresSolvers.test_gelsyj  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 	9r1   N)r   r   r   r   r   r   r   r   r1   r/   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9r1   r   r.   r-   )rN   rO   )rP   rM      r   c                 r    t          d|           }|\  }} |||          \  }}t          |d           d S )Ngeqrf_lworkr   r   r   r   r%   r   )r.   r-   r   r   r   r   re   s          r/   test_geqrf_lworkr    sM     #M%@@@KDAq+Q'''KE4qr1   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,  rM   r   gerqfrM   r   orgrqrL   ungrq)r   r*   r   r%   assert_raises	Exceptionr   r)   )
r\   r.   r]   r  rqro   r   re   r  r	  s
             r/   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!,,,,	- 	-r1   N)r   r   r   r  r   r1   r/   r  r    s#        - - - - -r1   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*   )rN   rN   )size)potrfpotri)cleanr   )r*   r+   r   normalr   ru   r%   r   r   r   r   )
r\   lowerr  r   r]   dpotrfdpotrir   re   dpts
             r/   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r1   N)r   r   r   r  r   r1   r/   r  r    s(        C C C C Cr1   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}   rL   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rN   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%   rangerC   r   anyisnanr   r   float64r   )r\   sigmasm_vecMSMit_lensgmmvcr&  rootsiress               r/   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	; 	; 	; 	; 	; 	;r1   N)r   r   r   r=  r   r1   r/   r  r    s#        ; ; ; ; ;r1   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 )	TestTbtrsr.   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=
ף0rA  g(\+gףp=
0g333333*@g(\gHzG,gQ#rO   rL   r}   rN   rM   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\   r.   rF  r   x_outrC  r   re   s           r/   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4r1   zdtype,transc                 >    g | ]}d D ]}|dk    r	|t           v ||fS ))Nru   rx   rx   )r   ).0r.   r   s      r/   
<listcomp>zTestTbtrs.<listcomp>%  sP     N N N"'N N6;&+sllu7K7K  %en7K7K7K7Kr1   rG  UrD  r,  rN  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  )rO   rN   rM   rC  r   rQ  rL   r}   c                 4    g | ]}t          |          z
  S r   )r   )rO  r   r   s     r/   rP  z2TestTbtrs.test_random_matrices.<locals>.<listcomp>9  s#    888aq3q66z888r1   c                 2    g | ]}t          |f          S r   )r0   )rO  widthr.   s     r/   rP  z2TestTbtrs.test_random_matrices.<locals>.<listcomp>:  s5     + + + -eXu== + + +r1   dia)formatr   )rF  r   rG  r   r,  rN  g-C6
?r   ru   rx   zInvalid trans argument)r   r%   r/  r*   r   spsdiagsr   r   diagonalr   minr0   r   r   ru   HrJ  )r\   r.   r   rG  r,  r   kdrC  is_upperkuklband_offsetsband_widthsbandsr]   rF  rowkr   r   re   r   s    `                   @r/   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6r1   zuplo,trans,diag)rQ  rN  Invalid)rQ  rg  rN  )rg  rN  rN  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 exceptionsrC  r   rO   rM   N)r%   r*   r2  r   r
  r  )r\   rG  r   r,  rC  rF  r   s          r/   &test_invalid_argument_raises_exceptionz0TestTbtrs.test_invalid_argument_raises_exceptionW  sR     !
;;;!QZZAJJiAtUDAAAAAr1   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   rO   rC  r   )r}   rN   rQ  rE  N)r*   r   floatr%   r   )r\   rF  r   rC  r:   re   s         r/   test_zero_element_in_diagonalz'TestTbtrs.test_zero_element_in_diagonald  sw     WV5)))GAU### 6665	%2---4T1r1   zldab,n,ldb,nrhs)rP   rP   r   rP   )rP   rP   rN   rP   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   rC  Nr*   r   rk  r%   r
  r  )r\   ldabr   ldbr   rF  r   rC  s           r/   test_invalid_matrix_shapesz$TestTbtrs.test_invalid_matrix_shapest  s`     WdAYe,,,GS$Ku--- 666iA.....r1   N)r   r   r   r<   markparametrizer   rL  rf  ri  rl  rq  r   r1   r/   r?  r?    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  / /	 / / /r1   r?  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 )Nrv   lartgr   rN   rO   r(   333333?r   y       皙?)	r%   r*   r   iscomplexobjr   r   typecomplexrk  )r.   ru  r`   gcssnrs          r/   
test_lartgr    s	    ) ) 666HQHQ?1 	GAE!QKK	BG$$$3?1 	)B	***DGGw&'''DHH%&&&&B((((') )r1   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 )Nrv   rv  rw  rO   rN   rr   rL   fdrotr   y             r(   y              @)rP   rP   rP   rP   )r   r   r   r   r)  rM   )r   )rP   rP   rN   rN   r   )offxoffy)rN   rN   rP   rP   )incxr  r   )rP   rN   rP   rN   )r  incyr   )r  r  r  r  r   )rN   rN   rP   rN   r  )r  r  r   )overwrite_xoverwrite_y)r*   fullr   	precisionr&   r%   r   r   )
r.   r   r   ur   r)  r  r`   r]   r   s
             r/   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 $4r1   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   )rO   rO   r(   rv   larfglarfr   FDr   rL   rL   r   rM   r   r   RsiderH  r  )r*   r+   r   ru   r   conjr%   copyr-   r   r   r   r   )a0a0jr.   r  r  r]   alphar   ro   expectedr   s              r/   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 6r1   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r.   ilp64iA%  T)r"  r!  i`DiD)r%   r*   float32r!   )sgesdd_lworkr   r   s      r/    test_sgesdd_lwork_bug_workaroundr    sq     $M*57 7 7LA<A&*$@ @ @E  I)!3!3!33!3!3r1   c                       e Zd Zej                            de          d             Zej                            de          ej                            dd          d                         ZdS )	TestSytrdr.   c                     t          j        d|          }t          d|f          }t          t          ||           d S )Nr   r   sytrdr*   r   r%   r
  rJ  )r\   r.   Ar  s       r/   test_sytrd_with_zero_dim_arrayz(TestSytrd.test_sytrd_with_zero_dim_array  sA     HV5))) 1$//j%+++++r1   r   rL   rN   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_lworkrL   rM   r   r  r   rP   r   r(          r   r}   )r*   r   r%   arangetriu_indices_fromr   r   r   r   r,  r   r-   r   r/  outerr   r   ru   )r\   r.   r   r  r  r  r   re   datarl   ero   ru   re  k2Qr;  r   r\  i_lowerQTAQs                        r/   
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Fr1   N)	r   r   r   r<   rr  rs  r   r  r  r   r1   r/   r  r    s        [Wk22, , 32, [Wk22[S&))7G 7G *) 327G 7G 7Gr1   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       r/   test_hetrd_with_zero_dim_arrayz(TestHetrd.test_hetrd_with_zero_dim_arrayL  sA     HV=111 1$//j%+++++r1   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_lworkrL   rM   r(   )r   rL   r  r   r  rP   r   r(  r  r   r}   rr   )r*   r   r%   r  r  fill_diagonalr   r,  r   r!   r   r   r   r   r-   r   r   r/  r  r  r   r   ru   )r\   r   
real_dtyper  r  r  r  r   r:   re   r   r  rl   r  ro   ru   re  r  r  r;  r   r\  r  QHAQs                           r/   
test_hetrdzTestHetrd.test_hetrdS  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	 	 	 	 	 	r1   N)r   r   r   r<   rr  rs  r)   r  zipr   r  r   r1   r/   r  r  K  s        [_n==, , >=, [7 Sn==? ?[S&))A A *)? ?A A Ar1   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   rQ   rO   rM   )r   r   r_   )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   r.   func
func_lworkr   r]   r   rl   r   r:   resultr  s               r/   
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,? ,?r1   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   rr   rO   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr(   rM   rL   )r   r  )r]   ipivanormr  r_   )r   r   r   r)   r%   r   r,   r  ru   r*   r   r   r!   r   r   linalgcond)r   r.   r   r  funconfunctrfr  r  r   ldur  r:   rconds                r/   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r1   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   rr   )r  sygstsyevdsygvdr   rM   r   -C6?r   )r   r   r   r%   r   r,   ru   r*   r   r   r   )r   r.   r   r  r  r  r  r  Beig_gvdr:   re   r   r]   eigs                  r/   
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 1r1   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   rr   )r  hegstheevdhegvdr   r(   rM   r   r  r   )r   r   r)   r%   r   r,   r  ru   r*   r   r   r   )r   r.   r   r  r  r  r  r  r  r  r:   re   r   r]   r  s                  r/   
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 1r1   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   )rr      tzrzftzrzf_lworkr   rM   r(   r   r   Nc           
          g | ]P}|         |gd d f         j                             |gd d f                                                   z  z
  QS Nru   r   r  rO  r   IdVro   s     r/   rP  ztest_tzrzf.<locals>.<listcomp>@  s[    MMMqr#a&A36A36)9)9::::MMMr1   rr   r   r  r(  )r   r   r   r%   r!   r   r   r,   r
  r  ru   r   r*   r*  r   r   r/  r   r   r   r   spacingr   )r   r   r   r.   r  tzrzf_lwr   r  rzre   r  r   Zr  r  ro   s                @@@r/   
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r1   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   rL   r(   rx   ru   )trttftfttrtfsmr   rM   r}   r   rO   rQ   r{   r   r   rQ  )r   r,  rN   r  )r   r,  r  N)r   r   r   r   r   r   r,   r%   r   r   r  ru   r*   r  )r   r.   r   r  r   r  r  r  Afpr:   r  solnB2s                r/   	test_tfsmr  F  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r1   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   )rr   r  r  r  r   rM   )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     r/   rP  z$test_ormrz_unmrz.<locals>.<listcomp>  s[    NNNqr#a&A36A36)9)9::::NNNr1   ru   rx   rr   r   r   r  r(  r   r  )r  r   )r  r   r   )r   r   r   r%   r!   r   r   r,   r*   r*  r   r/  r   r   r  r   r   r   r   r  ru   )qmqncnr   r.   r  r  lwork_rzr  rx   orun_mrzorun_mrz_lw	lwork_mrzr  re   r   r  r   tolcqr  r  ro   s                       @@@r/   test_ormrz_unmrzr"  o  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	! 	! 	! 	! 	![.! .!r1   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   rL   r(   rx   ru   )r  r  r   r   rD  rG  rQ  )transrrG  rM   Nr}   F)order)r   r   r   r   r,   r%   r   r   r   r  ru   r   r   reshape)r   r.   r   A_fullr&  r  r  A_tf_Ure   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                     r/   test_tfttr_trttfr5    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:r1   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   rL   r(   )trttptpttrr   r   rD  r%  rM   N)r   r   r   r   r,   r%   r   r   r   r   ru   r   r   r   )r   r.   r   r*  r7  r8  A_tp_Ure   A_tp_LindsA_tp_U_mA_tp_L_mr1  r2  s                 r/   test_tpttr_trttpr>    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  8r1   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   rL   r(   )pftrfr  r  r   r   N)r   r   r   r   r,   r  ru   r   r%   r   r   r   )r   r.   r   r  r@  r  r  r  re   	Achol_rfpA_chol_rr:   Achols                r/   
test_pftrfrD    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 3r1   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   rL   r(   )pftrir@  r  r  r   r   rM   rO   rQ   r{   N)r   r   r   r   r,   r  ru   r   r%   r   r   r   r   )r   r.   r   r  rF  r@  r  r  r  re   
A_chol_rfp	A_inv_rfpA_inv_rr:   Ainvs                  r/   
test_pftrirK  '  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r1   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   rL   r(   rN   r   rM   )pftrsr@  r  r  r   rO   rQ   r{   N)r   r   r   r   r,   r  ru   r   r   r%   r   r
  r  r   r   )r   r.   r   r  r  Bf1Bf2rM  r@  r  r  r  re   rG  r  s                  r/   
test_pftrsrP  G  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r1   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   rL   r(   rM   r   hr  r  z{}frkr   r}   r   rO   rQ   r{   N)r   r   r   r   r,   r  ru   r   r%   rW  r*   r+   r   r   r   )r   r.   r   r  prefixr  r  shfrkr  r:   rx   Afp_outA_outs                r/   test_sfrk_hfrkrW  l  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r1   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   rr   rL   i   r(   r'  r   )syconvr  r  r   r  F)r  	hermitianr  r}   Nr  r(  r   )r   r   r   r   r,   r  ru   r   r*   r  r   r%   r!   r   r   r   r   )r   r.   r   r  r   rZ  trf	trf_lworklwrD  Dpermr  r  re   r]   r  rQ  s                     r/   test_syconvra    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r1   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   rL   r(   r'  r   )geqrtgemqrtr   r   r}   r  r(  rx   ru   rD  r  rN  r  r   rD  rD  rN  r  r  r  )r   r   r   r   r,   r*   r  r   r%   r   r   ru   r  r   r   r   r
  r  )r\   r   r.   r   r  r   re  rf  r]   tre   r   r  r  rx   	transposer  r   r   qqC	c_defaults                         r/   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r1   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   rL   r(   r'  r   )tpqrttpmqrtr   r   rM   r}   r  r(  rx   ru   rg  rN  rh  rD  r   ri  r  r  r  )r   r   r   r   r,   r*   r  r   r%   r   r   r   r.  r   ru   r  r   r   r
  r  ) r\   r   r.   r   r  r  r   rq  rr  lr]   r   rj  re   B_pentb_pentr   r  r  rx   r_  rk  r  r   r   rl   rl  cdCDqCDrn  	d_defaults                                    r/   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r1   N)r   r   r   r;   ro  rz  r   r1   r/   rc  rc    sJ         
<A <A <A|QK QK QK QK QKr1   rc  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   rr   rM   pstrfr   rL   r(   r    r   rM   rI  r  r   r   r   r%   r   r,   r  ru   r   r   r*   r   r  r   r2  r   r   )r   r.   r   r~  r|  r  r   pivr_cre   rQ  single_atoldouble_atolr)  rD  s                  r/   
test_pstrfr  B     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r1   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   rr   rM   pstf2r   rL   r(   r  r}  r~  rI  r  r  )r   r.   r   r~  r  r  r   r  r  re   rQ  r  r  r)  rD  s                  r/   
test_pstf2r  j  r  r1   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ſFxrM   )g   ЈBg   tBgffffff @g   ٓ )      @gg#fDgffffff)gHzG?gQg'Vgp=
ף)g(\r  gS7нrw  )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  rI  )r*   r   r   r   r,   r%   r   )desired_realdesired_cplxr   r.   r  r  r~  r   rowcndcolcndamaxre   s               r/   
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/ /r1   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  rB  rr   r   rM   r   r(   c                      g | ]
}d |z  z  S )r   r   )rO  r   r  s     r/   rP  ztest_syequb.<locals>.<listcomp>  s!    :::eb!em:::r1   rP   syequb)r*   r   r   r   r   r/  rot90r,  r%   r   log2r,   r   )desired_log2sr   r.   r  rl   r  r   scondr  re   r  s             @r/   test_syequbr    s   H???@@M'' 	< 	<
UF2U###C!GGbb--H::::U2q\\:::%HHH	RXbgajj!!!!(%888%vayy5$RWQZZ&&s++];;;;	< 	<r1   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 )NrM   rP   i  rT   rL   )re  r(   r   r  r  r  rQ                   i   rP   rP   y              0@)rP   r   r  )r  r}   r}   r   r   r  r   r}   r}   r  r  )r*   r,  r   r   zheequbr   r   r  r   r  cheequbr,   	complex64)r  r   r  r  re   s        r/   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Jr1   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  rr   r(   rM   getc2r   gesc2r   r#  )overwrite_rhsrO   r{   )	r*   r+   r   r   r   r   r,   r%   r   )r   r  r  r   r.   r  r   r  r  lur  jpivre   r   rX   s                  r/   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: : : : :+: :r1   r  )rQ   rP   r  jobarQ   joburO   jobvjobrrL   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   rM   rL   r  rB  r   )r  r  r  r  jobtr  NF)r"  r  )r   r*   r   r   r0   r%   rx  r
  r  r   r   r   r,  r  ru   identityr  matrix_rankcount_nonzero)r  r.   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   re   sigmas                               r/   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	& 	&r1   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   rL   rL   rL   r  r'  rr   r  N)r%   r   r-   r*   r   r   sinr  r)  r,   asfortranarrayru   r  r   )r.   r  r  r  r   r   r   re   r  Acr:   s              r/   test_gejsv_edge_argumentsr  m  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r1   kwargsrT   r  c                     t          j        dt                    }t          dt                    }t	          t
          ||fi |  dS )z-Test invalid job arguments raise an Exception)rM   rM   r   r  Nrn  )r  r  r  s      r/    test_gejsv_invalid_job_argumentsr    sJ     	e$$$AWE222E)UA0000000r1   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%   r.   r   )r  
sva_expectu_expectv_expectr)  r  r  r  r   r   r   re   s               r/   test_gejsv_NAGr    s|    0 DWAG444E#(588 CAtUDJ$////Had++++Had++++++r1   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  rr   r'  rL   r   r}   gttrfgttrsr   rM   r  ru   rx   r  z3?gttrf: _d[info-1] is {}, not the illegal value :0.)r   r*   r   r   r0   r  r,  r+   r   r%   r	   r   r   r   r   ru   r  r
  rJ  r  testingr   rW  )!r.   r   r)  durl   dldiag_cpyr  r   r   r  r  _dl_d_dudu2r  re   rQ  rD  r;  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos!                                    r/   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  rR   gC>)r}   r  rS   )rM   rN   rO   rP   rP   g@gffffff@      g%@g@g	rv  gffffff&g3@r  rP   rR   rN   rB  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  rl   r  du_expd_expdu2_expipiv_expr   r   r  r  r  r  r  r  r  re   r  s                     r/   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r1   ))rN   rR   )rR   rN   r   c                 r    t          d|           }|\  }} |||          \  }}t          |d           d S )Ngeqrfp_lworkr   r   r   r  )r.   r-   r  r   r   r   re   s          r/   test_geqrfp_lworkr  ^  sM     $^EBBBLDAq,a(((KE4qr1   zddtype,dtypec                    t          d           dt          j        |          j        z  }d}t	          |f|           dz   }t	          |dz
  f|          }t          j        |          t          j        |d          z   t          j        t          j        |          d          z   }|                                |                                g}t          d|          } |||          \  }	}
}t          ||d	                    t          ||d                    t          |d	d
                    |                     t          j        |
d          t          j        t          j        |                    z   }t          j        |	          }t          |||z  |                                j        z  |           t	          |f|          }||z  }t          d|          } ||	|
                                |          \  }}t          |d	d                    |                     t          |||           d S )Nr  r'  rr   rO   rL   r}   pttrfr   r   zpttrf: info = {}, should be 0)err_msgr  pttrszpttrs: info = {}, should be 0)r   r*   r   r   r0   r,  r  r  r%   r	   r   rW  r   r   r   ru   )ddtyper.   r)  r   rl   r  r  r  r  r  _ere   rD  r_  r   r   r  _xs                     r/   test_pttrf_pttrsr  g  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"A"H"H"N"NOOOO 	B"'"'!**---A
AAqs1;;==?*6666 	$QD%00A	!A WE222EuRA&&HBq"A"H"H"N"NOOOO Ar%%%%%%r1   c                     d}t          d|          }t          |f|           dz   }t          |dz
  f|          }t          t          ||d d         |           t          t          |||d d                    d S )Nrr   r  r   rM   rL   r}   )r%   r0   r
  rJ  )r  r.   r   r  rl   r  s         r/   *test_pttrf_pttrs_errors_incompatible_shaper    s     	AWE222E#QD&11A5A#QqSFE22A*eQssVQ///*eQ#2#/////r1   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 )	Nrr   r  r   rM   rL   r   z3?pttrf: _d[info-1] is {}, not the illegal value :0.z2?pttrf should fail with non-spd matrix, but didn't)r%   r0   r   rW  r   )	r  r.   r   r  rl   r  r  r	  re   s	            r/   '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Lr1   z%d, e, d_expect, e_expect, b, x_expect)rO   rr      r   rP   )r  r  r  rS   )rO   rT   r      rL   )r  gK=Urv  r  rr   rM      A      g      @r}   r  )r  )   .      )y      0@      0@y      2@      "      ?      )r  rT   rL   rO   )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  rL   r  )r%   r   r  r.   r)   )rl   r  d_expecte_expectr   x_expectr)  r  r  r	  re   r  r
  s                r/   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 ! r1   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 )NrL   rO   rM   r}   )r0   r*   r,  r   r  ru   r    )r.   realtyper   	compute_zA_eigvrrl   r  trir  zs              r/   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<r1   zdtype,realtyper   c                    t          d           dt          j        |           j        z  }t	          d|           }d}t          | |||          \  }}}}	 ||||	|          \  }
}}}t          |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   rr   rl   r  r$  r   r   zinfo = {}, should be 0.r  N)r   r*   r   r   r%   r%  r   rW  r   sortr    r  ru   r  r,  )r.   r  r   r)  r'  r   rl   r  r  r$  d_pteqre_pteqrz_pteqrre   s                 r/   
test_pteqrr-  	  sb    	HHH##Dge444E
A"5(AyAAJAq!Q&+ea1Y&O&O&O#GWgtq3::4@@AAA BGDGGAJ'')9)9EEEE &"''"2"2"44bk!nn!	# 	# 	# 	# 	"''"2"22RWW5E5E5GG	& 	& 	& 	& 	& 	&& &r1   c                     t          d           t          d|           }d}t          | |||          \  }}}} ||dz
  |||          \  }	}
}}|dk    sJ d S )Nr  r'  r   rr   rO   r$  r   r   r   r%   r%  r.   r  r   r'  r   rl   r  r  r$  r*  r+  r,  re   s                r/   test_pteqr_error_non_spdr2  #	  sy     	HHHge444E
A"5(AyAAJAq!Q ',eAE1Y&O&O&O#GWgt!888888r1   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   rr   r}   r/  )r   r%   r%  r
  rJ  )	r.   r  r   r'  r   rl   r  r  r$  s	            r/   "test_pteqr_raise_error_wrong_shaper4  2	  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r1   c                     t          d           t          d|           }d}t          | |||          \  }}}}d|d<   d|d<    |||||          \  }	}
}}|dk    sJ d S )Nr  r'  r   rr   r   r/  r0  r1  s                r/   test_pteqr_error_singularr6  A	  s     	HHHge444E
A"5(AyAAJAq!QAaDAaD&+eAqA&K&K&K#GWgt!888888r1   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   rL   r}   r(  r  N)r%   r.   r*   r,  r   r   )r   rl   r  r  z_expectr)  r'  r$  r  r	  _zre   s               r/   test_pteqr_NAG_f08jgfr:  P	  s      Dgag666E


RWQ]]"RWQ^^3AuqAi@@@BBBt,,,,BF2JJx 0 0t<<<<<<r1   matrix_size)r   )rR   rQ   rQ   rQ   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)ro   r   r   r   rI  r}   )r*   r+   r   r   r   r%   r0   r   r   r   r   r-   r  ru   r   allr,  r[   r   r0  )r.   r;  r   r)  r?  gqrr   r   r  qr_Aro   re   r~  qqrrl  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                        r/   test_geqrfprK  i	  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::>""$ $ $ $ $r1   c                      t          j        g           } t          d| j                  }t	          t
          ||            d S )Nr?  r   )r*   r   r%   r.   r
  r  )A_emptyr?  s     r/   #test_geqrfp_errors_with_empty_arrayrN  	  s;    hrllGhgm<<<F)VW-----r1   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  rU  _lworkr   r   rL   r  ({}_lwork raised unexpected exception: {}r   r)   r%   r!   r  r<   failrW  rT  rO  r   r.   sc_dlwdz_dlwr  s          r/   test_standard_eigh_lworksr`  	  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)
NrX  rU  rY  r   r   rL   rD  r%  rZ  r[  r]  s          r/   test_generalized_eigh_lworksre  	  s     	A$;;KKNEc&j1qBBBFc&j1qBBBF.vqs++++vqs++++++ . . . vc&j!,,	. 	. 	. 	. 	. 	. 	. 	. 	..ra  dtype_r   )rL   rr   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   )rO  r   s     r/   rP  z*test_orcsd_uncsd_lwork.<locals>.<listcomp>	  s    %%%!A%%%r1   )r   r   r   r%   r!   rA  )rf  r   r_   rl  rT  dlwr^  lwvals           r/   test_orcsd_uncsd_lworkrn  	  s     	JJJ1A	AAK''$$TC

C	#V	,	,	,B2q!Q''ED[[EEuhE%%u%%%&&&&&&&r1   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)r>  P      rh  ri  csdrj  r   r   lrworkr   r   r  g     @rI  )r   r"   rvsr#   r%   r!   dictr  r   r[  r*   r   r/  cosr  r   r   r   )rf  r   r_   rl  rT  Xdrvrl  rm  lwvalscs11cs12cs21cs22thetau1u2v1tv2tre   rQ  VHr~  n11n12n21n22Soner;  Xcs                                  r/   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Br1   
trans_boolFfactr'  rN  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                    |                     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   rr   rL   r}   rM   ru   rx   rN  r'  NrQ   r  r   dlfdfdufr  r  r   z ?gtsvx info = {}, should be zerorN   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%   r0   r,  r   r  ru   r  r   rW  r	   r   r   r-   ) r.   r  r  r)  r  r  r   r  rl   r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr  x_solnr  ferrberrre   s                                    r/   
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9@@FFGGG r:a=)))q*Q-(((r:a=)))q*Q-((( AvD)))) GE9%%T1.55e<<> > > DJqMQWQZ')LVDJqM171:..0 0 0 DJqMQWQZ')LVDJqM171:..0 0 0 0 0r1   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   rr   rL   r}   rM   ru   rx   r'  rQ   r  rN  r   z&info should be > 0 for singular matrix)r  r  r  r  r  r  )r   r%   r0   r*   r,  r   r  ru   )r.   r  r  r  r  r   r  rl   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  re   s                                 r/   test_gtsvx_error_singularr  K
  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 
 xr1   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   rr   rL   r}   rM   ru   rx   r'  rQ   rN  r  )r   r%   r0   r*   r,  r   r  ru   r
  rJ  r  )r.   r  r  r  r  r   r  rl   r  r  r   r   r   r  r  r  r  r  r  s                      r/   "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	< 	< 	< 	< 	< 	<r1   zdu,d,dl,b,xc           
          t          d|j                  } |||| |          }|\
  }}}	}
}}}}}}t          ||           d S )Nr  r   r%   r.   r   )r  rl   r  r   r   r  r  r  r  r  r  r  r  r  r  r  re   s                    r/   test_gtsvx_NAGr  
  s]    . WAG444Eb!R##I@I=CS$feT4a(((((r1   zfact,df_de_lambdac                 B     t          d|j                  | |          S Nr  r   r%   r.   rl   r  s     r/   <lambda>r  
  7     (G'7>?g(G (G (GGH!(M (M r1   c                     dS N)NNNr   r  s     r/   r  r  
      -? r1   c                    t          d           dt          j        |           j        z  }t	          d|           }d}t          |f|          dz   }t          |dz
  f|           }t          j        |          t          j        |d          z   t          j        t          j        |          d          z   }	t          |d	f|           }
|	|
z  } |||          \  }}}|                                |                                |                                g} |||||||
          \  }}}}}}}t          ||d                    t          ||d                    t          ||d	                    t          |dk    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   rP   rO   rL   r}   rM   r  r  efr   zinfo should be 0 but is {}.r  r  r  )rM   z#ferr.shape is {} but shoud be ({},)z#berr.shape is {} but shoud be ({},)N)r   r*   r   r   r%   r0   r,  r  r  r	   r   rW  r   r   r   ru   r   r-   )r.   r  r  df_de_lambdar)  r  r   rl   r  r  r  r   r  r  re   r  r   r  r  r  rD  r_  s                         r/   
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4;;DAABBBfa((( 	B"'"'!**---A
AAqsBGAJJL)5555 ui(( 9 9*11%889 9( DJ$ EVDJQ002 2 2 DJ$ EVDJQ002 2 2 2 2r1   c                 B     t          d|j                  | |          S r  r  r  s     r/   r  r    r  r1   c                     dS r  r   r  s     r/   r  r    r  r1   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   rP   rO   rL   r}   rM   r  )	r   r%   r0   r*   r,  r  r
  rJ  r  )r.   r  r  r  r  r   rl   r  r  r  r   r  r  re   s                 r/   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Jr1   c                 B     t          d|j                  | |          S r  r  r  s     r/   r  r  *  r  r1   c                     dS r  r   r  s     r/   r  r  ,  r  r1   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   rP   rO   rL   r}   rM   rN  r   rN   r  )r   r%   r0   r*   r,  r  )r.   r  r  r  r  r   rl   r  r  r  r   r  r  re   r   r  r  r  s                     r/   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axxDAIII% (h77-2U1a^^*B5$daxxDAIII%II $|Aq))B11-2U1a68R.A .A .A*B5$daxxxxxxr1   zd,e,b,xc                 |    t          d|j                  } || ||          \  }}}}}	}
}t          ||           d S )Nr  r   r  )rl   r  r   r   r  r  r  x_ptsvxr  r  r  re   s               r/   test_ptsvx_NAGr  R  sN    . WAG444E/4uQ1~~,BGUD$a)))))r1   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'  )rr   rO   r   r   c                 :    g | ]}t          |          D ]}|S r   r/  rO  yr   r   s      r/   rP  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>|  .    :::qeAqkk::::::r1   c                 :    g | ]}t          |          D ]}|S r   r  r  s      r/   rP  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>}  r  r1   c                 6    g | ]}t          |          D ]}|S r   r  rO  r  r   s      r/   rP  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  s+    <<<q588<<a<<<<r1   rL   c                 <    g | ]}t          |          D ]}|d z
  S r  r  r  s      r/   rP  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  s/    >>>U1XX>>1>>>>r1   )ppsvpptrfpptrspptrippconr  r  r  r   rI  )r  r  r  )r   r*   r   r   r0   r  ru   r   r/  r%   r   r   r   r   r   r  r   r   r   r  )r.   r  r)  r   r]   r   r;  apr  r  r  r  r  ulre   aululiaulir   bxxvr  r  r   s                          @r/   !test_pptrs_pptri_pptrf_ppsv_ppconr  p  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!;<<<<<r1   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'  rr   r   )geestrexcc                     d S r   r   r   s    r/   r  z!test_gees_trexc.<locals>.<lambda>      D r1   Fr  r}   r   rB  r<  rI  rR   rL   r  r   )r   r*   r   r   r0   r%   r   r)   r   r   r  ru   )
r.   r)  r   r]   r  r  r  rj  r$  d2s
             r/   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3r1   zt, expect, ifst, ilst)rw  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  rw  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%   r.   r   r   )rj  ifstilstexpectr)  r  r  s          r/   test_trexc_NAGr    so    < DWAG444EU1at1---FQq	AFAD))))))r1   c                    | t           j        k    r$t          j        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darwin8gges[float32] broken for OpenBLAS on macOS, see gh-16949r   r'  rr   r   )ggestgexcc                     d S r   r   r  s    r/   r  z!test_gges_tgexc.<locals>.<lambda>  r  r1   Fr#  overwrite_br}   r   rL   r  rB  r   r<  rI  rR   rM   rN   r  )r*   r  sysplatformr<   xfailr   r   r   r0   r%   r   r)   r   r   r  ru   )r.   r)  r   r]   r   r  r  r  r   rj  rl  r$  d1r  s                 r/   test_gges_tgexcr    s   
s|x77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======r1   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'  rr   r   )r  trsentrsen_lworkc                     d S r   r   r  s    r/   r  z!test_gees_trsen.<locals>.<lambda>+  r  r1   Fr  r}   r   rB  r<  rI  rL   rQ   r   r   liworkr   )r   r*   r   r   r0   r%   r   r)   r   r   r  ru   r   r!   )r.   r)  r   r]   r  r   r  r  rj  r$  r  selectr   s                r/   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3r1   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)\(?)rL   r   r   rL   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   rL   r  r}   r   rO   rP   rQ   r  N)r%   r.   r!   r)   r   r   r  ru   )rj  rl  r  r  expect_s
expect_sepr)  atol2r   r  r   r  r   seps                 r/   test_trsen_NAGr  N  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4r1   c                 n   | t           j        k    r$t          j        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'  rr   r   )r  tgsentgsen_lworkc                     d S r   r   r  s    r/   r  z!test_gges_tgsen.<locals>.<lambda>  r  r1   Fr  r}   r   rL   r  rB  r   r<  rI  rQ   r   ir  r  )r*   r  r  r  r<   r  r   r   r   r0   r%   r   r)   r   r   r  ru   r   r!   )r.   r)  r   r]   r   r  r  r  r  r   rj  rl  r$  r  r  r  r   s                    r/   test_gges_tgsenr    s4   
s|x77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======r1   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   r7   r   r   r   r   r   r   r   r   r   r    scipy.linalg.lapackr!   scipy.statsr"   r#   scipy.sparsesparserX  r$   r4   ImportErrorr%   scipy.linalg.blasr&   r  r2  r   r  
complex128r)   r   r0   rH   rJ   r   r   rr  rs  r  r  r  r  r?  r  r  r  r  r  r  r  r  r  r  r	  r  r"  r5  r>  rD  rK  rP  rW  ra  rc  r  r  r  r  skipifr  r  r/  r  r  r  r   r  r  r   r  r  r  r  r  r  r%  r-  r2  r4  r6  r:  rK  rN  r`  re  rn  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r1   r/   <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      0000000   GGG 0 0 0 0 0 0 , , , , , ,z2:&,.	~	%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*  &))/> /> *)/>d &))*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 &))8> 8> *)8> 8> 8>s   6A= =BB