a
    hJ                     @   s>   d dl Zd dlmZ d dlmZ d dlmZ G dd dZ	dS )    N)assert_allclose)raises)nnlsc                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestNNLSc                 C   s   t jd| _d S )Nl   F_fr/ )nprandomZdefault_rngrng)self r
   Z/var/www/html/assistant/venv/lib/python3.9/site-packages/scipy/optimize/tests/test_nnls.pysetup_method   s    zTestNNLS.setup_methodc                 C   s^   t ddd}t d}|| }t||\}}|dk s>J t j|| | dk sZJ d S )Ng      9@   g      @Hz>)r   Zarangereshaper   linalgnorm)r	   axyresr
   r
   r   	test_nnls   s    
zTestNNLS.test_nnlsc                 C   s   | j jddddgd}t| j jdddgd}d|d d d< || }t||dtj|d	 td
 d\}}t||ddd |dk sJ d S )N
   2   lowhighsize   r              ?atol        绽|=Zrtolr%   -q=	r   uniformr   absr   r   r   spacingr   r	   r   r   bZxactrnormr
   r
   r   test_nnls_tall   s    *zTestNNLS.test_nnls_tallc                 C   s   | j jddddgd}t| j jdddgd}d|d d d< || }t||d	tj|d
 td d\}}t||ddd |dk sJ d S )Nr   r   d   x   r   r   r    r   r!   r"   r#   r$   r&   r'   r(   r)   r*   r.   r
   r
   r   test_nnls_wide   s    *zTestNNLS.test_nnls_widec                 C   sV   | j jdd}| j jdd}tt t||dd W d    n1 sH0    Y  d S )N)r   r   )r   r   r"   )maxiter)r   r+   assert_raisesRuntimeErrorr   )r	   r   r/   r
   r
   r   test_maxiter'   s    
zTestNNLS.test_maxiterc                 C   s   t g d}t g d}t g d}t|}t |t t ||f }|d }|dk d }d|||f< d||t |d |d f< d||< d||< t |}t|| || \}	}
t	|	|dd	d
 d S )N)C   r    r   r"   r"   r"   r9                  )   /   5   9   C   L   g   Y   a   ^   U   _   N   rK   rK   M   I   r   r   8   D   b   rJ   p                              rZ               n   \   ?   <   4   r=      r<      r   r   r   r"   r    r9   r   r    )Cr&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   祠oN ?r&   goN ?rf   祠oN @祠oN @rh   gVS(@gقfC.@gD -4@gĎ$]a;@g-R#H@gPxG@g:6:"Q@gVSX@gA[[@g9`@g^;ma@goN g@gYHoe@ERWi@gg݈n@g_Zgj@g9 al@ghb m@ri   gIe@gQg@g1D/Dd@gBA{/c@gGM^^[@gxWY@gIU@gقfCN@gIE@gPx7@gVS8@g|:@K1@goN '@rh   gD -@gΈb@r&   rg   r&   r&   r&   )Cr&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   g]<To?r&   gTT'?r&   g#I?g'|?r&   gε?g	kѭ?g<h:?g4 &fr?gwp?r&   r&   gc@?r&   r&   r&   gq2O?r&   r&   r&   r&   r&   r&   r&   r&   g˚HZ?gT?r&   r&   gjE>?r&   r&   r&   r&   g_k?r&   r&   r&   r&   r&   r&   r&   r&   r&   r&         ?r   r"   r   r&   r'   r(   )
r   arraylendiagtrilonesnonzerominimumr   r   )r	   nkdNAwnzWdact_r
   r
   r   test_nnls_inner_loop_case1.   s(    
z#TestNNLS.test_nnls_inner_loop_case1c                 C   s  t g d}t g d}t g d}t|}t |t t ||f }|d }|dk d }d|||f< d||t |d |d f< d||< d||< t |}t|| || dd	\}	}
t 	|	}t 
|	dksJ t jj|||  t jd
dk sJ t|	|ddd d S )N)Dr"   r   r"   r    r    r    r9   r9   r      r;   r;         $   *   r   @   r   r   Q   rI   rI   rJ   rJ   rJ   K   rD   E   r   >   ;   rO   r   G   rC   J   rK   v   r]                        rY                  rE   h   r   rN   (       r      	   re   r:   r    r"   r"   r"   )Dr&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   焱?r&   r&   g#V @r   r&   gLKA@gLKA@g&@#V0@XdÓ|4@r   g^uB@gyK@g	S@g{Y@gԗ}Z@gܢ+o_@gP@ڡb@g[{f@gwf@ch@gԗ}j@go=i@gI:m@g
$tk@g%uh@g(
どh@gH+n5g@gs-}g@guqib@g*Bl`@g}#]@gϸOW@g"(@V@gb"a4J@gF@gJ?@g(
ど8@r   T;Oκ#@r   焱@r   焱?r   r   )Dr&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   g"%&a?r&   r&   gYM?r&   r&   gR.S?ghq?gwLBW?gQ?gF
}?gǙH?gL'%?g*O?gްac?r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   r&   gKu?g bb,Mn?r&   r&   r&   r&   r&   gwլD?r&   r&   r&   r&   r&   r&   r&   r&   gLg?r&   r&   g'?rj   r   r"   r   r   r$   )ord   r&   r'   r(   )r   rk   rl   rm   rn   ro   rp   rq   r   Zcumsumallr   r   infr   )r	   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   pr
   r
   r   test_nnls_inner_loop_case2h   s.    

$z#TestNNLS.test_nnls_inner_loop_case2c                 C   sV   t g ddd}t jdt jd}t||\}}t|t g d t|d d S )N(  g\a?g{ 6?g'ݯ(?gʧy?g{ 6?gzM?g=YZM[g?g<NG?gӐ3?g=YZM[g?o+j?r   g|\?gNO?gl7?gx7O?g.Tei?gy?gsk8j?g.Tei@g͛J?g YX'i?gW?g#?gFl@gZI\g?gZI\g?g9?geM?gQ6'@gҥR?gm`?g1?gm!?gD&3@g5s@?gGܳU?g,&.?gڒ"}@gGܳU<@gE&.ۢ?gh9H?g7?g7hf@goh"D@g"Xz(?gvA?g+?gWn@gr˩aK@gos͞?g{TD<?g|!?g(@g2}EYR@gᰜ7?g?|2>?gÆ@?gqp@g+8L^@g7^?gD`vC?gb?g\h @gyIg@g ֑^6?gVmӵH?gi%;?g9H#"@gVmӵHl@g̢'ߒ?g2t;wO?gZ:>?g*\:'@gy">'t@gQS7:1?gA%V?gz_i?gɻwE0@gXa@gy֙r?g3~8V?gl?g>3@g'T@gZQ"?g;pO?gY)o.M?gt-8@g&f'_@gŋTg?gSUG?g]3?gO>@g6AT@gZ?g@?gEm?g^BD@go}@gehT?gF<!B?gC"1?gs퀿/I@gIץ@g:Hܑ?g<?g+?g9ZYN@gzb1P@glʽWt}?gR7k):?g <@gU/2eqS@gxA@g8ڰz?gǒ B*B?gtN$_C@g1X@gt10zP@g@v	w?gtP?g1~	@g,t	`@gKC/@g(t?g×	\?g	@gE@d@gՃ(@g"a]nr?g!&j?g}{@g3QFSi@g6@g2l{p?gq?gJN@g6vo@g]r0d@g΂m?g7?gTeMT@gkeUt@gϞ&@gh+	:j?gz_z?gc@g?y@gkh.@gKtg?g|Լ?gfo	u@gMU@gu@g;e?gs ?ry?gVKV@g~@gT@g͎b?g4(	?gM(Ρ@g%m@g.qAg9Ԩ`?g{$?g]' @gpS@g%0'.AgN}>% ^?g8?gŕG"@gAʔ@goݜAgGGGZ?gIBR?gJH;:%@g%O@g_ѱ/ AgW?g94Of?gY>\'@gZ,@g'Ag\OgFU?gGFy?gߜb+@gcC!>7@gjb0AgټS?gq?g5-W.@gSg.Id@g5@K7AgFkP?g~By?g_1@gKYi@g8*6@Agb?1AN?g`՟?g.b633@g zYM@gb4wGAgKJ?gr)	?g?H5@gOY44@gXPAg"4H?g'6ͽ?g5pf8@g勦@g-LWAgD̢E?gBAMd?gpMǱ;@gAFk@g4WGaAg6
+JsC?gD#V?g;yTS?@g@g;JhAg*$JfA?g
?g	YWưA@gbɥ@ghpQqAg{<c>?g	2y?gQC@g%@gn)$9xAgqi;?g.ZOW?gx9F@gmk @gN[ZAgwEu8?garj?gI@g}Oq\Ȣ@gTRثAgtrl5?gmfeT?g/L@g_(@g&3gfAg[M3?g!I?g.5ͺtO@gy)G1@gmwAg@s<1?gN9]?gk))Q@gWw]@g:AgW;!.?g'?gUT@g50@gAg$+?g<ixԾ?gpV@g`@g8'@ڱAg"/(?g-]?g_Y@g:Ago7AgK3P%?gm2?gX9n8j\@g)f\MAg&AgS-fZJ#?gilzd?gkۈ۱_@g9)itJAgir(/|Agl ?gf۽?g9@}a@g;Ag(QwAgmXm?go6i4A?g/^@c@gEAg@AgT#?g?g^e@g]el	AgAAgx?gF';I?g8g@gtN6j Ag}!pAg6?gyP?g=:ij@gW7%AgλAg"d ?g7n?gtGm@gЏB*AgLbAgcr?g𺭮?g0s;p@g
	SZ0AgRZZ Bg7x40?gc&9,
'?gq5q@g<U_O4AgJFBgwc?g?%?}?g6p轫s@gbH9AgP寏Bg8	x?g*'̹?g2{u@g~|p>Ag>;+Bg
gk+?gB5?g(x@gM VSCAg8yBg9W, ?g-xU@?g04r{@g`1|HAgeC&Bg*<>g6"i?gd_t~@g1PAgmQ0Bg	+>gID?gEax@gsVAgj9Bg㪢9O>g|b2?gW|f@g
x_Ago,CBg{%>g!D)?g]	ݍ@g<keAg$NBgsn5>gba7U΢?gϊ@gYpDlAg΍VBgW_>g!?ꢓ?g4hcC@g1rAgW`Bgst>g,L?g9u:p@g vAgk5gBg/˦]>g%#?gU=@guX3]ߏ|Ag"1pBg>g0#+?g;~;@g:PswAgvI@vBgU>gkW?gOM@g\#=FAg_xlp~Bg	Nn>g@-?ggՖ@gX!nAgV^Bgc5>gR?gXf@g%;Ag֫m5BgC?'L>g#*K?g3Kե@ga2G}LAgpBg*̺Sg90L?gu@g- $AgkMÆg?7g&>0?gN:x@g+s?ɨXAg%pg"gX	?gVb\@g`o"Agf!ygQ
?g	~b?g~鎅@g z@Agͅ}s Bguf>g"~(#?g4J@g`%TFAgѺDbBg$ugz#(g ?gY @g q$Ag6aJgI]q7i>gw8?gSfv@g6v_n1Ag~j3BrF   r   )Zdtype)gdM?gmUq @r&   r&   r&   g|%?)r   rk   r   ro   Zfloat64r   r   )r	   rv   r/   Zsolr0   r
   r
   r   test_nnls_gh20302   s       zTestNNLS.test_nnls_gh20302N)__name__
__module____qualname__r   r   r1   r4   r8   r|   r   r   r
   r
   r
   r   r      s   	:;r   )
numpyr   Znumpy.testingr   Zpytestr   r6   Zscipy.optimizer   r   r
   r
   r
   r   <module>   s   