
    Yh;j                     T    d dl Zd dlmZ d dlmZ d dlmZ d dlZ G d d          Z	dS )    N)assert_allclose)raises)nnlsc                   h    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S )TestNNLSc                 N    t           j                            d          | _        d S )Nl   F_fr/ )nprandomdefault_rngrng)selfs    p/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_nnls.pysetup_methodzTestNNLS.setup_method	   s    9(()9::    c                    t          j        d                              dd          }t          j        d          }||z  }t          ||          \  }}|dk     sJ t           j                            ||z  |z
            dk     sJ d S )Ng      9@   g      @gHz>)r	   arangereshaper   linalgnorm)r   axyress        r   	test_nnlszTestNNLS.test_nnls   s    IdOO##B**IcNNEa3Tzzzzy~~q1uk**T111111r   c                    | j                             ddddg          }t          j        | j                             dddg                    }d|d d d<   ||z  }t	          ||          \  }}t          ||dd	
           |dk     sJ d S )N
   2   lowhighsize   r           绽|=rtolatol-q=r   uniformr	   absr   r   r   r   r   bxactrnorms         r   test_nnls_tallzTestNNLS.test_nnls_tall   s    H2RH==F48##"#>>??##A#E1ajjeabu5555u}}}}}}r   c                    | j                             ddddg          }t          j        | j                             dddg                    }d|d d d<   ||z  }t	          ||          \  }}t          ||d	d
           |dk     sJ d S )Nr   r   d   x   r!   r%   r&   r   r'   r(   r)   r,   r-   r0   s         r   test_nnls_widezTestNNLS.test_nnls_wide   s     H2S#J??F48####??@@##A#E1ajjeabu5555u}}}}}}r   c                     | j                             d          }| j                             d          }t          t                    5  t	          ||d           d d d            d S # 1 swxY w Y   d S )N)r   r   )r$   r      )maxiter)r   r.   assert_raisesRuntimeErrorr   r   r   r1   s      r   test_maxiterzTestNNLS.test_maxiter(   s    H'**H!$$<(( 	" 	"Aq!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   A++A/2A/c                 J   t          j        g d          }t          j        g d          }t          j        g d          }t          |          }t          j        |          t          j        t          j        ||f                    z  }|dz  }|dk                                    d         }d|||f<   d||t          j        |dz   |dz
            f<   d||<   d||<   t          j        |          }t          ||z  ||z            \  }	}
t          |	|dd	
           d S )N)C   r&   r   r:   r:   r:   rA                  )   /   5   9   C   L   g   Y   a   ^   U   _   N   rS   rS   M   I   r    r    8   D   b   rR   p                              rb               n   \   ?   <   4   rE      rD      r   r   r   r:   r&   rA   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 ?rn   祠oN @祠oN @rp   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@rq   gIe@gQg@g1D/Dd@gBA{/c@gGM^^[@gxWY@gIU@gقfCN@gIE@gPx7@gVS8@g|:@K1@goN '@rp   gD -@gΈb@r'   ro   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_s              r   test_nnls_inner_loop_case1z#TestNNLS.test_nnls_inner_loop_case1/   sG   H    H, , ,- -" H  	 	  FFGAJJ!Q111H1f""b&	+-"bjaQ''
'(""GAJJ
 q1ua!e$$aabu555555r   c                    t          j        g d          }t          j        g d          }t          j        g d          }t          |          }t          j        |          t          j        t          j        ||f                    z  }|dz  }|dk                                    d         }d|||f<   d||t          j        |dz   |dz
            f<   d||<   d||<   t          j        |          }t          ||z  ||z            \  }	}
t          j	        |	          }t          j
        |	dk              sJ t           j                            |||z  z
  t           j                  d	k     sJ t          |	|d
d           d S )N)Dr:   r   r:   r&   r&   r&   rA   rA   r      rC   rC         $   *   r   @   r   r   Q   rQ   rQ   rR   rR   rR   K   rL   E   r   >   ;   rW   r   G   rK   J   rS   v   re                        ra                  rM   h   r   rV   (       r      	   rm   rB   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'?rr   r   r:   r   )ord   r'   r(   r)   )r	   rs   rt   ru   rv   rw   rx   ry   r   cumsumallr   r   infr   )r   rz   r{   r|   r}   r~   r   r   r   r   r   ps               r   test_nnls_inner_loop_case2z#TestNNLS.test_nnls_inner_loop_case2i   s   H    H5 5 56 6" HC C C	D 	D  FFGAJJ!Q111H1f""b&	+-"bjaQ''
'(""GAJJq1ua!e$$aIdOOvdai     y~~a!a%iRV~44r9999abu555555r   c                 (   t          j        g d                              dd          }t          j        dt           j                  }t          ||          \  }}t          |t          j        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~j3BrN   r   )dtype)gdM?gmUq @r'   r'   r'   g|%?)r	   rs   r   rw   float64r   r   )r   r~   r1   solr3   s        r   test_nnls_gh20302zTestNNLS.test_nnls_gh20302   s    HT T TU  U j !(Ak 	
l GBbj)))!QZZ
URX&J&J&JKKLLL122222r   c                 "   g dg dg dg dg dg}g d}t          j        g d          }t          ||          \  }}t          ||           t          j        t           j                            ||z  |z
            |z
            dk     sJ d S )	N)g*ds?g&g%UgF?g,Xѿg['Jʿgu;ƿgs?)g_bhg@68mӿgFW=o$?gޜ䤱g.*ڿgIy
f[?g>kTȿgoJ)gm*eпghgȏMM?gVjgz|ga{TgnCY?gC9gT?)g2u51?g^:°,?g..B?gӿgײ_1?gOw׿g.Ig7Ϸѿ)gQo?g%Tɿg:?g0ٔ!?g??g^=пgU_pĿg>dJ?)g]j	2@gsQd 2g&@+@g{!Rg^H'U"@)r'   g#]@gA<F@gǧY@r'   gЩaK@r'   g6"==@vIh%,=r	   rs   r   r   r/   r   r   )r   r~   r1   des_solr   r   s         r   test_nnls_gh21021_ex1zTestNNLS.test_nnls_gh21021_ex1A  s    5 5 5: : :8 8 8: : :7 7 7 5 5 5 ( H H H I I1::SW%%%vbinnQsUQY//#566>>>>>>r   c                 `   t          j        ddgddgddgddgg          }t          j        g d	          }t          ||          \  }}t          |t          j        d
dg                     t          j        t           j                            ||z  |z
            |z
            dk     sJ d S )Ngȱ}?gοgr9W?g ޺c?g {:?gmgRnP>z?ggAD㳿)g/t8@gF<@gfkyD@gaCSg,v'K@r'   r   r   r   r~   r1   r   r   s        r   test_nnls_gh21021_ex2zTestNNLS.test_nnls_gh21021_ex2]  s    H!56 23!56!#78	: ; ;
 H + + + , ,
 1::SRX'7&=>>???vbinnQsUQY//#566>>>>>>r   c                    t          j        g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg          }t          j        g d          }t          ||          \  }}t          |t          j        g d          d           t          j        t           j                            ||z  |z
            |z
            dk     sJ d S )N)gyS$?ge_?gUjHhg+)?geJu66)g:1y?g<˿guـ밻gKK?gj9e;ÿ)g?g5
Vhg8~ڥ?gc}◒gQ=?)gH?gO<Tgg	F^S?gzhr?g-M|Dſ)g	giɿg'V ?goχYgSf˸-?)g}cҿg
(ʿggqҽdgúg_nPS?)gsI6?gT5?gy.?g:'WWƿgORB;)g>?g[z?grKbP/?g7ET?gAF?)gJ}9gθ\Q5Ŀg4eg~Ӹ[gN.)ggyFgteR?gKd?gBƿg)?)gajO?go ѿg)~?g>#¿gd )gOBisgp=WמgdLU]gXꉸ?gOVʢ?)gɵ鵆?gy7ۍg`a޳?gFK	߳2g+g*¿)g:\?gNZƿgqVXgs÷??gU!a?)g3As?gXRy?gGkFUgP!bDZ?g:;l̿)g&ًͨg՞*?g~7Q#퟿g34g?g4l?)g,V?gHRTgY"?gH1ZпgVT%?)g#w?g{?gR20g𨇨?gnF}ο)g,.}O?g~kn-޿g?g2/gI)g_UnR?g;O?gP@MgJm?g}Noɿ)g}r9!g|sb?gy	gɀ?gt@/W )gة?gN1	UʿgvrM
?g^Fe?gȡ?)gBC˽gW<}1?g?g0$X?gW)gGX?g,4a?g͋Hق?gLy?gмX ?)g{Wg%rg]{1Do?g=\_пgk7W6?)g#gG g|2
@gPu<M0@g[E~@g찈gH>:F@gW@go?`%gL0@g"Wk?g<s8ugb@@gg1g]B$Og][9@gK#Q%gBC/@g:ԝbg9(gZ^g#@gP20n@g0p @gzFߛ3@)r'   r'   g ӗS@r'   r'   r   r+   r   r   s        r   test_nnls_gh21021_ex3zTestNNLS.test_nnls_gh21021_ex3l  s1   H9 9 98 8 89 9 98 8 88 8 88 8 89 9 97 7 78 8 87 7 78 8 88 8 89 9 97 7 77 7 77 7 77 7 76 6 68 8 87 7 78 8 87 7 78 8 87 7 77 7 7c28 29 29h H ) ) ) * * 1::SRX&L&L&LMM"	$ 	$ 	$ 	$vbinnQsUQY//#566>>>>>>r   c                     t          j        ddgddgddgg          }t          j        g d          }t          j        t          d          5  t          ||d           ddd           dS # 1 swxY w Y   dS )	z;Test that using atol parameter triggers deprecation warningr:   r   )r&   r:   r:   z{'atol'}matchg:0yE>r   N)r	   rs   pytestwarnsDeprecationWarningr   r>   s      r   test_atol_deprecation_warningz&TestNNLS.test_atol_deprecation_warning  s    Hq!fq!fq!f-..HYYY\,J??? 	" 	"AD!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   A//A36A3c                    t          j        g dg dg dg          }t          j        g dg          j        }t          ||          \  }}t	          |t          j        g d                     t	          |d           d S )N      ?rr         r   rr   r'   )r   r'   r   )r          @r   )r   r   g      @r'   )r	   rs   Tr   r   )r   r~   r1   r   rs        r   test_2D_singleton_RHS_inputz$TestNNLS.test_2D_singleton_RHS_input  s    Hooo%oo%oo' ( ( H&&&'((*Aqzz128OOO445553r   c                    t          j        g dg dg dg dg          }t          j        ddgt           j                  }t	          j        t          d          5  t          ||           d d d            d S # 1 swxY w Y   d S )	Nr   r   )r'   r'   r   r   r&   )shaper   zExpected a 1D arrayr   )r	   rs   rw   r   r   r   
ValueErrorr   )r   r~   r1   s      r   !test_2D_not_singleton_RHS_input_2z*TestNNLS.test_2D_not_singleton_RHS_input_2  s    Hooo%oo%oo%oo' ( ( G1a&
333]:-BCCC 	 	AJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A<<B B c                    g d}t           j                            d          }d\  }}|                    ||          }d|d dd d f<   |                    |          }t	          ||          \  }}t          ||           d S )N)r   r   gŚ?r   r   r   r   g?r   r   r   g?r   )r   rm   r   r&   )r	   r
   RandomStaterandnr   r   )	r   desiredr   	n_samples
n_featuresXr   coefr   s	            r   test_gh_22791_32bitzTestNNLS.test_gh_22791_32bit  s    QQQi##B'' %	:IIi,,"1"aaa%IIi  q!**ag&&&&&r   N)__name__
__module____qualname__r   r   r4   r8   r?   r   r   r   r   r   r   r   r   r   r    r   r   r   r      s        ; ; ;2 2 2  	 	 	" " "86 86 86t96 96 96v[3 [3 [3z? ? ?8? ? ?B? B? B?H" " "       	' 	' 	' 	' 	'r   r   )
numpyr	   numpy.testingr   r   r   r<   scipy.optimizer   r   r   r   r   <module>r      s        ) ) ) ) ) ) * * * * * *       M' M' M' M' M' M' M' M' M' M'r   