
    tKg                    J&   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&m'Z' d dl(m)Z) d d	l*m+Z+m,Z, d dl-m.Z/ 	 d d
l0m1Z1 	 d dlm3Z4 d dl(m5Z5 d dl6m7Z7 ejp                  ejr                  gZ:ejv                  ejx                  gZ=e:e=z   Z>dxZ?Z@e1e1d   d   d   Z?e1d   d   d   Z@d ZAd ZB G d d      ZC G d d      ZD G d d      ZEe	j                  j                  de>      e	j                  j                  dg d      d               ZH G d d      ZI G d  d!      ZJ G d" d#      ZK G d$ d%      ZLd& ZMd' ZNd( ZOd) ZP G d* d+      ZQ G d, d-      ZRd. ZSd/ ZTd0 ZUd1 ZVd2 ZWd3 ZXd4 ZYd5 ZZd6 Z[d7 Z\d8 Z]d9 Z^d: Z_d; Z` G d< d=      Zad> Zbd? Zcd@ ZddA Zee	j                  j                  dBdCD      dE        ZgdF Zhe	j                  j                  dGdHdIg      e	j                  j                  de:      e	j                  j                  dJ eidK            e	j                  j                  dL eidM            e	j                  j                  dN eidM            e	j                  j                  dOd dPg      e	j                  j                  dQd dPg      dQdR                                                 Zje	j                  j                  de:      dS        Zke	j                  j                  dTdJdUidLdUidNdUidOdUidVdUidQdUif      dW        Zle	j                  j                  dX ej                  g dYg dZg d[g d\g d]g d^g       ej                  g d_       ej                  g d`g dag dbg dcg ddg deg       ej                  g dfg dgg dhg dig      fg      dj        Zne	j                  j                  de>      dk        Zoe	j                  j                  dl ej                  g dm       ej                  g dn       ej                  g do       ej                  g dp       ej                  g dq       ej                  g dr       ej                  g ds       ej                  dtdugdvdwgdxdygdzd{gdtd|gg       ej                  d}d~gdd}gddgd}dgddPgg      f	 ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  g ds       ej                  ddgddgddgddgddgg       ej                  ddgddgddgddgddgg      f	g      d        Zpe	j                  j                  de>      e	j                  j                  dg d      d               Zqe	j                  j                  d ere:e:z   e>            d        Zse	j                  j                  d ere:e:z   e>            d        Zte	j                  j                  d ere:e:z   e>            d        Zue	j                  j                  d ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  dKdgdUdMgddUgddgddgg       ej                  ddgddgdPdgddKgddgg      f ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  ddgddgddgddgg       ej                  ddgddgddgddgg      fg      d        Zvd Zwe	j                  j                  d ere>e:e:z               e	j                  j                  d eid            dÄ               Zxe	j                  j                  d ere>e:e:z               e	j                  j                  d eid            dĄ               Zye	j                  j                  d ere>e:e:z               e	j                  j                  d eid            dń               Zze	j                  j                  d ere>e:e:z               e	j                  j                  d eid            dƄ               Z{e	j                  j                  dd ej                  g dȢ       ej                  g dɢ       ej                  g dʢ       ej                  g dˢg d̢g d͢g d΢g      fg      dτ        Z|e	j                  j                  de>      e	j                  j                  dg dѢ      d҄               Z}dӄ Z~e	j                  j                  dg dբ      e	j                  j                  dddg      dل               Ze	j                  j                  dddg      e	j                  j                  dddg      d܄               Ze	j                  j                  de>      e	j                  j                  dg dߢ      d               Ze	j                  j                  de>      d        Ze	j                  j                  de>      e	j                  j                  dddBg      e	j                  j                  dddg      d                      Ze	j                  j                  de>      e	j                  j                  dd dPg      e	j                  j                  dddg      d                      Ze	j                  j                  de>dz        e	j                  j                  dddBg      e	j                  j                  dddg      d                      Ze	j                  j                  d ej                  g dm       ej                  g dn       ej                  g do       ej                  dtdugdvdwgdxdygdzd{gdtd|gg       ej                  d}d~gdd}gddgd}dgddPgg      f ej                  g d       ej                  g d       ej                  g d       ej                  ddgddgddgddgddgg       ej                  ddgddgddgddgddgg      fg      d        Ze	j                  j                  d ere>e:e:z               e	j                  j                  ddd fdd fg      d               Ze	j                  j                  d ere>e:e:z               e	j                  j                  ddd fdd fg      d               Ze	j                  j                  d ere>e:e:z               e	j                  j                  ddd fdd fg      d               Ze	j                  j                  d ej                  g d       ej                  g d       ej                  dKdgdUdMgddUgddgddgg       ej                  ddgddgdPdgddKgddgg      f ej                  g d       ej                  g d       ej                  ddgddgddgddgg       ej                  ddgddgddgddgg      fg      d        Ze	j                  j                  dddBg      e	j                  j                  de>      d               Ze	j                  j                  de>      d        Ze	j                  j                  d ej                  g dg dg dg dg       ej                  g d g dg dg dg      ddPf ej                  g dg dg dg dg       ej                  g dg dg d	g d
g      dPdMfg      d        Ze	j                  j                  de>      d        Ze	j                  j                  de>      d        Ze	j                  j                  d ej                  g dg dg dg dg       ej                  g dg dg dg dg       ej                  g dg dg dg dg       ej                  g d      ddf ej                  g dg dg d g d!g       ej                  g d"g d#g d$g d%g       ej                  g d&g d'g d(g d)g       ej                  g d      d*d+fg      d,        Ze	j                  j                  de>      d-        Ze	j                  j                  d. ej                  g d/g d0g d1g d2g       ej                  g d3g d0g d1g d4g       ej                  g d5g d6g d7g d8g       ej                  g d9g d:g d;g d<g       ej                  g d=g d>g d;g d?g       ej                  g d@g dAg dBg dCg       ej                  g d3g dDg dEg dFg       ej                  g dGg dHg dIg dJg      fg      e	j                  j                  de:      dK               Ze	j                  j                  de:      e	j                  j                  dLdM      e	j                  j                  dNg dO      dP                      Zy# e2$ r dZ1Y w xY w# e2$ r dZ4Y w xY w(R      )reduce)assert_equalassert_array_almost_equalassert_assert_allcloseassert_almost_equalassert_array_equalN)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qz)_compute_lwork)ortho_groupunitary_group)CONFIG)_clapack)get_lapack_funcs)get_blas_funcszBuild Dependenciesblasnameversionc                     |t         v rKt        j                  j                  |  t        j                  j                  |  dz  z   j	                  |      S t        j                  j                  |  j	                  |      S )N              ?)COMPLEX_DTYPESnprandomr   astype)shapedtypes     b/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr5   0   s`    		&))..%(-./5ve}	=99>>5!((//    c                  R   t         j                  t        j                  d       t	        t         j                  j                               } h d}t               }t        t               D ]/  }|j                  d      r||vs|| vs|j                  |       1 |g k(  sJ d       y)z%Test that all entries are in the doc.Nzlapack.__doc__ is None>   r/   clapackflapackdivision	HAS_ILP64print_functionabsolute_importfind_best_lapack_type_z2Name(s) missing from lapack.__doc__ or ignore_list)
r   __doc__pytestskipsetsplitlistdir
startswithappend)namesignore_listmissingr*   s       r4   test_lapack_documentedrL   8   s    ~~,-$$&'E	K fGF$[)@E!NN4   b=NNN=r6   c                   $    e Zd Zd Zd Zd Zd Zy)TestFlapackSimplec           	         g dg dg dg}g dg dg dg dg}dD ]  }t        t        |d	z   d       }| ||      \  }}}}}	t        |	 t        |	             t	        ||       t        ||fd
t        |d
         dz
  f       t	        |t        j                  t        |                    ||dd      \  }}}}}	t        |	 t        |	              y )N)         )         )      	   )rP   r   r   ga2U0*3?)rS   r   r   gMb`?)rV   rP   r   r   )r   rP   r   r   sdzcgebalr   rP   )permutescale)	getattrr9   r   reprr   r   lenr/   r   )
selfaa1pfbalohipivscaleinfos
             r4   
test_gebalzTestFlapackSimple.test_gebalQ   s    	9- A7D1Ay)*1&BB$Hd4j)%b!,"bAs1Q4y{#34%hA@)*2q)B&BB$Hd4j) r6   c                     g dg dg dg}dD ];  }t        t        |dz   d       }| ||      \  }}}t        | t        |             = y )Nikiifi     i"  iiidgehrd)r]   r9   r   r^   )r`   ra   rc   rd   httauri   s          r4   
test_gehrdzTestFlapackSimple.test_gehrdf   sW     A7D1AyaDMBTHd4j) r6   c           	         t        j                  ddgddgg      }t        j                  ddgddgg      }t        j                  dd	gd
dgg      }d}dD ]u  }|j                  |      |j                  |      |j                  |      }}}t        d|f      \  }	|j	                         r|dxx   dz  cc<   d} |	|||      \  }
}}t        t        j                  ||
      t        j                  |
|      z   ||z          |	|||||      \  }
}}t        t        j                  |j                         j                  |
      t        j                  |
|j                         j                        z   ||z  d        |	|||d      \  }
}}t        t        j                  ||
      t        j                  |
|      z
  ||z  d       x y )NrP   rQ   r   rS   rT   rU   rW   rX   
         TfdFD)trsylr-   C)tranatranbdecimal)isgn)	r/   arrayr1   r'   isupperr   dot	conjugatery   )r`   ra   bctransr3   rb   b1c1r{   xr\   ri   s                r4   
test_trsylzTestFlapackSimple.test_trsylq   s   HHq!fq!f%&HHq!fq!f%&HHq"gBx() E%!((5/188E?BB%j2%8FE}}1"2r2.NAud%bffRmbffQm&C&+bj2 #2r2U%HNAud%FF2<<>++Q/"&&BLLN<L<L2MMBJ+ #2r2B7NAud%bffRmbffQm&C&+bj!=# r6   c                 :   t        j                  g dg dg dg      }dD ]w  }dD ]n  }|j                  |      }|j                         r|dxx   dz  cc<   t	        d|f      \  } |||      }|d	v re|d
v rd}nd}t        j
                  t        j                  t        j                  t        j                  |                        }t        |||       |dv r)t        j                  t        j                  |            }n|dv r>t        j                  t        j                  t        j                  |      d            }nA|dv r=t        j                  t        j                  t        j                  |      d            }t        |       q z y )Nrl   rm   ro   rz   Mm1OoIiFfEer   r   r-   )langeFfEeFfrR   rV   Mm1Oor   axisIirP   )r/   r   r1   r   r'   sqrtsumsquareabsr   maxr   )	r`   ra   r3   norm_strrb   r   valuer   refs	            r4   
test_langezTestFlapackSimple.test_lange   s:   HH 
 E)XXe_==?tHNH)*re<h+v%}"#"#''"&&266":)>"?@C'sG<4' ffRVVBZ0!U* ffRVVBFF2JQ%?@!T) ffRVVBFF2JQ%?@ ,1 * r6   N)__name__
__module____qualname__rj   rt   r   r    r6   r4   rN   rN   O   s    **	*=8-r6   rN   c                       e Zd Zd Zd Zy)
TestLapackc                 &    t        t        d      ry y Nempty_module)hasattrr9   r`   s    r4   test_flapackzTestLapack.test_flapack       7N+ ,r6   c                 &    t        t        d      ry y r   )r   r8   r   s    r4   test_clapackzTestLapack.test_clapack   r   r6   N)r   r   r   r   r   r   r6   r4   r   r      s    
r6   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestLeastSquaresSolversc           	         t        d       t        t              D ]  \  }}d}d}d}t        ||      j	                  |      }t        |      j	                  |      }t        d|      \  }}	t        |	|||      }
 ||||
      \  }}}t        |dk\          |||d	|   |

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

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

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

        )p=
ףgQ@gHzG@g{Gz?)g      gq=
ףp@gHzGr   r   gp=
ף0rE  g(\+gףp=
0g333333*@g(\gHzG,gQ#rS   rP   r   rR   rQ   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`   r3   rJ  r   x_outrG  r   ri   s           r4   test_nag_example_f07vef_f07vsfz(TestTbtrs.test_nag_example_f07vef_f07vsf  s    K424 %'B 65/!6* %.!5/+  %	&A
 HHq!f!2h !f "g' $)	*E
 n$KF:< !&'B =.9*N;)>:)>:<  %	&A
 HHr6l%w/46JK35JKM $)	*E y/?@AA '%82-4T15qt4r6   zdtype,trans)Nry   r|   r|   rK  UrH  r0  rQ  c           	      \   t        d       d\  }}}t        d|      }|dk(  }	||	z  }
||
z
  }t        |
| dz
  d      }|D cg c]  }|t        |      z
   }}|D cg c]  }t	        |f|       }}|dk(  rt        j                  ||      ||
<   t        j                  ||d	      }t        j                  |dz   |f|      }t        |      D ]4  \  }}|j                  |      ||t        |d
      t        ||z   |      f<   6 t	        ||f|      } ||||||      \  }}t        |d
       |dk(  rt        ||z  |d       y |dk(  rt        |j                   |z  |d       y |dk(  r*t        |j                   j#                         |z  |d       y t%        d      c c}w c c}w )Ni  )rS   rR   rQ   rG  r   rR  rP   r   dia)formatr   )rJ  r   rK  r   r0  rQ  g-C6
?r   ry   r|   zInvalid trans argument)r   r'   r3  r   r5   r/   r   spsdiagsr   r   diagonalr   minr   r   ry   r   rN  )r`   r3   r   rK  r0  r   r   kdrG  is_upperkuklband_offsetsr   band_widthswidthbandsra   rJ  rowkr   ri   s                          r4   test_random_matriceszTestTbtrs.test_random_matrices1  s    	T
 4 6CK(]"W R"q"-+78<aq3q6z<8)+)U -eXu=) 	 + 3;/E"I IIe\%8 XXrAvqk5)-FC-.ZZ]BsC1Ic!A#qk))* . (D	592UF4T1C<AE140c\ACC!GQT2c\ACCMMOa/>5669 9+s   F$F)zuplo,trans,diag)rR  rQ  Invalid)rR  re  rQ  )re  rQ  rQ  c           	          t        dt        j                        }t        dd      }t        dd      }t	        t
        ||||||       y)z?Test if invalid values of uplo, trans and diag raise exceptionsrG  r   rS   rQ   N)r'   r/   r6  r   r  r  )r`   rK  r   r0  rG  rJ  r   s          r4   &test_invalid_argument_raises_exceptionz0TestTbtrs.test_invalid_argument_raises_exceptiond  s>     !

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

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

        Note that ?tbtrs requires the matrix A to be stored in banded form.
        In this form the diagonal corresponds to the last row.r   r   rS   rG  r   )r   rR   rR  rI  N)r/   r   floatr'   r   )r`   rJ  r   rG  r?   ri   s         r4   test_zero_element_in_diagonalz'TestTbtrs.test_zero_element_in_diagonalq  sU     WWV5)GGAU# 65	2-4T1r6   zldab,n,ldb,nrhs)rT   rT   r   rT   )rT   rT   rR   rT   c                     t        j                  ||ft              }t        j                  ||ft              }t        dt              }t	        t
        |||       y)z2Test ?tbtrs fails correctly if shapes are invalid.r   rG  Nr/   r   ri  r'   r  r  )r`   ldabr   ldbr   rJ  r   rG  s           r4   test_invalid_matrix_shapesz$TestTbtrs.test_invalid_matrix_shapes  sF     WWdAYe,GGS$Ku- 6iA.r6   N)r   r   r   rA   markparametrizer   rP  r   rd  rg  rj  ro  ).0r3   r   r   s   0000r4   rC  rC    s8   [[Wf-+5 .+5Z [[]+1N+1%e&+slu7K  %en?N -+1NO [[Vc3Z0[[Vc3Z0+7 1 1	O+7Z [[.33356B	6B  [[.**1 /	/gNs   DrC  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                     t        t        |t                     t	        |d
        y )Nrz   lartgr   rR   rS   r-   333333?r   y       皙?)	r'   r/   r   iscomplexobjr   r   
isinstancecomplexri  )r3   rt  rd   gcssnrs          r4   
test_lartgr~    s     6HHQHHQ??1GA!QK	BG$3??1B	*Jq'*+Jr5)*B(' r6   c                     dD ]  } d}d}t        j                  dd|       }t        j                  dd|       }dt        j                  |       j                  dz
   z  }| dv rt	        d	| 
      }d}nt        d	| 
      }|dz  }|dz  }d}t         |||||      g dg dg|       t         |||||d      g ddd||gg|       t         |||||dd      g d||ddgg|       t         |||||ddd      g d||ddgg|       t         |||||ddd      g dd|d|gg|       t         |||||ddddd	      g d||d|gg|       t         |||||ddd      g dd|d|gg|        |||||dd      \  }}	t        ||u        t        |	|u        t        |g d|       t        |	g d|        y )Nrz   ru  rv  rS   rR   rv   rP   fdrotr   y             r-   y              @)rT   rT   rT   rT   )r   r   r   r   r-  rQ   )r   )rT   rT   rR   rR   r   )offxoffy)rR   rR   rT   rT   )incxr  r   )rT   rR   rT   rR   )r  incyr   )r  r  r  r  r   )rR   rR   rT   rR   r  )r  r  r   )overwrite_xoverwrite_y)r/   fullr   	precisionr(   r'   r   r   )
r3   r   r   ur   r-  r  rd   ra   r   s
             r4   test_rotr    s    GGAq% GGAq% RXXe_..q011D= e4CA"56CHAGAAAq!Q,*6*8>B	DAq!Q!,|011a|/=CG	IAq!QQQ7%1a|44	AAq!QQQ!<%1a|44	AAq!QQQ!<%1a|44	AAq!QQQQQ!L%1a|44	AAq!QRbA>%1a|44	A 1aA1!<1QQ<d3<d3I r6   c            
      b   t         j                  j                  d       t         j                  j                  d      } | j                  j	                  |       } t         j                  j                  d      dt         j                  j                  d      z  z   }|j                  j                         j	                  |      }dD ]e  }t        ddg|      \  }}|dv r|j                         }n| j                         } ||j                  d	   d
z
  |d   |dd d	f         \  }}}t        j                  |d d d	f         }	|d   |	d	<   ||	d
<   t        j                  |d
d d	f         }
d|
d	<   ||
d
d   ||
|j                         |d
d d d f   t        j                  |j                  d
               |d
d d d f<    ||
||d d d
d f   t        j                  |j                  d	         d      |d d d
d f<   t        |d d d	f   |	d       t        |d	d d f   |	d       h y )Nr   )rS   rS   r-   rz   larfglarfr   FDr   rP   rP   r   rQ   r   r   RsiderL  r  )r/   r0   r   ry   r   conjr'   copyr2   r   r   r   r   )a0a0jr3   r  r  ra   alphar   rs   expectedr   s              r4   test_larfg_larfr    s   IINN4			&	!B	"B
))

6
"R		(8(8(@%@
@C
%%**,

3
C
 &'8FtD=
A	A aggajlAdGQqr1uX>q# ==1a4)g MM!ABE(#!!" 3==?Aab!eHbhhqwwqz6JK!"a% 3!QR%"((1771:*>SI!QR%!Q$5!Q$59 r6   c                  z    t        dt        j                  d      } d}t        | ||dd      }|dk(  s|dk(  sJ y y )	Ngesdd_lwork	preferredr3   ilp64iA%  T)r&  r%  i`DiD)r'   r/   float32r"   )sgesdd_lworkr   r   s      r4    test_sgesdd_lwork_bug_workaroundr    sQ     $M*57LA<A&*$@E  I)!333!3r6   c                       e Zd Zej                  j                  de      d        Zej                  j                  de      ej                  j                  dd      d               Zy)	TestSytrdr3   c                 n    t        j                  d|      }t        d|f      }t        t        ||       y )Nr   r   sytrdr/   r   r'   r  rN  )r`   r3   Ar  s       r4   test_sytrd_with_zero_dim_arrayz(TestSytrd.test_sytrd_with_zero_dim_array  s.     HHV5) 1$/j%+r6   r   rP   rR   c                    t        j                  ||f|      }t        d|f      \  }}t        j                  d||dz   z  dz  dz   |      |t        j                  |      <    ||      \  }}t        |d        ||d|      \  }}	}
}}t        |d       t        ||dt        j                  |      j                  z  d	       t        |	t        j                  |             t        |
d
       t        |d
        |||      \  }}	}
}}t        |d       t        j                  ||      }t        j                  |j                  d         }|	|||f<   t        j                  |j                  d   dz
        }|
||dz   |f<   |
|||dz   f<   t        j                  |||      }t        |dz
        D ]x  }t        j                  ||      }|d ||dz   f   |d | d||<   t        j                  |||      ||   t        j                  ||      z  z
  }t        j                  ||      }z t        j                   |d      }|j"                  |   ||<   t        j                  |j"                  t        j                  ||            }t        ||dt        j                  |      j                  z  d	       y )Nr   )r  sytrd_lworkrP   rQ   r   r  r   rT   r   r,          r   r   )r/   r   r'   arangetriu_indices_fromr   r   r   r   r0  r   r2   r   r3  outerr   r   ry   )r`   r3   r   r  r  r  r   ri   datarp   ers   ry   rc  k2Qr?  r   Hi_lowerQTAQs                        r4   
test_sytrdzTestSytrd.test_sytrd  sw    HHaV5) 5t< 	{
 IIaAaC!AU3 	
"

q
!" "!ntT1 !&aq >aCT1aa(;(;&;#F2771:&3S! !&au 5aCT1
 MM!5)IIaggaj!!Q$YYqwwqz!|$"Q$("bd( FF1au%qsA%(A!QqSMAbqEAaDq!5)CFRXXa^,CCAq!A  //!R(SS\'
vvacc266!Q<( 	aa(;(;&;#Fr6   N)	r   r   r   rA   rp  rq  r   r  r  r   r6   r4   r  r    se    [[Wk2, 3, [[Wk2[[S&)7G * 37Gr6   r  c                       e Zd Zej                  j                  de      d        Zej                  j                  d ee	e            ej                  j                  dd      d               Z
y)	TestHetrdcomplex_dtypec                 n    t        j                  d|      }t        d|f      }t        t        ||       y )Nr   r   hetrdr  )r`   r  r  r  s       r4   test_hetrd_with_zero_dim_arrayz(TestHetrd.test_hetrd_with_zero_dim_arrayY  s.     HHV=1 1$/j%+r6   zreal_dtype,complex_dtyper   r  c           	      "   t        j                  ||f|      }t        d|f      \  }}t        j                  d||dz   z  dz  dz   |      dt        j                  d||dz   z  dz  dz   |      z  z   |t        j                  |      <   t        j
                  |t        j                  t        j                  |                   dD ]  } |||      \  }}	t        |	d        t        ||      }
 ||d|
	      \  }}}}}	t        |	d       t        ||d
t        j                  |      j                  z  d       t        |t        j                  t        j                  |                   t        |d       t        |d        |||
      \  }}}}}	t        |	d       t        j                  ||      }t        j                  |j                  d   t              }||||f<   t        j                  |j                  d   dz
  t              }|||dz   |f<   ||||dz   f<   t        j                   |||      }t#        |dz
        D ]  }t        j                  ||      }|d ||dz   f   |d | d||<   t        j                   |||      ||   t        j$                  |t        j&                  |            z  z
  }t        j(                  ||      } t        j*                  |d      }t        j&                  |j,                  |         ||<   t        j(                  t        j&                  |j,                        t        j(                  ||            }t        ||dt        j                  |      j                  z  d       y )Nr   )r  hetrd_lworkrP   rQ   r-   )r   rP   r  r   r  rT   r   r,  r  r   r   rv   )r/   r   r'   r  r  fill_diagonalr   r0  r   r"   r   r   r   r   r2   r   r   r3  r  r  r   r   ry   )r`   r   
real_dtyper  r  r  r  r   r?   ri   r   r  rp   r  rs   ry   rc  r  r  r?  r   r  r  QHAQs                           r4   
test_hetrdzTestHetrd.test_hetrd`  s    HHaV=15t< 	{
 IIaAaC!AZ8299Q1Q3
1J??@ 	
"

q
!" 	BGGBGGAJ/0 A!!1-GAtq! 
 {A. !&aq >aCT1aa(<(@(@&@sK2772771:./3S! !&au 5aCT1
 MM!:.IIaggaj,!Q$YYqwwqz!|3/"Q$("bd( FF1a}-qsA-0A!QqSMAbqEAaDq!=1a&288Arwwqz223Aq!A  //!R(WWQSS\*'
vvbggacclBFF1aL1 	!"RXXj1555C	r6   N)r   r   r   rA   rp  rq  r.   r  zipr   r  r   r6   r4   r  r  X  sp    [[_n=, >, [[7 n=?[[S&)A *?Ar6   r  c            
         t        t              D ]W  \  } }t        d|      \  }}t        |ddd      }| dk  r\t	        j
                  g dg dg d	g d
g dg dg|      }t	        j
                  g d|      }t	        j
                  ddg|      }n_t	        j
                  g dg dg dg dg dg dg      }t	        j
                  dgdgdgdgdgdgg      }t	        j                  d|      }t	        j
                  g dg dg|      } ||||||      \  }	}	}	}
}	| dk  rt	        j
                  g d      }nt	        j
                  g d      }t        |
|d        Z y )!N)gglsegglse_lworkr   rU   rS   rQ   )r   r   rc   )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   r3   func
func_lworkr   ra   r   rp   r   r?   resultr  s               r4   
test_gglser    ss   '
U+,D279jzQ!q975534346
 >CDA AOA"b/A MNKKKKM NA ;-%,&-%,&-%,( )A %(AHH'):;5I!!Q1E:1a7xx !- .H
 xx !: ;H 	"&(A>Y (r6   c            
         t        d       t        t        t        z         D ]>  \  } }d}| dk  r9t	        d|      }t	        d|      \  }}t        ||      j                  |      }nHt	        d|      }t	        d|      \  }}t        ||      t        ||      d	z  z   j                  |      }||j                         j                  z   d
z  d
t        j                  ||      z  z   }t        |d      }t        ||      } |||d      \  }	}
} ||	|
|d      \  }}t        t        d|z  t        j                  j!                  |d      z
        |z  dk         A y )Nr   rv   rS   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr-   rQ   rP   )r   r  )ra   ipivanormr  rc   )r   r   r   r.   r'   r   r1   r  ry   r/   r   r   r"   r   r   linalgcond)r   r3   r   r  funconfunctrfr  r  r   ldur  r?   rconds                r4   test_sycon_heconr    sC   J~ 56
U7)-uEJ./AOOFGa##E*A *-uEJ./AOOFGad1ajm+33E:A ^Q266!5#9!99Q
z1-qQ7T1Cd%qAqAeGbiinnQ!n445e;a?@- 7r6   c                  J   t        d       t        t              D ]  \  } }d}t        d|      \  }}}}t	        ||      j                  |      }||j                  z   dz  }t	        ||      j                  |      }||j                  z   dz  dt        j                  ||      z  z   } |||      \  }	}
}t        |dk(          ||      \  }}t        |dk(          |||      \  }}t        |dk(          ||      \  }}
}t        |dk(         t        ||	d        y )	Nr   rv   )r  sygstsyevdsygvdr   rQ   r   giUMu?r   )r   r   r   r'   r   r1   ry   r/   r   r   r   )r   r3   r   r  r  r  r  r  Beig_gvdr?   ri   r   ra   eigs                  r4   
test_sygstr    s    J,
U%5 7I<A&C"ueU AJe$WaKAJe$WaK!bffQe444 !A;D	 (4	1+4	QxQ	W625 -r6   c                     t        d       t        t              D ]_  \  } }d}t        d|      \  }}}}t	        ||      j                  |      dt	        ||      j                  |      z  z   }||j                         j                  z   dz  }t	        ||      j                  |      dt	        ||      j                  |      z  z   }||j                         j                  z   dz  dt        j                  ||      z  z   } |||      \  }	}
}t        |dk(          ||      \  }}t        |dk(          |||      \  }}t        |dk(          ||      \  }}
}t        |dk(         t        ||	d	       b y )
Nr   rv   )r  hegstheevdhegvdr   r-   rQ   r   -C6?r   )r   r   r.   r'   r   r1   r  ry   r/   r   r   r   )r   r3   r   r  r  r  r  r  r  r  r?   ri   r   ra   r  s                  r4   
test_hegstr    sd   J/
U%5 7I<A&C"ueU AJe$rDAJ,=,=e,D'DD^QAJe$rDAJ,=,=e,D'DD^QRVVAU%;!;; !A;D	 (4	1+4	QxQ	W405 0r6   c                  X   t        d       d\  } }t        t              D ]  \  }}t        d|      \  }}t	        || |      }|dk  r%t        t        | |      j                  |            }n4t        t        | |      t        | |      dz  z   j                  |            }t        t        ||j                          |||      \  }}	}
t        |
dk(         t        j                  |d	d	d	| f   t        j                  | || z
  f|      f      }t        j                  t        j                  | |      |d	d	| d	f   f      }t        j                  ||      }t!        |       D cg c]D  }||	|   ||gd	d	f   j                  j#                  ||gd	d	f   j%                               z  z
  F }}t'        t        j"                  |      }t)        |j#                  |      |z
  t+        ||      d
t        j,                   |d      j.                        z  d        y	c c}w )z
    This test performs an RZ decomposition in which an m x n upper trapezoidal
    array M (m <= n) is factorized as M = [R 0] * Z where R is upper triangular
    and Z is unitary.
    r   rv      tzrzftzrzf_lworkr   rQ   r-   r   r   Nrv   r   r  r,  )r   r   r   r'   r"   r   r   r1   r  r  ry   r   r/   r.  r   r   r3  r   r  r   r   r   spacingr   )r   r   r   r3   r  tzrzf_lwr   r  rzrs   ri   r  VIdr   r   Zs                    r4   
test_tzrzfr  1  s    	JDAq'
U*+C168xxA.7T!QZ&&u-.Ad1aj41:b=088?@A 	i,au-C	 IIr!RaR%y"((Aqs85"ABCIIrvvau-r!QR%y9:VVAU#DI!HMHqr#a&A36A36)9:::HM2663a1j%&@

5:?? ;;"	F- (( Ns   ,A	H'c            	      l   t        d       t        t              D ]  \  } }d}| dkD  rCt        t	        ||      t	        ||      dz  z   t        |      z         j                  |      }d}n2t        t	        ||      t        |      z         j                  |      }d}t        d|      \  }}} ||      \  }}	t	        |d	      j                  |      }
 |d
||
      }t        |t        | |
      | d	z  dk(  rdnd        |d
||
|      }t        |t        |j                         j                   |
      | d	z  dk(  rdnd        |d      |t        j                  |      t        j                  |      f<    |d
||
|d      }t        |t        |j                         j                   |
      | d	z  dk(  rdnd       t	        d|      j                  |      } |d
|||dd      }t        |t        | |j                        j                         j                  | d	z  dk(  rdnd        y)z
    Test for solving a linear system with the coefficient matrix is a
    triangular array stored in Full Packed (RFP) format.
    r   r   rP   r-   r|   ry   )trttftfttrtfsmr   rQ   r   r   rS   rU   r   r   r   rR  )r   r0  rR   r  )r   r0  r  N)r   r   r   r   r   r   r1   r'   r   r   r  ry   r/   r  )r   r3   r   r  r   r  r	  r
  Afpr?   r  solnB2s                r4   	test_tfsmr  S  s   
 	J'
U7T!QZ$q!*R-/#a&89@@GAET!QZ#a&()007AE-.H49;ud qQAJe$BQ!$qb!/2Qw!|!	D BQe,!$qvvxzzk1(=/2Qw!|!	D ).b	"))A,		!
$%BQe#6!$qvvxzzk1(=/2Qw!|!	D !QZu%BRu3SA!$qb"$$(<(<(>(@(@/2Qw!|!	D? (r6   c                     t        d       d\  } }}t        t              D ]A  \  }}t        d|      \  }}t	        || |      }|dk  rPt        t        | |      j                  |            }t        ||      j                  |      }	t        d|      \  }
}not        t        | |      t        | |      dz  z   j                  |            }t        ||      t        ||      dz  z   j                  |      }	t        d|      \  }
}t	        |||      } |||	      \  }}}t        j                  t        j                  | |      |d
d
| d
f   f      }t        j                  ||      }t        |       D cg c]D  }|||   ||gd
d
f   j                  j                  ||gd
d
f   j                               z  z
  F }}t        t        j                  |      }|dk  rdnd}dt        j                    |d      j"                        z  } |
|||	|	      \  }}t%        |dk(         t'        ||j                  |	      z
  t)        |	      |d        |
|||	||      \  }}t%        |dk(         t'        ||j                         j                  j                  |	      z
  t)        |	      |d        |
|||	d|      \  }}t%        |dk(         t'        ||	j                  |      z
  t)        |	      |d        |
|||	d||      \  }}t%        |dk(         t'        ||	j                  |j                         j                        z
  t)        |	      |d       D y
c c}w )a  
    This test performs a matrix multiplication with an arbitrary m x n matrix 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   )rv   r  r  r  r   rQ   )ormrzormrz_lworkr-   )unmrzunmrz_lworkr   Nry   r|   rv   r   r   r  r,  r   r  )r  r   )r  r   r   )r   r   r   r'   r"   r   r   r1   r/   r.  r   r3  ry   r   r  r   r   r   r   r   r   )qmqncnr   r3   r  r  lwork_rzr  r|   orun_mrzorun_mrz_lw	lwork_mrzr  rs   ri   r  r  r   r   r  r   tolcqs                           r4   test_ormrz_unmrzr  |  s    	JJBB'
U*+C168x!(B37T"b\((/0AR##E*A$45M;@%B!Hk d2rlT"b\"_4<<UCDAb"RR/77>A$45M;@%B!Hk #;B7	ax0C IIrvvb.1bc6
;<VVBe$DI"INIqr#a&A36A36)9:::IN2663 QwCE#JOO,,BQi8D	QUU1Xz!}3RHBQe9ED	QVVXZZ^^A..
1C	! BQS	BD	QUU1Xz!}3RHBQSYOD	QUU1668::..
1C	![ (, Os   =A	M'c            	         t        d       t        t              D ]5  \  } }d}| dkD  r.t        ||      t        ||      dz  z   j	                  |      }d}nt        ||      j	                  |      }d}t        d|      \  }} ||      \  }}t        |d	k(          ||d
      \  }	}t        |d	k(          |||d      \  }
}t        |d	k(          |||d
      \  }}t        |d	k(         t        |dz   |dz  f|      }t        |      dd|dz  df   |ddddf<   ||dz  dz   dddfxx   t        |      d|dz  d|dz  f   j                         j                  z  cc<   t        |dz   |dz  f|      }t        |      ddd|dz  f   |ddddf<   |d|dz  ddfxx   t        |      |dz  d|dz  df   j                         j                  z  cc<   t        ||j                  dd             t        |
|j                         j                  j                  dd             t        |	|j                  dd             t        ||j                         j                  j                  dd              |||      \  }}t        |d	k(          |||	d
      \  }}t        |d	k(          |||
|d      \  }}t        |d	k(          ||||d
      \  }}t        |d	k(         t        |t        |             t        |t        |             t        |t        |             t        |t        |             8 y)z
    Test conversion routines between the Rectengular Full Packed (RFP) format
    and Standard Triangular Array (TR)
    r   r   rP   r-   r|   ry   )r  r	  r   r   rH  rK  rR  )transrrK  rQ   Nr   F)order)r   r   r   r   r1   r'   r   r   r   r  ry   r   r   reshape)r   r3   r   A_fullr"  r  r	  A_tf_Uri   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                     r4   test_tfttr_trttfr1    s9   
 	J'
U71aj41:b=088?FF1aj((/FF'(:%HuV}	V#.	vf3?$	vf3?$	 !A#q!tE2<1a451"aAa!VUadUEQTE\ : ? ? A C CC!A#q!tE2v,q%1a4%x0Q!Q$d6l1a45!Q$%<8==?AAA!&(*:*:2S*:*IJ!("*--/"3"3";";Bc";"J	L 	"&(*:*:2S*:*IJ!("*--/"3"3";";Bc";"J	L Q'	QS1	q(6D$	q(6D$	!&$v,7!(DL9!&$v,7!(DL9c (r6   c                  P   t        d       t        t              D ]  \  } }d}| dkD  r,t        ||      t        ||      dz  z   j	                  |      }nt        ||      j	                  |      }t        d|      \  }} ||      \  }}t        |dk(          ||d	      \  }}t        |dk(         t        |      }	t        ||dz   z  d
z  |      }
t        |      j                  |	   |
dd t        |      }	t        ||dz   z  d
z  |      }t        |      j                  |	   |dd t        ||
       t        ||        |||      \  }}t        |dk(          |||d	      \  }}t        |dk(         t        |t        |             t        |t        |              y)r   r   r   rP   r-   )trttptpttrr   r   rH  r!  rQ   N)r   r   r   r   r1   r'   r   r   r   r   ry   r   r   r   )r   r3   r   r&  r3  r4  A_tp_Uri   A_tp_LindsA_tp_U_mA_tp_L_mr-  r.  s                 r4   test_tpttr_trttpr:    s   
 	J'
U71aj41:b=088?F1aj((/F'(:%HuV}	V#.	 AAaC!51F|~~t,AAaC!51F|~~t,!&(3!&(3 Q'	QS1	!&$v,7!&$v,7A (r6   c                  *   t        d       t        t              D ]  \  } }d}| dkD  rXt        ||      t        ||      dz  z   j	                  |      }||j                         j                  z   |t        |      z  z   }n9t        ||      j	                  |      }||j                  z   |t        |      z  z   }t        d|      \  }}} ||      \  }} |||      \  }	}t        |dk(          |||	      \  }
}t        |      }t        |
|        y)	zk
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array
    r   r   rP   r-   )pftrfr  r	  r   r   N)r   r   r   r   r1   r  ry   r   r'   r   r   r   )r   r3   r   r  r<  r  r	  r  ri   	Achol_rfpA_chol_rr?   Achols                r4   
test_pftrfr@    s   
 	J'
U7ad1ajm+33E:AAFFHJJ3q6)Aa##E*AACC!CF("A./J5:<ue !H	T3-	4	Ay)!!(E2% (r6   c                  r   t        d       t        t              D ]  \  } }d}| dkD  rXt        ||      t        ||      dz  z   j	                  |      }||j                         j                  z   |t        |      z  z   }n9t        ||      j	                  |      }||j                  z   |t        |      z  z   }t        d|      \  }}}} ||      \  }}	 |||      \  }
}	 |||
      \  }}	t        |	dk(          |||      \  }}t        |      }t        |t        |      | dz  dk(  rd	nd
        y)z
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array to find its inverse
    r   r   rP   r-   )pftrir<  r  r	  r   r   rQ   rS   rU   r   N)r   r   r   r   r1   r  ry   r   r'   r   r   r   r   )r   r3   r   r  rB  r<  r  r	  r  ri   
A_chol_rfp	A_inv_rfpA_inv_rr?   Ainvs                  r4   
test_pftrirG  4  s3   
 	J'
U7ad1ajm+33E:AAFFHJJ3q6)Aa##E*AACC!CF("A%5 7@ =B	&C"ueU !H	T C=
D:.	4	1i(
1v!'4:/2Qw!|!	D- (r6   c                  
   t        d       t        t              D ]e  \  } }d}| dkD  rXt        ||      t        ||      dz  z   j	                  |      }||j                         j                  z   |t        |      z  z   }n9t        ||      j	                  |      }||j                  z   |t        |      z  z   }t        |df|      }t        |dz   df|      }t        |dz
  df|      }t        d|      \  }}}	}
 |	|      \  }} |||      \  }} ||||      \  }}t        |d	k(         t        t        ||||        ||||      \  }}t        |d	k(         t        t        ||      || dz  d	k(  rd
nd       h y)z
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array and solve a linear system
    r   r   rP   r-   rR   r   rQ   )pftrsr<  r  r	  r   rS   rU   r   N)r   r   r   r   r1   r  ry   r   r   r'   r   r  r  r   r   )r   r3   r   r  r  Bf1Bf2rI  r<  r  r	  r  ri   rC  r  s                  r4   
test_pftrsrL  T  s   
 	J'
U7ad1ajm+33E:AAFFHJJ3q6)Aa##E*AACC!CF("A!Qu%AaC85)AaC85)%5 7@ =B	&C"ueU !H	T C=
D1j#.
d	i:s;1j!,
d	!%1+t/2Qw!|!	D7 (r6   c            
          t        d       t        t              D ]`  \  } }d}| dkD  rXt        ||      t        ||      dz  z   j	                  |      }||j                         j                  z   |t        |      z  z   }n9t        ||      j	                  |      }||j                  z   |t        |      z  z   }| dk  rdnd}t        dd	| d
f|      \  }}} ||      \  }}	t        j                  j                  |d      j	                  |      }
 ||dd|
d|      } |||      \  }}	t        |t        |
j                  |
j                         j                         d|z  z         | dz  dk(  rdnd       c y)zT
    Test for performing a symmetric rank-k operation for matrix in RFP format.
    r   r   rP   r-   rQ   r   hr  r	  frkr   r   r   rS   rU   r   N)r   r   r   r   r1   r  ry   r   r'   r/   r0   r   r   r   )r   r3   r   r  prefixr  r	  shfrkr  r?   r|   Afp_outA_outs                r4   test_sfrk_hfrkrT  y  sa    	J'
U7ad1ajm+33E:AAFFHJJ3q6)Aa##E*AACC!CF("AQwC.VHC./Q5:<ue qQIINN1a ''.1b!Q,G$q!%quuQVVXZZ/@.@1Q3.F)G/2Qw!|!	D# (r6   c            
         t        d       t        t              D ]  \  } }d}| dkD  rOt        dd||f      t        dd||f      dz  z   j	                  |      }||j                         j                  z   }n<t        dd||f      j	                  |      }||j                  z   |t        |      z  z   }dt        j                   |d      j                        z  }t        d	|
      \  }}}t        ||d      }t        |dd      \  }	}
}t        ||d      } ||d|      \  }}} |||d      \  }}}t        t        |d      t        |	|ddf   d      |d       t        |dd      \  }}
} ||d      \  }}} |||d      \  }}}t        t!        |d      t!        ||ddf   d      |d        y)zt
    Test for going back and forth between the returned format of he/sytrf to
    L and D factors/permutations.
    r   rv   rP   i   r-   r+  r   )syconvr  r  r   r  F)r  	hermitianr  r   Nr  r,  r   )r   r   r   r   r1   r  ry   r   r/   r   r   r'   r"   r   r   r   r   )r   r3   r   r  r  rW  trf	trf_lworklwrH  Dpermr  r  ri   ra   r  rR  s                     r4   test_syconvr^    s   
 	J'
U7b1a&)b1a&)",-.4fUm  AFFHJJAR!Q(//6AACC!CF("A"**U3Z__--!1 3BIN"PYIq2!u5
1dIq2aq3T4CQ/
1dQd1T1W:r&:2N !u5
1daq/T4CQ/
1dQ
D47Q$7cK5 (r6   c                       e Zd ZdZd Zd Zy)TestBlockedQRzd
    Tests for the blocked QR factorization, namely through geqrt, gemqrt, tpqrt
    and tpmqr.
    c           
      ,   t        d       t        t              D ]v  \  }}d}|dkD  r,t        ||      t        ||      dz  z   j	                  |      }nt        ||      j	                  |      }dt        j                   |d      j                        z  }t        d|      \  }} |||      \  }}	}
|
d	k(  sJ t        j                  |d
      t        j                  ||      z   }t        j                  ||      ||	z  |j                  j                         z  z
  }t        j                  |      }t        |j                  j                         |z  t        j                  ||      |d       t        ||z  ||d       |dkD  r.t        ||      t        ||      dz  z   j	                  |      }d}nt        ||      j	                  |      }d}dD ]  }d|fD ]  } |||	|||      \  }}
|
d	k(  sJ ||k(  r|j                  j                         }n|}|dk(  r||z  }n||z  }t        |||d       ||fdk(  sc |||	|      \  }}
|
d	k(  sJ t        ||         t!        t"        |||	|d       t!        t"        |||	|d       y y )Nr   r   rP   r-   r+  r   )geqrtgemqrtr   r   r   r  r,  r|   ry   rH  r  rQ  r  r   rH  rH  rQ  r  r  r  )r   r   r   r   r1   r/   r   r   r'   r   r   ry   r  r   r   r   r  r  )r`   r   r3   r   r  r  rb  rc  ra   tri   r   r  r  r|   	transposer  r   r   qqC	c_defaults                         r4   test_geqrt_gemqrtzTestBlockedQR.test_geqrt_gemqrt  sf   T
#F+JCAQw!QZ$q!*R-/77>!QZ''.bjjs11C,-@NME6q!JAq$199 2!77Aq&Q);;A
A ACCHHJNBFF1E,B!#%AE13R8Qw!QZ$q!*R-/77>	!QZ''.	"!9-E$Q14uEGAt19$9	)CCHHJs{UU#Ar"= e}
2*0Aq/	4#qy(y$Y2) . #0 )VQ13?)VQ1C@u ,r6   c                 T	   t        d       t        t              D ]  \  }}d}|dkD  rWt        ||      t        ||      dz  z   j	                  |      }t        ||      t        ||      dz  z   j	                  |      }n6t        ||      j	                  |      }t        ||      j	                  |      }dt        j                   |d      j                        z  }t        d|      \  }}d	|d
z  |fD ]  }	 ||	|||      \  }
}}}|d	k(  sJ t        t        j                  |
d      t        j                  |d             t        t        j                  ||	|z
  dz
        t        j                  ||	|z
  dz
               t        j                  ||	|z
        t        j                  ||	|z
        }}t        j                  t        j                  ||      |f      }t        j                  d
|z  |      ||z  |j                  j                         z  z
  }t        j                  t        j                  |
      t        j                   |
      f      }t#        |j                  j                         |z  t        j                  d
|z  |      |d       t#        ||z  t        j                  t        j                  |      |f      |d       |dkD  rYt        ||      t        ||      dz  z   j	                  |      }t        ||      t        ||      dz  z   j	                  |      }d}n8t        ||      j	                  |      }t        ||      j	                  |      }d}dD ]  }d|fD ]  } ||	||||||      \  }}}|d	k(  sJ ||k(  r|j                  j                         }n|}|dk(  r8t        j                  ||fd	      }t        j                  ||fd	      }||z  }n7t        j                  ||fd      }t        j                  ||fd      }||z  }t#        |||d       ||fdk(  s ||	||||      \  }}}|d	k(  sJ t        ||       t        ||         t%        t&        ||	||||d       t%        t&        ||	||||d         y )Nr   r   rP   r-   r+  r   )tpqrttpmqrtr   r   rQ   r   r  r,  r|   ry   rd  rQ  re  rH  r   rf  r  r  r  )r   r   r   r   r1   r/   r   r   r'   r   r   r   r2  r   ry   r  r   r   r  r  ) r`   r   r3   r   r  r  r  rn  ro  lra   r   rg  ri   B_pentb_pentr   r  r  r|   r\  rh  r  r   r   rp   ri  cdCDqCDrk  	d_defaults                                    r4   test_tpqrt_tpmqrtzTestBlockedQR.test_tpqrt_tpmqrt  s   T
#F+JCAQw!QZ$q!*R-/77>!QZ$q!*R-/77>!QZ''.!QZ''.bjjs11C,-@NME6 a^ %aAq 11aqy y RWWQ^RWWQ^< RWWQA	2BGGAq1uqy4IJ "$AE!2BGGAq1u4E NNBFF1E$:F#CDFF1q5.Q1CCNNBGGAJa0@#AB  
Qq1uE0J%(r3Ar~~rwwqz66J'K%(r3 7ad1ajm3;;EBAad1ajm3;;EBA #Ia++E2Aa++E2A #I&D"%y!1%+Aq!Q27&9
1d#qy(y I- !
A !A3;!#AQ!?B!#AQ!?B"#b&C!#AQ!?B!#AQ!?B"$q&C'CcC %=J69?1aA9N6Iy$#'19,9(A6(A63 "2 ': iAq!QSIiAq!QcJA $ ,r6   N)r   r   r   r@   rl  rw  r   r6   r4   r`  r`    s    
<A|QKr6   r`  c                     t        d       t        t              D ]W  \  } }d}d}t        d|      }| dkD  r^t	        |||z
        j                  |      dt	        |||z
        j                  |      z  z   }||j                         j                  z  }n-t	        |||z
        j                  |      }||j                  z  } ||      \  }}}}	t        |      }
d|
||z
  d ||z
  d f<   t        |	d       d	t        j                  t        j                        j                  z  }d	t        j                  t        j                        j                  z  }| d
v r|n|}t        ||dz
     d d |dz
  f   |
j                         j                  |
z  d|        ||d      \  }}}}	t!        |      }d|||z
  d ||z
  d f<   t        |	d       d	t        j                  t        j                        j                  z  }d	t        j                  t        j                        j                  z  }| d
v r|n|}t        ||dz
     d d |dz
  f   ||j                         j                  z  d|       Z y )Nr   rv   rQ   pstrfr   rP   r-   r    r   rQ   rM  r  r   r   r   r'   r   r1   r  ry   r   r   r/   r   r  r   r6  r   r   )r   r3   r   r}  ry  r  r   pivr_cri   rR  single_atoldouble_atolr-  rH  s                  r4   
test_pstrfr  N  $   J'
U 6 7Q!##E*R$q!A#,2E2Ee2L-LLAAFFHJJAQ!##E*AACCA!!H3TG "#'(C!GH
T1 RXXbjj1555RXXbjj1555!Vm{#a%CE*AFFHJJN$O!!1-3TG "#'(C!GH
T1RXXbjj1555RXXbjj1555!Vm{#a%CE*A

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

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

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

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

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

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

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

Q/%);;A!!H:HqeAqkkH:!!H:HqeAqkkH:< "!QqSM<Mq58a8M<#Aqsm>mU1X1Xm>@	
4B'74($D%u
 Q%(HBq
1E
"4
(CB!$/a5)ICqq6$<DCAD1Ar1E*GAtq	q!BAr-Ar1E*HBqB.IINN1a E2U%8KE4qC%"))..a.001%7!;<C ;:<>s   J/
J5<J;*Kc                    t        d       t        j                  |       j                  dz  }d}t	        ||g|       }t        d|       \  }} |d |d      }t        |d	   d
       |d
   }|d   }|d   }	| t        v r"t        |t        j                  |      d
|       t        ||z  |j                         j                  z  |d
|        |||dd      }t        |d	   d
       |d
   }|d   }| t        v r"t        |t        j                  |      d
|       t        ||z  |j                         j                  z  |d
|       t        |d   |	d
|       y )Nr   r+  rv   r   )geestrexcc                      y Nr   r   s    r4   r  z!test_gees_trexc.<locals>.<lambda>      Dr6   Fr  r   r   rF  r:  rM  rV   rP   r  r   r   r/   r   r   r5   r'   r   r.   r   r   r  ry   )
r3   r-  r   ra   r  r  r  rg  r"  d2s
             r4   test_gees_trexcr    s>   J88E?s"D
A#QF%8A"#4EBKD%.!7FQq	Ar
A	
4B2771:AD9AEAFFHJJ&=1aAFQq	Ar
A2771:AD9AEAFFHJJ&=AdGRad3r6   zt, expect, ifst, ilst)rv  g)\({Gz?gQ?)r  皙r  ffffff?)r  gr  g?)r  r  r  r  )r  lV}gV_?g|?5^?)g?r  gV/?g;On?)r  r  rv  ggj+)            y
ףp=
?
ףp=
׿yRQȿQ?y)\(?      п)r               @yQ
ףp=
yq=
ףpͿp=
ף?)r  r         @      yGz?(\?)r  r  r        @      )r  y1%Ŀq?ys??ܵ|ȿyHzG??ܵ?)r  r  yV/?ݓ?yjt?vտ)r  r  r  yB>٬?=U?)r  r  r  r  c                     d}t        d| j                        } || | ||d      }t        |d   d       |d   } t        || |       y)	zg
    This test implements the example found in the NAG manual,
    f08qfc, f08qtc, f08qgc, f08quc.
    r  r  r   r   )wantqr   r  N)r'   r3   r   r   )rg  ifstilstexpectr-  r  r  s          r4   test_trexc_NAGr    sN    < DWAGG4E1at1-FQq	AFAD)r6   c                    t        d       t        j                  |       j                  dz  }d}t	        ||g|       }t	        ||g|       }t        d|       \  }} |d ||dd      }t        |d	   d
       |d
   }|d   }	|d   }
|d   }|d   |	d   z  }|d   |	d   z  }| t        v rDt        |t        j                  |      d
|       t        |	t        j                  |	      d
|       t        |
|z  |j                         j                  z  |d
|       t        |
|	z  |j                         j                  z  |d
|        |||	|
|dd      }t        |d	   d
       |d
   }|d   }	|d   }
|d   }| t        v rDt        |t        j                  |      d
|       t        |	t        j                  |	      d
|       t        |
|z  |j                         j                  z  |d
|       t        |
|	z  |j                         j                  z  |d
|       t        |d   |	d   z  |d
|       t        |d   |	d   z  |d
|       y )Nr   r+  rv   r   )ggestgexcc                      y r  r   r  s    r4   r  z!test_gges_tgexc.<locals>.<lambda>   r  r6   Fr'  overwrite_br   r   rP   r  rF  r   r:  rM  rV   rQ   rR   r  r  )r3   r-  r   ra   r   r  r  r  r   rg  ri  r"  d1r  s                 r4   test_gges_tgexcr    s'   J88E?s"D
A#QF%8A#QF%8A"#4EBKD%.!QEuMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=1aAq!$FQq	Aq	Aq	Aq	A2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=AdGag%r=AdGag%r=r6   c                 @   t        d       t        j                  |       j                  dz  }d}t	        ||g|       }t        d|       \  }}} |d |d      }t        |d	   d
       |d
   }|d   }	|d   }
| t        v r"t        |t        j                  |      d
|       t        |	|z  |	j                         j                  z  |d
|       t        j                  |      }d|d<   t        |||      }| t        v r ||||	|      }n ||||	||d         }t        |d	   d
       |d
   }|d   }	| t        v r"t        |t        j                  |      d
|       t        |	|z  |	j                         j                  z  |d
|       t        |d   |
d
|       y )Nr   r+  rv   r   )r  trsentrsen_lworkc                      y r  r   r  s    r4   r  z!test_gees_trsen.<locals>.<lambda>0  r  r6   Fr  r   r   rF  r:  rM  rP   rU   r   r   liworkr   r   r/   r   r   r5   r'   r   r.   r   r   r  ry   r   r"   )r3   r-  r   ra   r  r  r  r  rg  r"  r  selectr   s                r4   test_gees_trsenr  %  s   J88E?s"D
A#QF%8A/( 7D% .!7FQq	Ar
A	
4B2771:AD9AEAFFHJJ&=XXa[FF1I;2Evq!51vq!5qBQq	Aq	A2771:AD9AEAFFHJJ&=AdGRad3r6   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)\(?)rP   r   r   rP   g      ?g(\	@)yqh yfc]F?ڊe׿yMbȿ&S?y&1??п)r  y      ?5^I @yo0*yZd;OͿ~:p?)r  r  yx$(@4@y[ A?&?)r  r  r  y?ܵ@St$)y?ܵ꿽R!uy2U0*6[?yV-?=yXy8m4?1%̿)ySt$?\mҿyʡE?S㥛?y~:p	cڿyK7A`?[ A?)y:pΈ~jtԿyH}?9#J{yH}?	cZy+eXw?-ٿ)y"u?	c?y?տN@ayRQȿ{GzĿyh"lxz?EGrǿ)y47)yS!uqF%u@yyտGx$(?y3ı.n?rh|)yv?
F%uyd`TR?I&ۿyN@?ݓy4@
@	^)?)ys{
@ o_yH.@|Pk@y0*?*:Hy]m{?Gz)y)0[<?yI.!? ryqh 
@ׁsF?y1w-!?h ogRQ?gK?c                    d}d}t        d| j                        \  }}	t        |	||       }
| j                  t        v r ||| ||
      }n ||| ||
|
d         }t	        |d   d	       |d	   } |d   }| j                  t        v r|d
   }|d   }n
|d   }|d   }t        ||| z  |j                         j                  z  |       t        |d|z  |       t        |d|z  |       y)zW
    This test implements the example found in the NAG manual,
    f08qgc, f08quc.
    r  r  )r  r  r   r   rP   r  r   r   rS   rT   rU   r  N)r'   r3   r"   r.   r   r   r  ry   )rg  ri  r  r  expect_s
expect_sepr-  atol2r  r  r   r  r   seps                 r4   test_trsen_NAGr  S  s    ` DE) 1E; ;2Eww. vq!51vq!5qBQq	Aq	Aww. 1IQi1IQiFAEAFFHJJ.T:Ha!e%0JCe4r6   c                    t        d       t        j                  |       j                  dz  }d}t	        ||g|       }t	        ||g|       }t        d|       \  }}} |d ||dd      }t        |d	   d
       |d
   }	|d   }
|d   }|d   }|	d   |
d   z  }|	d   |
d   z  }| t        v rDt        |	t        j                  |	      d
|       t        |
t        j                  |
      d
|       t        ||	z  |j                         j                  z  |d
|       t        ||
z  |j                         j                  z  |d
|       t        j                  |      }d|d<   t        |||	|
      }|d
   dz   |d   f} |||	|
|||      }t        |d	   d
       |d
   }	|d   }
|d   }|d   }| t        v rDt        |	t        j                  |	      d
|       t        |
t        j                  |
      d
|       t        ||	z  |j                         j                  z  |d
|       t        ||
z  |j                         j                  z  |d
|       t        |	d   |
d   z  |d
|       t        |	d   |
d   z  |d
|       y )Nr   r+  rv   r   )r  tgsentgsen_lworkc                      y r  r   r  s    r4   r  z!test_gges_tgsen.<locals>.<lambda>  r  r6   Fr  r   r   rP   r  rF  r   r:  rM  rU   r   ir  r  r  )r3   r-  r   ra   r   r  r  r  r  r   rg  ri  r"  r  r  r  r   s                    r4   test_gges_tgsenr    sl   J88E?s"D
A#QF%8A#QF%8A/( 7D% .!QEuMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=XXa[FF1I;15E 1XaZq"E61aAU3FQq	Aq	Ar
Ar
A2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=AdGag%r=AdGag%r=r6   za, b, c, d, e, f, rans, lans)r   r   r   r   )r  r#  r   r   )r  r   r#  r   )r  r  r  g      @)r   r   r   r   )r  r  r  r   )      r   r   g      (@)g      "r          r
  )r	  r   r
  r   )      r   r  g      3@)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  r   )r  r   g       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   r  )r   r  r   r   c	                 \   d}	t        d|      }
 |
| |||||      \  }}}}}t        |d       t        |ddt        j                  |      j
                  dz  d       t        |d	dt        j                  |      j
                  dz  d
       t        |||	d       t        |||	d       y )Nr  tgsylr   r   r   r+  zSCALE must be 1.0r   r-  r  r  zDIF must be nearly 0zSolution for R is incorrect)r-  r  zSolution for L is incorrect)r'   r   r   r/   r   r   )ra   r   r   rp   r  rd   ranslansr3   r-  r  routloutr\   difri   s                   r4   test_tgsyl_NAGr    s    H Dge4E#(Aq!Q#: D$sDqE3QRXXe_-@-@-D/1C1288E?+>+>s+B24D$T9;D$T9;r6   r   )rQ  ry   ijob)r   rP   rQ   rR   rS   c           
         | t         j                  k(  rdnd}t         j                  j                  d      }d\  }}t	        |j                  dd||g      j                  |       |j                  dd||g      j                  |       d      ^}}}	t	        |j                  dd||g      j                  |       |j                  dd||g      j                  |       d      ^}
}}	|j                  d	d
||g      j                  |       }|j                  d	d
||g      j                  |       }t        d|       } |||
||||||      \  }}}}}|dk(  sJ d       |dk\  sJ d       |dk(  r1t        |ddt        j                  |       j                  dz  d       n|dk\  sJ d       |d
k  r|dk(  r!||z  ||
z  z
  }||z  }||z  ||z  z
  }||z  }nt|dk(  rot        j                  |      |z  t        j                  |      |z  z   }||z  }|t        j                  |
      z  |t        j                  |      z  z   }d|z  |z  }t        |dd       t        |dd       y y )NgMbP?g|=l   OElt/ r  irv   r   )outputr  rQ   r  r   )r   r  r   zINFO is non-zeror  zSCALE must be non-negativer+  zDIF must be 0 for ijob =0r  zDIF must be non-negativerQ  ry   r  zlhs1 and rhs1 do not match)r-  r   r  zlhs2 and rhs2 do not match)r/   r  r0   default_rngr!   uniformr1   r'   r   r   r   rh  )r3   r   r  r-  rngr   r   ra   rp   r?   r   r  r   rd   r  r  r  r\   r  ri   lhs1rhs1lhs2rhs2s                           r4   
test_tgsylr     s   
 BJJ&4ED
))

 0
1CDAq#++c21v.55e<++c21v.55e<!HAq1 #++c21v.55e<++c21v.55e<!HAq1 	BAq6"))%0ABAq6"))%0Age4E#(Aq!Q/44$A D$sD 19(((9C<555<qySqrxx/B/B3/F ;	= cz555z qyC<t8dQh&D7Dt8dQh&D7Dc\<<?T)BLLOd,BBD7D",,q/)D2<<?,BBD:a<DdB <	>dB <	> r6   r)  )	functoolsr   numpy.testingr   r   r   r   r   r	   rA   r
   r  numpyr/   r   r   r   r   r   r   r   r   numpy.randomr   r   r   scipy.linalgr   r9   r   r   r   r   r   r   r   r   r   r    r!   scipy.linalg.lapackr"   scipy.statsr#   r$   scipy.sparsesparserV  scipy.__config__r%   ImportErrorr&   r8   r'   scipy.linalg.blasr(   r  r6  r   r  
complex128r.   r   blas_providerblas_versionr5   rL   rN   r   r   rp  rq  r  r  r  r!  rC  r~  r  r  r  r  r  r  r  r  r  r  r  r  r1  r:  r@  rG  rL  rT  r^  r`  r  r  r  r  skipifr  r  r3  r  r  r  r   r  r  r  r  r  r	  r  r  r  r#  r+  r0  r2  r4  r8  rI  rL  r^  rc  rk  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r6   r4   <module>r1     s  
 / /  * ! ! ! - ,F F F F / 2 '0 1 ,zz2::&,,.	~	%# #	/08@M./7	BL0O.]- ]-@
 
p9 p9f &)"BC D *- -*C C(; ;@I/ I/X).'4T'6T48AG AGHL L^.?bA63>1>FD&DR7!t7:t&8R36D@"DJD4 LFUK UKp%PP%PP*/Z< DK  MKMK$:> &&!12+.q*q*q*!Q(!Q(b& ) ) + + + / 3b&J +.  / F (!1+!1+!1+!1+!1+!1+'11 9#288%?%?%@%=%?%?%A B $288$DE#288%G%F%E%H%G%G%I J $288%G%H%F%G%I JK LM$,%M$,  &)XK *XKv L#288$9:%RXX&@A%RXX&;<%RXX&9:%RXX&BC%RXXl3%RXXo6%RXXSz(,d|(+T{(+U|(+T{	') * &RXXAw()2w()2w(*Bx(*Aw	'0 12& &RXX&GH%RXX '4 5 &RXX&FG%RXX 'A B%RXX ': ;%RXX&?@%RXXo6%RXX*'=(3\'B(4i'@(3['A(1:'>	'@ A
 &RXX'7(.'7(.'8(/'8(.'7	'9 :%%)* V W* V ( &)"BC D * [;6?A,&A,&^ [;6?A0A0 [;6?AMAM$ A""((#56""((?3""((#45""((#89""((QGaVaVb"X%&G$- .""((S!Hq"g2wQ%&G$- . #"((#34""((#>?""((=1""((#56""((VW$57G%+V$4vv6F$H I""((T5MD$<$%)4L$2 3	E &1'&1.> )V[;%>?AeAh/& 0A&< )V[;%>?AeAh/	 0A	 )V[;%>?AeAh/	N 0A	N )V[;%>?AeAh/	 0A	 :#288$;<#288$56#288$DE#288%F%G%G%F%H I	J 	=	= &)(@A=$ B *=$@. #>?t-	L . @	L D%=1t-
L . 2
L 6*01	' 2 +	' 6*+C ++C\ &)t}5#s,7@ - 6 *7@t &)1v.#s,-B - / *-B` &(+t}5#s,-< - 6 ,-<` #288$9:#288$?@#288$9:#288c3Z#tsDk&(%[3+%? @#288b!Wq"g2wR&(!W%. /0 $288$EF#288 %> ?#288$DE#288h
%;&1;%?&2H%=&1;%?&/%<	%> ?
 $288ff%57G&,g%6&8I&,f%5%7 89:;());() )3v{1<8= ,> ?,NO  ?@BC
1:C?1:h )3v{1<8= ,> ?,NO  ?@BC
KC?K( )3v{1<8= ,> ?,NO  ?@BC
"C?"J #288$67#288O4#288aWq!fq!fr2h&'W%. /#288c1X2wB&(!Wq"g%7 8	9 $288$45#288$?@#288h	%:&.%9&.%9&.%9%; < $288fg%6&,f%5&,f%5&,f%5%7 8	9:;"
*#;"
* 5$-0&)+= * 1+=\ &)!4 *!4H bhh))*)+ , bhh21113 4  bhhJKHHJ K bhh 55567 8 0*10*  &),> *,>^ &)*4 **4Z 0bhh11213 4 bhh03313 4 bhh21324 5 bhh| bhh 67556 7 bhh 56567 8 bhh 65556 7 bhh|3')T5U)T5B &)5> *5>p "bhh((((* + bhh((((* + bhh((((* + bhh((((* + bhh((((* + bhh((((* + bhh((((* + bhh((((* +9, -!.D +.; /E!.F;" +.*-1-> 2 . /->eg  F
  Gs.   4AL	 ;AL L	ALLALLAL"L!AL"