
    Q3j$                    @   d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlm	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 d d	lmZ d d
lmZ d dlmZm Z m!Z! d dl"m#Z# d dl$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d Z6 G d dejn                        Z8 G d dejr                        Z: G d dejv                        Z<d Z7d Z9d Z;d Z=d Z>d Z? ej                  d d!gd!d!gd!d gd"d"gd"d#gd#d"gg      ZAg d$ZB ej                  d!d!gd#d#gd%d#gg      ZCg d&ZD ej                  d!d"gd'd(gd)d*gd"d"gd+d(gd*d*gd!d!gd d,gd"d!gg	      ZEd-gd%z  d.gd%z  z   d/gd%z  z   ZF ej                  d)d(gd"d#gd d gg      ZGg d0ZH ej                  g d1g d1g d2g d2g d3g d3g d4g d4g      ZI ej                  g d5      ZJ ej                  g d6g d7g d8g d9g d:g d;g d<g d=g      ZK ej                  g d5      ZL ej                         ZN ej                  d d!gd!d!gd!d gd"d"gd"d#gd#d"gg      ZOg d$ZPg d>ZQdd?ZRd@ ZSej                  j                  dAe7e=e9e>g      ej                  j                  dBg dC      dD               ZVej                  j                  dAe7e=e9e>g      dE        ZWej                  j                  dBdFdGg      ej                  j                  dHdIge7dJfe9dKfg      dL               ZXej                  j                  dAe7e=e9e>g      dM        ZYej                  j                  dAe7e=e9e>e;e?g      dN        ZZej                  j                  dAe7e=e9e>e;e?g      dO        Z[ej                  j                  dAe7e=e9e>g      dP        Z\ej                  j                  dAe7e=e9e>g      dQ        Z]ej                  j                  dAe7e=e9e>g      dR        Z^ej                  j                  dAe7e=e9e>g      dS        Z_ej                  j                  dAe7e=e9e>g      dT        Z`ej                  j                  dAe7e=e9e>g      dU        Zaej                  j                  dVe7e9g      ej                  j                  dWg dX      dY               Zbej                  j                  dVe7e=e9e>g      dZ        Zcej                  j                  dAe7e=e9e>e;e?g      d[        Zdej                  j                  dAe7e=g      d\        Zeej                  j                  dAe7e=e;e?g      d]        Zfej                  j                  d^e7d_ ej                  d`      ife=d_ ej                  d`      ife;da ej                  d`      ife?da ej                  d`      ifg      db        Zhej                  j                  dAe7e=e9e>g      dc        Ziej                  j                  d^e7d_d ife=d_d ife;dad ife?dad ifg      dd        Zjej                  j                  dAe7e=g      de        Zkej                  j                  dAe7e=g      df        Zlej                  j                  dAe7e=g      dg        Zmej                  j                  dAe7e=g      dh        Znej                  j                  dAe7e=g      di        Zoej                  j                  dAe7e=g      dj        Zpej                  j                  dAe7e=g      dk        Zqej                  j                  dAe7e=g      dl        Zrej                  j                  dAe7e=g      dm        Zsej                  j                  dAe7e=g      dn        Ztej                  j                  dAe7e=g      do        Zuej                  j                  ej                  j                  dAe7e=g      dp               Zwej                  j                  dAe7e=g      dq        Zxej                  j                  dAe7e=g      dr        Zyej                  j                  dAe7e=g      ds        Zzej                  j                  dAe7e=g      dt        Z{ej                  j                  dAe7e=g      du        Z|ej                  j                  dAe7e=g      dv        Z}ej                  j                  dAe7e=e;e?g      dw        Z~ej                  j                  dAe7e=g      dx        Zej                  j                  dAe7e=g      dy        Zej                  j                  dAe7e=g      dz        Zej                  j                  dAe7e=g      d{        Zej                  j                  dAe7e=g      d|        Zej                  j                  dAe7e=g      ej                  j                  dBg dC      d}               Zej                  j                  dAe7e=g      d~        Zej                  j                  dAe7e=g      d        Zej                  j                  dAe7e=g      d        Zej                  j                  dAe9e>g      d        Zej                  j                  dAe9e>g      d        Zej                  j                  dAe9e>g      d        Zej                  j                  dAe9e>g      d        Zej                  j                  dAe9e>g      d        Zej                  j                  dAe9e>g      d        Zej                  j                  dAe9e>g      d        Zej                  j                  dAe9e>g      d        Zej                  j                  dAe9e>g      d        Zej                  j                  dAe9e>g      ej                  j                  dBg dC      d               Zej                  j                  dAe9e>g      d        ZddZej                  j                  dAe;e?g      d        Zej                  j                  dAe;e?g      ej                  j                  dBg dC      d               Zej                  j                  dAe;e?g      d        Zej                  j                  dAe;e?g      d        Zej                  j                  dAe;e?g      ej                  j                  dBg dC      d               Zej                  j                  dAe;e?g      d        Zej                  j                  dAe;e?g      d        Zej                  j                  dAe;e?g      d        Zej                  j                  dAe;e?g      d        Zd Zd Zej                  j                  dddg      d        Zej                  j                  dddg      d        Zd Zd Zd Zej                  j                  dg d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                  j                  dg d      d        Zej                  j                  dVejn                  ejr                  g      d        Zd Zd Zej                  j                  dVe7e9g      d        Zej                  j                  de7e=e9e>e;e?g      ej                  j                  dejf                  ejh                  f      d               Zej                  j                  de7e=e9e>e;e?g      d        Zd Zd Zy)    N)Mock)minimize)datasetslinear_modelmetrics)cloneis_classifier)
make_blobs)ConvergenceWarning)Nystroem)	_sgd_fast)_stochastic_gradient)RandomizedSearchCVShuffleSplitStratifiedShuffleSplit)make_pipeline)LabelEncoderMinMaxScalerStandardScalerscale)OneClassSVM)get_tags)_align_api_if_sparse)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)_sparse_random_arrayc                 <    d| vrd| d<   d| vrd | d<   d| vrd| d<   y y )Nrandom_state*   tolmax_iter    kwargss    P/DATA/.local/lib/python3.12/site-packages/sklearn/linear_model/tests/test_sgd.py_update_kwargsr)   %   s<    V#!#~Fuz      c                   <     e Zd Z fdZ fdZ fdZ fdZ xZS )_SparseSGDClassifierc                 h    t        t        j                  |            }t        |   ||g|i |S N)r   sp	csr_arraysuperfitselfXyargskw	__class__s        r(   r2   z_SparseSGDClassifier.fit0   s0     a1w{1a-$-"--r*   c                 h    t        t        j                  |            }t        |   ||g|i |S r.   )r   r/   r0   r1   partial_fitr3   s        r(   r;   z _SparseSGDClassifier.partial_fit4   s1     a1w"1a5$5"55r*   c                 ^    t        t        j                  |            }t        |   |      S r.   )r   r/   r0   r1   decision_functionr4   r5   r9   s     r(   r=   z&_SparseSGDClassifier.decision_function8   s%     a1w(++r*   c                 ^    t        t        j                  |            }t        |   |      S r.   )r   r/   r0   r1   predict_probar>   s     r(   r@   z"_SparseSGDClassifier.predict_proba<   s%     a1w$Q''r*   )__name__
__module____qualname__r2   r;   r=   r@   __classcell__)r9   s   @r(   r,   r,   /   s    .6,( (r*   r,   c                       e Zd Zd Zd Zd Zy)_SparseSGDRegressorc                     t        t        j                  |            }t        j                  j
                  | ||g|i |S r.   )r   r/   r0   r   SGDRegressorr2   r4   r5   r6   r7   r8   s        r(   r2   z_SparseSGDRegressor.fitB   s9     a1((,,T1aE$E"EEr*   c                     t        t        j                  |            }t        j                  j
                  | ||g|i |S r.   )r   r/   r0   r   rH   r;   rI   s        r(   r;   z_SparseSGDRegressor.partial_fitF   s9     a1((44T1aM$M"MMr*   c                 \    t        j                  j                  | t        |      g|i |S r.   )r   rH   r=   r   r4   r5   r7   r8   s       r(   r=   z%_SparseSGDRegressor.decision_functionJ   s6    ((::&q)
,0
46
 	
r*   NrA   rB   rC   r2   r;   r=   r%   r*   r(   rF   rF   A   s    FN
r*   rF   c                       e Zd Zd Zd Zd Zy)_SparseSGDOneClassSVMc                     t        t        j                  |            }t        j                  j
                  | |g|i |S r.   )r   r/   r0   r   SGDOneClassSVMr2   rL   s       r(   r2   z_SparseSGDOneClassSVM.fitR   s7     a1**..tQDDDDr*   c                     t        t        j                  |            }t        j                  j
                  | |g|i |S r.   )r   r/   r0   r   rQ   r;   rL   s       r(   r;   z!_SparseSGDOneClassSVM.partial_fitV   s7     a1**66tQLLLLr*   c                     t        t        j                  |            }t        j                  j
                  | |g|i |S r.   )r   r/   r0   r   rQ   r=   rL   s       r(   r=   z'_SparseSGDOneClassSVM.decision_functionZ   s7     a1**<<T1RtRrRRr*   NrM   r%   r*   r(   rO   rO   Q   s    EMSr*   rO   c                  B    t        |        t        j                  di | S Nr%   )r)   r   SGDClassifierr&   s    r(   rV   rV   _   s    6%%///r*   c                  B    t        |        t        j                  di | S rU   )r)   r   rH   r&   s    r(   rH   rH   d   s    6$$.v..r*   c                  B    t        |        t        j                  di | S rU   )r)   r   rQ   r&   s    r(   rQ   rQ   i   s    6&&000r*   c                  .    t        |        t        di | S rU   )r)   r,   r&   s    r(   SparseSGDClassifierrZ   n   s    6)&))r*   c                  .    t        |        t        di | S rU   )r)   rF   r&   s    r(   SparseSGDRegressorr\   s   s    6(((r*   c                  .    t        |        t        di | S rU   )r)   rO   r&   s    r(   SparseSGDOneClassSVMr^   x   s    6 *6**r*         )ra   ra   ra   rb   rb   rb      )ra   rb   rb   g            ?g      g      ?g      ?      onetwothree)rf   rg   rh   )ra   ra   r   r   r   r   )r   r   ra   r   r   r   )r   r   r   r   ra   ra   )r   r   r   ra   r   r   )ra   ra   ra   ra   rb   rb   rb   rb   )ra   ?皙?r   r   r   )ra   zG?g\(\?r   r   r   )ra   Q?g)\(?r   r   r   )ra   Q?Gz?r   r   r   )r   r   r   g{Gz?rm   ra   )r   r   r   gHzG?rk   ra   )r   r   r   rm   ffffff?ra   )r   r   r   g(\?ra   ra   )r   ra   ra   c                    |#t        j                  |j                  d         }n|}t        j                  |j                  d         }|}	d}
d}| t        t        fv rd}t        |      D ]o  \  }}t        j                  ||      }||	z  }|||   z
  }|d||z  z
  z  }|||z  |z   z  }|	||z   |z  z  }	||z  }||z  }||dz   z  }|
|z  }
|
|	z  }
|
|dz   z  }
q ||
fS )Nra                 ?{Gz?)npzerosshaperZ   r\   	enumeratedot)klassr5   r6   etaalphaweight_initintercept_initweightsaverage_weights	interceptaverage_interceptdecayientrypgradients                   r(   asgdr      s+   ((1771:&hhqwwqz*OIE $&899aL5FF5'"	Yqt83#+&&S8^e+,,sX~&..	17"1s7"QY&QW$ !  ---r*   c                 T    | ddd|      }|j                  ||        | ddd|      }|j                  |||j                  j                         |j                  j                                 | dddd|      }|j                  ||       |j                  |j                  k(  sJ t        |j                  |j                         |j                  d       |j                  ||       |j                  |j                  k(  sJ t        |j                  |j                         y )	Nrs   F)r{   eta0shufflelearning_rateMbP?	coef_initr}   T)r{   r   r   
warm_startr   r{   )r2   coef_copy
intercept_t_r   
set_params)ry   r5   Ylrclfclf2clf3s          r(   _test_warm_startr      s    
duB
GCGGAqMu4bIDHHQSYY^^-cnn>Q>Q>SHT uRD 	HHQN77cffdjj#))4OO%O HHQN77dggdjj$**5r*   ry   r   )constantoptimal
invscalingadaptivec                 0    t        | t        t        |       y r.   )r   r5   r   ry   r   s     r(   test_warm_startr      s    
 UAq"%r*   c                 Z    | dd      }|j                  t        t               t        j                  t              d d t        j
                  f   }t        j                  ||f   }t        j                  t              5  |j                  t        |       d d d        y # 1 sw Y   y xY w)Nrs   Fr{   r   )
r2   r5   r   rt   arraynewaxisc_pytestraises
ValueError)ry   r   Y_s      r(   test_input_formatr     sm    
 dE
*CGGAqM	!Q

]	#B	r2vB	z	"2 
#	"	"s   B!!B*pa1pa2estlosssquared_hingesquared_errorc                      |||       }t        j                  t              5  |j                  t        t
               ddd       y# 1 sw Y   yxY w)zETest that SGD raises with forbidden loss for passive-aggressive algo.)r   r   Nr   r   r   r2   r5   r   )r   r   r   s      r(   test_learning_rate_PA_raisesr     s5     4r
*C	z	"1 
#	"	"   AAc                     | dd      }t        |      }|j                  d       |j                  t        t                | dd      }|j                  t        t               t        |j                  |j                         y )Nrs   l1)r{   penaltyl2)r   )r   r   r2   r5   r   r   r   ry   r   r   s      r(   
test_cloner     s_    
 dD
)C
*CNN4N GGAqMtT*DHHQNsyy$**-r*   c                 n    | dd      }|j                  t        t               t        |d      sJ t        |d      sJ t        |d      sJ t        |d      sJ  |        }|j                  t        t               t        |d      rJ t        |d      rJ t        |d      rJ t        |d      rJ y )NTrs   )averager   _average_coef_average_intercept_standard_intercept_standard_coef)r2   r5   r   hasattrry   r   s     r(   test_plain_has_no_average_attrr   .  s     4
(CGGAqM3(((3,---3-...3()))
'CGGAqMsO,,,s0111s1222s,----r*   c                     | d      } |        }t        d      D ]  }t        |      rg|j                  t        t        t        j                  t                     |j                  t        t        t        j                  t                     u|j                  t        t               |j                  t        t                t        |j                  |j                  d       | t        t        t        t        fv r#t        |j                  |j                  d       y | t        t         fv r!t#        |j$                  |j$                         y y )NiX  r   d   classes   decimal)ranger	   r;   r5   r   rt   uniquer   r   rV   rZ   rH   r\   r   r   rQ   r^   r   offset_)ry   clf1r   _s       r(   %test_late_onset_averaging_not_reachedr   K  s     D7D3ZQ299Q<8Q299Q<8Q"Q"  djj$**bA 3\CUVVDOOT__bI	>#78	8dll3 
9r*   c           	          d}d}t        j                  t              }d||dk(  <   d||dk(  <    | ddd	||dd
      } | d
dd	||dd
      }|j                  t        |       |j                  t        |       t        | t        ||||j                  j                         |j                        \  }}t        |j                  j                         |j                         d       t        |j                  |d       y )Nr   -C6?      ra   rr   rb      r   r   F)r   r   r   r   r{   r#   r   )r|   r}   r   r   )rt   r   r   r2   r5   r   r   ravelr   r   r   )ry   r   r{   Y_encoder   r   r   r   s           r(   !test_late_onset_averaging_reachedr   h  s    DExx{H"HX]!HX] D  D 	HHQHHQ)-	JJ$$&*&O& djj..0/2G2G2ISUV):BGr*   c                     t         j                  t         j                  dkD     }t         j                  t         j                  dkD     }dD ]0  }d} | |d|      j                  ||      }|j                  |k  r0J  y )Nr   TF  r   )early_stoppingr"   r#   )irisdatatargetr2   n_iter_)ry   r5   r   r   r#   r   s         r(   test_early_stoppingr     sq     			$++/"ADKK!O$A'>thOSSq
 {{X%%% (r*   c                 "    | dddd      }|j                  t        j                  t        j                          | dddd      }|j                  t        j                  t        j                         |j                  |j                  kD  sJ y )Nr   rs   r   r   )r   r   r"   r#   r   )r2   r   r   r   r   )ry   r   r   s      r(   "test_adaptive_longer_than_constantr     sf     z$MDHHTYY$z$MDHHTYY$<<$,,&&&r*   c           
         t         j                  t         j                  }}d}d}d}d} | dt        j                  j                  |      |ddd ||      }|j                  ||       |j                  |k(  sJ  | dt        j                  j                  |      ddd ||	      }t        |      rt        ||
      }	nt        ||
      }	t        |	j                  ||            \  }
}t        j                  |
      }
|j                  ||
   ||
          |j                  |k(  sJ t        |j                  |j                         y )N皙?r!   F
   Tr   rs   )r   r    validation_fractionr   r   r"   r#   r   )r   r    r   r   r"   r#   r   )	test_sizer    )r   r   r   rt   randomRandomStater2   r   r	   r   r   nextsplitsortr   r   )ry   r5   r   r   seedr   r#   r   r   cv	idx_trainidx_vals               r(   )test_validation_set_not_used_for_trainingr     s0    99dkkqADGHYY**40/ 	D 	HHQN<<8###YY**40 D T#.APTU$7dKbhhq!n-Iw	"IHHQy\1Y<(<<8###tzz4::.r*   c           
          t         j                  t         j                  }}dD ]J  }dD cg c](  } | ||dd      j                  ||      j                  * }}t        |t        |             L y c c}w )Nr   )rb   rc   r   r   r   )r   n_iter_no_changer"   r#   )r   r   r   r2   r   r   sorted)ry   r5   r   r   r   n_iter_lists         r(   test_n_iter_no_changer     s     99dkkqA' %/

 %/  -!1	 SAYW %/ 	 

 	;{(;< (

s   -A1c                      | dd      }t        j                  t              5  |j                  t        t
               d d d        y # 1 sw Y   y xY w)NTrn   )r   r   )r   r   r   r2   X3Y3r   s     r(   )test_not_enough_sample_for_early_stoppingr     s5    
 t
>C	z	"B 
#	"	"r   	Estimatorl1_ratio)r   gffffff?ra   c                      | ddd      j                  t        t              } | d|d      j                  t        t              }t        |j                  |j                         y)z@Check that l1_ratio is not used when penalty is not 'elasticnet'r   Nr   )r   r   r    )r2   r5   r   r   r   )r   r   r   r   s       r(   test_sgd_l1_ratio_not_usedr    sL     TDqAEEaKDTH1EII!QODDJJ

+r*   c                      | dd       }t        j                  t        d      5  |j                  t        t
               d d d        y # 1 sw Y   y xY w)N
elasticnet)r   r   z1l1_ratio must be set when penalty is 'elasticnet'matchr   )r   r   s     r(   #test_sgd_failing_penalty_validationr    sA     L4
8C	M
 	1
 
 
s   A

Ac                 f    | d      }t        j                  t        d      5  |j                  t        t
               ddd       t        j                  d      5 } | d      }|j                  t        t
               ddd       t              d	k(  sJ y# 1 sw Y   \xY w# 1 sw Y   &xY w)
z:Check that a warning is raised when `power_t` is negative.r   )power_tz,Negative values for `power_t` are deprecatedr  NT)recordrd   r   )	r   warnsFutureWarningr2   r5   r   warningscatch_warningslen)ry   r   ws      r(   test_power_t_limitsr    s     
C	K
 	1
 
	 	 	-C 1 
. q6Q;;
 
 
.	-s   B$B'B$'B0c           	          dD ]M  } | ddd|dd      }|j                  t        t               t        |j	                  t
              t               O y )N)hinger   log_lossmodified_huberr   rs   Tr   )r   r{   fit_interceptr   r#   r   )r2   r5   r   r   predictTtrue_result)ry   r   r   s      r(   test_sgd_clfr  0  sM     I
 	13;;q>;7 Ir*   c                     t        j                  t        d      5   |        j                  t        t
        t        j                  d             ddd       y# 1 sw Y   yxY w)z1Check that the shape of `coef_init` is validated.z)Provided coef_init does not match datasetr  rc   r   N)r   r   r   r2   r5   r   rt   ru   ry   s    r(   test_provide_coefr  B  s<    
 
z)T	UAqBHHTN3 
V	U	Us   5AA#zklass, fit_paramsr}   r  offset_initc                      |        }t        j                  t        d      5   |j                  t        t
        fi | ddd       y# 1 sw Y   yxY w)z:Check that `intercept_init` or `offset_init` is validated.zdoes not match datasetr  Nr   )ry   
fit_paramssgd_estimators      r(   test_set_intercept_offsetr#  K  s>     GM	z)A	B!Q-*- 
C	B	Bs   A		Ac                     d}t        j                  t        |      5   | d      j                  t        t
               ddd       y# 1 sw Y   yxY w)zSCheck that we raise an error for `early_stopping` used with
    `partial_fit`.
    z/early_stopping should be False with partial_fitr  T)r   N)r   r   r   r;   r5   r   )ry   err_msgs     r(   (test_sgd_early_stopping_with_partial_fitr&  [  s9     @G	z	1T"..q!4 
2	1	1s   "A		Ac                 F      |        j                   t        t        fi | y)zdCheck that we can pass a scaler with binary classification to
    `intercept_init` or `offset_init`.N)r2   X5Y5)ry   r!  s     r(    test_set_intercept_offset_binaryr*  g  s     EGKKB%*%r*   c           
         d}d}d}d}t         j                  j                  d      }|j                  ||f      }|j                  |      } | dd||d	d
d	d      }t        j                  ||      }	t        j
                  |	      }	|j                  ||	       t        | ||	||      \  }
}|
j                  d
d      }
t        |j                  |
d       t        |j                  |d       y )N皙?       @   r   r   sizer   r   Tra   Fr   r   r   r{   r  r#   r   r   r`      r   )rt   r   r   normalrx   signr2   r   reshaper   r   r   r   )ry   rz   r{   	n_samples
n_featuresrngr5   r  r   r6   r   r   s               r(   &test_average_binary_computed_correctlyr9  v  s     CEIJ
))


"C

J/
0A



#A
 	C 	q!A

AGGAqM)-eQ3)F&O&%--a4Ocii"E(92Fr*   c                 ,    |        j                  t        t              } |        j                  t        t        |j                          |        j                  t        t
              } |        j                  t        t
        |j                         y )Nr}   )r2   r(  r)  r   r5   r   r   s     r(   test_set_intercept_to_interceptr<    sX     '++b"
C	GKKBs~~K6
'++a
C	GKK1S^^K4r*   c                      | dd      }t        j                  t              5  |j                  t        t        j                  d             d d d        y # 1 sw Y   y xY w)Nrs   r.  r{   r#   	   )r   r   r   r2   X2rt   onesr   s     r(   test_sgd_at_least_two_labelsrB    s>     dR
(C	z	"BGGAJ 
#	"	"s   *AA c                     d}t        j                  t        |      5   | d      j                  t        t
        t        j                  t
                     d d d        y # 1 sw Y   y xY w)Na`  class_weight 'balanced' is not supported for partial_fit\. In order to use 'balanced' weights, use compute_class_weight\('balanced', classes=classes, y=y\). In place of y you can use a large enough sample of the full training set target to properly estimate the class frequency distributions\. Pass the resulting weights as the class_weight parameter\.r  balanced)class_weightr   )r   r   r   r;   r5   r   rt   r   )ry   regexs     r(   &test_partial_fit_weight_class_balancedrG    sJ    	 
 
z	/:&221a12N 
0	/	/s   ;A""A+c                 D    | dd      j                  t        t              }|j                  j                  dk(  sJ |j
                  j                  dk(  sJ |j                  ddgg      j                  dk(  sJ |j                  t              }t        |t               y )Nrs   r.  r>  rc   rb   r  r   ra   rc   r2   r@  Y2r   rv   r   r=   r  T2r   true_result2ry   r   preds      r(   test_sgd_multiclassrQ    s     dR
(
,
,R
4C99??f$$$>>4'''  1a&*00F:::;;r?Dt\*r*   c           
         d}d} | dd||dddd      }t        j                  t              }|j                  t        |       t        j
                  |      }t        |      D ]{  \  }}t        j                  |j                  d	         }d
|||k7  <   t        | t        |||      \  }	}
t        |	|j                  |   d       t        |
|j                  |   d       } y )Nr   rs   r   r   Tra   Fr1  r   r`   r   r   )rt   r   rL  r2   r@  r   rw   rA  rv   r   r   r   r   r   )ry   rz   r{   r   np_Y2r   r   cly_iaverage_coefr   s              r(   test_sgd_multiclass_averagerW    s    
CE
 	C HHRLEGGBiiG7#2ggekk!n%ERK*.ub#sE*J''!,		!bI-s~~a/@"M $r*   c                 X    | dd      }|j                  t        t        t        j                  d      t        j                  d             |j
                  j                  dk(  sJ |j                  j                  sJ d       |j                  t              }t        |t               y )Nrs   r.  r>  rI  rc   r   r  )r2   r@  rL  rt   ru   r   rv   r   r  rM  r   rN  rO  s      r(   "test_sgd_multiclass_with_init_coefrY    sz     dR
(CGGBbhhv.rxx{GK99??f$$$>>%%;;r?Dt\*r*   c                 F    | ddd      j                  t        t              }|j                  j                  dk(  sJ |j
                  j                  dk(  sJ |j                  ddgg      j                  dk(  sJ |j                  t              }t        |t               y )	Nrs   r.  rb   )r{   r#   n_jobsrI  r  r   rJ  rK  rO  s      r(   test_sgd_multiclass_njobsr\    s     dR
2
6
6r2
>C99??f$$$>>4'''  1a&*00F:::;;r?Dt\*r*   c                 d    |        }t        j                  t              5  |j                  t        t
        t        j                  d             d d d         |        j                  t        t
        t        j                  d            } |        }t        j                  t              5  |j                  t        t
        t        j                  d             d d d         |        j                  t        t
        t        j                  d            }y # 1 sw Y   xY w# 1 sw Y   JxY w)N)rb   rb   r  rI  ra   r;  r  )r   r   r   r2   r@  rL  rt   ru   r   s     r(   test_set_coef_multiclassr_    s    
 'C	z	"B"((6"23 
# '++b"(8+
9C 'C	z	"Brxx~6 
# '++b"RXXd^+
<C 
#	" 
#	"s   0D-0D&D#&D/c                    t         j                  j                  D ]O  }t        |      }|dv rt        |d      sJ t        |d      r/J dj	                  |      }t        |d      rJ t        |d      rJ t        j                  t        d      5 }|j                   d d d        t        j                  j                  t              sJ |t        |j                  j                        v sJ t        j                  t        d      5 }|j                   d d d        t        |j                  j                  t              sJ |t        |j                  j                        v rPJ  y # 1 sw Y   xY w# 1 sw Y   bxY w)	N)r   r  r  r@   predict_log_probaz5probability estimates are not available for loss={!r}z has no attribute 'predict_proba'r  z$has no attribute 'predict_log_proba')r   rV   loss_functionsr   formatr   r   AttributeErrorr@   
isinstancevalue	__cause__strrb  )ry   r   r   	inner_msg	exec_infos        r(   $test_sgd_predict_proba_method_accessrl    sR    **99&1130003 3444OVVI sO444s$7888&H!!
 ioo77HHHIOO$=$= >>>>&L%% ioo77HHHIOO$=$= >>>>1 :  s   E/E;/E8	;F	c                    t        dddd       j                  t        t              }t	        |d      rJ t	        |d      rJ dD ]  } | |dd      }|j                  t        t               |j                  d	d
gg      }|d   dkD  sJ |j                  ddgg      }|d   dk  sJ t        j                  d      5  |j                  d	d
gg      }|d   |d   kD  sJ |j                  ddgg      }|d   |d   k  sJ 	 d d d          | ddd      j                  t        t              }|j                  ddgddgg      }|j                  ddgddgg      }t        t        j                  |d      t        j                  |d             t        |d   j                         d       t        j                   |d   dk\        sJ |j                  ddgg      }|j                  ddgg      }t        t        j"                  |d         t        j"                  |d                |j                  d	d
gg      }|j                  d	d
gg      }t%        t        j&                  |      |       |j                  ddgg      }|j                  ddgg      }t%        t        j&                  |      |        | ddd      }|j                  t        t               |j                  d	d
gg      }|j                  d	d
gg      }| t(        k7  r1t        j                  |d      t        j                  |d      k(  s3J t        j*                  |d      t        j*                  |d      k(  sJ t        j-                  d      }|j                  |g      }t        j                   |dk        r&|j                  |g      }t%        |d   dgd	z         y y # 1 sw Y   xY w)Nr  rs   r   )r   r{   r#   r"   r@   rb  ra  )r   r{   r#   rc   rb   r   ra   rd   r`   ignore)divide)r   r   r  r,  皙333333?皙?ra   )axisr   r  gUUUUUU?)rV   r2   r5   r   r   r@   rt   errstaterb  r@  rL  r=   r   argmaxr   sumallargsortr   logrZ   argminmean)ry   r   r   r   dlpxs          r(   test_sgd_probar  /  s    WD24
H
L
LQPQ
RCsO,,,s/000 /TB711vh'w}}Bxj)w}} [[)%%1vh/AT7QtW$$$%%Bxj1AT7QtW$$$	 *) /" Ztb
9
=
=b"
ECT{S#J78AC;c
34Aryy+RYYqq-AB!
A&66!A$!)B8*%ABxj)Arzz!A$'AaD)9:			Ax	(BAq6(#AbffQi,			Rz	*BB8*%AbffQi,
 %TB
?CGGBO1vh'AAq6(#A##yy#ryy';;;;yy#ryy';;;;
 	
AAqc"A	vva"f~qc"!!A$	A6 Y *)s    AOO&	c                    t        t              }t        j                  j	                  d      }t        j
                  |      }|j                  |       t        |d d f   }t        |   } | ddddd d      }|j                  ||       t        |j                  ddd	f   t        j                  d
             |j                  |      }t        ||       |j                          t        j                  |j                        sJ |j                  |      }t        ||       t!        j"                  t!        j$                  |            }t        j                  |j                        sJ |j                  |      }t        ||       y )N   r   rs  F  )r   r{   r  r#   r"   r   r   ra   r`   )   )r  X4rt   r   r   aranger   Y4r2   r   r   ru   r  sparsifyr/   issparsepickleloadsdumps)ry   nr8  idxr5   r   r   rP  s           r(   test_sgd_l1r  w  s3    	BA
))


#C
))A,CKK
36
A
3A
C GGAqMsyyAbD)288D>:;;q>DtQ LLN;;syy!!!;;q>DtQ ,,v||C(
)C;;syy!!!;;q>DtQr*   c                    t        j                  ddgddgddgddgddgg      }g d} | ddd	d 
      }|j                  ||       t        |j	                  ddgg      t        j                  dg              | ddd	ddi
      }|j                  ||       t        |j	                  ddgg      t        j                  dg             y )Nr   r   皙rr   rq   ra   ra   ra   r`   r`   r,  r   F)r{   r#   r  rE  rs  ra   r   r`   rt   r   r2   r   r  ry   r5   r6   r   s       r(   test_class_weightsr    s     	4,q	D$<#sc3ZPQAA
cDD
QCGGAqMs{{S$K=1288QC=A cDQPUJ
WCGGAqM s{{S$K=1288RD>Br*   c                     ddgddgddgddgg}g d} | ddd       }|j                  ||       ddgddgg}ddg} | ddddd      }|j                  ||       t        |j                  |j                  d	
       y )Nra   r   )r   r   ra   ra   r,  r   r{   r#   rE  rd   rn  rb   r   )r2   r   r   )ry   r5   r6   r   clf_weighteds        r(   test_equal_class_weightr    s     Q!Q!Q!Q(AA
cDt
<CGGAqM
Q!QA	
AAsTCC@PQLQ 		<#5#5qAr*   c                      | ddddi      }t        j                  t              5  |j                  t        t
               d d d        y # 1 sw Y   y xY w)Nr,  r   r   rd   r  r   r   s     r(   test_wrong_class_weight_labelr    s;     cD3x
@C	z	"1 
#	"	"s   AAc                    ddd}t         j                  j                  d      }|j                  t        j
                  d         }t        j                  |      }|t        dk(  xx   |d   z  cc<   |t        dk(  xx   |d   z  cc<    | dd|	      } | dd
      }|j                  t        t        |       |j                  t        t        |       t        |j                  |j                         y )Ng333333?rr  )ra   rb   r   ra   rb   r,  r.  r  r>  sample_weight)rt   r   r   random_sampler  rv   r   r2   r  r   r   )ry   class_weightsr8  sample_weightsmultiplied_togetherr   r   s          r(   test_weights_multipliedr    s     $M
))


"C&&rxx{3N''.1a M!$44 a M!$44 sRmDDsR(DHHR>H2HHR#6H7

DJJ/r*   c                 `   t         j                  t         j                  }}t        |      }t	        j
                  |j                  d         }t        j                  j                  d      }|j                  |       ||   }||   } | ddd d      j                  ||      }t        j                  ||j                  |      d      }t        |d	d
        | dddd      j                  ||      }t        j                  ||j                  |      d      }t        |d	d
       t        |j                   |j                   d       ||dk(  d d f   }||dk(     }	t	        j"                  |g|gdz  z         }
t	        j$                  |g|	gdz  z         } | dd d      }|j                  |
|       |j                  |      }t        j                  ||d      d	k  sJ  | ddd      }|j                  |
|       |j                  |      }t        j                  ||d      d	kD  sJ y )Nr      r   r   F)r{   r#   rE  r   weightedr   rl   ra   r   rD  r   )r#   rE  r   )r   r   r   r   rt   r  rv   r   r   r   r2   r   f1_scorer  r   r   r   vstackconcatenate)ry   r5   r6   r  r8  r   f1clf_balancedX_0y_0X_imbalancedy_imbalancedy_preds                r(   test_balanced_weightr    s   
 99dkkqAaA
))AGGAJ
C
))


"CKK	#A	#A
ft$
N
R
RSTVW
XC			!S[[^Z	@BD!, t*e	c!Qi  
		!\11!4j	IBD!, cii););Q? AFAI,C
AF)C99aSC52:-.L>>1#
"23L D%
@CGGL,'[[^FAvz:TAAA J
FCGGL,'[[^FAvz:TAAAr*   c                    t        j                  ddgddgddgddgddgg      }g d} | ddd	
      }|j                  ||       t        |j	                  ddgg      t        j                  dg             |j                  ||dgdz  dgdz  z          t        |j	                  ddgg      t        j                  dg             y )Nr   r   r  rr   rq   r  r,  r   Fr{   r#   r  rs  ra   r   rc   rb   r  r`   r  r  s       r(   test_sample_weightsr    s     	4,q	D$<#sc3ZPQAA
cD
>CGGAqMs{{S$K=1288QC=A GGAq!qcAg 5G6 s{{S$K=1288RD>Br*   c                 $   | t         t        fv r | ddd      }n| t        t        fv r | ddd      }t	        j
                  t              5  j                  t        t        t        j                  d             d d d        y # 1 sw Y   y xY w)Nr,  r   Fr  )nur#   r  r   r  )rV   rZ   rQ   r^   r   r   r   r2   r5   r   rt   r  r   s     r(   test_wrong_sample_weightsr    sn    
  344#EB	>#78	8sT?	z	"1BIIaL1 
#	"	"s   0BBc                      | d      }t        j                  t              5  |j                  t        t
               d d d        y # 1 sw Y   y xY w)Nrs   r   )r   r   r   r;   r   r   r   s     r(   test_partial_fit_exceptionr  +  s2    
d
C	z	"B 
#	"	"s   AAc                    t         j                  d   dz  } | d      }t        j                  t              }|j                  t         d | t        d | |       |j                  j                  dt         j                  d   fk(  sJ |j                  j                  dk(  sJ |j                  ddgg      j                  dk(  sJ t        |j                  j                        }|j                  t         |d  t        |d         t        |j                  j                        }|sJ |       |j                  t              }t        |t               y )Nr   rc   rs   r   r   ra   r^  )r5   rv   rt   r   r   r;   r   r   r=   idr   r  r  r   r  )ry   thirdr   r   id1id2r  s          r(   test_partial_fit_binaryr  3  s   GGAJ!OE
d
CiilGOOAfuIq%y'O:99??q!''!*o--->>4'''  1a&*00D888
SYY^^
COOAefIqy)
SYY^^
COO3[[^Fv{+r*   c                 ^   t         j                  d   dz  } | d      }t        j                  t              }|j                  t         d | t        d | |       |j                  j                  dt         j                  d   fk(  sJ |j                  j                  dk(  sJ |j                  ddgg      j                  dk(  sJ t        |j                  j                        }|j                  t         |d  t        |d         t        |j                  j                        }|sJ |       y )	Nr   rc   rs   r   r   ra   r  rJ  )r@  rv   rt   r   rL  r;   r   r   r=   r  r   )ry   r  r   r   r  r  s         r(   test_partial_fit_multiclassr  H  s    HHQK1E
d
CiimGOOBvJ6E
GO<99??q"((1+....>>4'''  1a&*00F:::
SYY^^
COOBuvJ56
+
SYY^^
COO3r*   c                 @   t         j                  d   dz  } | dt         j                  d         }t        j                  t              }|j                  t         d | t        d | |       |j                  j                  dt         j                  d   fk(  sJ |j                  j                  dk(  sJ |j                  t         |d  t        |d         |j                  j                  dt         j                  d   fk(  sJ |j                  j                  dk(  sJ y )Nr   rc   rs   )r{   r   r   ra   r  )r@  rv   rt   r   rL  r;   r   r   )ry   r  r   r   s       r(   #test_partial_fit_multiclass_averager  Z  s    HHQK1E
dBHHQK
0CiimGOOBvJ6E
GO<99??q"((1+....>>4'''OOBuvJ56
+99??q"((1+....>>4'''r*   c                 z     |        }|j                  t        t               |j                  t        t               y r.   )r2   r@  rL  r;   r   s     r(   test_fit_then_partial_fitr  i  s&    
 'CGGBOOOBr*   c                    t         t        t        ft        t        t
        ffD ]  \  }}} | ddd|d      }|j                  ||       |j                  |      }|j                  }t        j                  |      } | dd|d      }t        d      D ]  }	|j                  |||        |j                  |      }
|j                  |k(  sJ t        ||
d        y )Nrs   rb   F)r{   r   r#   r   r   r{   r   r   r   r   r   )r5   r   r  r@  rL  rM  r2   r=   r   rt   r   r   r;   r   )ry   r   X_r   T_r   r  tr   r   y_pred2s              r(   "test_partial_fit_equal_fit_classifr  s  s     1ay2r2,/
B$TARQVWB&&r*FF))B-$TUKqAOOBGO4 ''+vv{{!&'1= 0r*   c                    t         j                  j                  d      } | dddd|      }|j                  t        t
               dt        j                  |j                  t              t
        k(        k(  sJ  | dddd|      }|j                  t        t
               dt        j                  |j                  t              t
        k(        k(  sJ  | dd	|
      }|j                  t        t
               dt        j                  |j                  t              t
        k(        k(  sJ  | dddd|      }|j                  t        t
               dt        j                  |j                  t              t
        k(        k(  sJ y )Nra   rs   r   r,  epsilon_insensitive)r{   r   r   r   r    rr   squared_epsilon_insensitivehuber)r{   r   r    r   )rt   r   r   r2   r5   r   r|  r  )ry   r    r   s      r(   test_regression_lossesr    s9   99((+L
 "!C GGAqM"''#++a.A-....
 *!C GGAqM"''#++a.A-....
d|
DCGGAqM"''#++a.A-....
 !C GGAqM"''#++a.A-....r*   c                 0    t        | t        t        d       y )Nr   )r   r@  rL  r  s    r(   test_warm_start_multiclassr    s    UBI.r*   c                     | dd      }|j                  t        t               t        |d      sJ t	               j                  t              D cg c]	  }ddg|    }}|j                  t        d d d df   |       y c c}w )Nrs   Fr   r   hamspamr`   )r2   r5   r   r   r   fit_transform)ry   r   r   r6   s       r(   test_multiple_fitr    s{     dE
*CGGAqM3    &2^%A%A!%DE%D%	%DAEGGAa"fIq 	Fs   Bc                      | ddd      }|j                  ddgddgddggg d       |j                  d   |j                  d   k(  sJ y )Nr,  rb   Fr  r   ra   )r   ra   rb   )r2   r   r   s     r(   test_sgd_regr    sQ     cAU
;CGGaVaVaV$i099Q<399Q<'''r*   c           
         d}d}d}d}t         j                  j                  d      }|j                  ||f      }|j                  |      }t        j                  ||      } | dd||d	d
d	d      }	|	j                  ||       t        | ||||      \  }
}t        |	j                  |
d       t        |	j                  |d       y )Nr   rs   r.  r   r   r/  r   r   Tra   Fr1  r   r   )rt   r   r   r3  rx   r2   r   r   r   r   r   ry   rz   r{   r6  r7  r8  r5   r  r6   r   r   r   s               r(   $test_sgd_averaged_computed_correctlyr    s     CEIJ
))


"C

J/
0A



#A 	q!A
 	C GGAqM)-eQ3)F&O&cii"E(92Fr*   c           
      @   d}d}d}d}t         j                  j                  d      }|j                  ||f      }|j                  |      }t        j                  ||      } | dd||d	d
d	d      }	|	j                  |d t        |dz         d d  |d t        |dz                |	j                  |t        |dz        d  d d  |t        |dz        d         t        | ||||      \  }
}t        |	j                  |
d       t        |	j                  d   |d       y )Nr   rs   r.  r   r   r/  r   r   Tra   Fr1  rb   r   r   )rt   r   r   r3  rx   r;   intr   r   r   r   r   r  s               r(   test_sgd_averaged_partial_fitr    s.    CEIJ
))


"C

J/
0A



#A 	q!A
 	C OOA*IM*+A.2FC	A4F0GHOOAc)a-(*+A.#i!m2D2F0GH)-eQ3)F&O&cii"Eq)+<bIr*   c           
         d}d} | dd||dddd      }t         j                  d	   }|j                  t        d t	        |d
z         d d  t         d t	        |d
z                |j                  t        t	        |d
z        d  d d  t         t	        |d
z        d         t        | t        t         ||      \  }}t        |j                  |d       t        |j                  |d       y )Nr   rs   r   r   Tra   Fr1  r   rb   r   r   )
r   rv   r;   r   r  r   r   r   r   r   )ry   rz   r{   r   r6  r   r   s          r(   test_average_sparser    s     CE
 	C IOOB+Y]+,Q/4Hc)a-6H1IJOOBs9q=)+,Q/C	A4F4H1IJ)-eRS%)H&O&cii"E(92Fr*   c                    d\  }}d}t         j                  j                  d      }t        j                  |||      j	                  |d      }d|j                         z  } | dddd	
      }|j                  ||       |j                  ||      }|dkD  sJ d|j                         z  |j                  |d      j                         z   } | dddd	
      }|j                  ||       |j                  ||      }|dkD  sJ y )Nr$   r   r   ra   rd   r   r,  r.  F)r   r{   r#   r  rn   	rt   r   r   linspacer5  r   r2   scorerandn	ry   xminxmaxr6  r8  r5   r6   r   r  s	            r(   test_sgd_least_squares_fitr  &  s    JD$I
))


"C
D$	*229a@A 	aggiA
_C"E
RCGGAqMIIaOE4<< 	aggi#))Iq17799A
_C"E
RCGGAqMIIaOE3;;r*   c                    d\  }}d}t         j                  j                  d      }t        j                  |||      j	                  |d      }d|j                         z  } | dddd	d
      }|j                  ||       |j                  ||      }|dkD  sJ d|j                         z  |j                  |d      j                         z   } | dddd	d
      }|j                  ||       |j                  ||      }|dkD  sJ y )Nr  r   r   ra   rd   r  rs   r,  r.  Fr   epsilonr{   r#   r  rn   r  r  s	            r(   test_sgd_epsilon_insensitiver  >  s   JD$I
))


"C
D$	*229a@A 	aggiA
"C GGAqMIIaOE4<< 	aggi#))Iq17799A
"C GGAqMIIaOE3;;r*   c                    d\  }}d}t         j                  j                  d      }t        j                  |||      j	                  |d      }d|j                         z  } | ddddd	
      }|j                  ||       |j                  ||      }|dkD  sJ d|j                         z  |j                  |d      j                         z   } | ddddd	
      }|j                  ||       |j                  ||      }|dkD  sJ y )Nr  r   r   ra   rd   r  r,  r.  Fr  rn   r  r  s	            r(   test_sgd_huber_fitr  b  s    JD$I
))


"C
D$	*229a@A 	aggiA
WcrQV
WCGGAqMIIaOE4<< 	aggi#))Iq17799A
WcrQV
WCGGAqMIIaOE3;;r*   c           	         d\  }}t         j                  j                  d      }|j                  ||      }|j                  |      }t        j                  ||      }dD ]|  }dD ]u  }t        j                  ||d      }	|	j                  ||        | dd||d	      }
|
j                  ||       d
||fz  }t        |	j                  |
j                  d|       w ~ y )N)r   r$   r   )rs   r   )rd   rj   rr   F)r{   r   r  r  2   )r   r#   r{   r   r  zNcd and sgd did not converge to comparable results for alpha=%f and l1_ratio=%frb   )r   r%  )
rt   r   r   r  rx   r   
ElasticNetr2   r   r   )ry   r6  r7  r8  r5   ground_truth_coefr6   r{   r   cdsgdr%  s               r(   test_elasticnet_convergencer  z  s     $Iz
))


"C		)Z(A 		*-
q#$A 'H((heB FF1aL$!#C GGAqM7:?9JK   #))QP# ( r*   c                 &   t         j                  d   dz  } | d      }|j                  t         d | t        d |        |j                  j                  t         j                  d   fk(  sJ |j
                  j                  dk(  sJ |j                  ddgg      j                  dk(  sJ t        |j                  j                        }|j                  t         |d  t        |d         t        |j                  j                        }|sJ |       y )Nr   rc   rs   r   ra   r^  )	r5   rv   r;   r   r   r   r  r  r   )ry   r  r   r  r  s        r(   test_partial_fitr    s    GGAJ!OE
d
COOAfuIq%y)99??qwwqzm+++>>4''';;Ax &&$...
SYY^^
COOAefIqy)
SYY^^
COO3r*   c                 h    | ddd|d      }|j                  t        t               |j                  t              }|j
                  } | dd|d      }t        d      D ]  }|j                  t        t                |j                  t              }|j
                  |k(  sJ t        ||d       y )Nrs   rb   F)r{   r#   r   r   r   r  r   )	r2   r5   r   r  r  r   r   r;   r   )ry   r   r   r  r  r   r  s          r(   test_partial_fit_equal_fitr    s     dQTU
SCGGAqM[[^FA
dR
GC1X1 kk!nG66Q;;fgq9r*   c                 h     | d      }|j                  d       |j                  d   d   dk(  sJ y )Nri   )r  r,  r  ra   )r   rc  r   s     r(   test_loss_function_epsilonr     s8    

CNN3Ng&q)S000r*   c                    |#t        j                  |j                  d         }n|}t        j                  |j                  d         }|}d|z
  }	d}
d}| t        k(  rd}t	        |      D ]~  \  }}t        j
                  ||      }||	z  }|dk  rd}nd}|t        dd||z  z
        z  }|||z  |z   z  }|	|||z   z   |z  z  }	||z  }||z  }||dz   z  }|
|z  }
|
|	z  }
|
|dz   z  }
 |d|
z
  fS )Nra   rq   rr   rs   r`   r   )rt   ru   rv   r^   rw   rx   max)ry   r5   rz   r  r   r  coefrV  offsetr   r   r   r   r   r   r   s                   r(   asgd_oneclassr    sB   xx
#88AGGAJ'LFF
IE $$aL5FF5$	Y8HHAsS2X~&&#.5())sb8m,-55	CQY&QW$# !& ....r*   c                 L    | ddd|      }|j                  |        | ddd|      }|j                  ||j                  j                         |j                  j                                 | dddd|      }|j                  |       |j                  |j                  k(  sJ t        |j                  |j                         |j                  d	       |j                  |       |j                  |j                  k(  sJ t        |j                  |j                         y )
Nrd   rs   F)r  r   r   r   r,  r   r  T)r  r   r   r   r   r  )r2   r   r   r   r   r   r   )ry   r5   r   r   r   r   s         r(   _test_warm_start_oneclassr	    s     3T5
CCGGAJCdEDDHHQ#))..*8H8H8JHK CdEdRTUDHHQK77cffDJJ		*OOsOHHQK77dggDJJ

+r*   c                 &    t        | t        |       y r.   )r	  r5   r   s     r(   test_warm_start_oneclassr    s     eQ+r*   c                      | d      }t        |      }|j                  d       |j                  t                | d      }|j                  t               t	        |j
                  |j
                         y )Nrd   r  r,  )r   r   r2   r5   r   r   r   s      r(   test_clone_oneclassr    sU     3-C
*CNNcNGGAJC=DHHQKsyy$**-r*   c                 D   t         j                  d   dz  } | d      }|j                  t         d |        |j                  j                  t         j                  d   fk(  sJ |j                  j                  dk(  sJ |j                  ddgg      j                  dk(  sJ |j                  }|j                  t         |d         |j                  |u sJ t        j                  t              5  |j                  t         d d df          d d d        y # 1 sw Y   y xY w)Nr   rc   r,  r  ra   r^  )	r5   rv   r;   r   r   r  r   r   r   )ry   r  r   previous_coefss       r(   test_partial_fit_oneclassr    s    GGAJ!OE
3-COOAfuI99??qwwqzm+++;;$$$;;Ax &&$...YYNOOAefI99&&& 
z	"!Q$  
#	"	"s   0DDc                     | ddd|d      }|j                  t               |j                  t              }|j                  }|j
                  }|j                  } | ddd|d      }t        d      D ]  }|j                  t                |j                  t              }|j                  |k(  sJ t        ||       t        |j
                  |       t        |j                  |       y )N皙?rb   rs   F)r  r#   r   r   r   ra   )r  r   r#   r   r   )
r2   r5   r=   r  r   r   r   r   r;   r   )	ry   r   r   y_scoresr  r  r  r   	y_scores2s	            r(   #test_partial_fit_equal_fit_oneclassr  /  s     4!$b%
PCGGAJ$$Q'HA99D[[F
4dQb%
PC1X %%a(I66Q;;Hi(CIIt$CKK(r*   c                    d}d} | dd||dd      } | dd||dd      }|j                  t               |j                  t               t        | t        |||j                  j	                         |j
                  	      \  }}t        |j                  j	                         |j	                                t        |j
                  |       y )
Nr   r  r   r   rb   F)r   r   r   r  r#   r   ra   r  )r2   r5   r  r   r   r   r   )ry   r   r  r   r   rV  average_offsets          r(   *test_late_onset_averaging_reached_oneclassr  D  s     D	B $2SXD  D 	HHQKHHQK $1q$djj&6&6&8dll$ L. DJJ$$&(:(:(<=DLL.1r*   c           	      4   d}d}d}d}t         j                  j                  d      }|j                  ||f      } | d||dd	dd
      }|j	                  |       t        | |||      \  }}	t        |j                  |       t        |j                  |	       y )Nr   r  r.  r   r   r/  r   Tra   Fr   r   r  r  r#   r   r   )	rt   r   r   r3  r2   r  r   r   r   
ry   rz   r  r6  r7  r8  r5   r   rV  r  s
             r(   -test_sgd_averaged_computed_correctly_oneclassr  e  s     C	BIJ
))


"C

J/
0A
 C GGAJ#03#C L.CII|,CKK0r*   c           	         d}d}d}d}t         j                  j                  d      }|j                  ||f      } | d||dd	dd
      }|j	                  |d t        |dz         d d         |j	                  |t        |dz        d  d d         t        | |||      \  }}	t        |j                  |       t        |j                  |	       y )Nr   r  r.  r   r   r/  r   Tra   Fr  rb   )
rt   r   r   r3  r;   r  r  r   r   r   r  s
             r(   &test_sgd_averaged_partial_fit_oneclassr    s     C	BIJ
))


"C

J/
0A
 C OOA*IM*+A./OOAc)a-(*+A./#03#C L.CII|,CKK0r*   c           	      b   d}d} | d||dddd      }t         j                  d   }|j                  t         d t        |d	z                |j                  t         t        |d	z        d         t	        | t         ||      \  }}t        |j                  |       t        |j                  |       y )
Nr   rs   r   Tra   Fr  r   rb   )r   rv   r;   r  r  r   r   r   )ry   rz   r  r   r6  rV  r  s          r(   test_average_sparse_oneclassr     s     C	B
 C IOOB+Y]+,-OOBs9q=)+,-#0C#D L.CII|,CKK0r*   c                  0   d} d}d}t         j                  j                  |      }d|j                  dd      z  }t         j                  |dz   |dz
  f   }d|j                  dd      z  }t         j                  |dz   |dz
  f   }t        |d| 	      }|j                  |       |j                  |      }|j                  |      j                  d
d      }	d}
t        ||      }t        | dd|
|d       }t        ||      }|j                  |       |j                  |      }|j                  |      j                  d
d      }t        j                  ||k(        dk\  sJ t        j                  t        j                  |	|f            d   }|dk\  sJ y )Nr  r-  r!   rr    rb   r   rbf)gammakernelr  ra   r`      )r$  r    T)r  r   r  r#   r    r"   rn   rn  ri   )rt   r   r   r  r_r   r2   r  r=   r5  r   rQ   r   r|  corrcoefr  )r  r$  r    r8  r5   X_trainX_testr   y_pred_ocsvm	dec_ocsvmr#   	transformclf_sgdpipe_sgdy_pred_sgdocsvmdec_sgdocsvmr(  s                    r(   test_ocsvm_vs_sgdocsvmr2    s    
BEL ))


-CciiQAeeAE1q5L!GciiQAUU1q5!a%< F E%B
7CGGG;;v&L%%f-55a<I Hu<@I!G Y0HLL&&v.O--f5==aDL77?l23t;;;{{2>>9l*CDEdKHs??r*   c                      dD ]B  } t        | dddd      }|j                  t        j                         |j                  dkD  rBJ  y )Nr,  rd   ri   r   r   r   r  r#   r"   r   r   r  )rQ   r2   r   r   r   )r  models     r(   test_sgd_oneclass_convergencer7    sI     CT$
 			$)) }}q    r*   zeta0, max_iter)r   i'  )ga2U0*3?i N  c                    dD ]  }t        ||d d|       }t        d|d      }|j                  t        j                         |j                  t        j                         |j                  t        j                        }|j                  t        j                        }|j                  t        j                        }|j                  t        j                        }t        j                  ||      d   }	t        j                  ||      d   }
t        j                  t        j                  |j                  |j                   g      t        j                  |j                  j                         |j                  g            d   }|dk(  j                         t        |      z  }|	d	kD  sJ |
d
kD  sJ |d	kD  sJ t!        d|z
  |d        y )Nr4  r   r5  linearư>r%  r  r"   rn  ra   rn   ro   rs   atol)rQ   r   r2   r   r   r  r=   rt   r(  r  r   r   flattenr   rw  r  r   )r   r#   r  r6  	model_refpredsdec_fn	preds_ref
dec_fn_refdec_fn_corr
preds_corr	coef_corr
share_oness                r(   $test_sgd_oneclass_vs_linear_oneclassrH    sy    H$jt
  xBDA			$))dii dii(((3%%dii0	00;
kk&*5d;[[	248
KKNNEKK%--89NNIOO335y7K7KLM
 	
 qj%%'#e*4
T!!!D   4J69 r*   r  r,  ri   c                    t         j                  }t               j                  |      }t	        | ddddd      }t        d| d	      }|j                  |       |j                  |       t        |j                  |j                  d
       y)zTest that the `offset_` of `SGDOneClassSVM` is close to the `offset_`
    of `OneClassSVM` with `kernel="linear"`, given enough iterations and a
    suitable value for the `eta0` parameter, while also ensuring that the
    dataset is scaled.
    i@  Nr   r:  r!   )r  r#   r"   r   r   r    r9  gh㈵>r;  gkNuϵ>r<  )	r   r   r   r  rQ   r   r2   r   r   )r  r5   X_scaledr6  r?  s        r(   2test_sgd_oneclass_vs_linear_oneclass_offsets_matchrK    sz     			A--a0HE 8=I	IIhMM(EMM9#4#46Br*   c                     t        j                  dddd      \  } }t        ddd dd	d
      j                  | |      }t        dddd
d       j                  | |      }t	        |j
                  |j
                         t        ddd ddd
      j                  | |      }t        dddd
d       j                  | |      }t	        |j
                  |j
                         y )Nr   r   r.  i  )r6  r7  n_informativer    r   r  r  gA?r!   )r{   r   r"   r#   r   r    r   )r{   r   r#   r    r"   g|=r   )r   make_classificationrV   r2   r   r   )r5   r6   est_enest_l1est_l2s        r(   test_l1_ratiorR  %  s    ''3btDAq
  
c!Qi  TABD	c!Qi  fllFLL9  
c!Qi  TABD	c!Qi  fllFLL9r*   c                     t        j                  d      5  t         j                  j                  d      } d}d}| j	                  ||f      }|d d d dfxx   dz  cc<   t        j
                  |      j                         sJ t               j                  |      }t        j
                  |      j                         sJ | j	                  |      }t        j                  ||      d	kD  j                  t         j                        }t        t        j                  |      dd
g       t        ddd      }|j                  ||       t        j
                  |j                         j                         sJ d}t#        j$                  t&        |      5  |j                  ||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nraiserx  r   r   r   r/  rb   gu <7~rq   ra   r,  r   r"  )r{   r   r#   zwFloating-point under-/overflow occurred at epoch #.* Scaling input data with StandardScaler or MinMaxScaler might help.r  )rt   ru  r   r   r3  isfiniterx  r   r  rx   astypeint32r   r   rV   r2   r   r   r   r   )	r8  r6  r7  r5   rJ  ground_truthr6   r6  	msg_regxps	            r(   test_underflow_or_overflowr[  H  sr   		!ii##A&	
JJY
3J4	!RaR%E{{1~!!###
  >//2{{8$((*** zzzz2VVHl+c199"((C299Q<!Q0CoL 			(A{{5;;'++--- 	
 ]]:Y7IIaO 8C 
"	!B 87C 
"	!s$   FG
F>-G
>G	G

Gc                  <   t        ddddddddd 		      } t        j                  d
      5  | j                  t        j
                  t        j                         d d d        t        j                  | j                        j                         sJ y # 1 sw Y   9xY w)Nr   r   Tr  rr  rs   r   r   )	r   r#   r   r   r   r{   r   r    r"   rT  rU  )
rV   rt   ru  r2   r   r   r   rV  r   rx  )r6  s    r(   'test_numerical_stability_large_gradientr]  n  sz     
E 
	!		$))T[[) 
";;u{{#''))) 
"	!s   /BBr   )r   r   r  c           	      @   t        ddd| dd d      }t        j                  d      5  |j                  t        j
                  t        j                         d d d        t        |j                  t        j                  |j                               y # 1 sw Y   =xY w)	Ng     j@r   r,  Fr  )r{   r   r   r   r   r"   r#   rT  rU  )
rV   rt   ru  r2   r   r   r   r   r   
zeros_like)r   r6  s     r(   test_large_regularizationr`    sp      E 
	!		$))T[[) 
"ekk2==+EF 
"	!s   /BBc                     t               j                  t        j                        } t        j                  dk(  }d}t        d d|      }|j                  | |       ||j                  k(  sJ d}t        dd|      }|j                  | |       ||j                  kD  sJ |j                  dkD  sJ t        dd|      }|j                  | |       |j                  |j                  kD  sJ |j                  dkD  sJ t        dd	d
      }d}t        j                  t        |      5  |j                  | |       d d d        |j                  dk(  sJ y # 1 sw Y   xY w)Nra   r!   r   )r"   r    r#   r  r$   r,  rc   r   )r#   r"   r    zhMaximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.r  )r   r  r   r   r   rV   r2   r   r   r
  r   )r5   r6   r#   model_0model_1model_2model_3warning_messages           r(   test_tol_parameterrg    sD   &&tyy1AqA H1xHGKK1w&&& HHEGKK1goo%%%??Q !hGGKK1??W__,,,??Q QDqAG	 
 
(	@Aq 
A??a 
A	@s   )EEc                     |D ]?  \  }}}}t        | j                  ||      |       t        | j                  ||      |       A y r.   )r   py_losspy_dloss)loss_functioncasesr   r6   expected_lossexpected_dlosss         r(   _test_loss_commonro    sE     05+1m^M11!Q7GM221a8.I 05r*   c                      t        j                  d      } g d}t        | |       t        j                  d      } g d}t        | |       y )Nrr   ))g?rr   rq   rq          r   rq   rq   )rr   rr   rq   r   )r   r   rq   rr   )rd   rr   rd   r   )r-  r         @rr   )re   r   rd   rr   )rq   rr   ra   r   rq   )rr   rr   rq   rq   )rq  r   rq   rq   )rq   rr   rq   r   )rq   r   rq   rr   )rd   r   rd   rr   )r-  r   r-  rr   )re   rr   rd   r   )r   rr   rr   r   )sgd_fastHingero  r   rl  s     r(   test_loss_hingerx    sH     >>#D
E dE" >>#D
E dE"r*   c                  N    t        j                  d      } g d}t        | |       y )Nrr   )rt  rq  )rr   r         @rz  r   rr   rz        )rd   rr   g      ?r   rd   r   g      @rs  )ru  SquaredHingero  rw  s     r(   test_gradient_squared_hinger    s%      %DE dE"r*   c                  L    t        j                         } g d}t        | |       y )N)rt  )r   r   rq   rq   )r-  rr   rq   rq   )rq   rr   rr   rr  r{  r}  )rr  rr      r|  )g      rr      r|  )ru  ModifiedHuberro  rw  s     r(   test_loss_modified_huberr    s#    !!#D
E dE"r*   c                  N    t        j                  d      } g d}t        | |       y )Nr,  )rq   rq   rq   rq   r,  rq   rq   rq   gffffff rr  rq   rq   gffffff@rs  rq   rq   )皙@r-  r,  rr   )r-  r   333333@rr   )r-  r  r,  r   )rr  rr   r  r   )ru  EpsilonInsensitivero  rw  s     r(   test_loss_epsilon_insensitiver     s%    &&s+D
E dE"r*   c                  N    t        j                  d      } g d}t        | |       y )Nr,  )r  r  r  r  )r  r-  rs   rs  )r-  r   R @g333333@)r-  r  rs   gɿ)rr  rr   r  g333333)ru  SquaredEpsilonInsensitivero  rw  s     r(   %test_loss_squared_epsilon_insensitiver    s%    --c2D
E dE"r*   c            	      \   t        ddddddd      } | j                  t        j                  t        j                         | j
                  | j                  kD  sJ | j
                  | j                  dz   k  sJ | j                  t        j                  t        j                        d	kD  sJ y )
Nr   r   Tr   r   rb   )r{   r"   r#   r   r   r    r[  r.  rj   )rV   r2   r   r   r   r   r   r  )r   s    r(   0test_multi_thread_multi_class_and_early_stoppingr  "  s     C GGDIIt{{#;;-----;;--222299TYY,s222r*   c                      t        j                  ddd      g dd} t        dddd	
      }t        || ddd	      }|j	                  t
        j                  t
        j                         |j                  dkD  sJ y )Nr  r?  )r$   r   r  )r{   r   rs   r   Tr   )r"   r#   r   r    r$   rb   )n_iterr[  r    rj   )	rt   logspacerV   r   r2   r   r   r   best_score_)
param_gridr   searchs      r(   -test_multi_core_gridsearch_and_early_stoppingr  4  sn    
 RA&'J
 D4ST
UCZ!RSTF
JJtyy$++&###r*   backend)lokymultiprocessing	threadingc                    t         j                  j                  d      }t        ddd|      }|j	                  dd      }t        dd	d
      }|j                  ||       t        ddd
      }t        j                  |       5  |j                  ||       d d d        t        |j                  |j                         y # 1 sw Y   *xY w)Nr!   )r"  r  g{Gz?csr)densityrd  r8  r.  r"  r   ra   )r#   r[  r    r  )r  )rt   r   r   r   choicerV   r2   joblibparallel_backendr   r   )r  r    r5   r6   clf_sequentialclf_parallels         r(   'test_SGDClassifier_fit_for_all_backendsr  C  s      99((,L
 	[$u,WAB$A #DLNq! !$qrJL		 	 	1A 
2n22L4F4FG 
2	1s   CC
c                 h   | t         j                  k(  rt        j                  |      \  }}nt        j                  |      \  }} | |d      }t        j                  t              5  |j                  ||      j                  }|j                  dk(  sJ 	 d d d         | |d      }t        j                  t              5  |j                  ||      j                  }|j                  dk(  sJ 	 d d d        t                | |dz   d      }t        j                  t              5  |j                  ||      j                  }|j                  dk(  sJ 	 d d d        t        j                  |z
        j                         dkD  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   MxY w)N)r    ra   )r    r#   rr   )r   rH   r   make_regressionrN  r   r
  r   r2   r   r   r   rt   absr  )r   global_random_seedr5   r6   r   coef_same_seed_acoef_same_seed_bcoef_other_seeds           r(   test_sgd_random_stater  g  sl    L---''5GH1++9KL1
 !3a
@C	(	)771a=..{{a 
* !3a
@C	(	)771a=..{{a 
* $&67 !3a!7!
DC	(	)''!Q---{{a 
* 66"_4599;cAAA) 
*	)
 
*	) 
*	)s$   *.F.F-.F(FF%(F1c                    t         j                  t         j                  }}|j                  d   }d}t	        j
                  ddd|      }t        t        j                        }| j                  t        d|       |j                  ||       |j                  d   d	d
 \  }}|j                  d   t        ||z        k(  sJ |j                  d   t        ||z        k(  sJ y)ziTest that data passed to validation callback correctly subsets.

    Non-regression test for #23255.
    r   rs  Tr   r   )r   r"   r#   r   )side_effect_ValidationScoreCallbackra   rc   N)r   r   r   rv   r   rV   r   r   r  setattrr2   	call_argsr  )	monkeypatchr5   r   r6  r   r   mockX_valy_vals	            r(   &test_validation_mask_correctly_subsetsr    s    
 99dkkqA
I

$
$/	C 0IIJD,.H$OGGAqM>>!$Qq)LE5;;q>S-@!@AAAA;;q>S-@!@AAAAr*   c                  .   t         j                  t         j                  }} t        j                  |      }d}t        j                  d|d      }d}t        j                  t        |      5  |j                  | ||       d d d        y # 1 sw Y   y xY w)Nr   Tr   )r   r   r    z\The sample weights for validation set are all zero, consider using a different random state.r  r  )r   r   r   rt   r_  r   rV   r   r   r   r2   )r5   r   r  r   r   error_messages         r(   (test_sgd_error_on_zero_validation_weightr    sz     99dkkqAMM!$M

$
$1DSTC
	#  
z	71M2 
8	7	7s   -BBc                 F     | d      j                  t        t               y)z!non-regression test for gh #25249ra   )verboseN)r2   r5   r   )r   s    r(   test_sgd_verboser    s     aQ"r*   SGDEstimator	data_typec                     t         j                  |      }t        j                  t        |      } |        }|j                  ||       |j                  j                  |k(  sJ y )Ndtype)r5   rW  rt   r   r   r2   r   r  )r  r  _X_Y	sgd_models        r(   test_sgd_dtype_matchr    sO     
)	B	!9	%BIMM"b??  I---r*   c                    t         j                  t        j                        }t        j                  t
        t        j                        }t         j                  t        j                        }t        j                  t
        t        j                        } | dd      }|j                  ||        | dd      }|j                  ||       t        |j                  |j                         y )Nr     F)r#   r   )
r5   rW  rt   float64r   r   float32r2   r   r   )r  X_64Y_64X_32Y_32sgd_64sgd_32s          r(   test_sgd_numerical_consistencyr    s     88"**8%D88ARZZ(D88"**8%D88ARZZ(D2u5F
JJtT2u5F
JJtTFLL&,,/r*   c                  L    t               } t        |       j                  dk(  sJ y)z}Check that SGDOneClassSVM has the correct estimator type.

    Non-regression test for if the mixin was not on the left.
    outlier_detectorN)rQ   r   estimator_type)	sgd_ocsvms    r(   %test_sgd_one_class_svm_estimator_typer    s&    
  II--1CCCCr*   c                     d} dd\  }}d}fd}t        |||      \  }}t        j                  ||j                        }t        j                  |dz         }t        ||d	||| fd
di      }	|	j                  }
|
dd }d|
d   z
  }t        | dddd|      }|j                  ||       t        |j                  |d       t        |j                  |d       y)zBTest that SGDOneClassSVM minimizes the correct objective function.rd   rr   )i,  rc   r!   c                     | d d }| d   }||z  |z   }||z  }t        j                  t        j                  |z
  d            }d|z  |z  |z  }	||	z   ||z  z   }
|
S )Nr`   rq   rd   )rt   r|  maximum)r  r5   r6   r{   r~   r   r   zavg_lossregobjhinge_thresholds              r(   	objectivezItest_sgd_one_class_svm_formulation_with_scipy_minimize.<locals>.objective  sw    CR&bE	K)#E772::o&93?@EkG#g-ny500
r*   )r6  r7  r    r  ra   zNelder-Meadmaxiterr   )methodr7   optionsNr`   r   i  r   )r  r   r#   r"   r   r    g{Gzt?)rtolrs   )r
   rt   rA  r  ru   r   r  rQ   r2   r   r   r   )r  r6  r7  random_seedr  r5   r   r6   w0scipy_outputw_outexpected_coefexpected_offsetr6  r  s                 @r(   6test_sgd_one_class_svm_formulation_with_scipy_minimizer    s    	BO"IzK  DAq
 		)A	*q.	!B
BZD!L NNE#2JM%)mO  E 
IIaOEKKT:EMM?>r*   )Nrq   )r  r  unittest.mockr   r  numpyrt   r   scipy.sparsesparser/   scipy.optimizer   sklearnr   r   r   sklearn.baser   r	   sklearn.datasetsr
   sklearn.exceptionsr   sklearn.kernel_approximationr   sklearn.linear_modelr   ru  r   sklearn.model_selectionr   r   r   sklearn.pipeliner   sklearn.preprocessingr   r   r   r   sklearn.svmr   sklearn.utilsr   sklearn.utils._sparser   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr   r)   rV   r,   rH   rF   rQ   rO   rZ   r\   r^   r   r5   r   r  r  r@  rL  rM  rN  r   r   r  r  	load_irisr   r(  r)  true_result5r   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  ru   r#  r&  r*  r9  r<  rB  rG  rQ  rW  rY  r\  r_  rl  r  no_check_spmatrixr  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  r   r  r	  r  r  r  r  r  r  r  r   r2  r7  rH  rK  rR  r[  r]  r`  rg  ro  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%   r*   r(   <module>r     s          # 3 3 - ' 1 1 6 5 
 + S S # " 6  5(<55 ($
,33 
 SL77 S0
/
1
*
)
+ BHHr2hR2r(QFQFQFCDBHHr2hAA'( RXX	Q		s	
A	s	c
	R	
D		
B
 Wq[E7Q;'Q.RXXc{QFQG,-& RXX	 RXX&' RXX      	 RXX&'x RXXBx"bB8aVaVaVDE.D60 m0,@RS PQ& R& m0,@RS u~.
FO}o68WX / m0,@RS
.
. 
.
.$ 
4
4$ m0,@RS(H(HV m0,@RS&& m0,@RS'' m0,@RS&/&/R m0,@RS==$ m0,@RS }l&CD[1, 2 E, -!4lDVW 

* =2E"FG8 H8" m0.BVW44 	)8288D>:;	/$@A	-$89	xrxx~>?	.. m0,@RS55 	)1-.	/34	-+,	q12	&& =2E"FGG HGB =2E"FG5 H5 =2E"FG  H  =2E"FGO HO  =2E"FG+ H+ =2E"FGN HN6 =2E"FG+ H+ =2E"FG+ H+ =2E"FG= H=( =2E"FG? H?B =2E"FGD7 HD7N =2E"FG!  H ! H =2E"FGC HC$ =2E"FGB HB  =2E"FG H =2E"FG0 H0$ =2E"FG+B H+B\ =2E"FGC HC" m0.BVW22 =2E"FG  H  =2E"FG, H,( =2E"FG H" =2E"FG( H( =2E"FG H =2E"FGPQ> R H>" =2E"FG"/ H"/J =2E"FG/ H/ =2E"FG H <1C"DE( F( <1C"DEG FG@ <1C"DEJ FJ@ <1C"DEG FG4 <1C"DE F. <1C"DE  F F <1C"DE F. <1C"DEQ FQB <1C"DE F  <1C"DEPQ: R F: <1C"DE1 F1#/L >3G"HI, J,, >3G"HIPQ, R J, >3G"HI
. J
. >3G"HI! J!& >3G"HIPQ) R J)& >3G"HI2 J2@ >3G"HI1 J14 >3G"HI1 J16 >3G"HI1 J10&R! )M=+IJ7 K7B Sz*C +C, :F#L*& $>?G @G"! HJ#B##"#"#"3$$ $LM H N HF ,,,l.G.GH B BFB03& }l&CD# E#
 
 rzz2::&>?. @
. 
0
0 D.?r*   