`L i;WddlZddlZddlZddlZddlZddlmZddlZddl m Z ddl m Z m Z mZmZddlmZddlmZmZmZddlmZdZd Zd Zd Zd Zd ZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/d Z0d!Z1d"Z2d#Z3ejhjkd$ejlejnejpejrgd%Z:ejhjkd&ejlejnejpejrgd'Z;d(Zd+Z?ejhjkd,d-d.gd/Z@d0ZAd1ZBd2ZCejhjkd3d4d5gd6ZDd7ZEy)8N)expit)make_regression)IsotonicRegression _make_uniquecheck_increasingisotonic_regression)shuffle)assert_allcloseassert_array_almost_equalassert_array_equal) check_arrayct}gd}gd}gd}t|||d\}}}|j|||}|j|||j |}t ||y)Nr)3rrrr) random_state sample_weight)rr fit_transformfit transformr ) irxyrx_sy_ssample_weight_s y_transformedy_transformed_ss a/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sklearn/tests/test_isotonic.pytest_permutation_invariancer*ss  BA A)M '1m! LCo$$Q$GMffS#_fEOOPQRO}o6cgd}gd}tj5tjdtt ||}dddsJy#1swYxYw)Nrrr)rg?g?errorwarningscatch_warnings simplefilter UserWarningrr"r# is_increasings r)-test_check_increasing_small_number_of_samplesr6(sSAA  "/g{3(A. / = // 'AAcgd}gd}tj5tjdtt ||}dddsJy#1swYxYw)Nrrrrrr)r?g)\(@{G!@r;2r.r/r4s r)test_check_increasing_upr=3sUA&A  "/g{3(A. / = //r7cgd}gd}tj5tjdtt ||}dddsJy#1swYxYw)Nr9r.r/r4s r) test_check_increasing_up_extremer??sUAA  "/g{3(A. / = //r7cgd}gd}tj5tjdtt ||}dddrJy#1swYxYw)Nr9)rgg)\({G!rAr.r/r4s r)test_check_increasing_downrCKsXA+A  "/g{3(A. / } //r7cgd}gd}tj5tjdtt ||}dddrJy#1swYxYw)Nr9)rr.r/r4s r)"test_check_increasing_down_extremerJWsXAA  "/g{3(A. / } //r7cgd}gd}d}tjt|5t||}dddrJy#1swYxYw)Nr9)rrErrGrrIintervalmatch)pytestwarnsr3r)r"r#msgr5s r)test_check_ci_warnrRcsOAA C k -/(A. / }//s AA c 2tjgd}tjgd}t|t|tjgd}tjgd}t|t|tjt |}t dd}|j||t|j||j||j||t|j||j|tjjt |}t dd}t|j|||||j|||t|j|||j||t }t|jtjt ||tj|y)Nrrr r )rrrrVrVrVrW)rWrr)rrr?y_miny_max)nparrayr rarangelenrrr rpredictrandom permutationonesmean)r#y_r"r!perms r)test_isotonic_regressionrhos~ '(A ( )Br.q12 A ) Br.q12 #a&A #S 1BFF1aLrvva|--a0"2B2B1a2HIr||A 1 6 99 Q (D #S 1Br''$492;K;KAq;QRV;WXr||AdG,bll1od.CD  Br''A;RWWQZHr+cgd}gd}gd}t}|j||t|j||j||j ||t||j ||y)N)rrrrrrrrrrrr)r:r:rrrrrrr r rr"r#y_truer!s r)!test_isotonic_regression_ties_minrnkAA #F  BFF1aLrvva|--a0"2B2B1a2HIvr//156r+cgd}gd}gd}t}|j||t|j||j||j ||t||j ||y)N)rrrrrrrj)rrrr@rqrkrls r)!test_isotonic_regression_ties_maxrrror+cgd}gd}gd}t}|j||t|j||dt|j |||dy)aw Test isotonic regression fit, transform and fit_transform against the "secondary" ties method and "pituitary" data from R "isotone" package, as detailed in: J. d. Leeuw, K. Hornik, P. Mair, Isotone Optimization in R: Pool-Adjacent-Violators Algorithm (PAVA) and Active Set Methods Set values based on pituitary example and the following R command detailed in the paper above: > library("isotone") > data("pituitary") > res1 <- gpava(pituitary$age, pituitary$size, ties="secondary") > res1$x `isotone` version: 1.0-2, 2014-09-07 R version: R version 3.1.1 (2014-07-10) ) rVrVrVrWrWrW rtrtru) 7@rrvg5@rwry) bh86@r|r|r|r|r|r|r|r|@8@r}rN)rrr r rrls r)(test_isotonic_regression_ties_secondary_r~sY$ 2A:A F  BFF1aLbll1ovq9b..q!4fa@r+c4tjgd}tjgd}tjgd}t}|j||t |j ||t |j |||y)ax Non-regression test to handle issue 9432: https://github.com/scikit-learn/scikit-learn/issues/9432 Compare against output in R: > library("isotone") > x <- c(0, 1, 1, 2, 3, 4) > y <- c(0, 0, 1, 0, 0, 1) > res1 <- gpava(x, y, ties="secondary") > res1$x `isotone` version: 1.1-0, 2015-07-24 R version: R version 3.3.2 (2016-10-31) )rrrrrr)rrrrrr)rX?rrrrYN)r]r^rrr r rrls r)>test_isotonic_regression_with_ties_in_differently_sized_groupsrso #$A #$A XX8 9F  BFF1aLbll1ov6b..q!4f=r+ctjgd}tjgd}t|d}t||t dj tj t||}t||ttj|ddj|dd|ddz dk\y)NrWrUrWrrffffff@r)rW#@rr333333@rrF increasingrErr) r]r^rr rrr_r`r rdshape)r#y_resulty_isorfs r)!test_isotonic_regression_reversedrs *+Axx89H e 4EE8$ u - ; ;BIIc!fE  EE"ct}tjjd}d}tj|}|j dd|fdtj dtj|zzz}tj|}|j|||}|j||}t||y) NrdrBr<sizegI@rr) rr]rbrr_randintlogrdrr )r!rnr"r#weights y_set_valuey_default_values r)3test_isotonic_sample_weight_parameter_default_valuer(s  B ))   #C A ! A C1$ '$BIIaL8H1I*IIAggajG""1aw"?K&&q!,O{O4r+ctdd}d}tj|}tj|}gd}tj|j ||}t ||y)NrrrZr)rrrrrr)rr]r_roundrr )r!rr"r#y_testrs r) test_isotonic_min_max_boundariesr8sW !1 -B A ! A ! A Fxx((A./Hx(r+cxt}gd}gd}gd}gd}|j|||}t||y)Nrr)rfffff+@rrrrrr)rrr )r!r"r#r expected_y received_ys r)test_isotonic_sample_weightrCs?  BA A)M;J!!!Qm!DJz:.r+cftjgd}tjt|}t dd}|j ||d}t jt|5|jt|dz t|dzgdddy#1swYyxYw)NrTrraiser out_of_boundsz)in x_new is below the interpolation rangerMrW) r]r^r_r`rrrOrrraminmax)r#r"r!rQs r)"test_isotonic_regression_oob_raiserNs '(A #a&A vW EBFF1aL 6C z -/ CFRKQ"-.///s 2,B''B0ctjgd}tjt|}t dd}|j |||j t|dz t|dzg}|j |}t|t|k(sJt|t|k(sJy)NrTrcliprrW) r]r^r_r`rrrarr)r#r"r!y1y2s r)!test_isotonic_regression_oob_clipr]s '(A #a&A vV DBFF1aL SVb[#a&2+. /B AB r7c"g   r7c"g  r+cHtjgd}tjt|}t dd}|j |||j t|dz t|dzg}ttj|dk(sJy)NrTrnanrrWr) r]r^r_r`rrrarrsumisnan)r#r"r!rs r) test_isotonic_regression_oob_nanrms~ '(A #a&A vU CBFF1aL SVb[#a&2+. /B rxx|  !! !r+ctjgd}tjt|}t dd}|j ||t j|t j}t j|}tjj|j||j|y)NrTrrr) r]r^r_r`rrpickledumpsHIGHEST_PROTOCOLloadstestingr ra)r#r"r!ir_serir2s r)test_isotonic_regression_pickler{s '(A #a&A vV DBFF1aL \\"f55 6F ,,v CJJ!!"**Q-Q@r+cgd}gd}tdd}|j||tjtj|j |}|sJy)N)rrrTrr)rrr]risfinitera)r"r#r!all_predictions_finites r)!test_isotonic_duplicate_min_entryrsNAA t6 BBFF1aLVVBKK 1 $>? !! !r+ctjgd}t|dd}tj|dk\sJtj|dksJt|ddd}tj|dk\sJtj|dksJt|dd}tj|dk\sJy) N)gh|?5?gJ +?gMgS?g9vgI +ƿg/$gl?gtV?g"~?gzG?gy&1?g#~jg"~j?g;On?T㥛 ؿgy&1rgZd;g ףp= ?rXrrZrF)r[r\r)r[r)r]r^rr)r"r#s r)test_isotonic_ymin_ymaxrs   A0 AS4A 66!q&>> 66!s(   ASFA 66!q&>> 66!s(   ASU;A 66!q&>>r+c0tjjd}t}d}tjdd|}||j |z}|j |}d|dd|j ||| |j ||| y) Nrr<rGrrrrrVr)r]rbrrlinspaceuniformr)r regression n_samplesr"r#rs r)test_isotonic_zero_weight_looprs ))   #C$%JI B9%A CKKYK ''A  #A AaFNN1aqN)NN1aqN)r+ctjjd}d}d|j|zdz }tj|j|t |j dj d}|j|}d||j|dk<tdd d }tdd d }|j|||d \}}|j|||j|||d|j|zdz } |j| } |j| } t| | y)N{ig4@rWint64float64rrrr)r[r\rF)rtrim_duplicatesr) r]rbrrandlessrastyper_build_y_build_frrar ) rrX_trainy_trainr slow_model fast_model X_train_fit y_train_fitX_test y_pred_slow y_pred_fasts r)test_fast_predictrs< ))   $CISXXi((2-G #U7^4;;GDKKIV hhy!G)*GCHHY # %&#!1FKJ#!1FKJ *22 3 K [1NN7G7N; CHHY' '" ,F$$V,K$$V,K{K0r+cBt}tj|y)N)rcopy)r!s r)test_isotonic_copy_before_fitrs  BIIbMr+dtypecXgd}tjgdtj}t}d|j tj |fD]}tj||}t |tjtj gdj}t||}|j|k(sJtjt|j |}|j||||j|}|j|k(rJy)Nrrrrr)?rrrrrF)r ensure_2dr) r]r^rrrfloat32r rrr_r`rra) rr#rregry_npexpected_dtyperesXs r)test_isotonic_dtypersAhh0 CG  Crzz :GD + xx'$ RZZ0E % "$mDyyN*** IIc!f  $ $U + 4}5kk!nyyN*** +r+y_dtypect}tjgd|}tjt |tj }|j |||j|j|jk(sJy)Nrr) rr]r^r_r`rrrar)rrr#rs r)test_isotonic_mismatched_dtypersa  C 0A #a& +AGGAqM ;;q>  177 ** *r+c gd}tjtjfD]]}tj||}|j }tj |}t |||\}}}t|gd_y)N)rrrrrr)rrr)r]rrr^r ones_likerr )x_listrr"r#rs r)test_make_unique_dtyper si F**bjj)) HHV5 ) FFH LLOq!Q'1a1i( )r+c>tjgd|}|j}tj|}t |||\}}}|tj k(rtjgd}ntjddg}t ||y)N)rgؗҜD!%!3!3T5G5G,L   !3!3 33 3   a 1771: -- - 77< # ' ' )) )     (( (     (( ( rww|$q( )) )277<(A-...277<(A-...r+ctjd}|jdd}tjd}tj ||}tj ||}|j |j k(sJ|j |j k(sJ|j|jk(sJ|j|jk(sJt|j|jt|j|j|j|}|j|}t||y)NrWrEr)r]r_reshaperrX_max_X_min_r\r[r rrrar )rX_2dr#iso_reg iso_reg_2dy_pred1y_pred2s r)test_input_shape_validationr-is  " A 99R D " A "&&q!,G#%))$2J >>Z.. .. . >>Z.. .. . ==J,, ,, , ==J,, ,, ,w,,j.F.FGw,,j.F.FGooa G  &GGW%r+cRtjd}tj||f}tjd}d}tjt |5t j||dddt j||}tjt |5|j|dddtjt |5|j|dddy#1swYxYw#1swYKxYw#1swYyxYw)NrWz/should be a 1d array or 2d array with 1 featurerM) r]r_c_rOrrrrrar )rr(r#rQr)s r))test_isotonic_2darray_more_than_1_featurer0s " A 55A;D " A ;C z -*  q)*!"&&q!,G z - z - $  **  s$D5D*DDDD&ctddd\}}tj|}d|d<|j}t ||t ||t j|||t ||y)zCheck that calling fitting function of isotonic regression will not overwrite `sample_weight`. Non-regression test for: https://github.com/scikit-learn/scikit-learn/issues/20508 rWrrr n_featuresrrrN)rr]r rrr rr)rr#sample_weight_originalsample_weight_fits r)6test_isotonic_regression_sample_weight_not_overwrittenr6sz RAB GDAq\\!_ "1.335):;%'=>Q1BC%'=>r+r1d2dcVtjd}|dk(r|jdd}tjd}tj ||}|j }t |tjsJ|jtk(sJtdg|y)z7Check `get_feature_names_out` for `IsotonicRegression`.rWr8rErisotonicregression0N) r]r_r%rrget_feature_names_out isinstancendarrayrobjectr )rrr#isonamess r)test_get_feature_names_outrAs " A } IIb!  " A   " "1a (C  % % 'E eRZZ (( ( ;;&  -.6r+ctjd}tddd\}}t}t j d5|j |||j|}|j|}dddt|jsJttjsJy#1swY>xYw)aCheck that `predict` does return the expected output type. We need to check that `transform` will output a DataFrame and a NumPy array when we set `transform_output` to `pandas`. Non-regression test for: https://github.com/scikit-learn/scikit-learn/issues/25499 pandasrWrrr2)transform_outputN) rO importorskiprrsklearnconfig_contextrr rar< DataFramer]r=)pdrr# regressorX_transrs r)'test_isotonic_regression_output_predictrLs   X &B RAB GDAq"$I    :& a%%a(""1%& gr|| ,, , fbjj )) ) &&s 5B99C)Frrr0numpyr]rO scipy.specialrrFsklearn.datasetsrsklearn.isotonicrrrr sklearn.utilsr sklearn.utils._testingr r r sklearn.utils.validationr r*r6r=r?rCrJrRrhrnrrr~rrrrrrrrrrrrrrrrrmark parametrizeint32rrrrrr rrrr#r-r0r6rArLr+r)rXs  , " 1 7     I4 7 7&AR>0 J$$'( 5 )/ /  " A")X*,"1J 288RXXrzz2::"NO+P+(RXXrxxRZZ$PQ+R+)2::rzz":; !< ! F'e}5/6/4&, $?$4,/ 70 7*r+