
    doi                     J   S SK r S SKJr  S SKJr  S SKrS SKJr  S SK	J
r
JrJr  S SKrS SKJr  S SKJrJr  S SKJr  S S	KJrJrJr  S S
KJr  S SKJrJrJr  S SKJr  S4S jr S5S jr!S r"S r#S r$ " S S5      r%S r&S r'S r(S r)S r*S5S jr+S r, " S S5      r- " S S5      r.S r/\0" \Rb                  " 5       5      \//-   r2 " S  S!5      r3 " S" S#5      r4 " S$ S%5      r5 " S& S'5      r6 " S( S)\3\4\5\65      r7 " S* S+\3\4\5\65      r8 " S, S-\35      r9S. r:S/ r;S0 r<S1 r=S2 r>S3 r?g)6    N)product)Pool)norm)assert_assert_allcloseassert_equal)raises)issparse	lil_array)aslinearoperator)least_squaresBoundsminimize)IMPLEMENTED_LOSSES)EPSmake_strictly_feasibleCL_scaling_vector)OptimizeResultc                     X-
  S-  S-   $ )N         @ xas     c/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/optimize/tests/test_least_squares.pyfun_trivialr      s    EA:    c                     SX-
  -  $ Nr   r   r   s     r   jac_trivialr!      s    ;r   c                 >    [         R                  " U S   U S   /5      $ Nr      nparrayr   s    r   fun_2d_trivialr)      s    88QqT1Q4L!!r   c                 .    [         R                  " S5      $ r    )r&   identityr(   s    r   jac_2d_trivialr,   !   s    ;;q>r   c                 \    [         R                  " SU S   U S   S-  -
  -  SU S   -
  /5      $ )N
   r$   r   r   r%   r(   s    r   fun_rosenbrockr/   %   s3    88R1Q4!A$'>*Q1X788r   c                   $    \ rS rSrS rSS jrSrg)Fun_Rosenbrock)   c                     SU l         g Nr   nfevselfs    r   __init__Fun_Rosenbrock.__init__*   s	    	r   c                 B    U =R                   S-  sl         [        U5      $ Nr$   )r6   r/   )r8   r   r   s      r   __call__Fun_Rosenbrock.__call__-   s    		Q	a  r   r5   Nr   )__name__
__module____qualname____firstlineno__r9   r=   __static_attributes__r   r   r   r1   r1   )   s    !r   r1   c                 F    [         R                  " SU S   -  S/SS//5      $ )Nr   r.   r%   r(   s    r   jac_rosenbrockrH   2   s/    88	qtR	Q  r   c                 L    [         R                  " SU S   -  S/SS/SS//5      $ )NrF   r   r.   rG           r%   r(   s    r   jac_rosenbrock_bad_dimrK   9   s6    88	qtR	Q	c
  r   c                     [        U 5      S   $ r4   )r/   r(   s    r   fun_rosenbrock_croppedrM   A       !Qr   c                     [        U 5      S   $ r4   )rH   r(   s    r   jac_rosenbrock_croppedrP   E   rN   r   c                 >    [         R                  " X S-  U S-  /5      $ )Nr      r%   r(   s    r   fun_wrong_dimensionsrS   J   s    88Q1adO$$r   c                 <    [         R                  " [        XS95      $ )N)r   )r&   
atleast_3dr!   r   s     r   jac_wrong_dimensionsrV   N   s    ==Q,--r   c                 d   [        [        R                  " U R                  S   5      5      n[        R                  " US-   US-   45      nU R                  X45      n XSS2SS24'   US S2SS24   USS 2SS24   -   USS2S S24   -   USS2SS 24   -   SU -  -
  U S-  -   nUR                  5       $ )Nr   r   r$   rG      rR   )intr&   sqrtshapezerosreshaperavel)r   nuys       r   fun_bvprc   R   s    BGGAGGAJ A
!a%Q A			1&AadAbDjM	#2#qt)qQrT{"QqtSbSy\1AadABhK?!a%G!Q$NA779r   c                   *    \ rS rSrSS jrS rS rSrg)BroydenTridiagonal[   c                   ^  [         R                  R                  S5      nUT l        [         R                  " U5      * T l        [         R                  " SSU5      T l        [         R                  " SSU5      T l        T =R                  SUR                  U5      -  -  sl        T =R                  SUR                  U5      -  -  sl        T =R
                  SUR                  U5      -  -  sl        [        T R
                  T R                  T R                  5      T l        US:X  a  [        X4[        S9T l        [         R                  " U5      nS	T R                  XD4'   [         R                  " S	U5      nS	T R                  XDS	-
  4'   [         R                  " US	-
  5      nS	T R                  XDS	-   4'   T R                  T l        g US
:X  a  U 4S jT l        g US:X  a  S T l        U 4S jT l        g [#        S5        g )Ni0 rX         grJ   皙?sparsedtyper$   operatorc                 8   > [        TR                  U 5      5      $ N)r   _jacr   r8   s    r   <lambda>-BroydenTridiagonal.__init__.<locals>.<lambda>v   s    !1$))A,!?r   densec                 B   > TR                  U 5      R                  5       $ ro   )rp   toarrayrq   s    r   rr   rs   y   s    1!5!5!7r   F)r&   randomdefault_rngr`   onesx0linspacelbubstandard_normalr   r   rZ   sparsityarangerp   jacr   )r8   r`   moderngis   `    r   r9   BroydenTridiagonal.__init__\   s   ii##F+771:+++b$*++dC+3,,Q///3,,Q///3,,Q///($''477C8%qfC8DM		!A"#DMM!$		!QA&'DMM!U(#		!a% A&'DMM!U(#yyDHZ?DHW_ DM7DHENr   c                 f    SU-
  U-  S-   nUSS === US S -  sss& US S=== SUSS  -  -  sss& U$ )NrR   r$   rG   r   r   )r8   r   fs      r   funBroydenTridiagonal.fun}   sG    UaK!O	!"3B	#2!ae)r   c                 L   [        U R                  U R                  45      n[        R                  " U R                  5      nSSU-  -
  X#U4'   [        R                  " SU R                  5      nSX#US-
  4'   [        R                  " U R                  S-
  5      nSX#US-   4'   U$ )NrR   r   r$   rG   rX   )r   r`   r&   r   )r8   r   Jr   s       r   rp   BroydenTridiagonal._jac   s    tvvtvv&'IIdffa!e)Q$IIa QU(IIdffqj!QU(r   )r   r|   r`   r   r}   rz   N)d   rj   )r@   rA   rB   rC   r9   r   rp   rD   r   r   r   re   re   [   s    Br   re   c                   2    \ rS rSrSr  SS jrS rS rSrg)	ExponentialFittingProblem   zYProvide data and function for exponential fitting in the form
y = a + exp(b * x) + noise.Nc                 V   [         R                  R                  U5      nX`l        SU l        [         R
                  " S5      U l        [         R                  " US   US   U5      U l        U[         R                  " X R                  -  5      -   U l
        U =R                  X7R                  U R                  5      -  -  sl
        UR                  SU R                  U5      nU R                  U==   SU-  UR                  U5      -  -  ss'   [         R                  " X/5      U l        g )Nr   r   r$   2   )r&   rw   rx   mr`   r]   p0r{   r   exprb   r~   integersr'   p_opt)	r8   r   bnoise
n_outliersx_rangen_pointsr   outlierss	            r   r9   "ExponentialFittingProblem.__init__   s    ii##C(((1+WQZX>RVVAJ''%--dff555<<466:6xBJJ)???XXqf%
r   c                 t    US   [         R                  " US   U R                  -  5      -   U R                  -
  $ r#   )r&   r   r   rb   r8   ps     r   r   ExponentialFittingProblem.fun   s/    tbffQqTDFF]++dff44r   c                     [         R                  " U R                  U R                  45      nSUS S 2S4'   U R                  [         R
                  " US   U R                  -  5      -  US S 2S4'   U$ )Nr$   r   )r&   emptyr   r`   r   r   )r8   r   r   s      r   r   ExponentialFittingProblem.jac   sZ    HHdffdff%&!Q$&&266!A$-00!Q$r   )r   r`   r   r   r   rb   )r$   )rG   r$      N)	r@   rA   rB   rC   __doc__r9   r   r   rD   r   r   r   r   r      s    # ;B"&&"5r   r   c                     [         R                  " SU R                  45      nSU -   nSUS-  S-
  -  US'   US-  US'   SUS-  -  US'   U$ )NrR   r$   gUUUUUU?r   gUUUUUUgr   )r&   r   size)zrhots      r   cubic_soft_l1r      s[    
((Aqvv;
C	AA!c(Q,CF4[CFAICFJr   c                      \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS r\R6                  R9                  S5      \R6                  R;                  S5      S 5       5       rSrg)	BaseMixin   zBjac='(3-point|cs)' works equivalently to '2-point' for method='lm'c                     [        [        SU R                  S9n[        UR                  SSS9  [        UR
                  [        UR                  5      5        g )N       @methodr   -C6?atol)r   r   r   r   r   r   r8   ress     r   
test_basicBaseMixin.test_basic   s;    KDKK@qt,SUU!34r   c           
      ,   SnSSS[         4 H  n[        R                  " 5          [        R                  " SU R                  [
        5        [        [        SX!4U R                  S9n[        [        SUSU0U R                  S	9nS S S 5        [        WR                  US
S9  [        WR                  US
S9  [        [        [        [        SSU R                  S9  [        [        [        [        SSS0U R                  S	9  M     g ! , (       d  f       N= f)N      @2-point3-pointcsignorer   )argsr   r   )kwargsr   r   )rtol)rR   rY   kaboomrR   )r!   warningscatch_warningsfilterwarningsmsgUserWarningr   r   r   r   r   assert_raises	TypeError)r8   r   r   r   res1s        r   test_args_kwargsBaseMixin.test_args_kwargs   s    y$<C((*''$((KH#Kc+/;;8$[#sC8+/;;8	 + CEE140DFFAD1)]K&t{{<)]K"*At{{D =**s   AD
D	c           	      t   SSS[         4 Hu  n[        R                  " 5          [        R                  " SU R                  [
        5        [        [        SXR                  S9nS S S 5        [        WR                  SSS	9  Mw     [        [        [        [        SS
U R                  S9  g ! , (       d  f       NL= f)Nr   r   r   r   r   r   r   r   r   oopsr   r   )r!   r   r   r   r   r   r   r   r   r   r   r   
ValueErrorr8   r   r   s      r   test_jac_optionsBaseMixin.test_jac_options   s    y$<C((*''$((KH#Kc++N + CEE140	 = 	j-cv![[	* +*s   A B))
B7	c                 t    S H2  n[        [        SUU R                  S9n[        UR                  SSS9  M4     g )N)N   r   )max_nfevr   r   r   r   r   r   r   r   r   )r8   r   r   s      r   test_nfev_optionsBaseMixin.test_nfev_options   s3    "HS8'+{{4CCEE140 #r   c           	      h   S[         R                  " S/5      S4 H(  n[        [        SUS9n[	        UR
                  S5        M*     [        [        [        [        SSU R                  S9  [        [        [        [        SS	U R                  S9  [        [        [        [        SS
U R                  S9  g )N      ?      ?r   r   )x_scaler   auto)r   r         y      ?       @)	r&   r'   r   r   r   r   r   r   r   )r8   r   r   s      r   test_x_scale_optionsBaseMixin.test_x_scale_options   s    RXXse_e4GS'BCCEE1% 5 	j-6$++	?j-4	=j-8DKK	Ar   c                     [        [        SSU R                  S9n[        [        SS U R                  S9n[        UR                  SSS9  [        UR                  SSS9  g )Nr   ri   )	diff_stepr   r   r   r   r   )r8   r   res3s      r   test_diff_stepBaseMixin.test_diff_step   sQ    [#$(KK1[#'+DKKA--r   c           	          [        [        [        [        SU R                  SS0S9  [        [        [        [        SU R                  SS0S9  g )Nr   no_such_optionr   )r   optionsr   )r   r   r   r   r   r7   s    r   test_incorrect_options_usage&BaseMixin.test_incorrect_options_usage   sA    iS![[3CS2I	KiS![[:s2C	Er   c                 l   [        [        SU R                  S9n[        UR                  SSS9  [        UR
                  S5        [        UR                  S5        [        UR                  SSS9  [        UR                  SSS9  [        UR                  SSS9  [        UR                  S5        U R                  S	:X  a  [        UR                  S L 5        O0[        UR                  S
:  5        [        UR                  S
:  5        [        UR                  S:  5        [        UR                   5        g )Nr   r   r   r   r   g      )@   {Gz?lmr.   )r   r   r   r   r   costr   r   grad
optimalityr   active_maskr   njevr6   statussuccessr   s     r   test_full_resultBaseMixin.test_full_result   s     KT[[Aqt,$'#.!$/5S__a(;;$CHH$%CHHrM"CHHrM"

Qr   c                    U R                   S:X  a  g [        [        SU R                   SS9n[        UR                  [
        R                  " S/5      5        [        UR                  S5        [        UR                  [
        R                  " S/5      5        [        UR                  [
        R                  " S//5      5        [        UR                  [
        R                  " S	/5      5        [        UR                  S	5        [        UR                  [
        R                  " S
/5      5        [        UR                  S5        [        UR                  S5        [        UR                  S
5        [        UR                   S
5        g )Nr   r   r$   )r   r   r   g     @D@	   rY   $   r   )r   r   r   r   r   r&   r'   r   r   r   r   r   r   r6   r   r   r   r   s     r   test_full_result_single_fev%BaseMixin.test_full_result_single_fev  s     ;;$KT[[%&(SUUBHHaSM*SXXt$SWWbhhsm,SWWbhhuo.SXXrxx~.S^^R(S__bhhsm4SXXq!SXXq!SZZ#S[[!$r   c           	         [        SS5       Ht  n[        R                  R                  S5      nUR	                  SS9S-  n[        5       n[        XC[        U R                  US9nUR                  UR                  :X  a  Mt   e   g )Nr$   rR   i r   )r   r.   )r   r   r   )
ranger&   rw   rx   uniformr1   r   rH   r   r6   )r8   r   r   rz   ftrivialr   s         r   	test_nfevBaseMixin.test_nfev'  sr    q!A))''/C!$r)B%'HaC 88x}},,, r   c                    SS/nSS/n[        SSS[        /S[        R                  " SS/5      S/S	S
/5       Hz  u  p4n[        R
                  " 5          [        R                  " SU R                  [        5        [        [        XUXPR                  S9nS S S 5        [        WR                  U5        M|     g ! , (       d  f       N)= f)NrX   r$   r   r   r   r   皙?r   exactlsmrr   r   	tr_solverr   )r   rH   r&   r'   r   r   r   r   r   r   r/   r   r   r   )r8   rz   x_optr   r   r  r   s          r   test_rosenbrockBaseMixin.test_rosenbrock2  s    !WA'.It^<bhhSz*E2&!(##C) ((*''$((KH#NBW.7M + CEE5)(# +*s   AB88
C	c           
      2   SS/nU R                   S:X  a  [        [        [        [        USS9  g [        SSS[        /S[        R                  " SS	/5      S
/SS/5       H5  u  p#n[        [        XUX@R                   S9n[        UR                  SSS9  M7     g )NrX   r$   r   r   r   r   r   r   r  r   r	  r
  r  r   g+=r   )r   r   r   r   rM   r   rP   r&   r'   r   r   )r8   rz   r   r   r  r   s         r   test_rosenbrock_cropped!BaseMixin.test_rosenbrock_cropped?  s    !W;;$*m5KT+ ,3	41GH"((C:.6f%,''i $*BW'=  !%8,'r   c                 J    [        [        [        [        SU R                  S9  g Nr   r   )r   r   r   rS   r   r7   s    r   test_fun_wrong_dimensions#BaseMixin.test_fun_wrong_dimensionsN  s    j-1E$++	/r   c           	      T    [        [        [        [        S[        U R
                  S9  g r  )r   r   r   r   rV   r   r7   s    r   test_jac_wrong_dimensions#BaseMixin.test_jac_wrong_dimensionsR  s    j-/	Er   c           	      \    SS/n[        [        [        [        U[        U R
                  S9  g )Nr$   r   r   )r   r   r   r/   rK   r   r8   rz   s     r   (test_fun_and_jac_inconsistent_dimensions2BaseMixin.test_fun_and_jac_inconsistent_dimensionsV  s%    Vj-,T[[	Br   c                     [         R                  " S5      R                  SS5      n[        [        [
        [        UU R                  S9  g )NrY   r   r   )r&   ry   r^   r   r   r   r   r   r  s     r   test_x0_multidimensional"BaseMixin.test_x0_multidimensional[  s3    WWQZ1%j-b![[	*r   c                 N    Sn[        [        [        [        UU R                  S9  g )N       @        r   r   r   r   r   r   r  s     r   test_x0_complex_scalar BaseMixin.test_x0_complex_scalar`  s    j-b![[	*r   c                 R    SS/n[        [        [        [        UU R                  S9  g )Nr   r"  r   r#  r  s     r   test_x0_complex_arrayBaseMixin.test_x0_complex_arraye  s#    < j-b![[	*r   c                     Sn[         R                  " US-  5      nU R                  S:X  a  SnOSn[        [        USU R                  US9n[        UR                  U:  5        [        UR                  S:  5        g )	Nr.   r   r   i  r   r   )ftolr   r   r   )r&   ry   r   r   rc   r   r6   r   )r8   r`   rz   r   r   s        r   test_bvpBaseMixin.test_bvpj  sl    
 WWQT];;$HHGRd4;;%-/ 	8#$3r   c                 P    [        [        [        [        SU R                  S S S S9  g )Nr   )r   r*  xtolgtolr#  r7   s    r   /test_error_raised_when_all_tolerances_below_eps9BaseMixin.test_error_raised_when_all_tolerances_below_eps{  s     j-c![[t$T	Kr   c                     U R                   S:X  a  g SS/nSS/nS H<  u  p4n[        [        U[        X5UU R                   S9n[	        UR
                  U5        M>     g )Nr   rX   r$   )):0yE>NN)Nr3  N)NNr3  )r   r*  r/  r.  r   )r   r   r/   rH   r   r   )r8   rz   r  r*  r.  r/  r   s          r   0test_convergence_with_only_one_tolerance_enabled:BaseMixin.test_convergence_with_only_one_tolerance_enabled  sb    ;;$!WA!6D  %)4'+{{4C CEE5)!6r   r$   r   c                 N   [        [        SU R                  S9n/ nS H.  n[        [        SU R                  US9nUR                  U5        M0     [	        S5       n[        [        SU R                  UR
                  S9nUR                  U5        S S S 5        U Hv  nUR                  (       d   e[        UR                  UR                  5        [        UR                  UR                  5        [        UR                  UR                  5        Mx     g ! , (       d  f       N= f)Nr   r   r    )r   workersr   )r   r   r   appendr   mapr   r   r   r6   r   )r8   serialresesr7  r   s        r   test_workersBaseMixin.test_workers  s     {CD GSgC LL	 !
 !WSgkkC LL	 
 C;;;)6;;/6;;/	  Ws   6D
D$r   N) r@   rA   rB   rC   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r$  r'  r+  r0  r4  pytestmarkparallel_threads_limit	fail_slowr<  rD   r   r   r   r   r      s    
NC5D&*1	A.E&%(	-*9/EB
*
*
*
 "K
* [[''*[[30   +0r   r   c                       \ rS rSrS rS rS rS rS rS r	S r
\R                  R                  S	5      S
 5       rSrg)BoundsMixini  c           	      L    [        [        [        [        SSU R                  S9  g )Nr   )      $@rJ   boundsr   r#  r7   s    r   test_inconsistentBoundsMixin.test_inconsistent  s    j-c(	>r   c           	      L    [        [        [        [        SSU R                  S9  g )Nr   )r   rY   rF  r#  r7   s    r   test_infeasibleBoundsMixin.test_infeasible  s    j-c$T[[	:r   c           	      L    [        [        [        [        SSU R                  S9  g )Nr   )r   r   rR   rF  r#  r7   s    r   test_wrong_numberBoundsMixin.test_wrong_number  s    j-b'	=r   c           	          [        [        [        [        SSSS/4U R                  S9  [        [        [        [
        SS/S/SS/4U R                  S9  g )Nr   r   r   rF  rJ         @)r   r   r   r   r   r/   r7   s    r   test_inconsistent_shape#BoundsMixin.test_inconsistent_shape  sP    j-c!C:.t{{	D 	j-#s"ec3Z0	Fr   c           	         SSS[         4 H  n[        [        SUSU R                  S9n[	        UR
                  SSS	9  [        UR                  S
/5        [        SUR
                  s=:*  =(       a    S:*  Os  5        [        [        SUSU R                  S9n[	        UR
                  SSS	9  [        UR                  S/5        [        SUR
                  s=:*  =(       a    S:*  Os  5        M     g )Nr   r   r   r   )r   r   r   rG  r   rJ   r   r   r   rG   rR   )r   r   r   )	r!   r   r   r   r   r   r   r   r   r   s      r   test_in_boundsBoundsMixin.test_in_bounds  s    y$<CSc'24;;HCCEE3T21#.B#%%$$1$%Sc'1$++GCCEE3T22$/C355%%A%& =r   c                    S nS nSSS[         4 H  nX4 H  nSS/n[        [        XSS9n[        UR                  SS/5        [        [        XSU" S	S
S
/5      U R
                  S9n[        UR                  S	S	/5        [        [        XSU" SS/S5      U R
                  S9n[        UR                  SS/5        [        [        XSU" SS	/SS/5      U R
                  S9n[        UR                  SS	/SS9  M     M     g )Nc                     X4$ ro   r   r|   r}   s     r   get_bounds_direct8BoundsMixin.test_bounds_shape.<locals>.get_bounds_direct  s	    6Mr   c                     [        X5      $ ro   )r   rZ  s     r   get_bounds_instances;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instances  s    ">!r   r   r   r   r   )r   rJ   r   r   rU  g333333?r  r   rG   h㈵>r   )r,   r   r)   r   r   r   )r8   r[  r^  r   bounds_funcrz   r   s          r   test_bounds_shapeBoundsMixin.test_bounds_shape  s   		" y$?C 1H3Z#NB@Sz2#NB+6sS#J+G+/;;8  Sz2#NB+6Sz3+G+/;;8  Sz2#"B&Cy3*=;;(  Sz=!  I @r   c           	      &   [        [        S[        5       S9n[        UR                  SSS9  [        [        S[        SS9S9n[        UR                  SSS9  [        [        S[        S	SS
9S9n[        UR                  SSS9  [        [        S[        S	S9S9n[        UR                  S	SS9  [        [
        SS/[        S	S	/SS
9S9n[        UR                  SS/SS9  [        [
        SS/[        SS/S9S9n[        UR                  SS/SS9  g )Nr   )rG  rJ   r   r   r   r   )r|   r   rZ        )r}   r`  ri   )r   r   r   r   r   r)   r   s     r   test_bounds_instances!BoundsMixin.test_bounds_instances  s    KVX>s.KVs^Ds.KVt5LMs.KfoFt$/NS#J#)dD\c#BDSz5NS#J#)c3Z#8:Sz5r   r.   c                    [         R                  " SS/5      n[         R                  " SS/5      n[         R                  " SS/5      n[         R                  " SS/5      n[         R                  " SS/5      nU[         R                  * S/[         R                  44U[         R                  * S/[         R                  44U[         R                  * S/[         R                  44U[         R                  * S/S[         R                  /44USS/SS/44US	S/S
S/44/nU H[  u  px[        SSS[        /SSS
/S/SS/5       H6  u  pn[        [        XyUXU R                  S9n[        UR                  SSS9  M8     M]     g )Ng       r   r   rJ   g333333rh   g      ?r   g      Ir   r   r   r   r   r   r	  r
  r  r`  r   )
r&   r'   infr   rH   r   r/   r   r   r   )r8   x0_1x0_2x0_3x0_4x0_5problemsrz   rG  r   r   r  r   s                r   test_rosenbrock_bounds"BoundsMixin.test_rosenbrock_bounds  so   xxs$xxc
#xxs$xxc
#xxs$bffWdORVV,-bffWcNBFF+,bffWcNBFF+,bffWcNS"&&M23S#Jc
+,UCL3*-.
 #JB+2	4@3*e,f%,''i $NBV,3+/;;8  $?,' #r   r   N)r@   rA   rB   rC   rH  rK  rN  rR  rV  rb  rf  r>  r?  rA  rp  rD   r   r   r   rC  rC    sK    >:=F'>46* [[2@ @r   rC  c                       \ rS rSrS rS rS rS rS rS r	\
R                  R                  S5      S	 5       rS
 rS rS rSrg)SparseMixini  c           
         [        5       n[        [        [        UR                  UR
                  UR                  SU R                  S9  [        [        [        UR                  UR
                  SUR                  U R                  S9  g )Nr	  r  r   )r  jac_sparsityr   )	re   r   r   r   r   rz   r   r   r   r   s     r   test_exact_tr_solver SparseMixin.test_exact_tr_solver  sY     j-aee '	=j- 'ajj![[	*r   c                    [        SS9n[        SS9n[        UR                  UR                  UR                  U R
                  S9n[        UR                  UR                  UR                  U R
                  S9n[        UR                  UR                  5        [        UR                  UR                  SS9  [        UR                  SSS9  [        UR                  SSS9  g )Nrj   r   rt   r   #B;r   r   )re   r   r   rz   r   r   r   r6   r   r   r   r8   rj   rt   
res_sparse	res_denses        r   test_equivalenceSparseMixin.test_equivalence  s    #2"0"JJ		vzz;; 
 "IIuxxVZZ;; 	 	Z__inn5
ikk>
7	6r   c                     [        5       n[        UR                  UR                  UR                  U R
                  SS0S9n[        UR                  SSS9  g )Nbtol绽|=r   
tr_optionsr   r{  r   )re   r   r   rz   r   r   r   r   r8   r   r   s      r   test_tr_optionsSparseMixin.test_tr_options'  sC     AEE144t{{(.8!%0r   c           
         [        5       n[        [        [        UR                  UR
                  UR                  SU R                  S9  [        [        [        UR                  UR
                  UR                  SSS0S9  g )Nbestru  r
  tolr  )r  r  )	re   r   r   r   r   rz   r   r   r   r   s     r   test_wrong_parameters!SparseMixin.test_wrong_parameters-  sY     j-aee &t{{	<iqttQUU &E5>	Cr   c                    [        SS9n[        SS9n[        UR                  UR                  UR                  U R
                  S9n[        UR                  UR                  UR                  U R
                  S9n[        UR                  SSS9  [        UR                  SSS9  [        [        UR                  5      5        [        [        UR                  [        R                  5      5        g )Nrj   rz  rt   r   r   r{  r   )re   r   r   rz   r   r   r   r   r   r
   
isinstancer&   ndarrayr|  s        r   test_solver_selection!SparseMixin.test_solver_selection4  s    #2"0"6::vyyfjj*.++7
!%))UXX599)-6	
7	6()
9=="**56r   c           	         [        5       nS H  n[        UR                  UR                  X R                  S9n[        UR                  UR                  X R                  UR
                  S9n[        UR                  UR                  5        [        UR                  UR                  SS9  [        UR                  SSS9  [        UR                  SSS9  M     g )N)r   r   r   r   )r   rv  r{  r   r   )re   r   r   rz   r   r   r   r6   r   r   r   )r8   r   r   r~  r}  s        r   test_numerical_jacSparseMixin.test_numerical_jac@  s     /C%aeeQTT3{{KI&qttSZZ)J 9IKKEBINNAE:JOOQU; 0r   r.   c           
         [        5       n[        UR                  SSS/S UR                  /5       GH  u  p#[	        UR
                  UR                  X!R                  [        R                  4U R                  US9n[	        UR
                  UR                  U[        R                  * UR                  4U R                  US9n[	        UR
                  UR                  X!R                  UR                  4U R                  US9n[        UR                  SSS9  [        UR                  SSS9  [        UR                  SSS9  GM     g )Nr   r   r   )rG  r   rv  r   r  r   )re   r   r   r   r   r   rz   r|   r&   ri  r   r}   r   r   )r8   r   r   rv  res_1res_2res_3s          r   test_with_boundsSparseMixin.test_with_boundsL  s    !(	9d3dAJJ5G"IC!qttS$${{>E "qttS266'144{{?E "qttS$${{?E E,,ae<E,,ae<E,,ae<"Ir   c           	          [        5       nUR                  S S n[        [        [        UR
                  UR                  X R                  S9  g )NrG   rv  r   )re   r   r   r   r   r   rz   r   )r8   r   r   s      r   test_wrong_jac_sparsity#SparseMixin.test_wrong_jac_sparsity^  s9     ::cr?j-#+KK	Ar   c           
      &   [        SS9n[        UR                  UR                  UR                  U R
                  S9n[        UR                  SSS9  [        [        [        UR                  UR                  UR                  U R
                  SS9  g )	Nrm   rz  r   rJ   r{  r   r	  )r   r  
re   r   r   rz   r   r   r   r   r   r   r  s      r   test_linear_operator SparseMixin.test_linear_operatord  sc    J/AEE144t{{C#E2j-aee![[G	=r   c           
      <   [        5       n[        UR                  UR                  UR                  U R
                  SS9n[        UR                  SSS9  [        SS9n[        [        [        UR                  UR                  UR                  U R
                  SS9  g )Nr   )r   r   rJ   r{  r   rm   rz  r  r  s      r   test_x_scale_jac_scale"SparseMixin.test_x_scale_jac_scalek  sp     AEE144t{{$)+#E2J/j-aee![[%	9r   r   N)r@   rA   rB   rC   rw  r  r  r  r  r  r>  r?  rA  r  r  r  r  rD   r   r   r   rs  rs    sT    *71C
7
< [[2= ="A=9r   rs  c                   2    \ rS rSrS rS rS rS rS rSr	g)	LossFunctionMixiniv  c           	          [          H2  n[        [        SUU R                  S9n[	        UR
                  SSS9  M4     [        [        [        [        SSU R                  S9  g )Nr   lossr   r   V瞯<r   hinge)LOSSESr   r   r   r   r   r   r   r8   r  r   s      r   test_optionsLossFunctionMixin.test_optionsw  sN    DSt'+{{4CCEE151 
 	j-c"4;;	8r   c                     [          HF  n[        [        SUU R                  S9n[	        UR
                  [        UR                  5      5        MH     g )Nr   r  )r  r   r   r   r   r   r   r  s      r   test_funLossFunctionMixin.test_fun  s<     DSt'+{{4C+cee"45 r   c           	         [         R                  " S/5      n[        [        U[        SSU R
                  S9n[        UR                  SU-  US-  S-   -  5        [        [        U[        SSU R
                  S9n[        UR                  SU-  5        [        [        U[        SSU R
                  S9n[        UR                  SU-  US-  S-   -  SUS-  S-   S-  -   S	-  -  5        [        [        U[        S
SU R
                  S9n[        UR                  SU-  US-  S-   -  SUS-  S-   S-  -   -  5        [        [        U[        SSU R
                  S9n[        UR                  SU-  US-  S-   -  SUS-  S-   S-  -   -  5        [        [        U[        [        SU R
                  S9n[        UR                  SU-  US-  S-   -  SUS-  S-   S-  -   S-  -  5        g )Nr   linearr$   r  r   r   r   r   hubersoft_l1r   cauchyarctanrY   gUUUUUU?)
r&   r'   r   r   r!   r   r   r   r   r   )r8   r   r   s      r   	test_gradLossFunctionMixin.test_grad  s    HHcUOKKh%&t{{<SXXq1u1q12KKg%&t{{<SXXq1u%KKi%&t{{<AA*a1a4!8a-.?#-EE	G KKh%&t{{<!a%1a4!8"4QTAXM8I"JKKKh%&t{{<!a%1a4!8"4QTAXM8I"JKKKm%&t{{<AA*a1a4!8a-.?3-GG	Ir   c           
      x   SnUS-  S-   n[        [        U[        SSU R                  S9n[	        UR
                  SU-  5        [        [        U[        SSU R                  S9n[	        UR
                  SU-  [        S-  -  5        [        [        U[        SS	SS
9n[	        UR
                  SU-  5        [        [        U[        SSU R                  S9n[        UR
                  SU-  SUS-  -   S-  -  5        [        [        U[        SSU R                  S9n[        UR
                  SU-  [        S-  -  5        [        [        U[        SS	SU R                  S9nUS	-  n[        UR
                  SU-  SUS-  -
  S-  -  SUS-  -   -  5        [        [        U[        SSU R                  S9n[        UR
                  SU-  [        S-  -  5        [        [        U[        SSSU R                  S9nUS-  n[        UR
                  SU-  SSUS-  -  -
  S-  -  SUS-  -   -  5        [        [        U[        [        SS9n[        UR
                  SU-  [        S-  -  5        [        [        U[        [        SSS
9nUS-  n[        UR
                  SU-  SUS-  S-  -
  S-  -  SUS-  -   S-  -  5        g )Nr   r   r   r  r$   r  r  r   r.   )r  f_scaler   r  g      r  )r  r  r   r   r  g      4@r   rR   rY   )r  r      g)	r   r   r!   r   r   r   r   r   r   )r8   r   r   r   fss        r   test_jacLossFunctionMixin.test_jac  s    qD1HKKh%&t{{<SWWa!e$ KKg%&t{{<SWWa!ec3h./ KKg$&4SWWa!e$ KKi%&t{{<Q!ad(U):!:; KKh%&t{{<Qc!12 KKh$&4;;HVQ!b!e)c)9!9QQY!GH KKh%&t{{<Qc!12 KKh$(1T[[JVQ!a"a%i-#)=!=RU!KL KKm%&(Qc!12 KK!.AGUARUQY 44BE	T7JJ	Lr   c                 $   S GH	  n[        SSUSS9nSSSUR                  4 H  n[        UR                  UR                  UU R
                  S	9n[        UR                  S
SS9  [         H  nUS:X  a  M  [        UR                  UR                  X5UU R
                  S9n[        UR                  S
SS9  [        [        UR                  UR                  -
  5      [        UR                  UR                  -
  5      :  5        M     M     GM     g )N)ri   r   r$   ri   iy )r   r   r   r   r   r   r   r   r  )r   r  r  r   )r   r   r   r   r   r   r   r   r  r   r   r   r   )r8   r   r   r   res_lsqr  
res_robusts          r   test_robustness!LossFunctionMixin.test_robustness  s    E)!S%XFA!9dAEE:'qtt/3{{< 2 2ADA"Dx' !.qtt#{{",J $J$9$914HD!78 QWW!456 7 #	 ;  r   r   N)
r@   rA   rB   rC   r  r  r  r  r  rD   r   r   r   r  r  v  s    86I>BLH7r   r  c                       \ rS rSrSrSrg)
TestDogboxi  dogboxr   N)r@   rA   rB   rC   r   rD   r   r   r   r  r    s    Fr   r  c                       \ rS rSrSrS rSrg)TestTRFi  trfc           	          [        5       nS HE  n[        UR                  UR                  UR                  SSU0S9n[        UR                  SSS9  MG     g )N)TFr  
regularizer  r   r{  r   )re   r   r   rz   r   r   r   )r8   r   r  r   s       r   test_lsmr_regularization TestTRF.test_lsmr_regularization  sK     'JqttQUU5,8*+EGCCHHae4 (r   r   N)r@   rA   rB   rC   r   r  rD   r   r   r   r  r    s    F5r   r  c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)TestLMi  r   c           	      8    [        [        [        [        SSSS9  g )Nr   )re  r   r   rF  r   r   r   r   r7   s    r   test_bounds_not_supported TestLM.test_bounds_not_supported  s    j-+d	<r   c                 >    SS/n[        [        [        [        USS9  g )NrX   r$   r   r   )r   r   r   rM   r  s     r   test_m_less_n_not_supported"TestLM.test_m_less_n_not_supported  s    !Wj-1G!	#r   c           	          [        5       n[        [        [        UR                  UR
                  UR                  SS9  g )Nr   r   re   r   r   r   r   rz   r   r   s     r   test_sparse_not_supported TestLM.test_sparse_not_supported  s+     j-aee!	#r   c           	      :    [        [        [        [        SS/SS9  g )Nr   r$   r   r  r  r7   s    r   test_jac_sparsity_not_supported&TestLM.test_jac_sparsity_not_supported  s    j-c$%3t	5r   c           	      ~    [        SS9n[        [        [        UR                  UR
                  UR                  SS9  g )Nrm   rz  r   r   r  r   s     r   !test_LinearOperator_not_supported(TestLM.test_LinearOperator_not_supported"  s-    J/j-aee!	#r   c           	          [        [        SSSS9n[        UR                  SSS9  [	        [
        [         [        SSSS	9  g )
Nr   r  r   r  rJ   r   r   r  )r   r  )r   r   r   r   r   r   r   s     r   	test_lossTestLM.test_loss'  s7    K8DIs.j-c!	1r   c                     S n[         R                  " 5          [         R                  " SS[        5        [	        [
        S/SUS9  S S S 5        g ! , (       d  f       g = f)Nc                      ero   r   r(   s    r   callback5TestLM.test_callback_with_lm_method.<locals>.callback/  s    5r   r   z@Callback function specified, but not supported with `lm` method.r   r   )rz   r   r  )r   r   r   r   r   r   )r8   r  s     r   test_callback_with_lm_method#TestLM.test_callback_with_lm_method.  sJ    	 $$&##R
 +1#dXN '&&s   .A
Ar   N)r@   rA   rB   rC   r   r  r  r  r  r  r  r  rD   r   r   r   r  r    s+    F<#
#
5#
1
Or   r  c                  N    [        [        S5      n [        U R                  SSS9  g )Nr   r   r  r   )r   r   r   r   )r   s    r   r   r   ;  s    
S
)CCEE15)r   c                  N  ^
 / m
S[         4U
4S jjn U
4S jnS[         4U
4S jjnU
4S jnX/nUU/nS S S /n[        XF5       Hx  u  pxT
R                  5         U" U5      n	[        T
5      S	:  d   eT
S
   R                  S	:  d   eU	R
                  S:w  d   e[        T
S
   R                  U	R                  5        Mz     [        XV5       HU  u  pxT
R                  5         U" U5      n	[        T
5      S	:  d   eT
S
   R                  S:X  d   eU	R
                  S:X  a  MU   e   g )Nintermediate_resultc                 (   > TR                  U 5        g ro   )r8  r  resultss    r   my_callback_optimresult.test_callback.<locals>.my_callback_optimresultF  s    *+r   c                 V   > [        5       nSUl        Xl        TR                  U5        g)Nr$   F)r   nitr   r8  r   rr  s     r   my_callback_x$test_callback.<locals>.my_callback_xI  s&    qr   c                 2   > TR                  U 5        [        ero   )r8  StopIterationr  s    r   &my_callback_optimresult_stop_exception=test_callback.<locals>.my_callback_optimresult_stop_exceptionP  s    *+r   c                 `   > [        5       nSUl        Xl        TR                  U5        [        er<   )r   r  r   r8  r  r  s     r   my_callback_x_stop_exception3test_callback.<locals>.my_callback_x_stop_exceptionU  s)    qr   c                 "    [        [        SSU S9$ )Nr   r  r   r  r   r   r  s    r   rr   test_callback.<locals>.<lambda>c  s    {C08:r   c                 $    [        [        SSSU S9$ )Nr   r  )g              @)r   rG  r  r  r  s    r   rr   r  e  s    {C.9HNr   c                 "    [        [        SSU S9$ )Nr   r  r  r  r  s    r   rr   r  g  s    {C08:r   r   rG   rX   r$   )r   r   clearlenr  r   r   r   )r  r  r  r  callbacks_nostopcallbacks_stopcalls
mycallbackcallr   r  s             @r   test_callbackr  A  s5    G,^ ,+
 0?<24N
	:	N	:E $$4<
:7|ar{"""zzRsuu- = $N:
:7|ar{!###zzR ;r   c                  R    S H!  u  pn[        [        [        [        SUXSS9  M#     g )N))NvIh%<=r  )r  Nr  )r  r  Nr   r   )r.  r*  r/  r   r  )r*  r.  r/  s      r   test_small_tolerances_for_lmr    s,    3D 	j-c4	93r   c                    ^^ [         R                  R                  S5      n [         R                  " SSS[         R                  S9nU R                  S[         R                  S9nS mU4S jmU4S	 jn[        TS
S
/X4S9nUR                  S:  d   e[        US
S/SX4SS0S9n[        UR                  UR                  SS9  g )Ni  r   r$   r   rk   )r   rl   c                 X    U S   U S   U-  -   R                  [        R                  5      $ r#   astyper&   float32)r   r   s     r   functest_fp32_gh12991.<locals>.func  s'    !qtax''

33r   c                 T   > T" X5      U-
  R                  [        R                  5      $ ro   r  )r   r   rb   r  s      r   errtest_fp32_gh12991.<locals>.err  s     Q
Q&&rzz22r   c                 D   > [         R                  " T" XU5      S-  5      $ r    )r&   sum)r   r   rb   r  s      r   msetest_fp32_gh12991.<locals>.mse  s    vvc!lAo&&r   r   )r   r   r   cobyqafinal_tr_radiusgư>)r   r   r   g9̗?r   )
r&   rw   rx   r{   r  r   r6   r   r   r   )r   r   rb   r#  r   res2r  r  s         @@r   test_fp32_gh12991r(    s     ))


%C
Aq#RZZ0A

2::
.A43' dD\
7C 88a<<	sV"D)D CEE466-r   c                    ^ SmSn U4S jnSn[        XSS[        R                  4S9n[        UR                  UR
                  [        R                  " S5      [        R                  " [        R                  5      5      u  pEUR                  S:X  d   e[        R                  R                  UR
                  U-  [        R                  S9U:  d   eg )	Ng-q=gyYs=c                    > U T-
  S-  $ r    r   )r   answers    r   chi2%test_gh_18793_and_19351.<locals>.chi2  s    &1}r   r  r   )rz   r/  rG  r$   )ord)
r   r&   ri  r   r   r   
atleast_1dr   linalgr   )initial_guessr,  r/  r   scaling_r+  s         @r   test_gh_18793_and_19351r4    s    FM D
UArvv;
OC #355#((#%==#3R]]2665JLJG::??99>>#((W,"&&>9D@@@r   c                  
  ^^ [         R                  " S/S-  / SQ-   5      m[         R                  " STR                  5      S-  mUU4S jn / SQnS[         R                  S	S
44n[        XSUS9nUR                  (       d   eg )NrJ   B   )Sr   rJ   rJ   rJ   rJ   rJ   r   r   rJ   rJ   r   r   r   r   rJ   rJ   rJ   r   rJ   rJ   r   r   rJ   r   r         @r   rJ   rJ   r   r
  rQ  rQ  r7        "@      @r   r9  r
  r         *@r8  r
        &@rE  r:  g      ,@      3@r;  g      .@g      2@g      :@r<        @@g      =@g      <@      B@r=  g     A@r>  g     E@      J@r=  g      M@g      L@r?  g     P@g     J@g      R@g      V@g     @S@g     W@g     W@g      U@g     U@g     @Y@g     Z@g      [@g     ]@g      X@g     \@g     @a@g      a@r   ri   c                 R   > U u  pnU[         R                  " UTU-
  -  5      -  T-
  $ ro   )r&   r   )paramsABrz   xdataydatas       r   exponential_wrapped*test_gh_19103.<locals>.exponential_wrapped  s.    b266!urz*++e33r   )r   r   r   )r   r   r   r.   gfffff4@r  )r   rG  )r&   r'   r   r   ri  r   r   )rF  rz   rG  r   rD  rE  s       @@r   test_gh_19103rH    s|     HHbTBY 	" 	 	E IIa$s*E4 
BRVVR./F
+f
MC;;;r   r?   )rJ   )@r   	itertoolsr   multiprocessingr   numpyr&   numpy.linalgr   numpy.testingr   r   r   r>  r	   r   scipy.sparser
   r   scipy.sparse.linalgr   scipy.optimizer   r   r   !scipy.optimize._lsq.least_squaresr   scipy.optimize._lsq.commonr   r   r   r   r   r!   r)   r,   r/   r1   rH   rK   rM   rP   rS   rV   rc   re   r   r   listkeysr  r   rC  rs  r  r  r  r  r   r  r  r(  r4  rH  r   r   r   <module>rU     sF        ) )  * , 0 : : @ U U )"9! !  
%.0 0f > 
 %%'	(M?	:h0 h0Vg@ g@Tc9 c9LE7 E7PK6G 5ik3D 5+OY +O\*@ F9%.PA4r   