
    tKg*                     0   d dl Z d dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ  ej$                  dd	gd
dgddgg      Z ej$                  g d      Z G d d      Z G d d      Z G d dee      Z G d de      Z G d d      Zy)    N)lstsq)assert_allcloseassert_equalassert_)rand
coo_matrix)aslinearoperator)
lsq_linear)BoundsgS?gv/gJ+gX9vϿgsh|?ſgS㥫?)gl?gMbX9?gPnؿc                   z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                  j                  d	        Zd
 Zy)	BaseMixinc                 L    t         j                  j                  d      | _        y )Nr   )nprandomRandomStaternd)selfs    h/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/tests/test_lsq_linear.pysetup_methodzBaseMixin.setup_method   s    99((+    c           	         | j                   D ]s  }t        t        t        | j                  |      }t        |j                  t        t        t        d      d          t        |j                  |j                  d          u y )Nmethod
lsq_solverrcondr   )	lsq_solversr
   Abr   r   xr   unbounded_sol)r   r   ress      r   test_dense_no_boundszBaseMixin.test_dense_no_bounds   s[    **JQ$++*MCCEE5AR#8#;<CEE3#4#4Q#78 +r   c           	      (   t        j                  ddg      }t        j                  ddg      }t        t        t        d      d   }| j
                  D ]l  }t        t        t        ||f| j                  |      }t        |j                  t        t        t        d      d          t        |j                  d   |       n t        j                  dt         j                   g      }| j
                  D ]z  }t        t        t        |t         j                  f| j                  |      }t        |j                  t        j                  ddg      d	
       t        |j                  d   |       | t        j                  ddg      }| j
                  D ]z  }t        t        t        |t         j                  f| j                  |      }t        |j                  t        j                  ddg      d
       t        |j                  d   |       | t        j                  t         j                  dg      }| j
                  D ]y  }t        t        t        t         j                   |f| j                  |      }t        |j                  t        j                  ddg             t        |j                  d   |       { t        j                  dt         j                  g      }| j
                  D ]y  }t        t        t        t         j                   |f| j                  |      }t        |j                  t        j                  ddg             t        |j                  d   |       { t        j                  ddg      }t        j                  ddg      }| j
                  D ]j  }t        t        t        ||f| j                  |      }t        |j                  t        j                  ddg             t        |j                  d   |       l y )Nr   i   r   r   r           g1Vư>atolgԡw?gV瞯<ggUw-r 
su?)r   arrayr   r   r    r   r
   r   r   r!   r"   inf)r   lbubr"   r   r#   s         r   test_dense_boundszBaseMixin.test_dense_bounds   s   XXr3i XXq!fa"-a0**JQB8DKK(24CCEE5AR#8#;<C--a0-@	 + XXsRVVGn%**JQB<(24CCEE288S2D,E#F!%'C--a0-@ + XXr1g**JQB<(24CCEE288->,B#C!&(C--a0-@ + XXrvvrl#**JQRVVGR=(24CCEE288-?,D#EFC--a0-@	 + XXr266l#**JQRVVGR=(24CCEE288R1C,D#EFC--a0-@	 + XXq"gXXq!f**JQB8DKK(24CCEE288->,C#DEC--a0-@	 +r   c                    t        j                  ddg      }| j                  j                  d      }||z  }t        j                  ddg      }t        j                  ddg      }||f}t	        ||      }t        |||      }t        |||      }	t        j                  |	j                  |	j                  d         rJ t        |j                  |	j                         y )Nr&      )   r5   sizer5   r   )
r   r.   r   uniformr   r
   allcloser!   r"   r   )
r   r!   r   r    r0   r1   
bounds_old
bounds_newres_oldres_news
             r   test_bounds_variantszBaseMixin.test_bounds_variantsP   s    HHaVHH&)aCXXq!fXXq!f"X
B^
Q:.Q:.;;wyy'*?*?*BCCC		799-r   c                    t         j                  j                         5 }|j                  t               t        j
                  g dg dg      }d d d        t        j                  ddg      }t        |       y # 1 sw Y   -xY w)N)   r,   r   r5   r4   )
   r&   r   r   r@      )r   testingsuppress_warningsfilterPendingDeprecationWarningmatrixr.   r
   )r   supr   ks       r   test_np_matrixzBaseMixin.test_np_matrix]   sb    ZZ))+sJJ01		,.@ABA , HHb"X1a	 ,+s   1A<<Bc           	         t        j                  ddgg      }t        j                  dg      }ddg}ddg}| j                  D ]^  }t        ||||f| j                  |      }t        |j                  ddg       t        |j                  d   t        ||d	      d          ` t        j                  d
dgddgddgg      }t        j                  g d      }ddg}ddg}| j                  D ]^  }t        ||||f| j                  |      }t        |j                  dd       t        |j                  d   t        ||d	      d          ` y )NgSӿgZd;Oǿg#~j?皙g?r   r   r   r   gK7A`?gK7A`?gPngPng~jt?g~jt?)g`"gHzG?gJ+?r&   g      gdy=r)   )
r   r.   r   r
   r   r   r!   r"   r   
optimality)r   r   r    r0   r1   r   r#   s          r   test_dense_rank_deficientz#BaseMixin.test_dense_rank_deficiente   sJ   HHvv&'(HHeWD\3Z**JQB8DKK(24CCEED$<0C--a0%1B2G2JK	 + HHENVEN
 
 HH+,WY**JQB8DKK(24CCNNAE:C--a0%1B2G2JK	 +r   c                 Z   t        j                  ddg      }t        j                  ddg      }t        t        t        ||f| j
                        }t        |j                  ddg       t        |j                  d   t        t        t        d      d          t        j                  |j                        t        z
  }t        |j                  dt        j                  ||      z         t        |j                  |       t        |j                  d	d
       t        |j                  ddg       t!        |j"                  dk         t!        |j$                  dk(  xs |j$                  dk(         t!        t'        |j(                  t*                     t!        |j,                         y )Nr   r,   r&   r   r-   r   r   g      ?r'   g-q=r)   rC   r4   )r   r.   r
   r   r    r   r   r!   r"   r   dotcostfunrN   r   active_maskr   nitstatus
isinstancemessagestrsuccess)r   r0   r1   r#   rs        r   test_full_resultzBaseMixin.test_full_result~   s$   XXq"gXXq!fABx< 1267))!,eAq.CA.FGEE#%%L1#q!"45#%8S__q"g."

a23::?3
3;;,-r   c                     t        j                  g dg dg dg      }t        j                  g d      }t        ||| j                        }t	        |j
                  dk         y )N)gSQcU?gn-(8?g(8?)gڌ?g,?gk,?)g\s`?gAʨY?g Y?)gt\O?v?g"He?gFH{?rQ   gg5_PG>)r   r.   r
   r   r   rS   )r   r   r    results       r   test_almost_singularzBaseMixin.test_almost_singular   sY    HHIIIKL
 HHHJ Aq5f$%r   c           	      X   t         j                  j                  d       t        j                  t         j                  j	                  ddd            \  }}|dz  }dt         j                  j	                  dd||g      z  }dt         j                  j	                  dd|g      z  }dt        j                  t         j                  j	                  ddd|f      d      z  }|d	d d fxx   dz  cc<   t         j                  j                  ||      }|d d |f   }t        |||d
      j                  }t        |||d      j                  }t        j                  ||z  |z
  dz        }	t        j                  ||z  |z
  dz        }
t        t        |	|
z
        |
dz  k         y )Nr   r5     r6         ?ic   )axisr&   bvlsboundsr   trf绽|=)r   r   seedsortrandintchoicer
   r!   sumr   abs)r   nmr   r    rh   wx_bvlsx_trf	cost_bvlscost_trfs              r   test_large_rank_deficientz#BaseMixin.test_large_rank_deficient   sl   
		qwwryy((Dq(9:1	Q"))##C1a&#99"))##C1##66rwwryy00b1v0FQOOq!t IIQ"adGAq?AA1au=??FFAJNQ./	661u9q=1,-I()HUN:;r   c                    t        j                  g dg dg dg      }t        j                  g d      }t        j                  g dg dg      }t        |||d      j                  }t        |||d	      j                  }t        j                  ||z  |z
  d
z        }t        j                  ||z  |z
  d
z        }t        t        ||z
        |dz  k         y )N)g     H@g     D@      @)g      3rz   g       )g      *g      $@g     @Q@)g     Dg     Vg     G@)g      ?@g      Fg      :@)g      K@rz   g      <@rf   rg   ri   r5   rj   )r   r.   r
   r!   ro   r   rp   )r   r   r    rh   rt   ru   rv   rw   s           r   test_convergence_small_matrixz'BaseMixin.test_convergence_small_matrix   s    HH)*)+ , HH)*..0 1 Aq?AA1au=??FFAJNQ./	661u9q=1,-I()HUN:;r   N)__name__
__module____qualname__r   r$   r2   r>   rK   rO   r]   r`   pytestmarkxslowrx   r{    r   r   r   r      sP    ,9/Ab.L2(
& [[< <*<r   r   c                   Z    e Zd Zd Zej
                  j                  d      d        Zd Zy)SparseMixinc                    d}d}t        ||d      }| j                  j                  |      }t        ||      }t	        |j
                  dd       t        |      }t        ||      }t	        |j
                  dd       y )N  rb   r   random_stater(   r)   )r   r   randnr
   r   rN   r	   )r   rr   rq   r   r    r#   s         r   test_sparse_and_LinearOperatorz*SparseMixin.test_sparse_and_LinearOperator   sn    AA&HHNN1A5QA5r      c                    d}d}t        ||d      }| j                  j                  |      }| j                  j                  |      }|dz   }t        ||||f      }t	        |j
                  dd       t        ||||fd	d
      }t	        |j
                  dd       t        ||||fd      }t	        |j
                  dd       y )Nr   rb   r   r   r&   r'   r(   r)   gvIh%<=i  )lsmr_tollsmr_maxiterauto)r   )r   r   r   r
   r   rN   )r   rr   rq   r   r    r0   r1   r#   s           r   test_sparse_boundszSparseMixin.test_sparse_bounds   s    AA&HHNN1XX^^A!VABx($7ABx%&*,$7ABx&9$7r   c                    t        j                  g d      }t        j                  g d      }t        j                  g d      }t        |||ffd      }t        |j	                         t
        d      }t        |t
        d      }t        j                  t        d	
      5  t        |j                  |j                         d d d        t        |t
        dd      }t        |j                  |j                         y # 1 sw Y   =xY w)N)rc   rc   rc   gzo ?rc   )r   r   r&   r5   r5   )r   r5   r&   r   r5   )r4   r4   )shapeexact)r   lsmr matchrA   r   r   )r   r.   r   r
   toarrayr    r   raisesAssertionErrorr   r!   )r   datarowcolr   	exact_soldefault_lsmr_sol	conv_lsmrs           r   test_sparse_ill_conditionedz'SparseMixin.test_sparse_ill_conditioned   s    xx34hh'hh'sCj)8 qyy{A'B	 &av>]]>4IKK)9););< 5 q!RH		Y[[1 54s   $!DD
N)	r|   r}   r~   r   r   r   	fail_slowr   r   r   r   r   r   r      s/    
6 [[18 8"2r   r   c                       e Zd ZdZddgZy)TestTRFri   r   r   Nr|   r}   r~   r   r   r   r   r   r   r      s    FF#Kr   r   c                       e Zd ZdZdgZy)TestBVLSrf   r   Nr   r   r   r   r   r      s    F)Kr   r   c                       e Zd Zd Zd Zy)TestErrorCheckingc                 <   t        t        t        dd      }t        t        t        dd      }t        t        t        dd       }d}t        j                  t
        |      5  t        t        t        dd      }d d d        t        j                  t
        |      5  t        t        t        dd      }d d d        t        j                  t
        |      5  t        t        t        dd	      }d d d        y # 1 sw Y   xY w# 1 sw Y   QxY w# 1 sw Y   y xY w)
Nr   g{Gz?)r   r   r   z3`lsmr_tol` must be None, 'auto', or positive float.r   rM   foor&   r
   r   r    r   r   
ValueErrorr   _err_messages      r   test_option_lsmr_tolz&TestErrorChecking.test_option_lsmr_tol  s    q!>q!@q!> L]]:[91aFTBA :]]:[91aFUCA :]]:[91aFQ?A :9	 :99999s$   #C:DD:DDDc                    t        t        t        dd      }t        t        t        dd       }d}t        j                  t
        |      5  t        t        t        dd      }d d d        t        j                  t
        |      5  t        t        t        dd      }d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)Nr   r&   r   z0`lsmr_maxiter` must be None or positive integer.r   r   r   r   r   s      r   test_option_lsmr_maxiterz*TestErrorChecking.test_option_lsmr_maxiter  s    q!Q?q!TB I]]:[91aFCA :]]:[91aFDA :9 :999s   B(B4(B14B=N)r|   r}   r~   r   r   r   r   r   r   r     s    @ 
Er   r   )r   numpyr   numpy.linalgr   numpy.testingr   r   r   scipy.sparser   r   scipy.sparse.linalgr	   scipy.optimizer
   scipy.optimize._minimizer   r.   r   r    r   r   r   r   r   r   r   r   <module>r      s       @ @ ) 0 % + BHH
FOVUO 
 BHH#$m< m<`02 02f$i $
y 
E Er   