§
    rŠtj¨¹  ã                   óÆ  — d dl Z d dlZd dlZd dl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 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%m&Z&m'Z' d dl(m)Z)m*Z* ej+         ,                    deef¦  «        d„ ¦   «         Z-ej+         ,                    dddggidfdddgddggidfddgd ggidfg¦  «        d„ ¦   «         Z.ej+         ,                    dddg¦  «        d„ ¦   «         Z/d„ Z0ej+         ,                    dg d¢¦  «        ej+         ,                    d dd!g¦  «        d"„ ¦   «         ¦   «         Z1ej+         ,                    d  e2dd#¦  «        ¦  «        ej+         ,                    d$ e2d!d#¦  «        ¦  «        ej+         ,                    dd%d&g¦  «        ej+         ,                    dd'dg¦  «        d(„ ¦   «         ¦   «         ¦   «         ¦   «         Z3ej+         ,                    d)d*gd+d,g¦  «        d-„ ¦   «         Z4ej+         ,                    g d.¢d%d!d ej5        d dgd!d/gd0d1gg¦  «        fd%d! ej5        g d2¢¦  «         ej5        ddgd3d/gd0d1gg¦  «        fd%d3d ej5        d dgdd0gd3d4gd0d1gg¦  «        fd&d!d ej5        d dgd!d!gd0d1gg¦  «        fd&d! ej5        g d2¢¦  «         ej5        ddgd#d/gd0d1gg¦  «        fg¦  «        d5„ ¦   «         Z6ej+         ,                    d)d*gd+d,g¦  «        d6„ ¦   «         Z7d7„ Z8d8„ Z9ej+         ,                    d d!d#g¦  «        d9„ ¦   «         Z:ej+         ,                    d)d*gd+d,g¦  «        ej+         ,                    d g d:¢¦  «        d;„ ¦   «         ¦   «         Z;d<„ Z<ej+         ,                    d  e2dd!¦  «        ¦  «        ej+         ,                    dd%d&g¦  «        ej+         ,                    dg d=¢¦  «        ej+         ,                    d>d?d@g¦  «        dA„ ¦   «         ¦   «         ¦   «         ¦   «         Z=ej+         ,                    d$d#d4g¦  «        ej+         ,                    d>d@d?g¦  «        ej+         ,                    d d!d3g¦  «        ej+         ,                    dg d=¢¦  «        ej+         ,                    dBd?d@g¦  «        dC„ ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         Z>ej+         ,                    dg d=¢¦  «        ej+         ,                    dBd?d@g¦  «        dD„ ¦   «         ¦   «         Z?ej+         ,                    dg d=¢¦  «        ej+         ,                    dBd?d@g¦  «        dE„ ¦   «         ¦   «         Z@ej+         ,                    dd dFidGfd dHidGfd dIidGfd dJidKfg¦  «        dL„ ¦   «         ZA ejB        ¦   «         dM„ ¦   «         ZCej+         ,                    dNd!d@d? eDdd¦  «        fd!d?d? eDdd¦  «        fd!d@d@d dgfd!d?d@dgfdOd@d?g dP¢fdOd?d?dd!gfdOd@d@d gfdOd?d@g fg¦  «        ej+         ,                    dQdge*z   e)z   ¦  «        dR„ ¦   «         ¦   «         ZE ejB        ¦   «         dS„ ¦   «         ZFej+         ,                    dNdd@d? eDd d0¦  «        fdd?d? eDdd0¦  «        fdd@d@g dT¢fdd?d@g dU¢fdVd@d?g dW¢fdVd?d?g dX¢fdVd@d@d d3gfdVd?d@d3gfd!d@d? eDdd¦  «        fd!d?d? eDdd¦  «        fd!d@d@g dT¢fd!d?d@g dU¢fdOd@d?g dY¢fdOd?d? eDd!d¦  «        fdOd@d@d d3gfdOd?d@d3gfdZd@d?g d[¢fdZd?d?g d\¢fdZd@d@d gfdZd?d@g fg¦  «        ej+         ,                    dQdge*z   e)z   ¦  «        d]„ ¦   «         ¦   «         ZGd^„ ZHej+         ,                    g d_¢dd@d?eIfdd@d?eIfdd@d?ejJ        fdd@d?ejK        fd!d?d?ejK        fd!d?d@ejK        fd3d?d?ejK        fd3d?d@ejK        fg¦  «        ej+         ,                    d`e)¦  «        da„ ¦   «         ¦   «         ZLej+         ,                    g d_¢dd@d?eIfdd@d?eIfdd@d?ejJ        fdd@d?ejK        fd!d?d?ejK        fd!d?d@ejK        fg¦  «        ej+         ,                    dbe*¦  «        dc„ ¦   «         ¦   «         ZMej+         ,                    ddg de¢¦  «        ej+         ,                    dfg dg¢¦  «        ej+         ,                    dhd@d?g¦  «        ej+         ,                    d>d@d?g¦  «        ej+         ,                    dbe*¦  «        di„ ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ZNej+         ,                    g d_¢dd@d?ejJ        fdd@d?ejK        fd!d?d?ejK        fd!d?d@ejK        fg¦  «        ej+         ,                    dbe*¦  «        dj„ ¦   «         ¦   «         ZOej+         ,                    g dk¢g dl¢¦  «        ej+         ,                    dbe*¦  «        dm„ ¦   «         ¦   «         ZPej+         ,                    d>dhgg dn¢¦  «        ej+         ,                    dbe*¦  «        do„ ¦   «         ¦   «         ZQej+         ,                    g dp¢g dq¢¦  «        ej+         ,                    dbe*¦  «        dr„ ¦   «         ¦   «         ZRej+         ,                    dhd@d?g¦  «        ej+         ,                    d>d@d?g¦  «        ej+         ,                    dbe*¦  «        ds„ ¦   «         ¦   «         ¦   «         ZSej+         ,                    dtdudvd eI ejT         ejU        ejV        ¦  «        jW        ¦  «        dz   ¦  «        fdwd eI ejT         ejU        ejV        ¦  «        jW        ¦  «        ¦  «        fg¦  «        ej+         ,                    dhd@d?g¦  «        ej+         ,                    d>d@d?g¦  «        ej+         ,                    dbe*¦  «        dx„ ¦   «         ¦   «         ¦   «         ¦   «         ZXej+         ,                    dhd@d?g¦  «        ej+         ,                    d>d@d?g¦  «        ej+         ,                    dbe*¦  «        dy„ ¦   «         ¦   «         ¦   «         ZYej+         ,                    dze*e)z   ¦  «        d{„ ¦   «         ZZd|„ Z[ej+         \                    ej]        d}k    d~d@¬¦  «        ej+         ,                    dbe*¦  «        d€„ ¦   «         ¦   «         Z^ej+         ,                    d� e¦   «         ¦  «        ej+         ,                    dhd@d?g¦  «        ej+         ,                    d>d@d?g¦  «        ej+         ,                    d g d‚¢¦  «        dƒ„ ¦   «         ¦   «         ¦   «         ¦   «         Z_ej+         ,                    d� e¦   «         ¦  «        d„„ ¦   «         Z`dS )…é    N)Úassert_allcloseÚassert_array_equal)Úsparse)ÚBSpline)Úrandom)Úconfig_context)ÚLinearRegression)ÚPipeline)ÚKBinsDiscretizerÚPolynomialFeaturesÚSplineTransformer)Ú_get_sizeof_LARGEST_INT_t)Ú_is_numpy_namespaceÚget_namespaceÚmove_toÚ)yield_namespace_device_dtype_combinations©Údevice)Ú	_get_mask)Ú_array_api_for_testsÚassert_allclose_dense_sparseÚassert_array_almost_equal)ÚCSC_CONTAINERSÚCSR_CONTAINERSÚestc                 óf  — t          j        d¦  «                             dd¦  «        }d„ } | | ¦   «                              |¦  «        ¦  «        sJ ‚ | | d¬¦  «                             |¦  «        ¦  «        sJ ‚t          j         | d¬¦  «                             |¦  «        ¦  «        sJ ‚dS )	z+Test that output array has the given order.é
   é   é   c                 ó4   — t          j        | j        ¦  «        S )N)ÚnpÚ	isfortranÚT)Úas    úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/preprocessing/tests/test_polynomial.pyÚis_c_contiguousz?test_polynomial_and_spline_array_order.<locals>.is_c_contiguous0   s   € ÝŒ|˜AœCÑ Ô Ð ó    ÚC©ÚorderÚFN)r!   ÚarangeÚreshapeÚfit_transformr"   )r   ÚXr&   s      r%   Ú&test_polynomial_and_spline_array_orderr0   +   s¾   € õ 	Œ	�"‰Œ×Ò˜a Ñ#Ô#€Að!ð !ð !ð ˆ?˜3˜3™5œ5×.Ò.¨qÑ1Ô1Ñ2Ô2Ð2Ð2Ð2Øˆ?˜3˜3 S˜>™>œ>×7Ò7¸Ñ:Ô:Ñ;Ô;Ð;Ð;Ð;ÝŒ<˜˜ #˜™œ×4Ò4°QÑ7Ô7Ñ8Ô8Ð8Ð8Ð8Ð8Ð8r'   zparams, err_msgÚknotsé   z0Number of knots, knots.shape\[0\], must be >= 2.r   z*knots.shape\[1\] == n_features is violatedz(knots must be sorted without duplicates.c                 ó¸   — dgdgg}t          j        t          |¬¦  «        5  t          di | ¤Ž                     |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zATest that we raise errors for invalid input in SplineTransformer.r2   r   ©ÚmatchN© )ÚpytestÚraisesÚ
ValueErrorr   Úfit©ÚparamsÚerr_msgr/   s      r%   Ú(test_spline_transformer_input_validationr>   8   s¬   € ð ˆˆqˆcˆ
€Aå	Œ•z¨Ð	1Ñ	1Ô	1ð +ð +ÝÐ#Ð#˜FÐ#Ð#×'Ò'¨Ñ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð +ð +ó   ¢ AÁAÁAÚextrapolationÚcontinueÚperiodicc                 óÂ   — t          j        d¦  «                             dd¦  «        }ddgddgddgddgddgg}t          d	|| ¬
¦  «                             |¦  «        }dS )zATest that SplineTransformer accepts integer value knot positions.é   r   r   r   r2   r   é   é   é   )Údegreer1   r@   N)r!   r,   r-   r   r.   )r@   r/   r1   Ú_s       r%   Ú%test_spline_transformer_integer_knotsrJ   H   st   € õ 	Œ	�"‰Œ×Ò˜b !Ñ$Ô$€AØ�ˆV�a˜�V˜a ˜V b¨" X°°B¨xÐ8€EÝØ˜¨]ð	ñ 	ô 	ç‚m�AÑÔð €A€Ar'   c                  óˆ  — t          j        d¦  «                             dd¦  «        } t          ddd¬¦  «                             | ¦  «        }|                     ¦   «         }t          |g d¢¦  «         t          ddd¬¦  «                             | ¦  «        }|                     d	d
g¦  «        }t          |g d¢¦  «         dS )z<Test that SplineTransformer generates correct feature names.rD   r   r   rG   T)Ún_knotsrH   Úinclude_bias)
Úx0_sp_0Úx0_sp_1Úx0_sp_2Úx0_sp_3Úx0_sp_4Úx1_sp_0Úx1_sp_1Úx1_sp_2Úx1_sp_3Úx1_sp_4Fr$   Úb)Úa_sp_0Úa_sp_1Úa_sp_2Úa_sp_3Úb_sp_0Úb_sp_1Úb_sp_2Úb_sp_3N)r!   r,   r-   r   r:   Úget_feature_names_outr   )r/   ÚspltÚfeature_namess      r%   Ú%test_spline_transformer_feature_namesrd   R   sß   € å
Œ	�"‰Œ×Ò˜b !Ñ$Ô$€AÝ Q¨q¸tÐDÑDÔD×HÒHÈÑKÔK€DØ×.Ò.Ñ0Ô0€MÝØð	
ð 	
ð 	
ñô ð õ   Q¨q¸uÐEÑEÔE×IÒIÈ!ÑLÔL€DØ×.Ò.°°S¨zÑ:Ô:€MÝØð		
ð 		
ð 		
ñô ð ð ð r'   )ÚconstantÚlinearrA   rB   rH   rG   c                 ój  — t          j        d¦  «                             dd¦  «        }t          || ¬¦  «                             |¦  «        }|                     ddg¦  «        }t          |¦  «        |j        k    sJ ‚|                     |¦  «        }|j	        d         t          |¦  «        k    sJ ‚dS )	zsTest feature names are correct for different extrapolations and degree.

    Non-regression test for gh-25292.
    rD   r   r   )rH   r@   r$   rX   r2   N)
r!   r,   r-   r   r:   ra   ÚlenÚn_features_out_Ú	transformÚshape)r@   rH   r/   rb   rc   ÚX_transs         r%   Ú7test_split_transform_feature_names_extrapolation_degreerm   x   s«   € õ 	Œ	�"‰Œ×Ò˜b !Ñ$Ô$€AÝ F¸-ÐHÑHÔH×LÒLÈQÑOÔO€DØ×.Ò.°°S¨zÑ:Ô:€MÝˆ}ÑÔ Ô!5Ò5Ð5Ð5Ð5à�nŠn˜QÑÔ€GØŒ=˜Ô�s =Ñ1Ô1Ò1Ð1Ð1Ð1Ð1Ð1r'   r   rL   ÚuniformÚquantilere   c                 ó”  — t          j        ddd¦  «        dd…df         }t           j        dgg|ddd…dd…f         dggf         }|ddd…dd…f         }|dk    r|| z   }t          || |d|¬¦  «        }|                     |¦  «         ||fD ]9}t          t          j        |                     |¦  «        d¬	¦  «        d¦  «         Œ:dS )
z–Test that B-splines are indeed a decomposition of unity.

    Splines basis functions must sum up to 1 per row, if we stay in between boundaries.
    r   r2   éd   Nr   rB   T)rL   rH   r1   rM   r@   ©Úaxis)r!   ÚlinspaceÚr_r   r:   r   Úsumrj   )rH   rL   r1   r@   r/   ÚX_trainÚX_testrb   s           r%   Ú+test_spline_transformer_unity_decompositionry   ‹   s   € õ 	Œ�A�q˜#ÑÔ˜q˜q˜q $˜wÔ'€AåŒe�a�S�E˜1˜S˜S˜q˜S ! ! !˜Vœ9¨ s eÐ+Ô,€GØˆqˆt�!ˆt�Q�Q�QˆwŒZ€Fà˜
Ò"Ð"Ø˜FÑ"ˆåØØØØØ#ðñ ô €Dð 	‡H‚HˆWÑÔÐØ�vÐð >ð >ˆÝ�œ˜tŸ~š~¨aÑ0Ô0°qÐ9Ñ9Ô9¸1Ñ=Ô=Ð=Ð=ð>ð >r'   ÚbiasÚ	intercept©TF©FTc           	      óh  — t          j        ddd¦  «        dd…df         }t          j        |dd…df         ¦  «        dz   }t          dt	          dd| d	¬
¦  «        fdt          |¬¦  «        fg¬¦  «        }|                     ||¦  «         t          |                     |¦  «        |d¬¦  «         dS )z7Test that B-splines fit a sinusodial curve pretty well.r   r   rq   Nr   Úsplineé   rG   re   ©rL   rH   rM   r@   Úols©Úfit_intercept©Ústepsçü©ñÒMbP?©Úrtol)	r!   rt   Úsinr
   r   r	   r:   r   Úpredict)rz   r{   r/   ÚyÚpipes        r%   Ú)test_spline_transformer_linear_regressionrŽ   ¨   sÑ   € õ 	Œ�A�r˜3ÑÔ    4 Ô(€AÝ
Œˆq����A�Œw‰Œ˜!Ñ€AÝð Ý!ØØØ!%Ø",ð	ñ ô ðð Õ$°9Ð=Ñ=Ô=Ð>ð
ðñ ô €Dð 	‡H‚HˆQ��N„N€NÝ�D—L’L ‘O”O Q¨TÐ2Ñ2Ô2Ð2Ð2Ð2r'   )r1   rL   Úsample_weightÚexpected_knotsé   é   é   )r   r   r2   r2   r   rG   r2   é   r   c           
      ó¨   — t          j        ddgddgddgddgddgddgddgg¦  «        }t          j        || ||¬	¦  «        }t	          ||¦  «         d
S )zJCheck the behaviour to find knot positions with and without sample_weight.r   r   rG   r”   r’   r   r‘   r“   )r/   r1   rL   r�   N)r!   Úarrayr   Ú_get_base_knot_positionsr   )r1   rL   r�   r�   r/   Ú
base_knotss         r%   Ú/test_spline_transformer_get_base_knot_positionsr™   ¿   sv   € õ0 	Œ�1�a�&˜1˜a˜& 1 a &¨1¨a¨&°1°a°&¸1¸a¸&À1ÀbÀ'ÐJÑKÔK€AÝ"Ô;Ø
�5 '¸ðñ ô €Jõ �J Ñ/Ô/Ð/Ð/Ð/r'   c           	      ó  — d„ }t          j        ddd¦  «        dd…df         }t          dt          dd| d	¬
¦  «        fdt	          |¬¦  «        fg¬¦  «        }|                     | ||dd…df         ¦  «        ¦  «         t          j        ddd¦  «        dd…df         }|                     |¦  «        }t          | ||dd…df         ¦  «        dd¬¦  «         t          |dd…         |dd…         d¬¦  «         dS )z5Test that B-splines fit a periodic curve pretty well.c                 óš   — t          j        dt           j        z  | z  ¦  «        t          j        dt           j        z  | z  ¦  «        z
  dz   S )Nr   r‘   rG   )r!   rŠ   Úpi)Úxs    r%   Úfz=test_spline_transformer_periodic_linear_regression.<locals>.fã   s:   € ÝŒv�a�"œ%‘i !‘mÑ$Ô$¥r¤v¨aµ"´%©i¸!©mÑ'<Ô'<Ñ<¸qÑ@Ð@r'   r   r2   ée   Nr   rD   rG   rB   r�   r‚   rƒ   r…   éÿÿÿÿr   i-  g{®Gáz„?)Úatolr‰   rq   éÈ   r‡   rˆ   )r!   rt   r
   r   r	   r:   r‹   r   )rz   r{   rž   r/   r�   ÚX_Úpredictionss          r%   Ú2test_spline_transformer_periodic_linear_regressionr¥   Þ   sB  € ð
Að Að Aõ 	Œ�A�q˜#ÑÔ˜q˜q˜q $˜wÔ'€AÝð Ý!ØØØ!%Ø",ð	ñ ô ðð Õ$°9Ð=Ñ=Ô=Ð>ð
ðñ ô €Dð 	‡H‚HˆQ���!�A�A�A�q�D”'‘
”
ÑÔÐõ 
Œ�R˜˜CÑ	 Ô	     D Ô	)€BØ—,’,˜rÑ"Ô"€KÝ�K   2 a a a¨ d¤8¡¤°4¸dÐCÑCÔCÐCÝ�K  # Ô&¨°C¸°GÔ(<À4ÐHÑHÔHÐHÐHÐHr'   c                  óx  — t          j        ddd¦  «        dd…df         } d}t          |ddgdgd	gg¬
¦  «        }|                     | ¦  «        }t          j        d	dgdd	gd	dgdd	gg¦  «        }t          t          j        dd¦  «        ||d¦  «        } || dd…df         ¦  «        }t          ||¦  «         dS )z@Test that the backport of extrapolate="periodic" works correctlyéþÿÿÿg      @r   Nr   rB   g      ð¿ç        ç      ð?©rH   r@   r1   éýÿÿÿr”   r   )r!   rt   r   r.   r–   r   r,   r   )r/   rH   ÚtransformerÚXtÚcoefÚsplÚXspls          r%   Ú0test_spline_transformer_periodic_spline_backportr±   þ   sÞ   € å
Œ�B˜˜RÑ Ô     D Ô)€AØ€Fõ $Ø Z¸¸ÀÀÈÀuÐ7Mðñ ô €Kð 
×	"Ò	" 1Ñ	%Ô	%€Bõ Œ8�c˜3�Z # s ¨c°3¨Z¸#¸s¸ÐDÑEÔE€DÝ
•"”)˜B Ñ"Ô" D¨&°*Ñ
=Ô
=€CØˆ3ˆq����A�Œw‰<Œ<€DÝ�B˜ÑÔÐÐÐr'   c            
      óJ  — t          j        ddd¦  «        dd…df         } t          dddgdgd	gd
gdgdgg¬¦  «        }t          dddgd	gd
gdgdgdgg¬¦  «        }|                     | ¦  «        }|                     | ¦  «        }t	          ||dd…g d¢f         ¦  «         dS )zJTest if shifted knots result in the same transformation up to permutation.r   r   rŸ   NrG   rB   r¨   r©   ç      @ç      @ç      @ç       @rª   g      "@)r”   r   r2   r   rG   )r!   rt   r   r.   r   )r/   Útransformer_1Útransformer_2ÚXt_1ÚXt_2s        r%   Ú4test_spline_transformer_periodic_splines_periodicityr»     sà   € å
Œ�A�r˜3ÑÔ    4 Ô(€Aå%ØØ Øˆu�s�e˜c˜U S E¨C¨5°3°%Ð8ðñ ô €Mõ &ØØ Øˆu�s�e˜c˜U S E¨C¨5°3°%Ð8ðñ ô €Mð ×&Ò& qÑ)Ô)€DØ×&Ò& qÑ)Ô)€Då�D˜$˜q˜q˜q / / /Ð1Ô2Ñ3Ô3Ð3Ð3Ð3r'   c           
      ój  — t          j        ddd¦  «        dd…df         }t          | ddgdgdgd	gd
gdgg¬¦  «        }|                     |¦  «        }|                     ¦   «         |                     ¦   «         z
  t          |¦  «        z  }d|z  }|}t          d| dz   ¦  «        D ]I}t          j        |d¬¦  «        }t          j	        |¦  «                             ¦   «         |k     sJ ‚||z  }ŒJt          j        |d¬¦  «        }t          j	        |¦  «                             ¦   «         dk    sJ ‚dS )z?Test that spline transformation is smooth at first / last knot.r§   r   i'  NrB   r¨   r©   r³   r´   rµ   r¶   rª   r2   r   rr   )
r!   rt   r   r.   ÚmaxÚminrh   ÚrangeÚdiffÚabs)	rH   r/   r¬   r­   ÚdeltaÚtolÚdXtÚdrÀ   s	            r%   Ú3test_spline_transformer_periodic_splines_smoothnessrÆ   &  sF  € õ 	Œ�B˜˜FÑ#Ô# A A A t GÔ,€Aå#ØØ Øˆu�s�e˜c˜U S E¨C¨5°3°%Ð8ðñ ô €Kð
 
×	"Ò	" 1Ñ	%Ô	%€Bà�UŠU‰WŒW�q—u’u‘w”wÑ¥# a¡&¤&Ñ(€EØ
ˆu‰*€Cà
€Cõ �1�f˜q‘jÑ!Ô!ð ð ˆåŒw�s Ð#Ñ#Ô#ˆÝŒv�d‰|Œ|×ÒÑ!Ô! CÒ'Ð'Ð'Ð'à�U‰lˆˆõ
 Œ7�3˜QÐÑÔ€DÝŒ6�$‰<Œ<×ÒÑÔ Ò!Ð!Ð!Ð!Ð!Ð!r'   )r2   r   rG   r”   r   c           	      ó¸  — t          j        ddd¦  «        dd…df         }|                     ¦   «         }t          dt	          d|| d¬¦  «        gd	t          |¬
¦  «        gg¦  «        }|                     ||¦  «         t          |                     dgdgg¦  «        ddg¦  «         t          dt	          d|| d¬¦  «        gd	t          |¬
¦  «        gg¦  «        }|                     ||¦  «         t          |                     dgdgg¦  «        ddg¦  «         t	          d|| d¬¦  «        }|                     |¦  «         d}t          j
        t          |¬¦  «        5  |                     dgg¦  «         ddd¦  «         n# 1 swxY w Y   t          j
        t          |¬¦  «        5  |                     dgg¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z1Test that B-spline extrapolation works correctly.r    r2   rq   Nr   r”   re   r�   r‚   rƒ   iöÿÿÿr   rf   Úerrorú2`X` contains values beyond the limits of the knotsr4   )r!   rt   Úsqueezer
   r   r	   r:   r   r‹   r7   r8   r9   rj   )rz   r{   rH   r/   rŒ   r�   rb   Úmsgs           r%   Ú%test_spline_transformer_extrapolationrÌ   M  s“  € õ
 	Œ�B˜˜3ÑÔ    4 Ô(€AØ	�	Š	‰Œ€Aõ ð Ý!ØØ!Ø!%Ø",ð	ñ ô ðð Õ$°9Ð=Ñ=Ô=Ð>ð	
ñô €Dð 	‡H‚HˆQ��N„N€NÝ�D—L’L 3 %¨!¨ Ñ.Ô.°°Q°Ñ8Ô8Ð8õ ð Ý!ØØ!Ø!%Ø"*ð	ñ ô ðð Õ$°9Ð=Ñ=Ô=Ð>ð	
ñô €Dð 	‡H‚HˆQ��N„N€NÝ�D—L’L 3 %¨!¨ Ñ.Ô.°°a°Ñ9Ô9Ð9õ Ø˜&¨tÀ7ðñ ô €Dð 	‡H‚HˆQ�K„K€KØ
>€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð  ð  Ø�Š˜˜�wÑÔÐð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  å	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø�Š˜˜�uÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s$   Å FÆFÆFÆ*GÇGÇGc                 óh  — t           j                             | ¦  «        }|                     d¦  «                             dd¦  «        }d}|dz   }t          |ddd¬¦  «        }|                     |¦  «        }t          |ddd	¬
¦  «        }|                     |¦  «        }t          ||d¬¦  «         dS )zCTest that a B-spline of degree=0 is equivalent to KBinsDiscretizer.r¢   r2   r   r   ro   T)rL   rH   r1   rM   zonehot-denseÚaveraged_inverted_cdf)Ún_binsÚencodeÚstrategyÚquantile_methodg‚vIhÂ%<=rˆ   N)	r!   r   ÚRandomStateÚrandnr-   r   r.   r   r   )	Úglobal_random_seedÚrngr/   rÏ   rL   rb   ÚsplinesÚkbdÚkbinss	            r%   Ú'test_spline_transformer_kbindiscretizerrÚ   …  sÉ   € å
Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�	Š	�#‰Œ×Ò˜s AÑ&Ô&€AØ€FØ�q‰j€GåØ ¨À$ðñ ô €Dð × Ò  Ñ#Ô#€Gå
ØØØØ/ð	ñ ô €Cð ×Ò˜aÑ Ô €Eõ �G˜U¨Ð/Ñ/Ô/Ð/Ð/Ð/r'   )rÈ   re   rf   rA   rB   rM   FTc                 óº  — t           j                             |¦  «        }|                     d¦  «                             dd¦  «        }t          | |||d¬¦  «        }t          | |||d¬¦  «        }|                     |¦  «         |                     |¦  «         |                     |¦  «        }	|                     |¦  «        }
t          j	        |	¦  «        r|	j
        dk    sJ ‚t          |
|	                     ¦   «         ¦  «         t          j        |d¬	¦  «        }t          j        |d¬	¦  «        }t           j        t          j        |dz
  |d
¦  «        t          j        ||dz   d
¦  «        f         }|dk    r—d}t#          j        t&          |¬¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   d}t#          j        t&          |¬¦  «        5  |                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S t          |                     |¦  «        |                     |¦  «                             ¦   «         ¦  «         d S )Nr¢   é(   r   F)rH   r1   r@   rM   Úsparse_outputTÚcsrr   rr   r   rÈ   rÉ   r4   zOut of bounds)r!   r   rÓ   rÔ   r-   r   r:   rj   r   ÚissparseÚformatr   ÚtoarrayÚaminÚamaxru   rt   r7   r8   r9   )rH   r1   r@   rM   rÕ   rÖ   r/   Ú
splt_denseÚsplt_sparseÚX_trans_sparseÚX_trans_denseÚX_minÚX_maxÚX_extrarË   s                  r%   Ú%test_spline_transformer_sparse_outputrë   ž  sÛ  € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�	Š	�#‰Œ×Ò˜r 1Ñ%Ô%€Aå"ØØØ#Ø!Øðñ ô €Jõ $ØØØ#Ø!Øðñ ô €Kð ‡N‚N�1ÑÔÐØ‡O‚O�AÑÔÐà ×*Ò*¨1Ñ-Ô-€NØ×(Ò(¨Ñ+Ô+€MÝŒ?˜>Ñ*Ô*ÐM¨~Ô/DÈÒ/MÐ/MÐ/MÐMÝ�M >×#9Ò#9Ñ#;Ô#;Ñ<Ô<Ð<õ ŒG�A˜AÐÑÔ€EÝŒG�A˜AÐÑÔ€EÝŒeÝ
Œ�E˜A‘I˜u bÑ)Ô)­2¬;°u¸eÀa¹iÈÑ+LÔ+LÐLô€Gð ˜ÒÐØBˆÝŒ]�:¨SÐ1Ñ1Ô1ð 	*ð 	*Ø× Ò  Ñ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*àˆÝŒ]�:¨SÐ1Ñ1Ô1ð 	+ð 	+Ø×!Ò! 'Ñ*Ô*Ð*ð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð 	+ð 	+õ 	Ø× Ò  Ñ)Ô)¨;×+@Ò+@ÀÑ+IÔ+I×+QÒ+QÑ+SÔ+Sñ	
ô 	
ð 	
ð 	
ð 	
s$   ÆF;Æ;F?ÇF?Ç#HÈH
ÈH
rÝ   c                 óî   — t          | ||||¬¦  «        }t          j        ddd¦  «        dd…df         }|                     |¦  «         |                     |¦  «        j        d         |j        k    sJ ‚dS )z8Test that transform results in n_features_out_ features.)rL   rH   rM   r@   rÝ   r   r2   r   N)r   r!   rt   r:   rj   rk   ri   )rL   rM   rH   r@   rÝ   rb   r/   s          r%   Ú&test_spline_transformer_n_features_outrí   Ô  s†   € õ ØØØ!Ø#Ø#ðñ ô €Dõ 	Œ�A�q˜"ÑÔ˜a˜a˜a ˜gÔ&€AØ‡H‚HˆQ�K„K€Kà�>Š>˜!ÑÔÔ" 1Ô%¨Ô)=Ò=Ð=Ð=Ð=Ð=Ð=r'   c                 ó¤  — t          j        ddgddgddgddgddggt           j        ¬¦  «        }|                     ¦   «         }t           j        |d<   d}t          j        t          t          j	        |¦  «        ¬	¦  «        5  t          ddd
| ¬¦  «        }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          ddd| |¬¦  «        }|                     |¦  «        }|                     |¦  «                             |¦  «        }t          ||¦  «         |                     |g d¢¬¦  «        }t          ||¦  «         |                     |¦  «        ddd…         }	|                     |¦  «                             |ddd…         ¦  «        }
t          |	|
¦  «         t          |t           j        ¦  «        }t          j        ||j        d         j        j        d         d¬¦  «        }||         dk                         ¦   «         sJ ‚|                     |¦  «        }t+          j        |¦  «        r|                     ¦   «         }|dk                         ¦   «         sJ ‚|dk                         ¦   «         sJ ‚|                     |¦  «        }|                     |¦  «        }t          ||          ||          ¦  «         dS )zãTest that SplineTransformer handles missing values correctly.
    We only test for knots="uniform", since for "quantile" the metrics are calculated
    differently with nans present and a different result is thus expected.
    r2   r   rG   r”   r   ©Údtype)rG   r   zJInput X contains NaN values and `SplineTransformer` is configured to errorr4   rÈ   )rH   rL   Úhandle_missingr@   NÚzeros©rH   rL   rñ   r@   rÝ   )r2   r2   r2   r2   r2   )r�   r   rr   )r!   r–   Úfloat64ÚcopyÚnanr7   r8   r9   ÚreÚescaper   r.   r:   rj   r   r   ÚrepeatÚ	bsplines_Úcrk   Úallr   rß   rá   )r@   rÝ   r/   ÚX_nanrË   r   ÚX_nan_transformÚX_nan_fit_then_transformÚ"X_nan_transform_with_sample_weightÚX_nan_transform_same_shapeÚ X_nan_transform_different_shapesÚnan_maskÚencoded_nan_maskÚX_transforms                 r%   Ú.test_spline_transformer_handles_missing_valuesr  ì  s6  € õ 	Œ�1�a�&˜1˜a˜& 1 a &¨1¨a¨&°1°a°&Ð9ÅÄÐLÑLÔL€AØ�FŠF‰HŒH€EÝ”&€Eˆ$�Kð W€CÝ	Œ•z­¬°3©¬Ð	8Ñ	8Ô	8ð $ð $Ý"ØØØ"Ø'ð	
ñ 
ô 
ˆð 	×Ò˜UÑ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $õ ØØØØ#Ø#ðñ ô €Fð ×*Ò*¨5Ñ1Ô1€OØ%Ÿzšz¨%Ñ0Ô0×:Ò:¸5ÑAÔAÐÝ  Ð2JÑKÔKÐKð *0×)=Ò)=Ø˜_˜_˜_ð *>ñ *ô *Ð&õ ! Ð2TÑUÔUÐUð "(×!5Ò!5°eÑ!<Ô!<¸S¸S¸q¸SÔ!AÐØ'-§z¢z°%Ñ'8Ô'8×'BÒ'BÀ5ÈÈÈ1ÈÄ:Ñ'NÔ'NÐ$Ý Ø"Ð$Dñô ð õ
 ˜¥¤Ñ'Ô'€HÝ”y ¨6Ô+;¸AÔ+>Ô+@Ô+FÀqÔ+IÐPQÐRÑRÔRÐØÐ,Ô-°Ò2×7Ò7Ñ9Ô9Ð9Ð9Ð9ð ×*Ò*¨5Ñ1Ô1€OÝ„�Ñ'Ô'ð 4Ø)×1Ò1Ñ3Ô3ˆØ˜qÒ ×%Ò%Ñ'Ô'Ð'Ð'Ð'Ø˜qÒ ×%Ò%Ñ'Ô'Ð'Ð'Ð'ð ×&Ò& qÑ)Ô)€KØ×*Ò*¨5Ñ1Ô1€OÝ ØÐ%Ð%Ô&¨Ð9IÐ8IÔ(Jñô ð ð ð s   Â)B7Â7B;Â>B;c                 ó  — t          j        ddgddgddgddgddgg¦  «        }t          j        t           j        t           j        gt           j        dgg¦  «        }t          ddd| |¬¦  «        }|                     |¦  «         |                     |¦  «        }t          |t           j        ¦  «        }t          j        ||j        d         j	        j
        d         d¬	¦  «        }||         dk                         ¦   «         sJ ‚d
S )zZTest that SplineTransformer encodes missing values to zeros even for
    all-nan-features.r2   r   rG   r”   r   rò   ró   r   rr   N)r!   r–   rö   r   r:   rj   r   rù   rú   rû   rk   rü   )r@   rÝ   r/   ÚX_nan_full_columnr   Úall_missing_column_encodedr  r  s           r%   Ú(test_spline_transformer_handles_all_nansr
  9  s	  € õ 	Œ�1�a�&˜1˜a˜& 1 a &¨1¨a¨&°1°a°&Ð9Ñ:Ô:€AÝœ¥2¤6­2¬6Ð"2µR´V¸Q°KÐ!@ÑAÔAÐåØØØØ#Ø#ðñ ô €Fð ‡J‚JÐ Ñ!Ô!Ð!à!'×!1Ò!1Ð2CÑ!DÔ!DÐÝÐ*­B¬FÑ3Ô3€HÝ”y ¨6Ô+;¸AÔ+>Ô+@Ô+FÀqÔ+IÐPQÐRÑRÔRÐØ&Ð'7Ô8¸AÒ=×BÒBÑDÔDÐDÐDÐDÐDÐDr'   )r    r   z&degree=\(min_degree, max_degree\) must)r   g      ø?©rG   r   )r2   r   rG   z'int or tuple \(min_degree, max_degree\)c                 ó¸   — dgdgg}t          j        t          |¬¦  «        5  t          di | ¤Ž                     |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zBTest that we raise errors for invalid input in PolynomialFeatures.r2   r   r4   Nr6   )r7   r8   r9   r   r:   r;   s      r%   Ú)test_polynomial_features_input_validationr  S  s¬   € ð ˆˆqˆcˆ
€Aå	Œ•z¨Ð	1Ñ	1Ô	1ð ,ð ,ÝÐ$Ð$˜VÐ$Ð$×(Ò(¨Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,r?   c                  óº   — t          j        d¦  «        d d …t           j        f         } t          j        t          j        | ¦  «        | | dz  | dz  g¦  «        }| |fS )Nr’   r   rG   )r!   r,   ÚnewaxisÚhstackÚ	ones_like)r/   ÚPs     r%   Úsingle_feature_degree3r  d  sO   € å
Œ	�!‰Œ�Q�Q�Q�œ
�]Ô#€AÝ
Œ	•2”< ‘?”? A q¨!¡t¨Q°©TÐ2Ñ3Ô3€AØˆaˆ4€Kr'   z/degree, include_bias, interaction_only, indices©r   rG   )r   r   rG   ÚX_containerc                 óT  — | \  }}|� ||¦  «        }t          |||¬¦  «                             |¦  «        }|                     |¦  «        }	|�|	                     ¦   «         }	t	          |	|dd…|f         ¦  «         |j        dk    r|j        j        |j        |j        fk    sJ ‚dS dS )z9Test PolynomialFeatures on single feature up to degree 3.N©rH   rM   Úinteraction_onlyr   ©	r   r:   rj   rá   r   Ún_output_features_Úpowers_rk   Ún_features_in_)
r  rH   rM   r  Úindicesr  r/   r  ÚtfÚouts
             r%   Ú$test_polynomial_features_one_featurer   k  sÇ   € ð. "�D€A€qØÐØˆK˜‰NŒNˆÝ	Ø LÐCSð
ñ 
ô 
ç	‚cˆ!�f„fð ð �,Š,�q‰/Œ/€CØÐØ�kŠk‰mŒmˆÝ�C˜˜1˜1˜1˜g˜:œÑ'Ô'Ð'Ø	Ô˜qÒ Ð ØŒzÔ BÔ$9¸2Ô;LÐ#MÒMÐMÐMÐMð !Ð ØMÐMr'   c                  ó€  — t          j        d¦  «                             d¦  «        } | d d …d d…f         }| d d …dd …f         }t          j        |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  g
¦  «        }| |fS )Nr’   r  r2   r   r   rG   )r!   r,   r-   r  )r/   Úx1Úx2r  s       r%   Útwo_features_degree3r$  �  sþ   € å
Œ	�!‰Œ×Ò˜VÑ$Ô$€AØ	
ˆ1ˆ1ˆ1ˆbˆqˆbˆ5Œ€BØ	
ˆ1ˆ1ˆ1ˆaˆbˆbˆ5Œ€BÝ
Œ	à�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰MØ�‰E�B˜‘E‰Mð	
ñ	ô 	€Að ˆaˆ4€Kr'   )r   r2   r   r”   )r2   r   r”   ©r   r   )r   rG   r”   r   )rG   r”   r   )r   rG   r”   r   r’   é   r‘   é	   ©rG   rG   )r   r’   r&  r‘   r'  )r’   r&  r‘   r'  c                 óT  — | \  }}|� ||¦  «        }t          |||¬¦  «                             |¦  «        }|                     |¦  «        }	|�|	                     ¦   «         }	t	          |	|dd…|f         ¦  «         |j        dk    r|j        j        |j        |j        fk    sJ ‚dS dS )z5Test PolynomialFeatures on 2 features up to degree 3.Nr  r   r  )
r$  rH   rM   r  r  r  r/   r  r  r  s
             r%   Ú%test_polynomial_features_two_featuresr*  ¦  sÈ   € ðF  �D€A€qØÐØˆK˜‰NŒNˆÝ	Ø LÐCSð
ñ 
ô 
ç	‚cˆ!�f„fð ð �,Š,�q‰/Œ/€CØÐØ�kŠk‰mŒmˆÝ�C˜˜1˜1˜1˜g˜:œÑ'Ô'Ð'Ø	Ô˜qÒ Ð ØŒzÔ BÔ$9¸2Ô;LÐ#MÒMÐMÐMÐMð !Ð ØMÐMr'   c                  óì  — t          j        d¦  «                             dd¦  «        } t          dd¬¦  «                             | ¦  «        }|                     ¦   «         }t          g d¢|¦  «         t          |¦  «        |                     | ¦  «        j	        d         k    sJ ‚t          dd	¬¦  «                             | ¦  «        }|                     g d
¢¦  «        }t          g d¢|¦  «         t          |¦  «        |                     | ¦  «        j	        d         k    sJ ‚t          dd	¬¦  «                             | ¦  «        }|                     g d
¢¦  «        }t          g d¢|¦  «         t          |¦  «        |                     | ¦  «        j	        d         k    sJ ‚t          ddd¬¦  «                             | ¦  «        }|                     g d
¢¦  «        }t          ddg|¦  «         t          |¦  «        |                     | ¦  «        j	        d         k    sJ ‚t          dd¬¦  «                             | ¦  «        }|                     g d¢¦  «        }t          g d¢|¦  «         d S )Né   r   rG   r   T©rH   rM   )
Ú1Úx0r"  r#  zx0^2zx0 x1zx0 x2zx1^2zx1 x2zx2^2r2   F)r$   rX   rû   )r$   rX   rû   úa^2úa búa cúb^2úb cúc^2úa^3úa^2 búa^2 cúa b^2úa b cúa c^2úb^3úb^2 cúb c^2úc^3r  )r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r(  r  r.  r:  )úF40Dõ   â˜®õ   ×�)r.  r@  rA  rB  )
r!   r,   r-   r   r:   ra   r   rh   rj   rk   )r/   Úpolyrc   s      r%   Útest_polynomial_feature_namesrD  ×  s‘  € Ý
Œ	�"‰Œ×Ò˜b !Ñ$Ô$€AÝ Q°TÐ:Ñ:Ô:×>Ò>¸qÑAÔA€DØ×.Ò.Ñ0Ô0€MÝØRÐRÐRØñô ð õ ˆ}ÑÔ §¢°Ñ!2Ô!2Ô!8¸Ô!;Ò;Ð;Ð;Ð;å Q°UÐ;Ñ;Ô;×?Ò?ÀÑBÔB€DØ×.Ò.¨¨¨Ñ?Ô?€MÝð	
ð 	
ð 	
ð* 	ñ-ô ð õ0 ˆ}ÑÔ §¢°Ñ!2Ô!2Ô!8¸Ô!;Ò;Ð;Ð;Ð;å V¸%Ð@Ñ@Ô@×DÒDÀQÑGÔG€DØ×.Ò.¨¨¨Ñ?Ô?€MÝð	
ð 	
ð 	
ð$ 	ñ'ô ð õ* ˆ}ÑÔ §¢°Ñ!2Ô!2Ô!8¸Ô!;Ò;Ð;Ð;Ð;åØ D¸4ðñ ô ç	‚cˆ!�f„fð 	ð ×.Ò.¨¨¨Ñ?Ô?€MÝ˜˜W�~ }Ñ5Ô5Ð5Ýˆ}ÑÔ §¢°Ñ!2Ô!2Ô!8¸Ô!;Ò;Ð;Ð;Ð;õ  Q°TÐ:Ñ:Ô:×>Ò>¸qÑAÔA€DØ×.Ò.Ð/QÐ/QÐ/QÑRÔR€MÝÐ>Ð>Ð>ÀÑNÔNÐNÐNÐNr'   )ÚdegrM   r  rð   Úcsc_containerc                 óö  — t           j                             |¦  «        }|                     ddd¦  «        } ||¦  «        }t	          | ||¬¦  «        }	|	                     |                     |¦  «        ¦  «        }
|	                     |                     |¦  «        ¦  «        }t          j        |
¦  «        r|
j	        dk    sJ ‚|
j
        |j
        k    sJ ‚t          |
                     ¦   «         |¦  «         d S )Nr   r   ©rq   r   ©rM   r  Úcsc©r!   r   rÓ   Úrandintr   r.   Úastyper   rß   rà   rð   r   rá   )rE  rM   r  rð   rF  rÕ   rÖ   r/   ÚX_cscr   ÚXt_cscÚXt_denses               r%   Útest_polynomial_features_csc_XrQ  #  sï   € õ" Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�Š�A�q˜(Ñ#Ô#€AØˆM˜!ÑÔ€Eå
Ø˜,Ð9Iðñ ô €Cð ×Ò˜uŸ|š|¨EÑ2Ô2Ñ3Ô3€FØ× Ò  §¢¨%¡¤Ñ1Ô1€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r'   Úcsr_containerc                 óú  — t           j                             |¦  «        }|                     ddd¦  «        } ||¦  «        }t	          | ||¬¦  «        }	|	                     |                     |¦  «        ¦  «        }
|	                     |                     |d¬¦  «        ¦  «        }t          j        |
¦  «        r|
j	        dk    sJ ‚|
j
        |j
        k    sJ ‚t          |
                     ¦   «         |¦  «         d S )Nr   r   rH  rI  F)rõ   rÞ   rK  )rE  rM   r  rð   rR  rÕ   rÖ   r/   ÚX_csrr   ÚXt_csrrP  s               r%   Útest_polynomial_features_csr_XrV  C  sõ   € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�Š�A�q˜(Ñ#Ô#€AØˆM˜!ÑÔ€Eå
Ø˜,Ð9Iðñ ô €Cð ×Ò˜uŸ|š|¨EÑ2Ô2Ñ3Ô3€FØ× Ò  §¢¨%°e Ñ!<Ô!<Ñ=Ô=€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r'   Ú
n_features)r2   r”   r   zmin_degree, max_degree))r   r2   )r   r   )r2   rG   )r   r”   )rG   r”   r  c                 óü   —  |dgdg| dz
  gff¦  «        }t          |||¬¦  «        }|                     |¦  «         |j        }t          j        | d|||¬¦  «        }	|t	          d„ |	D ¦   «         ¦  «        k    sJ ‚dS )z?
    Test that n_output_features_ is calculated correctly.
    r2   r   )rH   r  rM   ©rW  Ú
min_degreeÚ
max_degreer  rM   c                 ó   — g | ]}d ‘ŒS )r2   r6   )Ú.0rI   s     r%   ú
<listcomp>z)test_num_combinations.<locals>.<listcomp>~  s   € Ð0Ð0Ð0 A˜aÐ0Ð0Ð0r'   N)r   r:   r  Ú_combinationsrv   )
rW  rZ  r[  r  rM   rR  r�   r   Ú
num_combosÚcomboss
             r%   Útest_num_combinationsrb  a  s´   € ð 	ˆ˜�s˜a˜S :°¡>Ð"2Ð3Ð4Ñ5Ô5€AÝ
ØØ)Ø!ðñ ô €Cð
 ‡G‚GˆA�J„J€JØÔ'€JåÔ-ØØØØ)Ø!ðñ ô €Fð �Ð0Ð0¨Ð0Ñ0Ô0Ñ1Ô1Ò1Ð1Ð1Ð1Ð1Ð1r'   c                 óÔ  —  |t          ddd|¬¦  «        ¦  «        }|                     ¦   «         }t          | ||¬¦  «        }|                     |                     |¦  «        ¦  «        }	|                     |                     |¦  «        ¦  «        }
t          j        |	¦  «        r|	j        dk    sJ ‚|	j        |
j        k    sJ ‚t          |	                     ¦   «         |
¦  «         d S )Néè  r   ç      à?©Úrandom_staterI  rÞ   )
Úsparse_randomrá   r   r.   rM  r   rß   rà   rð   r   )rE  rM   r  rð   rR  rÕ   rT  r/   r   rU  rP  s              r%   Ú%test_polynomial_features_csr_X_floatsri  �  sã   € ð ˆM�-¨¨b°#ÐDVÐWÑWÔWÑXÔX€EØ�Š‰Œ€Aå
Ø˜,Ð9Iðñ ô €Cð ×Ò˜uŸ|š|¨EÑ2Ô2Ñ3Ô3€FØ× Ò  §¢¨%¡¤Ñ1Ô1€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r'   )Úzero_row_indexrE  r  ))r   r   T)r2   r   T©r   r   T)r   rG   T)r2   rG   T)r   rG   T)r   r   F)r2   r   F©r   r   F)r   rG   F)r2   rG   F)r   rG   Fc                 óš  —  |t          ddd|¬¦  «        ¦  «        }d|| d d …f<   |                     ¦   «         }t          |d|¬¦  «        }|                     |¦  «        }|                     |¦  «        }	t	          j        |¦  «        r|j        dk    sJ ‚|j        |	j        k    sJ ‚t          |                     ¦   «         |	¦  «         d S )	NrG   r   r©   rf  r¨   FrI  rÞ   ©	rh  rá   r   r.   r   rß   rà   rð   r   )
rj  rE  r  rR  rÕ   rT  r/   r   rU  rP  s
             r%   Ú'test_polynomial_features_csr_X_zero_rowro  œ  s×   € ð* ˆM�-¨¨2¨sÐASÐTÑTÔTÑUÔU€EØ"€Eˆ.˜!˜!˜!Ð
ÑØ�Š‰Œ€Aå
˜S¨uÐGWÐ
XÑ
XÔ
X€CØ×Ò˜uÑ%Ô%€FØ× Ò  Ñ#Ô#€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r'   ))TTr|   r}   )FFc                 óˆ  —  |t          ddd|¬¦  «        ¦  «        }|                     ¦   «         }t          d| |¬¦  «        }|                     |¦  «        }|                     |¦  «        }t	          j        |¦  «        r|j        dk    sJ ‚|j        |j        k    sJ ‚t          |                     ¦   «         |¦  «         d S )Nrd  r   re  rf  r”   rI  rÞ   rn  )	rM   r  rR  rÕ   rT  r/   r   rU  rP  s	            r%   Ú'test_polynomial_features_csr_X_degree_4rq  À  sÍ   € ð ˆM�-¨¨b°#ÐDVÐWÑWÔWÑXÔX€EØ�Š‰Œ€Aå
Ø	˜Ð7Gðñ ô €Cð ×Ò˜uÑ%Ô%€FØ× Ò  Ñ#Ô#€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r'   )rE  Údimr  )
)r   r2   Trk  )rG   r2   T)rG   r   T)rG   rG   T)r   r2   Frl  )rG   r2   F)rG   r   F)rG   rG   Fc                 ó†  —  |t          d|d|¬¦  «        ¦  «        }|                     ¦   «         }t          | |¬¦  «        }|                     |¦  «        }|                     |¦  «        }	t	          j        |¦  «        r|j        dk    sJ ‚|j        |	j        k    sJ ‚t          |                     ¦   «         |	¦  «         d S )Nrd  re  rf  )r  rÞ   rn  )
rE  rr  r  rR  rÕ   rT  r/   r   rU  rP  s
             r%   Ú(test_polynomial_features_csr_X_dim_edgesrt  Ö  sÉ   € ð& ˆMÝ�d˜C Ð3EÐFÑFÔFñô €Eð 	�Š‰Œ€Aå
˜SÐ3CÐ
DÑ
DÔ
D€CØ×Ò˜uÑ%Ô%€FØ× Ò  Ñ#Ô#€HåŒ?˜6Ñ"Ô"Ð= v¤}¸Ò'=Ð'=Ð'=Ð=ØŒ<˜8œ>Ò)Ð)Ð)Ð)Ý˜fŸnšnÑ.Ô.°Ñ9Ô9Ð9Ð9Ð9r'   c           
      óÊ  ‡ — ˆ fd„}d}d}t           j        }t          j        ddt           j        ¬¦  «        }t          j        |dz
  |dz
  |dz
  |dz
  g¦  «        }t          j        |dz
  |dz
  |dz
  |dz
  gt           j        ¬¦  «        }	 ||||	ff||f|¬¦  «        }
t          ‰ |d¬	¦  «        }|                     |d
d|j        |j        ¬¦  «        }|t          j	        t           j
        ¦  «        j        k    rLd}t          j        t          |¬¦  «        5  |                     |
¦  «         ddd¦  «         n# 1 swxY w Y   dS |                     |
¦  «        }|                     ¦   «         \  }}||z   } |||	t%          ‰  ¦  «                 |	d         ¦  «        |z   }|r	dg|dz
  z  ng }|r	d
g|dz
  z  ng }t'          d¦  «        D �]R}|d|z           }|d|z  dz            }|	d|z           }|	d|z  dz            }|r*|                     d¦  «         |                     d
¦  «         |                     ||g¦  «         |                     |t%          |¦  «        z   |t%          |¦  «        z   g¦  «         ‰ se|                     ||z  ||z  ||z  g¦  «         |                      ||||¦  «        |z    ||||¦  «        |z    ||||¦  «        |z   g¦  «         �Œ|                     ||z  g¦  «         |                      ||||¦  «        |z   ¦  «         �ŒTt%          |¦  «        dz   dt%          ‰  ¦  «        z  z   }|j        |dz   k    sJ ‚|j        |k    sJ ‚|j        ||dz   fk    sJ ‚|j        j        |j        j        cxk    rt           j        k    sn J ‚|j                             ¦   «         t          j	        t           j        ¦  «        j        k    sJ ‚|rt9          t'          |dz
  ¦  «        ¦  «        ng }|                     |dz
  g|z  |dz
  g|z  z   ¦  «         t;          |j        |¦  «         t?          ||¦  «         t?          ||¦  «         dS )a°  Check the automatic index dtype promotion to `np.int64` when needed.

    This ensures that sufficiently large input configurations get
    properly promoted to use `np.int64` for index and indptr representation
    while preserving data integrity. Non-regression test for gh-16803.

    Note that this is only possible for Python runtimes with a 64 bit address
    space. On 32 bit platforms, a `ValueError` is raised instead.
    c                 ód   •— ‰r| |z  |dz  d|z  z   dz  z
  dz
  |z   S | |z  |dz  |z   dz  z
  |z   S )Nr   rG   r2   r6   )rÅ   ÚiÚjr  s      €r%   Údegree_2_calczRtest_csr_polynomial_expansion_index_overflow_non_regression.<locals>.degree_2_calc  sU   ø€ Øð 	/Ø�q‘5˜A˜q™D 1 q¡5™L¨QÑ.Ñ.°Ñ2°QÑ6Ð6à�q‘5˜A˜q™D 1™H¨™?Ñ*¨QÑ.Ð.r'   é   iÁÔ r2   r   rï   r   )rk   rð   ©r  rM   rH   r   rY  útThe output that would result from the current configuration would have \d* features which is too large to be indexedr4   NrG   ) r!   Úfloat32r,   Úint64r–   r   Ú_num_combinationsr  rM   ÚiinfoÚintpr½   r7   r8   r9   r:   r.   ÚnonzeroÚintr¿   ÚappendÚextendr  rð   rk   Úindptrr  Úint32Úlistr   Údatar   )r  rM   rR  ry  Ú	n_samplesrW  Ú
data_dtyper‰  ÚrowÚcolr/   ÚpfÚnum_combinationsrË   rl   Úrow_nonzeroÚcol_nonzeroÚn_degree_1_features_outÚmax_degree_2_idxÚdata_targetÚcol_nonzero_targetrw  r�   rŒ   Úx_idxÚy_idxÚnnz_per_rowÚrow_nonzero_targets   `                           r%   Ú;test_csr_polynomial_expansion_index_overflow_non_regressionrš  ÷  s�  ø€ ð /ð /ð /ð /ð /ð €IØ€JÝ”€JÝŒ9�Q˜¥¤Ð*Ñ*Ô*€DÝ
Œ(�I ‘M 9¨q¡=°)¸a±-ÀÈQÁÐOÑ
PÔ
P€Cõ Œ(Ø	�a‰˜ a™¨°a©¸Àa¹ÐHÕPRÔPXðñ ô €Cð 	ˆØ	��SˆzÐØ˜*Ð%Øð	ñ 	ô 	€Aõ
 
Ø)¸ÈQð
ñ 
ô 
€Bð ×+Ò+ØØØØÔ,Ø”_ð ,ñ ô Ðð �"œ(¥2¤7Ñ+Ô+Ô/Ò/Ð/ð>ð 	õ Œ]�:¨SÐ1Ñ1Ô1ð 	ð 	Ø�FŠF�1‰IŒIˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	àˆØ×Ò˜qÑ!Ô!€GØ&ŸšÑ0Ô0Ñ€K�Ø(¨<Ñ7Ðàˆ�j #¥cÐ.>Ð*>Ñ&?Ô&?Ô"@À#ÀaÄ&ÑIÔIØ
!ñ	"ð ð ,8Ð?�1�#˜ Q™Ñ'Ð'¸R€KØ2>ÐF˜!˜ 	¨A¡Ñ.Ð.ÀBÐå�1‰XŒXð ñ ˆØ��Q‘ŒKˆØ��Q‘˜‘ŒOˆØ�A˜‘E”
ˆØ�A˜‘E˜A‘I”ˆØð 	)Ø×Ò˜qÑ!Ô!Ð!Ø×%Ò% aÑ(Ô(Ð(Ø×Ò˜A˜q˜6Ñ"Ô"Ð"Ø×!Ò!Ø•S˜Ñ&Ô&Ñ&¨µ°LÑ0AÔ0AÑ(AÐBñ	
ô 	
ð 	
ð  ð 	Ø×Ò  A¡ q¨1¡u¨a°!©eÐ4Ñ5Ô5Ð5Ø×%Ò%à!�M *¨e°UÑ;Ô;Ð>UÑUØ!�M *¨e°UÑ;Ô;Ð>UÑUØ!�M *¨e°UÑ;Ô;Ð>UÑUðñô ð ñ ð ×Ò  A¡˜wÑ'Ô'Ð'Ø×%Ò%Ø�˜j¨%°Ñ7Ô7Ð:QÑQñô ð ñ õ �lÑ#Ô# aÑ'¨!­cÐ6FÐ2FÑ.GÔ.GÑ*GÑG€KàÔ Ð$4°qÑ$8Ò8Ð8Ð8Ð8ØŒ=˜JÒ&Ð&Ð&Ð&ØŒ=˜YÐ(8¸1Ñ(<Ð=Ò=Ð=Ð=Ð=ØŒ>Ô 7¤?Ô#8ÐDÐDÒDÐD½B¼HÒDÐDÐDÐDÐDÐDàŒ?×ÒÑ Ô ¥2¤8­B¬HÑ#5Ô#5Ô#9Ò9Ð9Ð9Ð9à7CÐK��e I°¡MÑ2Ô2Ñ3Ô3Ð3ÈÐØ×ÒØ	�Q‰ˆ˜+Ñ%¨°Q©¨¸+Ñ(EÑEñô ð õ �G”L +Ñ.Ô.Ð.Ý�{Ð$6Ñ7Ô7Ð7Ý�{Ð$6Ñ7Ô7Ð7Ð7Ð7s   ÄD<Ä<E ÅE zdegree, n_features)r   éÿÿ  )rG   i(	  )rG   r›  c                 óú  — dg}|dz
  t          j        t           j        ¦  «        j        k    rt           j        nt           j        }t          j        dg|¬¦  «        }t          j        |dz
  g|¬¦  «        }|dz
  t          |¦  «        z   g}	|	                     ||dz   z  dz  |	d         z   ¦  «         |	                     ||dz   z  |dz   z  dz  |	d         z   ¦  «          ||||ff¦  «        }
t          ||| ¬¦  «        }| 	                    |d| |j
        |j        ¬¦  «        }|t          j        t           j        ¦  «        j        k    rLd	}t          j        t          |¬
¦  «        5  |                     |
¦  «         ddd¦  «         n# 1 swxY w Y   dS |                     |
¦  «        }|t          j        t           j        ¦  «        j        k    rt           j        nt           j        }d| dz
  t          | ¦  «        z  z   }t          |¦  «        |z   }|j        |
j        k    sJ ‚|j        d|j        fk    sJ ‚|j        j        |j        j        cxk    r|k    sn J ‚|j        |k    sJ ‚|r |d         t          j        d¦  «        k    sJ ‚t3          |¦  «        D ]*}|d|	|         f         t          j        d¦  «        k    sJ ‚Œ+||z  }| dk    r|d|z   z  }|j        |	| dz
           dz   |z
  k    sJ ‚dS )zšTests known edge-cases to the dtype promotion strategy and custom
    Cython code, including a current bug in the upstream
    `scipy.sparse.hstack`.
    r©   r2   r   rï   r   r’   r{  rY  r|  r4   N©r   r   rG   )r!   r€  r‡  r½   r~  r–   rƒ  r„  r   r  r  rM   r�  r7   r8   r9   r:   r.   rð   rk   r  r†  r  ÚnnzÚapproxr¿   )rH   rW  r  rM   rR  r‰  Úindices_dtyperŒ  r�  Úexpected_indicesr/   rŽ  r�  rË   rl   Úexpected_dtypeÚnon_bias_termsÚexpected_nnzÚidxÚoffsets                       r%   Ú,test_csr_polynomial_expansion_index_overflowr§  l  s™  € ð4 ˆ5€Dà *¨Q¡µ"´(½2¼8Ñ2DÔ2DÔ2HÒ HÐ H•B”H�HÍbÌh€MÝ
Œ(�A�3˜mÐ
,Ñ
,Ô
,€CÝ
Œ(�J ‘NÐ#¨=Ð
9Ñ
9Ô
9€Cð 	�Q‰�˜\Ñ*Ô*Ñ*ðÐð ×Ò˜J¨*°q©.Ñ9¸QÑ>ÐAQÐRSÔATÑTÑUÔUÐUà×ÒØ�j 1‘nÑ%¨°a©Ñ8¸AÑ=Ð@PÐQRÔ@SÑSñô ð ð 	ˆ�t˜c 3˜ZÐ(Ñ)Ô)€AÝ	Ø)¸ÈVð
ñ 
ô 
€Bð ×+Ò+ØØØØÔ,Ø”_ð ,ñ ô Ðð �"œ(¥2¤7Ñ+Ô+Ô/Ò/Ð/ð>ð 	õ Œ]�:¨SÐ1Ñ1Ô1ð 	ð 	Ø�FŠF�1‰IŒIˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	àˆà×Ò˜qÑ!Ô!€Gà!1µB´H½R¼XÑ4FÔ4FÔ4JÒ!JÐ!J•R”X�XÕPRÔPX€Nà˜& 1™*­Ð0@Ð,@Ñ(AÔ(AÑAÑA€NÝ�|Ñ$Ô$ ~Ñ5€LØŒ=˜AœGÒ#Ð#Ð#Ð#ØŒ=˜Q Ô 5Ð6Ò6Ð6Ð6Ð6ØŒ>Ô 7¤?Ô#8ÐJÐJÒJÐJ¸NÒJÐJÐJÐJÐJÐJØŒ;˜,Ò&Ð&Ð&Ð&àð 3Ø�tŒ}¥¤¨cÑ 2Ô 2Ò2Ð2Ð2Ð2Ý�^Ñ$Ô$ð Gð GˆØ�qÐ*¨3Ô/Ð/Ô0µF´MÀ#Ñ4FÔ4FÒFÐFÐFÐFÐFà 
Ñ*€FØ�‚{€{Ø�!�j‘.Ñ ˆØÔ Ð$4°V¸a±ZÔ$@À1Ñ$DÀvÑ$MÒMÐMÐMÐMÐMÐMs   Å*FÆFÆFc                 óÒ  — t          j        t           j        ¦  «        j        dz  }dg}dg}|dz
  g} ||||ff¦  «        }t	          | |d¬¦  «        }d}	t          j        t          |	¬¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          |	¬¦  «        5  | 	                    |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	Nr   r©   r   r2   r%  r{  r|  r4   )
r!   r€  r~  r½   r   r7   r8   r9   r:   r.   )
r  rM   rR  rW  r‰  rŒ  r�  r/   rŽ  rË   s
             r%   Ú0test_csr_polynomial_expansion_too_large_to_indexr©  Ä  s|  € õ ”�"œ(Ñ#Ô#Ô'¨1Ñ,€JØˆ5€DØˆ#€CØ˜‰>Ð
€CØˆ�t˜c 3˜ZÐ(Ñ)Ô)€AÝ	Ø)¸ÈVð
ñ 
ô 
€Bð	6ð õ 
Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø
�Šˆq‰	Œ	ˆ	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð å	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø
×Ò˜ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s$   Á1BÂBÂBÂ9CÃC Ã#C Úsparse_containerc                 ó´  — t          j        d¦  «        }t          dd¬¦  «        }d}t          j        t
          |¬¦  «        5  |                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          dd¬¦  «        }d	}t          j        t
          |¬¦  «        5  |                     |¦  «         ddd¦  «         n# 1 swxY w Y   | | |¦  «        fD ]}t          dd
¬¦  «        }|                     |¦  «        }t          j        |¦  «        r| 	                    ¦   «         }t          |t          j        |j        d         df¦  «        ¦  «         Œ€dS )z”Check that PolynomialFeatures raises error when degree=0 and include_bias=False,
    and output a single constant column when include_bias=True
    )r   r   r   Fr-  zWSetting degree to zero and include_bias to False would result in an empty output array.r4   Nr�  zoSetting both min_degree and max_degree to zero and include_bias to False would result in an empty output array.Tr2   )r!   Úonesr   r7   r8   r9   r.   r   rß   rá   r   rk   )rª  r/   rC  r=   Ú_XÚoutputs         r%   Ú1test_polynomial_features_behaviour_on_zero_degreer¯  Ü  sæ  € õ
 	Œ�ÑÔ€AÝ Q°UÐ;Ñ;Ô;€Dð	"ð õ 
Œ•z¨Ð	1Ñ	1Ô	1ð ð Ø×Ò˜1ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ  V¸%Ð@Ñ@Ô@€Dð	8ð õ 
Œ•z¨Ð	1Ñ	1Ô	1ð ð Ø×Ò˜1ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð Ð"Ð" 1Ñ%Ô%Ð&ð =ð =ˆÝ!¨¸Ð>Ñ>Ô>ˆØ×#Ò# BÑ'Ô'ˆåŒ?˜6Ñ"Ô"ð 	&Ø—^’^Ñ%Ô%ˆFÝ˜6¥2¤7¨A¬G°A¬J¸¨?Ñ#;Ô#;Ñ<Ô<Ð<Ð<ð=ð =s$   ÁA%Á%A)Á,A)ÂC Ã CÃCc                  ó˜   — t           j        dk    s t           j        dk    rt           j        dk    rd} nd} t          ¦   «         | k    sJ ‚d S )NÚwin32ì        Ú
emscriptenr‘   é   )ÚsysÚplatformÚmaxsizer   )Úexpected_sizes    r%   Útest_sizeof_LARGEST_INT_tr¹  û  sS   € õ „|�wÒÐÝŒ�uÒÐ¥¤°Ò!=Ð!=àˆˆàˆå$Ñ&Ô&¨-Ò7Ð7Ð7Ð7Ð7Ð7r'   r±  zyOn Windows, scikit-learn is typically compiled with MSVC that does not support int128 arithmetic (at the time of writing))ÚreasonÚrunc                 ó  — t          t          j        t          j        ¦  «        j        dz  dz   ¦  «        }dg}dg}|dz
  g}|dz
  g}|                     t          ||dz   z  dz  |d         z   ¦  «        ¦  «         |                     t          ||dz   z  |dz   z  dz  |d         z   ¦  «        ¦  «          | |||ff¦  «        }t          ddd¬	¦  «        }t          j        d
k    rMd}t          j
        t          |¬¦  «        5  |                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S |                     |¦  «        }	t          d¦  «        D ]*}
|	d||
         f         t          j        d¦  «        k    sJ ‚Œ+d S )NgUUUUUUÕ?rG   r©   r   r2   r   r’   Fr{  r²  r|  r4   )rƒ  r!   r€  r~  r½   r„  r   rµ  r·  r7   r8   r9   r.   r¿   rŸ  )rR  rW  r‰  rŒ  r�  r¡  r/   rŽ  rË   rl   r¥  s              r%   Ú*test_csr_polynomial_expansion_windows_failr½  	  s  € õ •R”X�bœhÑ'Ô'Ô+°Ñ6¸Ñ:Ñ;Ô;€JØˆ5€DØˆ#€CØ˜‰>Ð
€Cð 	�Q‰ðÐð ×ÒÝˆJ˜* q™.Ñ)¨QÑ.Ð1AÀ!Ô1DÑDÑEÔEñô ð ð ×ÒÝˆJ˜* q™.Ñ)¨Z¸!©^Ñ<ÀÑAÐDTÐUVÔDWÑWÑXÔXñô ð ð 	ˆ�t˜c 3˜ZÐ(Ñ)Ô)€AÝ	¨UÀÈqÐ	QÑ	QÔ	Q€BÝ
„{�eÒÐð:ð 	õ
 Œ]�:¨SÐ1Ñ1Ô1ð 	 ð 	 Ø×Ò˜QÑÔÐð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð ×"Ò" 1Ñ%Ô%ˆÝ˜‘8”8ð 	Kð 	KˆCØ˜1Ð.¨sÔ3Ð3Ô4½¼ÀcÑ8JÔ8JÒJÐJÐJÐJÐJð	Kð 	Ks   ÄD(Ä(D,Ä/D,z(array_namespace, device_name, dtype_name)r   r%  rG   r(  c                 óÈ  — t          |||¦  «        \  }}| \  }	}
|	                     |¦  «        }|                     ||¬¦  «        }t          d¬¦  «        5  t	          |||¬¦  «                             |¦  «        }t	          |||¬¦  «                             |¦  «        }|                     |¦  «        }|                     |¦  «        }t          t          |t          d¬¦  «        |¦  «         t          |¦  «        d         j        |j        k    sJ ‚t          |¦  «        t          |¦  «        k    sJ ‚|j        |j        k    sJ ‚	 ddd¦  «         dS # 1 swxY w Y   dS )	zNTest array API compliance for PolynomialFeatures on 2 features up to degree 3.r   T©Úarray_api_dispatchr  Úcpu)Úxpr   r   N)r   rM  Úasarrayr   r   r:   rj   r   r   r!   r   Ú__name__Úarray_api_devicerð   )r$  rH   rM   r  Úarray_namespaceÚdevice_nameÚ
dtype_namerÂ  r   r/   rI   ÚX_npÚX_xpÚtf_npÚtf_xpÚout_npÚout_xps                    r%   Ú-test_polynomial_features_array_api_compliancerÏ  7  s³  € õ" & o°{ÀJÑOÔO�J€BˆØ�D€A€qØ�8Š8�JÑÔ€DØ�:Š:�d 6ˆ:Ñ*Ô*€DÝ	¨4Ð	0Ñ	0Ô	0ð *ð *Ý"Ø¨ÐGWð
ñ 
ô 
ç
Š#ˆd‰)Œ)ð 	õ #Ø¨ÐGWð
ñ 
ô 
ç
Š#ˆd‰)Œ)ð 	ð —’ Ñ&Ô&ˆØ—’ Ñ&Ô&ˆÝ� ­2°eÐ<Ñ<Ô<¸fÑEÔEÐEÝ˜VÑ$Ô$ QÔ'Ô0°B´KÒ?Ð?Ð?Ð?Ý Ñ'Ô'Õ+;¸DÑ+AÔ+AÒAÐAÐAÐAØŒ|˜tœzÒ)Ð)Ð)Ð)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð *ð *s   ÁC3EÅEÅEc                 óF  — t          | ||¦  «        \  }}t          j        d¦  «                             d¦  «                             |¦  «        }|                     ||¬¦  «        }d}t          d¬¦  «        5  t          d¬¦  «                             |¦  «        }t          |¦  «        r| 
                    |¦  «         nHt          j        t          |¬	¦  «        5  | 
                    |¦  «         d
d
d
¦  «         n# 1 swxY w Y   d
d
d
¦  «         d
S # 1 swxY w Y   d
S )zkTest that PolynomialFeatures with order='F' raises ValueError on
    array API namespaces other than numpy.r’   r  r   zBPolynomialFeatures does not support order='F' for non-numpy arraysTr¿  r+   r)   r4   N)r   r!   r,   r-   rM  rÃ  r   r   r:   r   rj   r7   r8   r9   )	rÆ  rÇ  rÈ  rÂ  r   r/   rÊ  rË   rŽ  s	            r%   Ú4test_polynomial_features_array_api_raises_on_order_FrÑ  \  s�  € õ & o°{ÀJÑOÔO�J€BˆÝ
Œ	�!‰Œ×Ò˜VÑ$Ô$×+Ò+¨JÑ7Ô7€AØ�:Š:�a ˆ:Ñ'Ô'€DØ
N€CÝ	¨4Ð	0Ñ	0Ô	0ð #ð #Ý cÐ*Ñ*Ô*×.Ò.¨tÑ4Ô4ˆÝ˜rÑ"Ô"ð 	#Ø�LŠL˜ÑÔÐÐå”�z°Ð5Ñ5Ô5ð #ð #Ø—’˜TÑ"Ô"Ð"ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #ð #s7   Á8A$DÃC>Ã2DÃ>D	ÄDÄD	ÄDÄDÄD)ar÷   rµ  Únumpyr!   r7   Únumpy.testingr   r   Úscipyr   Úscipy.interpolater   Úscipy.sparser   rh  Úsklearn._configr   Úsklearn.linear_modelr	   Úsklearn.pipeliner
   Úsklearn.preprocessingr   r   r   Ú/sklearn.preprocessing._csr_polynomial_expansionr   Úsklearn.utils._array_apir   r   r   r   r   rÅ  Úsklearn.utils._maskr   Úsklearn.utils._testingr   r   r   Úsklearn.utils.fixesr   r   ÚmarkÚparametrizer0   r>   rJ   rd   rm   r¿   ry   rŽ   r–   r™   r¥   r±   r»   rÆ   rÌ   rÚ   rë   rí   r  r
  r  Úfixturer  Úslicer   r$  r*  rD  rƒ  r}  rô   rQ  rV  rb  ri  ro  rq  rt  rš  Úsqrtr€  r~  r½   r§  r©  r¯  r¹  Úxfailr¶  r½  rÏ  rÑ  r6   r'   r%   ú<module>ræ     s  ðØ 	€	€	€	Ø 
€
€
€
à Ð Ð Ð Ø €€€Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0à *Ð *Ð *Ð *Ð *Ð *Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð *Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð „×Ò˜Ð!3Ð5FÐ GÑHÔHð	9ð 	9ñ IÔHð	9ð „×ÒØà
�Q�C�5Ð	ÐNÐOØ
�Q˜�F˜Q ˜FÐ#Ð	$Ð&SÐTØ
�Q�C˜!˜�:Ð	Ð JÐKðñô ð+ð +ñô ð+ð „×Ò˜¨:°zÐ*BÑCÔCðð ñ DÔCðð#ð #ð #ðL „×ÒØØ2Ð2Ð2ñô ð „×Ò˜ A q 6Ñ*Ô*ð2ð 2ñ +Ô*ñ	ô ð
2ð „×Ò˜ 5 5¨¨A¡;¤;Ñ/Ô/Ø„×Ò˜ E E¨!¨Q¡K¤KÑ0Ô0Ø„×Ò˜ 9¨jÐ"9Ñ:Ô:Ø„×Ò˜¨:°zÐ*BÑCÔCð>ð >ñ DÔCñ ;Ô:ñ 1Ô0ñ 0Ô/ð>ð2 „×Ò˜& +Ð.°ÀÐ0NÑOÔOð3ð 3ñ PÔOð3ð, „×ÒØ;Ð;Ð;à	�A�t˜X˜RœX¨¨1 v°°1¨v¸¸2°wÐ&?Ñ@Ô@ÐAàØØˆBŒHÐ*Ð*Ð*Ñ+Ô+ØˆBŒH�q˜!�f˜q !˜f q¨" gÐ.Ñ/Ô/ð		
ð 
�A�t˜X˜RœX¨¨1 v°°1¨v¸¸2°wÀÀBÀÐ&HÑIÔIÐJØ	�Q˜˜h˜bœh¨¨A¨°°A°¸¸B¸Ð'@ÑAÔAÐBàØØˆBŒHÐ*Ð*Ð*Ñ+Ô+ØˆBŒH�q˜!�f˜q !˜f q¨" gÐ.Ñ/Ô/ð		
ðñô ð(0ð 0ñ)ô ð(0ð „×Ò˜& +Ð.°ÀÐ0NÑOÔOðIð Iñ PÔOðIð>ð ð ð$4ð 4ð 4ð, „×Ò˜ A q 6Ñ*Ô*ð#"ð #"ñ +Ô*ð#"ðL „×Ò˜& +Ð.°ÀÐ0NÑOÔOØ„×Ò˜ ? ? ?Ñ3Ô3ð3ð 3ñ 4Ô3ñ PÔOð3ðl0ð 0ð 0ð2 „×Ò˜ 5 5¨¨A¡;¤;Ñ/Ô/Ø„×Ò˜ 9¨jÐ"9Ñ:Ô:Ø„×ÒØÐLÐLÐLñô ð „×Ò˜¨%°¨Ñ7Ô7ð-
ð -
ñ 8Ô7ñô ñ ;Ô:ñ 0Ô/ð-
ð` „×Ò˜ Q¨ GÑ,Ô,Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜ A q 6Ñ*Ô*Ø„×ÒØÐLÐLÐLñô ð „×Ò˜¨5°$¨-Ñ8Ô8ð>ð >ñ 9Ô8ñô ñ +Ô*ñ 8Ô7ñ -Ô,ð>ð" „×ÒØÐLÐLÐLñô ð „×Ò˜¨5°$¨-Ñ8Ô8ðFð Fñ 9Ô8ñô ðFðR „×ÒØÐLÐLÐLñô ð „×Ò˜¨5°$¨-Ñ8Ô8ðEð Eñ 9Ô8ñô ðEð, „×ÒØà
�GÐ	ÐGÐHØ
�HÐ	ÐHÐIØ
�FÐ	ÐFÐGØ
�IÐ	Ð JÐKð	ñô ð,ð ,ñô ð,ð €„ÑÔðð ñ Ôðð „×ÒØ5à	
ˆD�%˜˜˜t TÑ*Ô*Ð+Ø	
ˆE�5˜%˜%  4™.œ.Ð)Ø	
ˆD�$˜˜A˜ÐØ	
ˆE�4˜!˜ÐØ	��u˜i˜i˜iÐ(Ø	�˜  1˜vÐ&Ø	��t˜a˜SÐ!Ø	�˜˜bÐ!ð	ñô ð „×Ò˜¨¨°Ñ(?À.Ñ(PÑQÔQðNð Nñ RÔQñô ðNð. €„ÑÔðð ñ Ôðð* „×ÒØ5à	
ˆD�%˜˜˜q !™œÐ%Ø	
ˆE�5˜%˜%  1™+œ+Ð&Ø	
ˆD�$˜˜˜Ð%Ø	
ˆE�4˜˜˜Ð#Ø	��u˜l˜l˜lÐ+Ø	�˜˜y˜y˜yÐ)Ø	��t˜a ˜VÐ$Ø	�˜˜q˜cÐ"Ø	
ˆD�%˜˜˜t TÑ*Ô*Ð+Ø	
ˆE�5˜%˜%  4™.œ.Ð)Ø	
ˆD�$˜˜˜Ð%Ø	
ˆE�4˜˜˜Ð#Ø	��uÐ6Ð6Ð6Ð7Ø	�˜˜u˜u Q¨™~œ~Ð.Ø	��t˜a ˜VÐ$Ø	�˜˜q˜cÐ"Ø	��u˜o˜o˜oÐ.Ø	�˜˜|˜|˜|Ð,Ø	��t˜a˜SÐ!Ø	�˜˜bÐ!ð)ñô ð2 „×Ò˜¨¨°Ñ(?À.Ñ(PÑQÔQðNð Nñ RÔQñ3ô ð4Nð.IOð IOð IOðX „×ÒØ8Ð8Ð8à	
ˆD�%˜ÐØ	
ˆD�%˜ÐØ	
ˆD�%˜œÐ$Ø	
ˆD�%˜œÐ$Ø	
ˆE�5˜"œ*Ð%Ø	
ˆE�4˜œÐ$Ø	
ˆE�5˜"œ*Ð%Ø	
ˆE�4˜œÐ$ð	ñô ð „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñô ð:ð$ „×ÒØ8Ð8Ð8à	
ˆD�%˜ÐØ	
ˆD�%˜ÐØ	
ˆD�%˜œÐ$Ø	
ˆD�%˜œÐ$Ø	
ˆE�5˜"œ*Ð%Ø	
ˆE�4˜œÐ$ðñ
ô 
ð „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñ
ô 
ð:ð$ „×Ò˜ y y yÑ1Ô1Ø„×ÒØÐFÐFÐFñô ð „×ÒÐ+¨d°E¨]Ñ;Ô;Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜¨.Ñ9Ô9ð2ð 2ñ :Ô9ñ 8Ô7ñ <Ô;ñô ñ 2Ô1ð2ð2 „×ÒØ8Ð8Ð8à	
ˆD�%˜œÐ$Ø	
ˆD�%˜œÐ$Ø	
ˆE�5˜"œ*Ð%Ø	
ˆE�4˜œÐ$ð	ñô ð „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñô ð:ð" „×ÒØ1Ð1Ð1ðð ð ñô ð" „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñ#ô ð$:ð$ „×ÒØÐ'Ð(Ø@Ð@Ð@ñô ð „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñ	ô ð
:ð" „×ÒØ&Ð&Ð&ðð ð ñô ð „×Ò˜¨.Ñ9Ô9ð:ð :ñ :Ô9ñô ð :ð" „×ÒÐ+¨d°E¨]Ñ;Ô;Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜¨.Ñ9Ô9ðo8ð o8ñ :Ô9ñ 8Ô7ñ <Ô;ðo8ðd „×ÒØð 	Øð 
ˆCˆC��”˜˜œ ¤Ñ*Ô*Ô.Ñ/Ô/°!Ñ3Ñ4Ô4Ð5Øð 
ˆCˆC��”˜˜œ ¤Ñ*Ô*Ô.Ñ/Ô/Ñ0Ô0Ð1ðñô ð  „×ÒÐ+¨d°E¨]Ñ;Ô;Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜¨.Ñ9Ô9ðBNð BNñ :Ô9ñ 8Ô7ñ <Ô;ñ!ô ð&BNðJ „×ÒÐ+¨d°E¨]Ñ;Ô;Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜¨.Ñ9Ô9ðð ñ :Ô9ñ 8Ô7ñ <Ô;ðð* „×ÒÐ+¨^¸nÑ-LÑMÔMð=ð =ñ NÔMð=ð<8ð 8ð 8ð „×ÒØ„L�GÒð	6ð 	ð ñ ô ð „×Ò˜¨.Ñ9Ô9ð"Kð "Kñ :Ô9ñô ð"KðJ „×ÒØ.Ø-Ð-Ñ/Ô/ñô ð „×ÒÐ+¨d°E¨]Ñ;Ô;Ø„×Ò˜¨$°¨Ñ7Ô7Ø„×Ò˜Ð#9Ð#9Ð#9Ñ:Ô:ð*ð *ñ ;Ô:ñ 8Ô7ñ <Ô;ñ	ô ð*ð< „×ÒØ.Ø-Ð-Ñ/Ô/ñô ð#ð #ñ	ô ð#ð #ð #r'   