
    -iiے                        d dl Z d dlZd dlZd dl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 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j        ej         gZ!ej"        ej#        gZ$e!e$z   Z%d Z&d Z'd	 Z( G d
 d          Z) G d d          Z* G d d          Z+ G d d          Z, G d d          Z- G d d          Z. G d d          Z/ G d d          Z0 G d d          Z1ej2        3                    de%          d             Z4ej2        5                    dd           d!             Z6d" Z7dS )#    N)assert_equalassert_almost_equalassert_array_almost_equalassert_allclose)raises)
arangetriutrilzerostril_indicesonesdiagappendeyenonzero)_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empty	complex64
complex128r   typecoder    module_nameclongdoublefloat64)f1f2f3s      b/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/linalg/tests/test_blas.pytest_get_blas_funcsr2      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%   )r6   dotcdotu)r   r&   r(   r*   r-   )fghs      r1   test_get_blas_funcs_aliasr<   C   sy    />>>DAq::4BJGGGGAq!6666666666r3   c           	         |  t           j                            d          S g }|D ]}d|v rt          j        }n4d|v rt          j        }n#d|v rt          j        }nd|v sJ t          j        }t          | ||z             }|	                    t          j
        ||||z                        t           j                            d|          S )	Nzcblas not available)reasonr   r%   r"   s)idzf,dtype)pytestmarkskipr&   r)   r(   r-   float32getattrr   paramparametrize)mod	func_nameprefixesparamsprefixr   r9   s          r1   parametrize_blasrM   N   s    
{{'<===F E E&==MEEF]]LEEF]]JEE&====JEC)+,,fl1e0BCCCDDDD;""9f555r3   c                   :    e Zd Z eedd          d             ZdS )TestCBLAS1Simpler   sdczc                     t           |g dg dd          g d           |t          v r$t           |g dg dd          g d           d S d S N   r      )r   rU      a)   	      )rT                  @rU   )rZ   y            $@r\   r   COMPLEX_DTYPESselfr9   r   s      r1   	test_axpyzTestCBLAS1Simple.test_axpyd       !!!IIIzzzQ"?"?"?",**	. 	. 	.N""%aa


JJJ!&D&D&D&4nn6 6 6 6 6 #"r3   N)__name__
__module____qualname__rM   r    rb    r3   r1   rO   rO   c   s=        eVV,,6 6 -,6 6 6r3   rO   c                      e Zd Z eedd          d             Z eedd          d             Z eedg d          d             Z eed	d
          d             Z eedd          d             Z	 eedd          d             Z
 eedg d          d             Z eedg d          d             Z eedd          d             Z eedg d          d             ZdS )TestFBLAS1Simpler   rP   c                     t           |g dg dd          g d           |t          v r$t           |g dg dd          g d           d S d S rR   r^   r`   s      r1   rb   zTestFBLAS1Simple.test_axpyo   rc   r3   copyc                     t           |g ddgdz            g d           |t          v r$t           |g ddgdz            g d           d S d S )N)rU      rW      rU   )rU                 @y      @      @r^   r`   s      r1   	test_copyzTestFBLAS1Simple.test_copyw   so    !!!IIIs1u"5"5yyyAAAN""%aas1u&=&=}}}MMMMM #"r3   asum)r?   r"   scdzc                     t           |g d          d           |t          v rt           |g d          d           d S d S )NrU   rW                    @rv         @         )r   r_   r`   s      r1   	test_asumzTestFBLAS1Simple.test_asum}   sU    AAjjjMM2...N""... 1 1266666 #"r3   r6   sdc                 B    t           |g dg d          d           d S )Nru   )r   rW   rT   ir   r`   s      r1   test_dotzTestFBLAS1Simple.test_dot   s,    AAjjj)))44b99999r3   r8   czc                 B    t           |g dg d          d           d S )Nrx   r   rU   rT   y      "       @r   r`   s      r1   	test_dotuzTestFBLAS1Simple.test_dotu   s,    AAnnniii88%@@@@@r3   r7   c                 B    t           |g dg d          d           d S )Nrx   r   ry   rT   y      @      ,r   r`   s      r1   	test_dotczTestFBLAS1Simple.test_dotc   s,    AAnnnjjj995AAAAAr3   r5   c                     t           |g d          t          j        d                     |t          v r/t           |g d          t          j        d                     d S d S )Nru   2   rx   )r   mathsqrtr_   r`   s      r1   	test_nrm2zTestFBLAS1Simple.test_nrm2   se    AAjjjMM49R==999N""... 1 149R==AAAAA #"r3   scal)r?   r"   cszdc                     t           |dg d          g d           |t          v r t           |dg d          g d           d S d S )Nr   ru   )   i
   rU   rx   )y              "@iy      "@      (r^   r`   s      r1   	test_scalzTestFBLAS1Simple.test_scal   sf    !!!Azzz"2"2KKK@@@N""%aa>>>&:&:<L<L<LMMMMM #"r3   swapc                     g dg d}} |||          \  }}t          ||           t          ||           |t          v r9g dg d}} |||          \  }}t          ||           t          ||           d S d S )Nr   )rU   rZ   r   )r   rU   y      @      r^   )ra   r9   r   xyx1y1s          r1   	test_swapzTestFBLAS1Simple.test_swap   s    yy***11aB!"a(((!"a(((N""::}}}qAQq!WWFB%b!,,,%b!,,,,,	 #"r3   amax)isr@   icizc                     t           |g d          d           |t          v rt           |g d          d           d S d S )N)r   rm   rU   rT   )y      @      @r   )r   r_   r`   s      r1   	test_amaxzTestFBLAS1Simple.test_amax   sU    QQzzz]]A&&&N""===))1----- #"r3   N)rd   re   rf   rM   fblasrb   rp   r|   r   r   r   r   r   r   r   rg   r3   r1   ri   ri   m   s       eVV,,6 6 -,6 eVV,,N N -,N
 eV%;%;%;<<7 7 =<7
 eUD)): : *): eVT**A A +*A eVT**B B +*B eV%;%;%;<<B B =<B
 eV%;%;%;<<N N =<N
 eVV,,
- 
- -,
- eV%=%=%=>>. . ?>. . .r3   ri   c                      e Zd Z eedd          d             Z eedd          d             Z eedd          d	             Z eed
d          d             Z eedd          d             Z	 eedd          d             Z
 eedd          d             Z eedd          d             Zej                            de          d             Zej                            de          d             Zej                            dg d eez   D             d eD                       d             Zej                            dg d eez   D             d eD                       d             Zej                            de          d             Zej                            de          d             Zej                            de          d              Zej                            de          d!             Zej                            de          d"             Zej                            de          d#             Zej                            de          d$             Zd%S )&TestFBLAS2SimplegemvrP   c           	          t           |ddggdg          dg           t           |ddggdgddg          dg           |t          v rCt           |ddggdg          dg           t           |ddggdgdd	g          d
g           d S d S NrU   rv   irW   iry   rz   y      H      By              @y      H      5r^   r`   s      r1   	test_gemvzTestFBLAS2Simple.test_gemv   s    !!!Aurd"3"3cU;;;!!!AurdAs";";cUCCCN""%aadVHrd&;&;gYGGG%aadVHrdAt&D&D'.i1 1 1 1 1 #"r3   gerr}   c           
         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           |t          v rOt           |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           d S d S )NrT   r   rU   rm   r   rn   rS   rw      r\      rX   r[                 ?ry   ro   r   r]   ry   r^   r`   s      r1   test_gerzTestFBLAS2Simple.test_ger   sj   !!!A1v1v"6"6!Q!Q8HIII!!!Ayyy1a&"9"9$%q6B8b"X">	@ 	@ 	@!!!A1v1v&'VaV$4#6 #6 #69:AB7H	J 	J 	JN""%aaB7QF&;&;(*Bx!Q&8: : :%aa<<<"b&B&B()1vBx"b&BD D D D D #"r3   gerur   c                     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           d S )NrT   r   r   rU   rm   ry   ro   r   rn   r   r   rw   r   r\   r   r   r`   s      r1   	test_geruzTestFBLAS2Simple.test_geru   s    !!!AAwA"7"7$&8aV"4	6 	6 	6!!!Br2h"?"?$%q6B8b"X">	@ 	@ 	@ 	@ 	@r3   gercc                     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           d S )NrT   r   r   rU   rm   ry   ro   r   rn   r   rw   r   r\   r   r   r`   s      r1   	test_gerczTestFBLAS2Simple.test_gerc   s    !!!AAwA"7"7$&8aV"4	6 	6 	6!!!A|||b"X">">$%q6B8b"X">	@ 	@ 	@ 	@ 	@r3   syrc                    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        t          j        d          |t          j        d          f                                         }
t          j	        |          j
        }t           |d|          ||           t           |d|d          |j        |           t           |d|ddd          ||           t           |d|ddd          ||           |t          v rt           |d|          ||           t           |d|d          |j        |           t           |d|
ddd          ||           t           |d|
ddd          |	|           t          j        d|d          } |d||d          }t          |||            |d||          }||usJ t          |d|z  |           n`t          j        d|d          } |d||d          }t          |||            |d||          }||usJ 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 ) NrT   rW   r"   r$   rV   r         !@   Fendpointr[   Drm         ?rtolTlowerr   incxoffxnr   rU   rm   rm   r   rY   overwrite_a       @rX   r   r   r   r   )r&   r   r	   newaxislinspaceviewc_r   ravelfinfoepsr   Tr_   assert_raises	Exception)ra   r9   r   r   resxresx_reverser   r   reszresz_reversewr   rY   bs                 r1   test_syrzTestFBLAS2Simple.test_syr   sJ   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<==E"(1++q"(1++-.4466x"#q		4d3333#q---tvDAAAA#qqqA6664HHHH#qrQ777$4	1 	1 	1 	1 N""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 ,,A#qA4000AAt$////#qAAA::::AqvD11111 ,,A#qA4000AAt$////#qAAA::::AqvD1111iC3333iC3333iC4444iCb1111iCa0000iC!4444iCbhvsC.H.HIIIIIIr3   herc                    t          j        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        t          j        d          |t          j        d          f                                         }t          j	        |          j
        }t           |d	|          ||
           t           |d	|d          |j                                        |
           t           |d	|ddd          ||
           t           |d	|ddd          ||
           t          j        d|d          }	 |d	||	d          }
t          |	||
            |d||	          }
|	|
usJ 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 )NrT   rW   r"   r$   r[   r   rV   rm   r   r   Tr   rU   r   r   r   r   r   r   rX   r   r   r   r   r   r   r   )r&   r   r   r	   r   conjr   r   r   r   r   r   r   r   r   )ra   r9   r   r   r   rehzrehz_reverser   r   rY   r   s              r1   test_herzTestFBLAS2Simple.test_her	  s   Ia#&&&Ia#&&&++C00wqBJ'!&&((233wq2rz!12QtttW\\^^CDDE"(1++q"(1++-.4466x"#q		4d3333#q---tv{{}}4HHHH#qqqA6664HHHH#qrQ777$4	1 	1 	1 	1 HVUC((Ac1t,,,4d++++Ac1NNNzzzz1T6----iC3333iC3333iC4444iCb1111iCa0000iC!4444iCbhvsC.H.HIIIIIIr3   syr2c                    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          j        |          j        }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          }	 |d|||	d          }
t          |	||            |d|||	          }
|	|
usJ 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 )!NrT   rW   r"   r$   r[   rV   r   r   r   Fr   r   r   rU   r   Tr   r   r   r   r   incyoffyr   r   r   r   r   r   r   r   r   r   rX   r   r   r   r   r   )r&   r   r	   r   r   r   r   r   r   r   r   r   )ra   r9   r   r   r   resxyresxy_reverseqr   rY   r   s              r1   	test_syr2zTestFBLAS2Simple.test_syr2*  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x"#q!e$7777#q!q)))5!RaR=tDDDD#q!4000%'EEEE#q!!!!"EEED	* 	* 	* 	*#q!!!!"JJJbqb"1"fD	2 	2 	2 	2 	#q!"12BGGG%D	2 	2 	2 	2 HVUC((Ac1a1$///5t,,,,Ac1a1zzzz1U7....iCAA6666iCAA6666iCAB7777iCAA6666iCAA6666iCAB7777iCA4444iCA3333iCAQ7777iCA&#s1K1KLLLLLLr3   her2c                    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          j	        |          j
        }	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          }
 |d	|||
d          }t          |
||	
            |d|||
          }|
|usJ 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 ) NrT   r[   r"   r$   r   r   rV   rm   r   r   rU   r   Tr   r   r   r   r   r   r   r   rX   r   r   rW   r   r   r   r   r   r   )r&   r   r   r   r   r	   r   r   r   r   r   r   r   r   r   )ra   r9   r   r   r   r   r   uvr   rY   r   s               r1   	test_her2zTestFBLAS2Simple.test_her2T  sw   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x"#q!e$7777#q!q)))5!RaR=tDDDD#q!4000%',,..!	# 	# 	# 	# 	#q!!!!!DDDD	* 	* 	* 	*#q!!!!!qIIIbqb"1"fD	2 	2 	2 	2 	#q!"12AFFF%D	2 	2 	2 	2 HVUC((Ac1a1$///5t,,,,Ac1a1zzzz1U7....iCAA6666iCAA6666iCAB7777iCAA6666iCAA6666iCAB7777iCA4444iCA3333iCAQ7777iCAc22	4 	4 	4 	4 	4 	4r3   r   c                 *   t           j                            d          }d}d}d}d}t          t	          |                    |dz             t          ||z
  dz
                      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<   |                    |                              |          }	|                    |                              |          }
 |d           |d          }}t          d|          \  } ||||||||	|
|	  	        }||                    |	          z  ||
z  z   }t          ||            ||||||||
|	|d
  
        }||j
                            |
          z  ||	z  z   }t          ||           d S )N  rZ   rW   rT   r   r$   )r   r   )r   rT   r   )r   r   r   )rT   r   rU   rm   r   )gbmv)	mr   kuklalpharY   r   r   beta)
r   r   r   r   r   rY   r   r   r   trans)r&   randomdefault_rngr   r   r   astyper   r6   r   r   )ra   r   rngr   r   r   r   AAbr   r   r   r   funcr   y2s                   r1   	test_gbmvzTestFBLAS2Simple.test_gbmv  s/   i##D))VCJJr!t,,eAbDFmm<<CJJr!t,,eAbDFmm<<> >HHUOOBrE!GQ<u--- dG1bqb5	tW1ac6
tW1ac6
dG1bqb5	JJqMM  ''JJqMM  ''eAhhb		ty666TArb' ' 'QUU1XXq(!"b)))TArbQ0 0 0QSWWQZZ$(*!"b)))))r3   c                    t           j                            d          }d}d}t          ||f|          }t          |dz   |f|          }|                    |          |t	          |          t	          |          f<   t          d|dz             D ]K}|                    ||z
            }||t	          ||z
            t	          ||          f<   ||d|z
  |d f<   L|                    |          }|t          v r0||                                j	        z  }t          d|          \  }	n||j	        z  }t          d|          \  }	t          |          |dd d f<   |                    |                              |          }
|                    |                              |          } |d	           |d
          }} |	||||
||          }||                    |
          z  ||z  z   }t          ||           d S )Nr   r   r   r$   rT   rV   )hbmv)sbmv      ?rU   )kr   rY   r   r   r   )r&   r  r  r   r   ranger  r_   r   r   r   r   r6   r   )ra   r   r  r   r  r  r  ind2tempr  r   r   r   r   r   r  s                   r1   test_sbmv_hbmvzTestFBLAS2Simple.test_sbmv_hbmv  s   i##D))1a&&&&AaC85))) #&**Q--&))VAYY
!QqSMM 	& 	&D::af%%D15AfQtVnnfT1oo-.!%Br$w~HHUOON""OA"9E:::EDDHA"9E:::EDGG2qqq5	JJqMM  ''JJqMM  ''eDkk5588tTAUbA>>>QUU1XXq(!"b)))))r3   zfname,dtypec                     g | ]}d |fS )spmvrg   .0r   s     r1   
<listcomp>zTestFBLAS2Simple.<listcomp>  s    	D	D	De65/	D	D	Dr3   c                     g | ]}d |fS )hpmvrg   r  s     r1   r  zTestFBLAS2Simple.<listcomp>  s    	6	6	6e65/	6	6	6r3   c                    t           j                            d          }d}|                    ||f                              |          }|t          v r||                    ||f          dz  z  }||dk    r|j        n|                                j        z  }t          |          \  }}|||f         }|                    |                              |          }	|                    |                              |          }
t          d|z                                |          }t          d|z                                |          } |d           |d          }}t          |f|          \  } |||||	|
|          }||                    |	          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   rU   r   r  r   r  r$   )r   r   apr   r   r   rT   )
r   r   r   r   r   r  r   r   r   r   rV   rm   )r&   r  r  r  r_   r   r   r   r   r   r   r6   r   r   )ra   fnamer   r  r   r  r%   rApr   r   xlongylongr   r   r  r   r  s                     r1   test_spmv_hpmvzTestFBLAS2Simple.test_spmv_hpmv  sD   
 i##D))JJ1v%%e,,N""QF##B&&A	EVOOQSS3A1q!tWJJqMM  ''JJqMM  ''qs""5))QqS		  ''eDkk5588txu555TAUrQ!$???QUU1XXq(!"b))) TAaCu45Ebqqq2 2 2aSbSk!&&uQTT{33dU14a4[6HH!"QTT(B///BqE58,,,,,r3   c                     g | ]}d |fS sprrg   r  s     r1   r  zTestFBLAS2Simple.<listcomp>  s    	C	C	CU5%.	C	C	Cr3   c                     g | ]}d |fS hprrg   r  s     r1   r  zTestFBLAS2Simple.<listcomp>  s    	5	5	5U5%.	5	5	5r3   c                    t           j                            d          }d}|                    ||f                              |          }|t          v r||                    ||f          dz  z  }||dk    r|j        n|                                j        z  }t          |          \  }}|||f         }|                    |                              |          }	t          j        |          j	        
                    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   rU   r   r$  g      @r'  r&  r$   r#  )r   r   r  r   rU   rU   )r&   r  r  r  r_   r   r   r   r   r   typer   r6   r   r   )ra   r  r   r  r   r  r%   r  r  r   r   r  r  r   y1fs                  r1   test_spr_hprzTestFBLAS2Simple.test_spr_hpr  s   
 i##D))JJ1v%%e,,N""QF##B&&A	EUNNQSS
2A1q!tWJJqMM  ''%**3//E>>"85999ED111d7$'
(9(9:::Q>BB"85999ED111d7$'
333a7BTAUrQ///F%(((AqD	!&%BGGIIIRAqD	!#r*****r3   c                    t           j                            d          }d}|                    ||f                              |          }|t          v rM||                    ||f          dz  z  }||                                j        z  }t          d|          \  }n||j        z  }t          d|          \  }t          |          \  }}|||f         }|                    |                              |          }	|                    |                              |          }
 |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   rU   r   )hpr2r$   )spr2r   )r   r   r   r   r  r)  )rT   rU   rm   )rT   r   r   )r   r   rT   )r&   r  r  r  r_   r   r   r   r   r6   r   r   )ra   r   r  r   r  r  r%   r  r  r   r   r   r   r  r   r+  s                   r1   test_spr2_hpr2zTestFBLAS2Simple.test_spr2_hpr2  s   i##D))JJ1v%%e,,N""QF##B&&AOA"9E:::EDDHA"9E:::EDA1q!tWJJqMM  ''JJqMM  ''aJJLL1QQQW:>>!D!!!G*//*;*;<<<UQVVXXZTAUa1444F%(((AqD	$&yyyM$6$6$8$8IIIyyy !!#r*****r3   c           
         t           j                            d          }d}d}|                    |                              |          }t	          ||f|          }t          |dz             D ]=}|                    ||z
            |t          ||z
            t          ||          f<   >|t          v rX|t          |          xx         d|                    |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          ||           d S )Nr   r   rU   r$   rT   r   r   r  )tbmvr  rY   r   r  rY   r   r   r  rY   r   r   r   )r&   r  r  r  r   r  r   r_   r   r   r   r6   r   r   r   ra   r   r  r   r  r   r  supr  rowr  r   r  s                r1   	test_tbmvzTestFBLAS2Simple.test_tbmv  s   i##D))JJqMM  ''1a&&&&1:: 	A 	AC/2zz!C%/@/@AfQsUmmVC^^+,, N""gajjMMMR#**ac1Wa1gqj-A"B"B"I"I%"P"PPPMMM AaC85)))1:: 	. 	.C#A~~~BtAvstt|y666TAq!!!UU1XX!"b)))TAqq)))"'%((&))VAYY
UU1XX!"b)))TAqq222SWWQZZ!"b)))TAqq222VVXXZ^^A!"b)))))r3   c           
         t           j                            d          }d}d}|                    |                              |          }t	          ||f|          }t          |dz             D ]=}|                    ||z
            |t          ||z
            t          ||          f<   >|t          v rX|t          |          xx         d|                    |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 )Ni90  r   rU   r$   rT   r   r   r2  )tbsvr4  r5  r6  )r&   r  r  r  r   r  r   r_   r   r   r   r   r   r   r   r7  s                r1   	test_tbsvzTestFBLAS2Simple.test_tbsvC  s   i##E**JJqMM  ''1a&&&&1:: 	A 	AC/2zz!C%/@/@AfQsUmmVC^^+,, N""gajjMMMR#**ac1Wa1gqj-A"B"B"I"I%"P"PPPMMM AaC85)))1:: 	. 	.C#A~~~BtAvstt|y666TAq!!!1a[[!"b)))TAqq)))"'%((&))VAYY
1a[[!"b)))TAqq22213]]!"b)))TAqq22216688:q!!!"b)))))r3   c                    t           j                            d          }d}|                    |                              |          }|t          v r@t          |                    ||f          |                    ||f          dz  z             }n$t          |                    ||f                    }t          |          \  }}|||f         }t          d|          \  }	 |	|||          }
|                    |          }t          |
|            |	|||d          }
 |d          |t          |          t          |          f<   |                    |          }t          |
|            |	|||dd	          }
|j                            |          }t          |
|            |	|||dd
	          }
|                                j                            |          }t          |
|           d S )Nr   r   r   )tpmvr$   r   r  r   rT   r   r  r   r   r   r  r   r   r   r   )r&   r  r  r  r_   r	   r   r   r6   r   r   r   r   ra   r   r  r   r   r  r%   r  r  r  r   r  s               r1   	test_tpmvzTestFBLAS2Simple.test_tpmvi  s   i##D))JJqMM  ''N""SZZA''#**aV*<*<R*??@@AASZZA''((A A1q!tWy666TA""""UU1XX!"b)))TA"***"'%((&))VAYY
UU1XX!"b)))TA"333SWWQZZ!"b)))TA"333VVXXZ^^A!"b)))))r3   c                    t           j                            d          }d}|                    |                              |          }|t          v r@t          |                    ||f          |                    ||f          dz  z             }n$t          |                    ||f                    }|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   )tpsvr$   r@  rT   rA  rB  r   )r&   r  r  r  r_   r	   r   r   r   r   r   r   r   r   rC  s               r1   	test_tpsvzTestFBLAS2Simple.test_tpsv  s   i##D))JJqMM  ''N""SZZA''#**aV*<*<R*??@@AASZZA''((A	SVVA1q!tWy666TA""""1a[[!"b)))TA"***"'%((&))VAYY
1a[[!"b)))TA"33313]]!"b)))TA"33316688:q!!!"b)))))r3   c                    t           j                            d          }d}|                    ||f          t          |          z                       |          }|                    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   rU   )trmvr$   rY   r   rT   rY   r   r   rY   r   r   r   r   )r&   r  r  r   r  r   r	   r6   r   r   r   r   	ra   r   r  r   r  r   r  r   r  s	            r1   	test_trmvzTestFBLAS2Simple.test_trmv  s   i##D))ZZAA&..u55JJqMM  ''y666TA^^^!WW[[^^!"b)))TA###"'%((&))VAYY
!WW[[^^!"b)))TA!,,,!WWY]]1!"b)))TA!,,,!WW\\^^!!!$$!"b)))))r3   c                    t           j                            d          }d}|                    ||f          t          |          z                       |          }|                    |                              |          }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$   rJ  rT   )rY   r   r   rK  rL  r   )r&   r  r  r   r  r   r   r	   r   r
   r   r   r   rM  s	            r1   	test_trsvzTestFBLAS2Simple.test_trsv  s   i##D))ZZAA&..u55JJqMM  ''y666TA^^^477A!"b)))TA!$$$477A!"b)))TA###"'%((&))VAYY
477A!"b)))TA!,,,4779a  !"b)))TA!,,,477<<>>#Q''!"b)))))r3   N)rd   re   rf   rM   r   r   r   r   r   r   r   r   r   rA   rB   rG   DTYPESr	  r  REAL_DTYPESr_   r!  r,  r0  r:  r=  rD  rG  rN  rR  rg   r3   r1   r   r      s       eVV,,1 1 -,1 eUD))
D 
D *)
D eVT**@ @ +*@ eVT**@ @ +*@ eUF++0J 0J ,+0Jd eUD))J J *)J@ eVT**'M 'M +*'MR eVT**.4 .4 +*.4` [Wf--* * .-*B [Wf--* * .-*< [] -	D	D{^'C	D	D	D-	6	6~	6	6	6-  - -	 -6 [] -	C	CkN&B	C	C	C-	5	5n	5	5	5-  + +	 +2 [Wf--+ + .-+4 [Wf--#* #* .-#*J [Wf--#* #* .-#*J [Wf--* * .-*@ [Wf--* * .-*@ [Wf--* * .-*0 [Wf--* * .-* * *r3   r   c                   :    e Zd Z eedd          d             ZdS )TestFBLAS3Simpler#   rP   c           	         t           |ddgdg          dgg           t           |ddgdgddg          dg           |t          v rBt           |ddgdg          dgg           t           |ddgdgdd	g          d
g           d S d S r   r^   r`   s      r1   	test_gemmzTestFBLAS3Simple.test_gemm  s    !!!AsRD//SE7;;;!!!AsRD!aS"9"9C5AAAN""%aaTFRD&9&9WI;GGG%aaTFRD!bT&B&BWINNNNN #"r3   N)rd   re   rf   rM   r   rX  rg   r3   r1   rV  rV    sB        eVV,,O O -,O O Or3   rV  c                       e Zd Zd Z eedd          d             Z eedd          d             Z eedd          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   r\        @)r\        r   )r   rU   )r   r^  g       @)r]  r\  g      "@)r&   arrayrY   r   r   r%   tra   s    r1   setup_methodzTestBLAS3Symm.setup_method  s    B88% & &<<<(==* + +==='<<) * *r3   symmrP   c                 j    || 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 )Nr   rY   r   r%   r   r   rT   rY   r   r   r%   r   r   )rY   r   sider%   r   r   )rY   r   r%   r   r`  r   ra   r9   r   ress       r1   	test_symmzTestBLAS3Symm.test_symm  s    a$&DFdfBR@@@!#tv...a$&(dfArKKK!#tv...a$&DFH1r# # #!#tvx00000r3   c                     t          j        t                    5   || j        | j        dd           ddd           dS # 1 swxY w Y   dS )z|`side=1` means C <- B*A, hence shapes of A and B are to be
        compatible. Otherwise, f2py exception is raised.
        rT   )rY   r   r   rg  N)rA   r   r   rY   r   r`   s      r1   test_symm_wrong_sidez"TestBLAS3Symm.test_symm_wrong_side  s     ]9%% 	3 	3A$&2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   AAAc                      || j         | j        | j        dd          }t          j        || j                  sJ  || j         | j        d| j        dd          }t          j        || j                  rJ 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.
        r   re  rT   rf  N)rY   r   r%   r&   allcloser`  rh  s       r1   test_symm_wrong_uploz"TestBLAS3Symm.test_symm_wrong_uplo  s     a$&DFdfBR@@@{3'''''a$&DF!tvRbIII;sDF+++++++r3   N)	rd   re   rf   rb  rM   r   rj  rl  ro  rg   r3   r1   rZ  rZ    s        * * * eVV,,	1 	1 -,	1 eVV,,3 3 -,3 eVV,,, , -,, , ,r3   rZ  c                   l    e Zd Zd Z eedd          d             Z eedd          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   r\         r   r]  )r   r\  r   )r\        @      )r   ru        *@      @      @rv  )r&   r_  rY   r`  ttra  s    r1   rb  zTestBLAS3Syrk.setup_method  s    B898% & & <<<(==)>>+ , , (RHI' ( (r3   syrkrP   c                     || 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                             d S )Nr   rY   r   rT   )rY   r   r   )rY   r   r   r%   )rY   r   r   )	rY   r   r&   r	   r`  r
   r   shapery  ra   r9   r   r%   c0s        r1   	test_syrkzTestBLAS3Syrk.test_syrk#  s   Ab!!!!"'!**bgdfoo>>>Ab***!"'!**bgdfoo>>>WTV\""AbrR000!"'!**bgdfRi.@.@AAAAb***!"'!**bgdg.>.>?????r3   c                     t          j        t                    5   || j        dt	          j        d                     d d d            d S # 1 swxY w Y   d S )Nr   )rW   rn   )rY   r   r%   )rA   r   r   rY   r&   r   r`   s      r1   test_syrk_wrong_czTestBLAS3Syrk.test_syrk_wrong_c4  s     ]9%% 	5 	5AbBGFOO4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   &AAAN)rd   re   rf   rb  rM   r   r  r  rg   r3   r1   rq  rq    s|        ( ( ( eVV,,@ @ -,@  eVV,,5 5 -,5 5 5r3   rq  c                   l    e Zd Zd Z eedd          d             Z eedd          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   r\  rs  r   r]  r   )r\  r^  r]  )r^  r\  r\  )r]  r\  rx  r   )r&   r_  rY   r   r`  ry  ra  s    r1   rb  zTestBLAS3Syr2k.setup_method=  s    B898% & & B88r7$ % % ===(=='<<) * * (RHG% & &r3   syr2krP   c                     || 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	                             d S )Nr   rY   r   r   rT   )rY   r   r   r   )rY   r   r   r   r%   )rY   r   r   r   )
rY   r   r   r&   r	   r`  r
   r   r}  ry  r~  s        r1   
test_syr2kzTestBLAS3Syr2k.test_syr2kJ  s   A$&+++!"'!**bgdfoo>>>A$&!444!"'!**bgdfoo>>>WTV\""A$&r:::!"'!**bgdfRi.@.@AAAA$&!444!"'!**bgdg.>.>?????r3   c           	          t          j        t                    5   || j        | j        dt          j        d                     d d d            d S # 1 swxY w Y   d S )Nr   )rP  rn   )rY   r   r   r%   )rA   r   r   rY   r   r&   r   r`   s      r1   test_syr2k_wrong_cz!TestBLAS3Syr2k.test_syr2k_wrong_cZ  s    ]9%% 	A 	AA$&bhw.?.?@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   ,AAAN)rd   re   rf   rb  rM   r   r  r  rg   r3   r1   r  r  <  s        & & & eWf--@ @ .-@ eWf--A A .-A A Ar3   r  c                       e Zd ZdZd Z eedd          d             Z eedd          d             Z eedd          d	             Z	 eed
d          d             Z
 eedd          d             Z eedd          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 )Nr\  y             r   )r&   r_  sigma_yra  s    r1   rb  zTestSyHe.setup_methodd  s+    x"d"%r!, - -r3   rc  zcc                      || j         | j         d          }t          t          j        |          t          j        ddg                     d S )Nr   r  rT   rV   r  r   r&   r	   r   rh  s       r1   rj  zTestSyHe.test_symmh  sJ     a$,$,b999!"'#,,B0@0@AAAAAr3   hemmc                      || j         | j         d          }t          t          j        |          t          j        ddg                     d S )Nr   r  rT   r  rh  s       r1   	test_hemmzTestSyHe.test_hemmn  sH     a$,$,b999!"'#,,A@@@@@r3   rz  c                      || j         d          }t          t          j        |          t          j        ddg                     d S )Nr   r|  rV   r  rh  s       r1   r  zTestSyHe.test_syrkt  sD    a$,b)))!"'#,,R0A0ABBBBBr3   herkc                      || j         d          }t          t          j        |          t          j        ddg                     d S )Nr   r|  rT   r  rh  s       r1   	test_herkzTestSyHe.test_herky  sB    a$,b)))!"'#,,A@@@@@r3   r  c                      || j         | j         d          }t          t          j        |          dt          j        ddg          z             d S )Nr   r  r   rV   r  rh  s       r1   test_syr2k_zrzTestSyHe.test_syr2k_zr~  sM    a$,$,b999!"'#,,27B83D3D0DEEEEEr3   her2kc                      || j         | j         d          }t          t          j        |          dt          j        ddg          z             d S )Nr   r  r   rT   r  rh  s       r1   test_her2k_zrzTestSyHe.test_her2k_zr  sK    a$,$,b999!"'#,,27Aq6??0BCCCCCr3   N)rd   re   rf   __doc__rb  rM   r   rj  r  r  r  r  r  rg   r3   r1   r  r  a  s?       <<- - - eVT**B B +*B
 eVT**A A +*A
 eVT**C C +*C eVT**A A +*A eWd++F F ,+F eWd++D D ,+D D Dr3   r  c                       e Zd ZdZd Zej                            de          d             Z	 e
edd          d             Z e
edd          d             Z e
edd          d	             Zd
S )TestTRMMz!Quick and simple tests for *trmm.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   rs  r]  rt  r^  rw  rx  rs  )rT   rT   r   rU   )r   rT   rm   rW   )r   r   rT   r   )r   r   r   rT   r9   )r   rT   rm   r   rW   rU   r   rZ   rn   r[   r   )r&   r_  rY   r   a2b2ra  s    r1   rb  zTestTRMM.setup_method  s    B:9& ' '===(==* + + (LLL(LL(LL(LL* 256 6 6 (QFQFQFQFQGD!$& & &r3   r   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   rT   )rg  r\  d   )r   atol)r   r   r   r  r  r  r}  r   r&   r   r   )ra   r   r  ri  r  s        r1   	test_sidezTestTRMM.test_side  s    fE222isDGTW===d3u--tw~~e/D/D  GM!TWtwrr2A2v6R %!44	6 	6 	6 	6 	6 	6r3   r  rP   c                      |d| j         | j                  }t          j        g dg dg          }t	          ||           d S )Nr   )rv  g      0@g      r  rY   r   r&   r_  r   ra   r9   r   resultexpecteds        r1   test_abzTestTRMM.test_ab  sR    2tvtv&&8___,__. / /!&(33333r3   c                      |d| j         | j        d          }t          j        g dg dg          }t	          ||           d S )Nr   Tr   r  )r^  rs  r\  r  r  s        r1   test_ab_lowerzTestTRMM.test_ab_lower  sW    2tvtvT2228___,__. / /!&(33333r3   c                    | j                             |          }dD ]_}|                                } |d| j        ||          }|j        j        rJ t          j        ||          rJ t          ||           `t          j	        |                                          } |d| j        |d          }|j        j        sJ t          j        ||          sJ t          ||           d S )N)TFr   )overwrite_bT)r   r  rk   rY   flagsf_contiguousr&   may_share_memoryr   asfortranarrayr   )ra   r9   r   r   overwrbcopyr  s          r1   test_b_overwriteszTestTRMM.test_b_overwrites  s     FMM%  # 	# 	#FFFHHEQr465f===F{////*5&99999""""!!&&((++2tvu$777{''''"5&11111!%00000r3   N)rd   re   rf   r  rb  rA   rB   rG   rS  r  rM   r   r  r  r  rg   r3   r1   r  r    s        ++& & & [Wf--6 6 .-6 eVV,,4 4 -,4 eVV,,4 4 -,4 eVV,,1 1 -,1 1 1r3   r  r   c                 p   t           j                            d          }t          j        |           j        dz  }t          d|           \  }|                    d                              |           }|                    d                              |           } | d          }t          t          ||||           t          t          |||j	        |           d}d	} | d
          }| t          v rC|                    ||f          |                    ||f          dz  z   t          |          z   }n'|                    ||f          t          |          z   }|                    |           }t          |          }	t          |          }
|                    ||f                              |           }|                    ||f                              |           } ||||          }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$   )rm   rW   r   rT   rn   rZ   g      r   )r   rY   r   )r  )r   rY   r   trans_ar   )r   rY   r   r   )r   rY   r   r   rg  )r   rY   r   r   rg  r   )r&   r  r  r   r   r   r  r   r   r   r_   r   r	   r
   r   r}  r   r   r   r   )r   r  tolr  r  Br   r   r   AuAlB1B2r   x2s                  r1   	test_trsmr    s   
)


%
%C
(5//
d
"C9E222ED 	

6!!%((A

6!!%((AE!HHE)T5!Q///)T5!#q111	A	AE$KKEZZA#**aV"4"4R"773q66AJJ1vQ'	A	aB	aB	QF			"	"5	)	)B	QF			"	"5	)	)B	EQ"	%	%	%B28$$$	r58		BB%%%%	EQ"a	0	0	0B	rtU2X		BB%%%%	EQ"a	0	0	0B	rwwyy{E"H	%	%BB%%%%	EQ"1	-	-	-B$uQxxBvayy&))	r58		BB%%%%	EQ"11	5	5	5B	rwwyy{E"''))+-	.	.BB		#....	EQ"11A	>	>	>B$uQxxBvayy&))	rwwyy{E"''))+-	.	.BB		#......r3   Fzgh-16930)runr>   c                      t          j        dd          } t          j        j                            | ddd          }t          j        d          }t          ||           d S )Nr   r[   rW   rU   rV   i  )	r&   repeatscipylinalgblasdnrm2r   r   r   )r   actualr  s      r1   test_gh_169309r    sV     		"aA\$$Q1b11Fy~~HFH%%%%%r3   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   r[   rV   rW   rU   )	r&   r  r   r   __fblas_errorr  r  r  r  )r   r   s     r1   test_dnrm2_neg_incxr    s     		"aAD	u*	+	+ / /1a.../ / / / / / / / / / / / / / / / / /s   (A&&A*-A*)8r   rA   numpyr&   numpy.testingr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r  scipy.linalgr   r   r   r   r   r   r    ImportErrorrD   r-   rT  r(   r)   r_   rS  r2   r<   rM   rO   ri   r   rV  rZ  rq  r  r  r  rB   rG   r  xfailr  r  rg   r3   r1   <module>r     s  
      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 z2:&,.	~	%$# $# $#N  6 6 6*6 6 6 6 6 6 6 6?. ?. ?. ?. ?. ?. ?. ?.Hn* n* n* n* n* n* n* n*bO O O O O O O O), ), ), ), ), ), ), ),X 5  5  5  5  5  5  5  5H!A !A !A !A !A !A !A !AJ%D %D %D %D %D %D %D %DP;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1| &))2/ 2/ *)2/j u$  & && && &&/ / / / /s   A AA