
    0Ph                     :   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
mZ d dlmZ d dlmZmZmZ d dlmZ dd
Zd Zd Zd Zej                            de          d             Zej                            de          d             Zd Zd Zd Zd Zd Z dS )    N)optimize)make_regression)HuberRegressorLinearRegressionRidgeSGDRegressor_huber_loss_and_gradient)assert_almost_equalassert_array_almost_equalassert_array_equal)CSR_CONTAINERS2      c                 "   t           j                            d          }t          | |dd          \  }}t	          d| z            }|                    d| |          }d|                    dd||j        d         f          z  ||d d f<   ||fS )Nr   g?)	n_samples
n_featuresrandom_statenoise皙?       @   )nprandomRandomStater   intrandintnormalshape)r   r   rngXy	num_noiserandom_sampless          e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/linear_model/tests/test_huber.pymake_regression_with_outliersr&      s    
)


"
"C
$  DAq
 C)O$$I[[Iy99NAq9agaj2I!J!JJAnaaaa4K    c                  *   t                      \  } }t                      }|                    | |           t          dd          }|                    | |           t	          |j        |j        d           t	          |j        |j        d           d S )Ng     @@        )epsilonalpha      )r&   r   fitr   r   coef_
intercept_)r!   r"   lrhubers       r%   %test_huber_equals_lr_for_high_epsilonr3   !   s    (**DAq			BFF1aLLL3c222E	IIaOOORXq111("-;;;;;r'   c                      t                      \  } }t          d          }|                    | |           |j        |j        k    sJ d S )Nr   )max_iter)r&   r   r.   n_iter_r5   )r!   r"   r2   s      r%   test_huber_max_iterr7   ,   sM    (**DAqA&&&E	IIaOOO=EN******r'   c                     t           j                            d          } t                      \  }}|                     dd|j        d                   }d }d }t          d          D ]}|j        d         dz   |j        d         dz   fD ]`}|                     |          }t          j        |d                   |d<   t          j
        |||||d	d
|          }	t          |	dd           ad S )Nr   r,   r   c                 (    t          | g|R  d         S )Nr   r	   xargss     r%   	loss_funcz&test_huber_gradient.<locals>.loss_func9       '1D111!44r'   c                 (    t          | g|R  d         S )Nr   r	   r:   s     r%   	grad_funcz&test_huber_gradient.<locals>.grad_func<   r>   r'      r-   {Gz?r   gư>   )r   r   r   r&   r   r   rangerandnabsr   
check_gradr   )
r    r!   r"   sample_weightr=   r@   _r   w	grad_sames
             r%   test_huber_gradientrM   3   s   
)


"
"C(**DAqKK1qwqz33M5 5 55 5 5 1XX 4 471:>171:>: 	4 	4J		*%%AF1R5MMAbE +9aAtS- I  	43333	44 4r'   csr_containerc           	         t                      \  }}t                      }|                    ||           |j        }|j        }t          t          j        t          j        |j                            t          j        t          j        |j                                      }|                    ||t          j	        |j
        d                              t          |j        |z  ||z             t          |j        |z  ||z             t          dd          \  }}t          j        |t          j        |d         |d         |d         f          f          }t          j        ||d         g|d         g|d         gf          }|                    ||           |j        }|j        }t          j	        |j
        d                   }	d|	d<   d|	d<   |                    |||	           t          |j        |z  ||z             t          |j        |z  ||z              | |          }
t                      }|                    |
||	           t          |j        |z  ||z             d S )	Nr   )rI   rA   r   r   r   r   r,   r-   )r&   r   r.   r/   r0   maxr   meanrG   onesr   r   vstackconcatenate)rN   r!   r"   r2   
huber_coefhuber_interceptscaleX_newy_newrI   X_csrhuber_sparses               r%   test_huber_sample_weightsr]   K   sE    )**DAqE	IIaOOOJ&O u{++,,bgbfU=M6N6N.O.OPPE	IIa"'!'!*"5"5I666ekE1:3EFFFe.6%8OPPP(1DDDDAqIq")QqT1Q41$677899ENA!v!v!v677E	IIeUJ&OGAGAJ''MM!M!	IIa-I000ekE1:3EFFFe.6%8OPPP M!E!##LUA];;;l058*u:LMMMMMr'   c                 >   t                      \  }}t          d          }|                    ||            | |          }t          d          }|                    ||           t          |j        |j                   t          |j        |j                   d S )Nr   r+   )r&   r   r.   r   r/   r   	outliers_)rN   r!   r"   r2   r[   r\   s         r%   test_huber_sparsera   t   s    (**DAq%%%E	IIaOOOM!E!,,,LUAl0%+>>>u(>?????r'   c                  v   t                      \  } }t          dd          }|                    | |           |j        }t	          j        |          rJ |                    | d|z             |j        }t          ||           |                    d| z  d|z             |j        }t          ||           d S )NFr)   )fit_interceptr+   r   )r&   r   r.   r`   r   allr   )r!   r"   r2   n_outliers_mask_1n_outliers_mask_2n_outliers_mask_3s         r%   test_huber_scaling_invariantrh      s    (**DAqc:::E	IIaOOOv'(((((	IIaq(*;<<<	IIcAgsQw(*;<<<<<r'   c            
         t          dd          \  } }t          ddd          }|                    | |           | |j        z  }||j        z  }|                    ||           t	          |j        dd	           t          dd
dddddd           }|                    ||           t          |j        |j        d           d S )N
   r-   rP   Fr)   g?)rc   r+   r*         ?r,   r2   Tr   '  )r+   lossshuffler   r5   rc   r*   tolr   )r&   r   r.   scale_r   r   r   r/   )r!   r"   r2   X_scaley_scalesgdregs         r%   test_huber_and_sgd_same_resultsrt      s     )2!DDDDAq c4HHHE	IIaOOO%,G%,G	IIgwc1---	 	 	F JJw   ek6<;;;;;r'   c                     t                      \  } }t          dddd          }|                    | |           |j                                        }|                    | |           t          |j        |d           |j        dk    sJ d S )Nrk   rl   Tr   )r+   r5   
warm_startro   r   r   )r&   r   r.   r/   copyr   r6   )r!   r"   
huber_warmhuber_warm_coefs       r%   test_huber_warm_startrz      s    (**DAqcEdPTUUUJNN1a &++--ONN1a j.CCC""""""r'   c                     t                      \  } }t          d          }|                    | |           t          j        | |j                  |j        z   |z
  }t          j        |          |j        |j	        z  k     }|
                    | |         ||                   }|
                    | |          ||                    }t          d          }|                    | |           |
                    | |         ||                   }|
                    | |          ||                    }	||k    sJ |	|k    sJ d S )NrC   r_   )r&   r   r.   r   dotr/   r0   rG   r*   rp   scorer   )
r!   r"   r2   linear_lossmaskhuber_scorehuber_outlier_scoreridgeridge_scoreridge_outlier_scores
             r%   test_huber_better_r2_scorer      s3   (**DAq&&&E	IIaOOO&EK((5+;;a?K6+!==D++agqw//K++ah4%99
 E	IIaOOO++agqw//K++ah4%99$$$$ !4444444r'   c                      t          dddd          \  } }| dk    }t                                          ||           d S )N   r-   g      @r   )r   r   r   r   )r   r   r.   )r!   r"   X_bools      r%   test_huber_boolr      sH    SQcPQRRRDAqUF#####r'   )r   r   )!numpyr   pytestscipyr   sklearn.datasetsr   sklearn.linear_modelr   r   r   r   sklearn.linear_model._huberr
   sklearn.utils._testingr   r   r   sklearn.utils.fixesr   r&   r3   r7   rM   markparametrizer]   ra   rh   rt   rz   r   r    r'   r%   <module>r      s              , , , , , , V V V V V V V V V V V V @ @ @ @ @ @         
 / . . . . .   < < <+ + +4 4 40 .99%N %N :9%NP .99	@ 	@ :9	@= = ="< < <8# # #5 5 5.$ $ $ $ $r'   