
    Ug                     R   d dl Z d dlZd dlZd dlmZmZmZmZm	Z	 d dl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mZmZmZ d dlmZmZ d dlZd dlm Z!m"Z"m#Z#m$Z$ 	 d dlm%Z& n# e'$ r dZ&Y nw xY weegZ(eegZ)e(e)z   Z*d Z+d	 Z, G d
 d          Z- G d d          Z. G d d          Z/ G d d          Z0d$dZ1 G d d          Z2 G d d          Z3 G d d          Z4 G d d          Z5 G d d          Z6d Z7ej8        9                    dd !          d"             Z:d# Z;dS )%    N)assert_equalassert_almost_equalassert_assert_array_almost_equalassert_allclose)raises)float32float64	complex64
complex128arangetriutrilzerostril_indicesonesmoddiagappendeyenonzero)randseed)_fblasget_blas_funcstoeplitzsolve)_cblasc            	      ~   t          dt          j        dt          j        d          t          j        dt          j        d          f          \  } }}t          | j        d           t          |j        d           t          *t          | j        d           t          |j        d           t          d          } t          | j        d	           t          d
t          j                  } t          | j        d           t          d
d          } t          | j        d           t          d
t          j	                  } t          | j        d           t          dt          j        dt          j
                  t          j        dt          j                  f          } t          | j        d           d S )N)axpyr    r       r"   F)dtypeorderCzcblasrotgdgemmr$   cr    )r   npemptyr   r   r   typecoder(   module_nameclongdoubler
   )f1f2f3s      [/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/linalg/tests/test_blas.pytest_get_blas_funcsr7      s      	&C	8	8	8	&S	9	9	9	;
 
JBB c"""c"""R^W---R^W--- 
		Bc""" 
bl	3	3	3Bc"""	c	*	*	*Bc""" 
bn	5	5	5Bc""" 
&
;;;&===?
 
B c"""""    c                      t          dt          j                  \  } }| j        dk    sJ |j        dk    sJ t          dt          j                  \  } }}| |u sJ | |u sJ d S )N)nrm2dotr,   r-   )r;   dotcdotu)r   r.   r   r0   r
   )fghs      r6   test_get_blas_funcs_aliasrA   E   sy    />>>DAq::4BJGGGGAq!6666666666r8   c                       e Zd Zd ZdS )TestCBLAS1Simplec                    dD ]@}t          t          |dz   d           }|t           |g dg dd          g d           AdD ]@}t          t          |dz   d           }|t           |g d	g dd          g d
           Ad S Nsdr       r"      )r"   rI      a)   	      cz)rH                  @rI   )rN   y            $@rP   )getattrr(   r   selfpr>   s      r6   	test_axpyzTestCBLAS1Simple.test_axpyR        	2 	2Aqx..Ay%aa			:::&C&C&C&0jj2 2 2 2 	6 	6Aqx..Ay%aa


JJJ!&D&D&D&4nn6 6 6 6		6 	6r8   N)__name__
__module____qualname__rW    r8   r6   rC   rC   P   s#        6 6 6 6 6r8   rC   c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestFBLAS1Simplec                    dD ]@}t          t          |dz   d           }|t           |g dg dd          g d           AdD ]@}t          t          |dz   d           }|t           |g d	g dd          g d
           Ad S rE   rS   fblasr   rT   s      r6   rW   zTestFBLAS1Simple.test_axpyc   rX   r8   c                    dD ]@}t          t          |dz   d           }|t           |g ddgdz            g d           AdD ]@}t          t          |dz   d           }|t           |g ddgdz            g d           Ad S )NrF   copy)rI      rK      rI   rQ   )rI                 @y      @      @r`   rT   s      r6   	test_copyzTestFBLAS1Simple.test_copyq   s     	F 	FAqx..Ay%aa			A3q5&9&9999EEEE 	N 	NAqx..Ay%aas1u&=&=}}}MMMM		N 	Nr8   c                     dD ]9}t          t          |dz   d           }|t           |g d          d           :dD ]9}t          t          |dz   d           }|t           |g d          d           :d S )NrF   asumrI   rK      )scdz              @rk         @         rS   ra   r   rT   s      r6   	test_asumzTestFBLAS1Simple.test_asum}   s     	3 	3Aqx..Ay***r2222 	7 	7Aqx..Ay... 1 126666		7 	7r8   c                     dD ]<}t          t          |dz   d           }|t           |g dg d          d           =d S )NrF   r;   rj   )r"   rK   rH   rs   rT   s      r6   test_dotzTestFBLAS1Simple.test_dot   s_     	> 	>Aqw--Ay***iii 8 8"====		> 	>r8   c                     dD ]<}t          t          |dz   d           }|t           |g dg d          d           =d S )NrQ   r=   ro   r"   rI   rH   y      "       @rs   rT   s      r6   test_complex_dotuz"TestFBLAS1Simple.test_complex_dotu   sc     	E 	EAqx..Ay...))) < <eDDDD		E 	Er8   c                     dD ]<}t          t          |dz   d           }|t           |g dg d          d           =d S )NrQ   r<   ro   r"   rp   rH   y      @      ,rs   rT   s      r6   test_complex_dotcz"TestFBLAS1Simple.test_complex_dotc   sc     	F 	FAqx..Ay...*** = =uEEEE		F 	Fr8   c                 >   dD ]K}t          t          |dz   d           }|t           |g d          t          j        d                     LdD ]K}t          t          |dz   d           }|t           |g d          t          j        d                     Ld S )NrF   r:   rj   2   )r-   r'   rm   rn   ro   )rS   ra   r   mathsqrtrT   s      r6   	test_nrm2zTestFBLAS1Simple.test_nrm2   s     	> 	>Aqx..Ay***ty}}====' 	B 	BAqx..Ay... 1 149R==AAAA		B 	Br8   c                    dD ]<}t          t          |dz   d           }|t           |dg d          g d           =dD ]<}t          t          |dz   d           }|t           |dg d          g d	           =d
D ]<}t          t          |dz   d           }|t           |dg d          g d           =d S )NrF   scalr"   rj   )   i
   rQ   rp   ro   )rv   y             (y      (@      "@)cszdrI   )y              "@iy      "@      (r`   rT   s      r6   	test_scalzTestFBLAS1Simple.test_scal   s    	E 	EAqx..Ay%aa:::&6&6DDDD 	P 	PAqx..Ay%aaNNN&;&;=N=N=NOOOO 	N 	NAqx..Ay%aa>>>&:&:<L<L<LMMMM		N 	Nr8   c                 f   dD ]U}t          t          |dz   d           }|g dg d}} |||          \  }}t          ||           t          ||           VdD ]U}t          t          |dz   d           }|g dg d}} |||          \  }}t          ||           t          ||           Vd S )NrF   swapry   )rI   rN   rQ   r|   )r   rI   y      @      r`   )rU   rV   r>   xyx1y1s          r6   	test_swapzTestFBLAS1Simple.test_swap   s     	- 	-Aqx..Ay99jjjqAQq!WWFB%b!,,,%b!,,,, 	- 	-Aqx..Ay::}}}qAQq!WWFB%b!,,,%b!,,,,	- 	-r8   c                     dD ]8}t          t          d|z   dz             }t           |g d          d           9dD ]8}t          t          d|z   dz             }t           |g d          d           9d S )NrF   iamax)r   rd   rI   rH   rQ   )y      @      @r   )rS   ra   r   rT   s      r6   	test_amaxzTestFBLAS1Simple.test_amax   s     	+ 	+As1uV|,,A:::**** 	. 	.As1uV|,,A===))1----	. 	.r8   N)rY   rZ   r[   rW   rg   rt   rw   rz   r}   r   r   r   r   r\   r8   r6   r^   r^   a   s        6 6 6
N 
N 
N
7 
7 
7> > >E E EF F F
B 
B 
BN N N"- - -$. . . . .r8   r^   c                   n    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )TestFBLAS2Simplec           
         dD ]_}t          t          |dz   d           }|t           |ddggdg          dg           t           |ddggdgddg          dg           `dD ]_}t          t          |dz   d           }|t           |d	d
ggdg          dg           t           |d	d
ggdgddg          dg           `d S )NrF   gemvrI   rk   rK   rQ   rp   rq         H      B              @      H      5r`   rT   s      r6   	test_gemvzTestFBLAS2Simple.test_gemv   s    	H 	HAqx..Ay%aaQC52$&7&7#???%aaQC52$A3&?&?#GGGG 	1 	1Aqx..Ay%aadVHrd&;&;gYGGG%aadVHrdAt&D&D'.i1 1 1 1	1 	1r8   c                    dD ]}t          t          |dz   d           }|t           |dddgddg          ddgddgg           t           |dg d	ddg          ddgd
dgddgg           t           |dddgddgddgddgg          ddgdd
gg           dD ]k}t          t          |dz   d           }|t           |dddgddg          ddgddgg           t           |dg dddg          ddgd
dgddgg           ldD ]p}dD ]k}t          t          ||z   d           }|t           |dddgddg          ddgddgg           t           |dg dddg          ddgd
dgddgg           lqd S )NrF   gerrH   r"   rI   rd   r   re   rG   rl      rP      rL   rO   rQ   geru              ?rp   rf   r   )r   rR   rp   )r   gercr`   )rU   rV   r>   names       r6   test_gerzTestFBLAS2Simple.test_ger   s    		P 		PAqw--Ay%aaAq6Aq6&:&:aVaV<LMMM%aa999q!f&=&=()1vBx"b&BD D D &aaAq6Aq6,-q6Aq6*:'< '< '<?@!fq"g=NP P P P  	D 	DAqx..Ay%aaB7QF&;&;(*Bx!Q&8: : :%aaLLL2r(&C&C()1vBx"b&BD D D D  	H 	HA' H HE1T64009)!!AAwA*?*?,.8aV*<> > >)!!A|||b"X*F*F,-q6B8b"X*FH H H HH	H 	Hr8   c                 |   t          j        ddd          }t          j        |d d t           j        f         |z            }t          j        |d d dt           j        f         |d d d         z            }t          j        dddd	
          }t          j        ddd                              d          }t          j        |d d t           j        f         |z            }t          j        |d d dt           j        f         |d d d         z            }t          j        |d d t           j        f         |                                z            }t          j        |d d dt           j        f         |d d d                                         z            }	t           j        t          j        d          |t          j        d          f         	                                }
t          dddg          D ]\  }}t          t          |dz   d           }|"t           |d|          ||           t           |d|d          |j        |           t           |d|ddd          ||           t           |d|ddd          ||           t          j        d|dk    rdndd          } |d||d          }t          |||            |d||          }t          ||u           t          |d |z  |           t!          t"          |d|d!           t!          t"          |d|d"           t!          t"          |d|d"           t!          t"          |d|d#           t!          t"          |d|d#           t!          t"          |d|d           t!          t"          |d|t          j        d$dd                     t          d%ddg          D ]\  }}t          t          |dz   d           }|"t           |d|          ||           t           |d|d          |j        |           t           |d|
d dd          ||           t           |d|
d&dd          ||           t          j        d|d'k    rdndd          } |d||d          }t          |||            |d||          }t          ||u           t          |d |z  |           t!          t"          |d|d!           t!          t"          |d|d"           t!          t"          |d|d"           t!          t"          |d|d#           t!          t"          |d|d#           t!          t"          |d|d           t!          t"          |d|t          j        d$dd                     t          d%ddg          D ]\  }}t          t          |d(z   d           }|"t           |d|          ||           t           |d|d          |j                                        |           t           |d|
d dd          ||           t           |d|
d&dd          |	|           t          j        d|d'k    rdndd          } |d||d          }t          |||            |d||          }t          ||u           t          |d |z  |           t!          t"          |d|d!           t!          t"          |d|d"           t!          t"          |d|d"           t!          t"          |d|d#           t!          t"          |d|d#           t!          t"          |d|d           t!          t"          |d|t          j        d$dd                     d S ))NrH   rK   r*   r,   rJ   r         !@   FendpointrO   Drd   rF   Hz>+=syr      ?rtolTlowerr"   )incxoffxnr   rd   rd   sr>   r#   rM   overwrite_a       @rL   rI   r   r   r   r!   rQ   r-   her)r.   r   r   newaxislinspaceviewconjc_r   ravelziprS   ra   r   Tr   assert_raises	Exception)rU   r   resxresx_reverser   r'   reszresz_reverserehzrehz_reversewrV   r   r>   rM   bs                   r6   test_syr_herzTestFBLAS2Simple.test_syr_her  s0   Ia#&&&wqBJ'!+,,wq2rz!12QtttW<==K3U333Ia#&&&++C00wqBJ'!+,,wq2rz!12QtttW<==wqBJ'!&&((233wq2rz!12QtttW\\^^CDDE"(1++q"(1++-.44664$// 	N 	NGAtqw--AyAAc1IIt$7777AAc1D11146EEEEAAc111:::DtLLLLAAc12A;;;(t5 5 5 5 Sc3??A#qA4000AAt$////#qAAAQJAqvD1111)QQQ7777)QQQ7777)QQR8888)QQ"5555)QQ!4444)QQa8888)QQ"(632L2LMMMMM4$// 	N 	NGAtqw--AyAAc1IIt$7777AAc1D11146EEEEAAc111:::DtLLLLAAc12A;;;(t5 5 5 5 Sc3??A#qA4000AAt$////#qAAAQJAqvD1111)QQQ7777)QQQ7777)QQR8888)QQ"5555)QQ!4444)QQa8888)QQ"(632L2LMMMMM4$// 	N 	NGAtqw--AyAAc1IIt$7777AAc1D11146;;==tLLLLAAc111:::DtLLLLAAc12A;;;(t5 5 5 5 Sc3??A#qA4000AAt$////#qAAAQJAqvD1111)QQQ7777)QQQ7777)QQR8888)QQ"5555)QQ!4444)QQa8888)QQ"(632L2LMMMMM3	N 	Nr8   c                    t          j        ddd          }t          j        ddd          }t          j        |d d t           j        f         |z  |d d t           j        f         |z  z             }t          j        |d d dt           j        f         |d d d         z  |d d dt           j        f         |d d d         z  z             }t          j        ddd	d
          }t          dddg          D ]\  }}t          t          |dz   d           }|"t           |d||          ||           t           |d||d          |d dd df         |           t           |d||d          |j	        |           t           |d||dddd          ||           t           |d||ddddd          |d dd df         |           t           |d||dddd          ||           t          j
        d|dk    rdndd          }	 |d|||	d          }
t          |	||            |d |||	!          }
t          |	|
u           t          |
d|z  |           t          t          |d||d"           t          t          |d||d#           t          t          |d||d#           t          t          |d||d$           t          t          |d||d%           t          t          |d||d%           t          t          |d||d           t          t          |d||d           t          t          |d||d           t          t          |d||t          j
        d&dd          !           d S )'NrH   rK   r*   r,   rO   rJ   r   r   r   Fr   rF   r   r   syr2r   r   rI   r   Tr   r"   r   r   r   incyoffyr   r   r   r   r   r   r   r   r>   r#   r   r   rL   r   r   r   r   r!   )r.   r   r   r   r   r   rS   ra   r   r   r   r   r   r   )rU   r   r   resxyresxy_reverseqrV   r   r>   rM   r   s              r6   	test_syr2zTestFBLAS2Simple.test_syr2h  s&   Ia#&&&Ia#&&&!!!RZ-(1,qBJ/?!/CCDD$$B$
"2 3a"g ="#DDbD"*$4"5$$B$"?!@ A A K3U3334$// "	8 "	8GAtqx..AyAAc1aLL%d;;;;AAc1a1---uRaR!V}4HHHHAAc1at444egDIIIIAAc1aaaabIII!. . . .AAc1aaaabANNN!"1"bqb&M6 6 6 6 AAc1abqrKKK)6 6 6 6 Sc3??A#q!qd333AAu40000#q!q!!!AAQJAqwT2222)QQ::::)QQ::::)QQ;;;;)QQ::::)QQ::::)QQ;;;;)QQR8888)QQQ7777)QQ;;;;)QQHVS#668 8 8 8 8C"	8 "	8r8   c                 	   t          j        ddd                              d          }t          j        ddd                              d          }|d d t           j        f         |                                z  |d d t           j        f         |                                z  z   }t          j        |          }|d d dt           j        f         |d d d                                         z  }||d d dt           j        f         |d d d                                         z  z  }t          j        |          }t           j        t          j        d          |t          j        d          f                                         }t           j        t          j        d          |t          j        d          f                                         }t          d	d
dg          D ]\  }}t          t          |dz   d           }	|	"t           |	d||          ||           t           |	d||d          |d dd df         |           t           |	d||d          |j                                        |           t           |	d||dddd          ||           t           |	d||ddddd          |d dd df         |           t           |	d||dddd          ||           t          j        d|dk    rdndd          }
 |	d|||
d          }t          |
||            |	d|||
          }t          |
|u           t          |d|z  |           t          t           |	d||d           t          t           |	d||d           t          t           |	d||d            t          t           |	d||d!           t          t           |	d||d"           t          t           |	d||d "           t          t           |	d||d            t          t           |	d||d           t          t           |	d||d#           t          t           |	d||t          j        d$dd                     d S )%NrH   rO   r*   r,   r   r   rJ   rd   rQ   r   r   her2r   r   rI   r   Tr   r   r   r   r   r-   r#   r   r   rL   r   r   rK   r   r   r   r   r"   r!   )r.   r   r   r   r   r   r   r   r   r   rS   ra   r   r   r   r   r   )rU   r   r   r   r   uvrV   r   r>   rM   r   s               r6   	test_her2zTestFBLAS2Simple.test_her2  s   Ia#&&&++C00Ia3''',,S11!!!RZ- 16688+a2:.>.II$$B$
*+a"gllnn<44R4+,q2w||~~==..E"(1++q"(1++-.4466E"(1++q"(1++-.44664$// #	8 #	8GAtqx..AyAAc1aLL%d;;;;AAc1a1---uRaR!V}4HHHHAAc1at444egllnn!%' ' ' ' AAc1aaaaaHHH!. . . .AAc1aaaaa1MMM!"1"bqb&M6 6 6 6 AAc1abqrJJJ)6 6 6 6 Sc3??A#q!qd333AAu40000#q!q!!!AAQJAqwT2222)QQ::::)QQ::::)QQ;;;;)QQ::::)QQ::::)QQ;;;;)QQR8888)QQQ7777)QQ;;;;)QQHVS#668 8 8 8 8E#	8 #	8r8   c                    t          d           t          t                    D ]\  }}d}d}d}d}t          t	          t          |dz             t          ||z
  dz
                      t	          t          |dz             t          ||z
  dz
                                }|                    |          }t          ||z   dz   |f|          }|d         |dd df<   |d         |ddd	f<   |d
         |dddf<   |d         |dd df<   t          |                              |          }	t          |                              |          }
 |d           |d          }}t          d|          \  } ||||||||	|
|	  	        }||	                    |	          z  ||
z  z   }t          ||            ||||||||
|	|d
  
        }||j        	                    |
          z  ||	z  z   }t          ||           d S )N  rN   rK   rH   r"   r,   )r   r   )r   rH   r   )r   r"   r   )rH   r   rI   rd   r   )gbmv)	mr   kuklalpharM   r   r   beta)
r   r   r   r   r   rM   r   r   r   trans)r   	enumerateDTYPESr   r   r   r   astyper   r;   r   r   )rU   indr$   r   r   r   r   AAbr   r   r   r   funcr   y2s                   r6   	test_gbmvzTestFBLAS2Simple.test_gbmv  s/   T


#F++ 	. 	.JCAABBRT

E!B$q&MM::RT

E!B$q&MM::< <AA2a|5111B $Bq"1"uI4Bq!A#vJ4Bq!A#vJ$Bq"1"uIQu%%AQu%%A%((EE"II4E"9E:::EDQ2"ERQT+ + +Bq!D1H,B%b"---Q2"ERQT4 4 4B#dQh.B%b"----=	. 	.r8   c           	         t          d           t          t                    D ]\  }}d}d}t          ||f|          }t          |dz   |f|          }t	          |          |t          |          t          |          f<   t          d|dz             D ]E}t	          ||z
            }||t          ||z
            t          ||          f<   ||d|z
  |d f<   F|                    |          }|dk     r
||j        z   n||	                                j        z   }t          |          |dd d f<   t	          |                              |          }	t	          |                              |          }
 |d           |d          }}|dk    rt          d	|          \  }nt          d
|          \  } |||||	|
|          }||                    |	          z  ||
z  z   }t          ||           d S )Nr   r   r"   r,   rH   rJ         ?rI   )hbmv)sbmv)kr   rM   r   r   r   )r   r   r   r   r   r   ranger   r   r   r   r   r;   r   )rU   r   r$   r   r   r   r   ind2tempr   r   r   r   r   r   r   s                   r6   test_sbmv_hbmvzTestFBLAS2Simple.test_sbmv_hbmv  s   T


#F++ 	. 	.JCAAq!fE***A!Qxu---B '+1ggAfQii"#a1 * *AdF||59&4..&q//12%)2d7DEE>""A77ACAFFHHJAQBr111uIQu%%AQu%%A%++uuQxx4EQww&y>>>&y>>>"QTBBBBq!D1H,B%b"----3	. 	.r8   c                    t          d           t          t          t          z             D ]=\  }}d}t	          ||                              |          }|dk    r|t	          ||          dz  z  }|                    |          }|dk     r
||j        z   n||                                j        z   }t          |          \  }}|||f         }t	          |                              |          }t	          |                              |          }	t          d|z                                |          }
t          d|z                                |          } |d           |d          }}|dk    rt          d|	          \  }nt          d
|	          \  } ||||||	|          }||                    |          z  ||	z  z   }t          ||            ||dz
  |||
||dd||
  
        }||d dd df         z                      |
dd d                   ||dd d         z  z   }t          |dd d         |           t          |d         |d                    ?d S )Nr   rI   rH   r   rd   r"   r   )hpmvr,   )spmv)r   r   apr   r   r   )
r   r   r   r   r   r  r   r   r   r   rJ   )r   r   r   COMPLEX_DTYPESr   r   r   r   r   r   r   r   r;   r   r   )rU   r   r$   r   r   r-   rApr   r   xlongylongr   r   r   r   r   s                    r6   test_spmv_hpmvzTestFBLAS2Simple.test_spmv_hpmv  so   T


#F>$9:: 	1 	1JCAQ

!!%((AQwwT!QZZ]"A77ACAFFHHJA??DAq1a4BQu%%AQu%%A1Q3KK&&u--E1II$$U++E%++uuQxx4EQww&y>>>&y>>>2adCCCBq!D1H,B%b"--- !5tu"1116 6 6B!CRC"H+%**5A;77$qt!t:LLB%bAh3331uQx00009	1 	1r8   c                 ,   t          d           t          t          t          z             D ]\  }}d}t	          ||                              |          }|dk    r|t	          ||          dz  z  }|                    |          }|dk     r
||j        z   n||                                j        z   }t          |          \  }}|||f         }t	          |                              |          }t          t          z   t          |d                   d          }	|dk    rUt          d|          \  }
|	|d d d f                             |d d d f                                                   z  |z   }nBt          d	|          \  }
|	|d d d f                             |d d d f                   z  |z   } |
||	||
          }t          d|          }||||f<   |dk    r|                                n||||f<   t          ||           d S )Nr   rI   rH   r   rd   g      @)hprr,   )spr)r   r   r  r   rI   rI   )r   r   r   r  r   r   r   r   r   r   r   r;   r   r   )rU   r   r$   r   r   r-   r	  r
  r   r   r   r   r   y1fs                 r6   test_spr_hprzTestFBLAS2Simple.test_spr_hpr&  s
   T


#F>$9:: 	/ 	/JCAQ

!!%((AQwwT!QZZ]"A77ACAFFHHJA??DAq1a4BQu%%AN*CQKK8==EQww&xu===Qqqq$wZ^^AdAAAgJOO,=,=>>>B&xu===Qqqq$wZ^^AdAAAgJ777!;2333Be,,,CC1I%(1WW			"C1I%c2..../	/ 	/r8   c                 (   t          d           t          t                    D ]\  }}d}t          ||                              |          }|dk    r|t          ||          dz  z  }|                    |          }|dk     r
||j        z   n||                                j        z   }t          |          \  }}|||f         }t          |                              |          }t          |                              |          }	 |d          }
|dk    rt          d|          \  }nt          d|          \  }|
                                |d d d f         	                    |	d d d f                                                   z  }||z   |                                j        z   } |||
||	|	          }t          d
|          }||||f<   |g d                                         |g dg df<   t          ||           d S )Nr   rI   rH   r   r"   )hpr2r,   )spr2)r   r   r   r   r  r  )rH   rI   rd   )rH   r"   r"   )r   r   rH   )r   r   r   r   r   r   r   r   r   r;   r   r   )rU   r   r$   r   r   r-   r	  r
  r   r   r   r   r   r   r   r  s                   r6   test_spr2_hpr2zTestFBLAS2Simple.test_spr2_hpr2A  s   T


#F++ 	/ 	/JCAQ

!!%((AQwwT!QZZ]"A77ACAFFHHJA??DAq1a4BQu%%AQu%%AE!HHEQww&y>>>&y>>>

qDz~~aaaajoo.?.?@@@AQ#B!qR888Be,,,CC1I(*999(:(:(<(<C			999$%%c2....1	/ 	/r8   c                    t          d           t          t                    D ]R\  }}d}d}t          |                              |          }t          ||f|          }t          |dz             D ]7}t          ||z
            |t          ||z
            t          ||          f<   8|dk    rR|t          |          xx         dt          |dz   |z  ||dz   z  dz  z
                                |          z  z  cc<   t          |dz   |f|          }t          |dz             D ]}	t          ||	          ||	 dz
  |	d f<   t          d	|          \  }
 |
|||
          }|                    |          }t          ||            |
|||d          } |d          |t          |          t          |          f<   |                    |          }t          ||            |
|||dd          }|j                            |          }t          ||            |
|||dd          }|                                j                            |          }t          ||           Td S )Nr   r   rI   r,   rH   r   r"   r   )tbmvr   rM   r   r   rM   r   r   r   rM   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r;   r   r   r   rU   r   r$   r   r   r   r   supr   rowr   r   r   s                r6   	test_tbmvzTestFBLAS2Simple.test_tbmv]  s   T


#F++ "	. "	.JCAAQu%%Aq!fE***AQqSzz ? ?37#;;&3--Q/00 Qww'!**dAaC7AqsGQJ+?&@&@&G&G&N&N!NN !Qxu---BQqSzz 2 2#'S>>>C46344<  "9E:::EDR1%%%BqB%b"---R11---B&+eAhhAfQii"#qB%b"---R11A666BB%b"---R11A666B""B%b"----E"	. "	.r8   c                    t          d           t          t                    D ]>\  }}d}d}t          |                              |          }t          ||f|          }t          |dz             D ]7}t          ||z
            |t          ||z
            t          ||          f<   8|dk    rR|t          |          xx         dt          |dz   |z  ||dz   z  dz  z
                                |          z  z  cc<   t          |dz   |f|          }t          |dz             D ]}	t          ||	          ||	 dz
  |	d f<   t          d	|          \  }
 |
|||
          }t          ||          }t          ||            |
|||d          } |d          |t          |          t          |          f<   t          ||          }t          ||            |
|||dd          }t          |j        |          }t          ||            |
|||dd          }t          |                                j        |          }t          ||           @d S )Nr   r   rI   r,   rH   r   r"   r  )tbsvr  r  r  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  s                r6   	test_tbsvzTestFBLAS2Simple.test_tbsv  s   T


#F++ "	. "	.JCAAQu%%Aq!fE***AQqSzz ? ?37#;;&3--Q/00 Qww'!**dAaC7AqsGQJ+?&@&@&G&G&N&N!NN !Qxu---BQqSzz 2 2#'S>>>C46344<  "9E:::EDR1%%%Bq!B%b"---R11---B&+eAhhAfQii"#q!B%b"---R11A666BqsAB%b"---R11A666Bqvvxxz1%%B%b"----E"	. "	.r8   c                    t          d           t          t                    D ]\  }}d}t          |                              |          }|dk     rt          t          ||                    n0t          t          ||          t          ||          dz  z             }t          |          \  }}|||f         }t          d|          \  }	 |	|||          }
|                    |          }t          |
|            |	|||d	          }
 |d          |t          |          t          |          f<   |                    |          }t          |
|            |	|||dd
          }
|j                            |          }t          |
|            |	|||dd
          }
|                                j                            |          }t          |
|           d S )Nr   r   r"   r   )tpmvr,   r   r  r   rH   r   r  r   r   r   r  r   r   r   )r   r   r   r   r   r   r   r   r;   r   r   r   r   rU   r   r$   r   r   r   r-   r	  r
  r   r   r   s               r6   	test_tpmvzTestFBLAS2Simple.test_tpmv  s   T


#F++ 	. 	.JCAQu%%A$'!GGT!QZZ   d1ajjaB6N1O1OA??DAq1a4B"9E:::EDbA&&&BqB%b"---bAA...B&+eAhhAfQii"#qB%b"---bAAQ777BB%b"---bAAQ777B""B%b"----3	. 	.r8   c                    t          d           t          t                    D ]\  }}d}t          |                              |          }|dk     rt          t          ||                    n0t          t          ||          t          ||          dz  z             }|t          |          z  }t          |          \  }}|||f         }t          d|          \  }	 |	|||          }
t          ||          }t          |
|            |	|||d	          }
 |d          |t          |          t          |          f<   t          ||          }t          |
|            |	|||dd
          }
t          |j        |          }t          |
|            |	|||dd
          }
t          |                                j        |          }t          |
|           d S )Nr   r   r"   r   )tpsvr,   r'  rH   r(  r)  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*  s               r6   	test_tpsvzTestFBLAS2Simple.test_tpsv  s   T


#F++ 	. 	.JCAQu%%A$'!GGT!QZZ   d1ajjaB6N1O1OAQKA??DAq1a4B"9E:::EDbA&&&Bq!B%b"---bAA...B&+eAhhAfQii"#q!B%b"---bAAQ777BqsAB%b"---bAAQ777Bqvvxxz1%%B%b"----5	. 	.r8   c                    t          d           t          t                    D ]\  }}d}t          ||          t	          |          z                       |          }t          d                              |          }t          d|          \  } |||          }t          |                              |          }t          ||            |||d          } |d          |t          |          t          |          f<   t          |                              |          }t          ||            |||dd          }t          |          j                            |          }t          ||            |||dd	          }t          |                                          j                            |          }t          ||           d S )
Nr   rI   )trmvr,   rM   r   rH   rM   r   r   rM   r   r   r   r"   )r   r   r   r   r   r   r   r   r;   r   r   r   r   	rU   r   r$   r   r   r   r   r   r   s	            r6   	test_trmvzTestFBLAS2Simple.test_trmv  s   T


#F++ 	. 	.JCAaCFF"**511AQu%%A"9E:::EDQBaQB%b"---QQ'''B&+eAhhAfQii"#aQB%b"---QQa000Baq!!B%b"---QQa000Ba!%%a((B%b"----+	. 	.r8   c                    t          d           t          t                    D ]\  }}d}t          ||          t	          |          z                       |          }t          |                              |          }t          d|          \  } |||          }t          t          |          |          }t          ||            |||d          }t          t          |          |          }t          ||            |||d          } |d          |t          |          t          |          f<   t          t          |          |          }t          ||            |||dd	          }t          t          |          j        |          }t          ||            |||dd
	          }t          t          |                                          j        |          }t          ||           d S )Nr      )trsvr,   r1  rH   )rM   r   r   r2  r3  r"   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r4  s	            r6   	test_trsvzTestFBLAS2Simple.test_trsv  s   T


#F++ 	. 	.JCAaCFF"**511AQu%%A"9E:::EDQBtAww""B%b"---Qa(((BtAww""B%b"---QQ'''B&+eAhhAfQii"#tAww""B%b"---QQa000BtAwwy!$$B%b"---QQa000BtAww||~~'++B%b"----3	. 	.r8   N)rY   rZ   r[   r   r   r   r   r   r   r  r  r  r  r!  r$  r+  r.  r5  r9  r\   r8   r6   r   r      s       1 1 1H H H@^N ^N ^N@+8 +8 +8Z08 08 08d .  .  .D. . .:1 1 1@/ / /6/ / /8$. $. $.L$. $. $.L. . .:. . .<. . .2. . . . .r8   r   c                       e Zd Zd ZdS )TestFBLAS3Simplec           
         dD ]^}t          t          |dz   d           }|t           |ddgdg          dgg           t           |ddgdgddg          dg           _dD ]^}t          t          |dz   d           }|t           |d	d
gdg          dgg           t           |d	d
gdgddg          dg           _d S )NrF   r+   rI   rk   r   rK   r   rQ   rp   rq   r   r   r   r`   rT   s      r6   	test_gemmzTestFBLAS3Simple.test_gemm  s    	F 	FAqx..Ay%aaA3oow???%aaA3a!&=&=uEEEE 	O 	OAqx..Ay%aaTFRD&9&9WI;GGG%aaTFRD!bT&B&BWINNNN	O 	Or8   N)rY   rZ   r[   r=  r\   r8   r6   r;  r;    s(        O O O O Or8   r;  sdzcc              #   T   K   |D ]"}t          t          || z   d          }||V  #dS )z;Just a helper: return a specified BLAS function w/typecode.N)rS   ra   )r   psrV   r>   s       r6   	_get_funcrA  ,  sG        E1T64((9	 r8   c                   &    e Zd Zd Zd Zd Zd ZdS )TestBLAS3Symmc                     t          j        ddgddgg          | _        t          j        g dg dg          | _        t          j        d          | _        t          j        g dg dg          | _        d S )	Nr   r           )r   rE        @)rE        r   )r"   rI   )r   rG  g       @)rF  rE  g      "@)r.   arrayrM   r   r   r-   trU   s    r6   setup_methodzTestBLAS3Symm.setup_method7  s    B88% & &<<<(==* + +==='<<) * *r8   c           	         t          d          D ]} || j        | j        | j        dd          }t	          || j                    || j        j        | j        d| j        dd          }t	          || j                    || j        | j        j        d| j        j        dd          }t	          || j        j                   d S )Nsymmr   rM   r   r-   r   r   rH   rM   r   r   r-   r   r   )rM   r   sider-   r   r   )rA  rM   r   r-   r   rI  r   rU   r>   ress      r6   	test_symmzTestBLAS3Symm.test_symm@  s    6"" 		5 		5A!df$&DDDC%c46222!dfh$&TV2BOOOC%c46222!dfqDFH2' ' 'C%c4684444		5 		5r8   c           	      ~    t          t          dd           }|$t          t          |fi | j        | j        ddd d S d S )NdsymmrH   )rM   r   r   rP  )rS   ra   r   r   rM   r   rU   r>   s     r6   test_summ_wrong_sidez"TestBLAS3Symm.test_summ_wrong_sideL  si    E7D))=)Q C CTV45q+B +B C C C C C =r8   c                 (   t          t          dd          }|w || j        | j        | j        dd          }t          j        || j                  sJ  || j        | j        d| j        dd          }t          j        || j                  rJ dS dS )zSYMM only considers the upper/lower part of A. Hence setting
        wrong value for `lower` (default is lower=0, meaning upper triangle)
        gives a wrong result.
        rU  Nr   rN  rH   rO  )rS   ra   rM   r   r-   r.   allcloserI  rQ  s      r6   test_symm_wrong_uploz"TestBLAS3Symm.test_symm_wrong_uploT  s    
 E7D))=!df$&DDDC;sDF+++++!dfa46"MMMC{3///// =
 0/r8   N)rY   rZ   r[   rK  rS  rW  rZ  r\   r8   r6   rC  rC  5  sS        * * *
5 
5 
5C C C0 0 0 0 0r8   rC  c                        e Zd Zd Zd Zd ZdS )TestBLAS3Syrkc                     t          j        ddgddgddgg          | _        t          j        g dg dg dg          | _        t          j        d	d
gd
dgg          | _        d S )Nr   rE         r   rF  )r   rE  r   )rE        @      )r   r`        *@      @      @ra  )r.   rH  rM   rI  ttrJ  s    r6   rK  zTestBLAS3Syrk.setup_methodc  s    B898% & & <<<(==)>>+ , , (RHI' ( (r8   c                    t          d          D ]T} || j        d          }t          t          j        |          t          j        | j                              || j        dd          }t          t          j        |          t          j        | j                             t          j        | j        j                  } || j        dd|          }t          t          j        |          t          j        | j        |z                         || j        dd          }t          t          j        |          t          j        | j	                             Vd S )Nsyrkr   rM   r   rH   )rM   r   r   )rM   r   r   r-   )rM   r   r   )
rA  rM   r   r.   r   rI  r   r   shaperd  rU   r>   r-   c0s       r6   	test_syrkzTestBLAS3Syrk.test_syrkm  s-   6"" 	D 	DADF"%%%A%bgajj"'$&//BBBDF"A...A%bgajj"'$&//BBB&&BDF"2444A%bgajj"'$&)2D2DEEEDF"A...A%bgajj"'$'2B2BCCCC	D 	Dr8   c           	          t          t          dd           }|0t          t          |fi | j        dt          j        d          d d S d S )Ndsyrkr   )rK   re   )rM   r   r-   )rS   ra   r   r   rM   r.   r   rV  s     r6   test_syrk_wrong_czTestBLAS3Syrk.test_syrk_wrong_c  sm    E7D))=)Q B B02+A +A B B B B B =r8   N)rY   rZ   r[   rK  rk  rn  r\   r8   r6   r\  r\  b  sI        ( ( (D D D$B B B B Br8   r\  c                        e Zd Zd Zd Zd ZdS )TestBLAS3Syr2kc                    t          j        ddgddgddgg          | _        t          j        ddgddgddgg          | _        t          j        g dg dg d	g          | _        t          j        ddgdd
gg          | _        d S )Nr   rE  r^  r   rF  r   )rE  rG  rF  )rG  rE  rE  )rF  rE  rc  r   )r.   rH  rM   r   rI  rd  rJ  s    r6   rK  zTestBLAS3Syr2k.setup_method  s    B898% & & B88r7$ % % ===(=='<<) * * (RHG% & &r8   c                     t          d          D ]l} || j        | j        d          }t          t	          j        |          t	          j        | j                              || j        | j        dd          }t          t	          j        |          t	          j        | j                             t	          j        | j        j	                  } || j        | j        dd|          }t          t	          j        |          t	          j        | j        |z                         || j        | j        dd          }t          t	          j        |          t	          j        | j
                             nd S )Nsyr2kr   rM   r   r   rH   )rM   r   r   r   )rM   r   r   r   r-   )rM   r   r   r   )rA  rM   r   r   r.   r   rI  r   r   rh  rd  ri  s       r6   
test_syr2kzTestBLAS3Syr2k.test_syr2k  s=   7## 	D 	DADFdfB///A%bgajj"'$&//BBBDFdfBa888A%bgajj"'$&//BBB&&BDFdfBR2>>>A%bgajj"'$&)2D2DEEEDFdfBa888A%bgajj"'$'2B2BCCCC	D 	Dr8   c           
          t          t          dd           }|6t          t          |fi | j        | j        dt          j        d          d d S d S )Ndsyr2kr   )r7  re   )rM   r   r   r-   )rS   ra   r   r   rM   r   r.   r   rV  s     r6   test_syr2k_wrong_cz!TestBLAS3Syr2k.test_syr2k_wrong_c  su    E8T**=)Q D D0446020A0A+C +C D D D D D =r8   N)rY   rZ   r[   rK  ru  rx  r\   r8   r6   rp  rp    sI        & & &D D D D D D D Dr8   rp  c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestSyHez2Quick and simple tests for (zc)-symm, syrk, syr2k.c                 D    t          j        ddgddgg          | _        d S )NrE  y             r   )r.   rH  sigma_yrJ  s    r6   rK  zTestSyHe.setup_method  s+    x"d"%r!, - -r8   c                     t          dd          D ]P} || j        | j        d          }t          t          j        |          t          j        ddg                     Qd S )NrM  zcr   rt  rH   rJ   rA  r|  r   r.   r   r   rQ  s      r6   test_symm_zczTestSyHe.test_symm_zc  sl    64(( 	F 	FA!dldl"===C%bgcllBGQG4D4DEEEE	F 	Fr8   c                     t          dd          D ]P} || j        | j        d          }t          t          j        |          t          j        ddg                     Qd S )Nhemmr~  r   rt  rH   r  rQ  s      r6   test_hemm_zczTestSyHe.test_hemm_zc  sj    64(( 	E 	EA!dldl"===C%bgcllBGQFOODDDD	E 	Er8   c                     t          dd          D ]J} || j        d          }t          t          j        |          t          j        ddg                     Kd S )Nrf  r~  r   rg  rJ   r  rQ  s      r6   test_syrk_zrzTestSyHe.test_syrk_zr  sh    64(( 	G 	GA!dl"---C%bgcllBGRH4E4EFFFF	G 	Gr8   c                     t          dd          D ]J} || j        d          }t          t          j        |          t          j        ddg                     Kd S )Nherkr~  r   rg  rH   r  rQ  s      r6   test_herk_zrzTestSyHe.test_herk_zr  sf    64(( 	E 	EA!dl"---C%bgcllBGQFOODDDD	E 	Er8   c           	          t          dd          D ]S} || j        | j        d          }t          t          j        |          dt          j        ddg          z             Td S )Nrs  r~  r   rt  r   rJ   r  rQ  s      r6   test_syr2k_zrzTestSyHe.test_syr2k_zr  sq    7D)) 	J 	JA!dldl"===C%bgcllBrwBx7H7H4HIIII	J 	Jr8   c           	          t          dd          D ]S} || j        | j        d          }t          t          j        |          dt          j        ddg          z             Td S )Nher2kr~  r   rt  r   rH   r  rQ  s      r6   test_her2k_zrzTestSyHe.test_her2k_zr  so    7D)) 	H 	HA!dldl"===C%bgcllBrw1v4FGGGG	H 	Hr8   N)rY   rZ   r[   __doc__rK  r  r  r  r  r  r  r\   r8   r6   rz  rz    s        <<- - -F F FE E EG G G
E E E
J J J
H H H H Hr8   rz  c                   r    e Zd ZdZd Zej                            de          d             Z	d Z
d Zd ZdS )	TestTRMMz!Quick and simple tests for dtrmm.c                 $   t          j        ddgddgg          | _        t          j        g dg dg          | _        t          j        g dg dg dg d	gd
          | _        t          j        ddgddgddgddgddggd
          | _        d S )Nr   r   r^  rF  r_  rG  rb  rc  r^  )rH   rH   r"   rI   )r   rH   rd   rK   )r   r   rH   r   )r   r   r   rH   r>   )r%   rH   rd   r"   rK   rI   r   rN   re   rO   r   )r.   rH  rM   r   a2b2rJ  s    r6   rK  zTestTRMM.setup_method  s    B:9& ' '===(==* + + (LLL(LL(LL(LL* 256 6 6 (QFQFQFQFQGD!$& & &r8   dtype_c           	         t          d|          }t          t          |d| j        | j                    |d| j                            |          | j                            |          d          }| j        j        d         }t          || j        | j        d |d |f         z  ddt          j	        |          j
        z             d S )	Ntrmmr,   r   rH   )rP  rE  d   )r   atol)r   r   r   r  r  r   rh  r   r.   finfoeps)rU   r  r  rR  r   s        r6   	test_sidezTestTRMM.test_side  s    fF333isDGTW===d3v..v0F0F  GM!TWtwrr2A2v6R &!1!1!55	7 	7 	7 	7 	7 	7r8   c                     t          t          dd           }|C |d| j        | j                  }t	          j        g dg dg          }t          ||           d S d S )Ndtrmmr   )ra  g      0@g      r  rS   ra   rM   r   r.   rH  r   rU   r>   resultexpecteds       r6   test_abzTestTRMM.test_ab  so    E7D))=Qr4646**Fx!.!0 1 1H%fh77777 =r8   c                     t          t          dd           }|E |d| j        | j        d          }t	          j        g dg dg          }t          ||           d S d S )Nr  r   Tr   r  )rG  r^  rE  r  r  s       r6   test_ab_lowerzTestTRMM.test_ab_lower  st    E7D))=Qr4646666Fx!/!1 2 2H%fh77777	 =r8   c                 .   t          t          dd           }|dD ]v}| j                                        } |d| j        ||          }t          |j        j        du ot          j	        ||          du            t          || j                   wt          j        | j                                                  } |d| j        |d          }t          |j        j        du ot          j	        ||          du            t          ||           d S d S )Nr  )TFr   )overwrite_bFT)rS   ra   r   rc   rM   r   flagsf_contiguousr.   may_share_memoryr   asfortranarrayr   )rU   r>   overwrbcopyr  s        r6   test_b_overwriteszTestTRMM.test_b_overwrites  s/    E7D))=' , ,2tvu&AAA0E9 D+E6::eCE E EUDF++++%dfkkmm44EQr465d;;;FEK,4 ?'v66$>@ @ @%eV44444 =r8   N)rY   rZ   r[   r  rK  pytestmarkparametrizer   r  r  r  r  r\   r8   r6   r  r    s        ++& & & [Xv..7 7 /.78 8 88 8 85 5 5 5 5r8   r  c            	         t          d           t          t                    D ]\  } }t          j        |          j        dz  }t          d|          \  }t          dd                              |          }t          dd                              |          } |d          }t          t          ||||           t          t          |||j        |           d}d	} |d
          }| dk     rt          ||          n#t          ||          t          ||          dz  z   t          |          z   }|                    |          }t          |          }	t          |          }
t          ||                              |          }t          ||                              |          } ||||          }t          |j        |j                   t#          |	||z            }t%          |||            ||||d          }t#          |	j        ||z            }t%          |||            ||||d          }t#          |	                                j        ||z            }t%          |||            ||||d          } |d          |	t)          |          t)          |          f<   t#          |	||z            }t%          |||            ||||dd          }t#          |	                                j        ||                                j        z            }t%          ||                                j        |            ||||ddd          } |d          |
t)          |          t)          |          f<   t#          |
                                j        ||                                j        z            }t%          ||                                j        |           d S )Nr   i  )trsmr,   rd   rK   rH   re   rN   g      r"   r   )r   rM   r   )r  )r   rM   r   trans_a)r   rM   r   r   )r   rM   r   r   rP  )r   rM   r   r   rP  r   )r   r   r   r.   r  r  r   r   r   r   r   r   r   r   r   r   rh  r   r   r   r   )r   r$   tolr   r   Br   r   r   AuAlB1B2r   x2s                  r6   	test_trsmr    s   JJJ'' .3 .3
Uhuoo!$&y666 AJJe$$AJJe$$aiua333iuac1555d77T!QZZZQ

T!QZZ](Bc!ffLHHUOO!WW!WW!QZZu%%!QZZu%%Tb)))RXrx(((2uRx  BS))))Tb!44424r""BS))))Tb!44427799;b))BS))))Tbq111#(5886!99fQii 2uRx  BS))))Tbqq99927799;bggiik 122BGGIIKc2222TbqqBBB#(5886!99fQii 27799;bggiik 122BGGIIKc22222].3 .3r8   Fzgh-16930)runreasonc                      t          j        dd          } t          j        j                            | ddd          }t          j        d          }t          ||           d S )Nr   rO   rK   rI   rJ   i  )	r.   repeatscipylinalgblasdnrm2r   r   r   )r   actualr  s      r6   test_gh_169309r  J  sV     		"aA\$$Q1b11Fy~~HFH%%%%%r8   c                      t          j        dd          } d}t          t          j                  5  t
          j        j                            | dd|           d d d            d S # 1 swxY w Y   d S )Nr   rO   rJ   rK   rI   )	r.   r  r   ra   __fblas_errorr  r  r  r  )r   r   s     r6   test_dnrm2_neg_incxr  S  s     		"aAD	u*	+	+ / /1a.../ / / / / / / / / / / / / / / / / /s   (A&&A*-A*)r>  )<r   r  numpyr.   numpy.testingr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   numpy.randomr   r   r  scipy.linalgr   ra   r   r   r   r   r(   ImportErrorREAL_DTYPESr  r   r7   rA   rC   r^   r   r;  rA  rC  r\  rp  rz  r  r  r  xfailr  r  r\   r8   r6   <module>r     s  
      G G G G G G G G G G G G G G * * * * * *                                  $ # # # # # # #  I I I I I I I I I I I I,,,,,,,   EEE  Z(	~	%$# $# $#N  6 6 6 6 6 6 6 6"r. r. r. r. r. r. r. r.lA	. A	. A	. A	. A	. A	. A	. A	.HO O O O O O O O"   *0 *0 *0 *0 *0 *0 *0 *0Z!B !B !B !B !B !B !B !BJ$D $D $D $D $D $D $D $DP%H %H %H %H %H %H %H %HP=5 =5 =5 =5 =5 =5 =5 =5@03 03 03f u$  & && && &&/ / / / /s   A# #A-,A-