§
    rŠtjùH  ã                   óÈ
  — 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mZmZ d dlmZ d dlmZmZ d d	lmZ ej                             d
ddg¦  «        ej                             dddg¦  «        d„ ¦   «         ¦   «         Zej                             d
ddg¦  «        ej                             ddddddgg¦  «        ej                             dddg¦  «        d„ ¦   «         ¦   «         ¦   «         Zej                             dddg¦  «        d„ ¦   «         Zd„ Zd„ Zej                             d
ddg¦  «        ej                             dg d¢¦  «        d„ ¦   «         ¦   «         Zd „ Zej                             d
ddg¦  «        ej                             dg d!¢¦  «        d"„ ¦   «         ¦   «         Zej                             d#dd$g¦  «        ej                             d
ddg¦  «        ej                             dddddg d!¢g¦  «        d%„ ¦   «         ¦   «         ¦   «         Z ej                             ddg d&¢g¦  «        ej                             d
ddg¦  «        d'„ ¦   «         ¦   «         Z!ej                             d( e¦   «         ¦  «        ej                             d) ej"        d*¦  «         ej#        d+¦  «        dfd,„  ej$        d¦  «         %                    ej#        ¦  «        dfd-„ d.„ d/fd0„ d1„ d2d/gf ej&        g d3¢¦  «         ej&        g d4¢¦  «        d f ej&        ej'        ej'        d d5d6dg¦  «         ej&        g d7¢¦  «        d f ej&        g d3¢¦  «         ej&        g d7¢ej#        ¬8¦  «        d2d/gfg¦  «        d9„ ¦   «         ¦   «         Z(ej                             d
ddg¦  «        ej                             d:d+d;g¦  «        d<„ ¦   «         ¦   «         Z)ej                             d=d>ej'        dgfdd>gej'        ej'        gd?d@ggfg¦  «        dA„ ¦   «         Z*ej         +                    e edB¦  «        k     dC¬D¦  «        ej                             dEg dF¢¦  «        ej                             d
ddg¦  «        ej                             dGddg¦  «        dH„ ¦   «         ¦   «         ¦   «         ¦   «         Z,ej         +                    e edB¦  «        k     dI¬D¦  «        ej                             dEg dF¢¦  «        ej                             d
ddg¦  «        ej                             dGddg¦  «        dJ„ ¦   «         ¦   «         ¦   «         ¦   «         Z-dS )Ké    N)Úassert_allcloseÚassert_array_equal)Úapprox)Úconfig_context©Údevice)Úget_namespaceÚmove_toÚ)yield_namespace_device_dtype_combinations)Ú_array_api_for_tests)Ú
np_versionÚparse_version©Ú_weighted_percentileÚaverageTFÚsizeé
   é   c                 ó  — t          j        | ¦  «        }t          j        |¦  «        }t          ||d|¬¦  «        }| dz  dk    r |du r|t          j        |¦  «        k    sJ ‚dS t          |¦  «        t          j        |¦  «        k    sJ ‚dS )au  Ensure `_weighted_percentile` matches `median` when expected.

    With unit `sample_weight`, `_weighted_percentile` should match the median except
    when `average=False` and the number of samples is even.
    For an even array and `average=False`, `percentile_rank=50` gives the lower
    of the two 'middle' values, that are averaged when calculating the `median`.
    é2   ©r   é   r   FN)ÚnpÚarangeÚ	ones_liker   Úmedianr   )r   r   ÚyÚsample_weightÚscores        ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/utils/tests/test_stats.pyÚ'test_weighted_percentile_matches_medianr!      s‘   € õ 	Œ	�$‰Œ€AÝ”L ‘O”O€Må   M°2¸wÐGÑGÔG€Eð ˆa�x�1‚}€}˜ EÐ)Ð)Ø�œ	 !™œÒ$Ð$Ð$Ð$Ð$Ð$å�e‰}Œ}¥¤	¨!¡¤Ò,Ð,Ð,Ð,Ð,Ð,ó    Úpercentile_ranké   é#   é=   é   é/   c                 ó"  — t           j                             | ¦  «        }|                     d|¬¦  «        }t          j        |¦  «        }t          ||||¬¦  «        }|rd}nd}t          |¦  «        t          j        |||¬¦  «        k    sJ ‚dS )aë  Check `_weighted_percentile` with unit weights is correct.

    `average=True` results should be the same as `np.percentile`'s
    'averaged_inverted_cdf'.
    `average=False` results should be the same as `np.percentile`'s
    'inverted_cdf'.
    Note `np.percentile` is the same as `np.quantile` except `q` is in range [0, 100].

    We parametrize through different `percentile_rank` and `size` to
    ensure we get cases where `g=0` and `g>0` (see Hyndman and Fan 1996 for details).
    r$   ©r   r   Úaveraged_inverted_cdfÚinverted_cdf)ÚmethodN)r   ÚrandomÚRandomStateÚrandintr   r   r   Ú
percentile)	Úglobal_random_seedr   r#   r   Úrngr   Úswr   r-   s	            r    Ú&test_weighted_percentile_matches_numpyr5   (   s”   € õ" Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�Š�B˜TˆÑ"Ô"€AÝ	Œ�a‰Œ€Bå   B¨ÀÐIÑIÔI€Eàð  Ø(ˆˆàˆå�%‰=Œ=�BœM¨!¨_ÀVÐLÑLÔLÒLÐLÐLÐLÐLÐLr"   r   éd   c                 óî   — t          j        ddgddgg¦  «        }t          j        ddgddgg¦  «        }t          ||| d¬¦  «        }t          d¦  «        D ]}||         t	          d	¦  «        k    sJ ‚Œd
S )aÃ  Check `j+1` index is clipped to max, when `average=True`.

    `percentile_plus_one_indices` can exceed max index when `percentile_indices`
    is already at max index.
    Note that when `g` (Hyndman and Fan) / `fraction_above` is greater than 0,
    `j+1` (Hyndman and Fan) / `percentile_plus_one_indices` is calculated but
    never used, so it does not matter what this value is.
    When percentile of percentile rank 100 falls exactly on the last value in the
    `weighted_cdf`, `g=0` and `percentile_indices` is at max index. In this case
    we set `percentile_plus_one_indices` to be max index as well, so the result is
    the average of 2x the max index (i.e. last value of `weighted_cdf`).
    r   é   gš™™™™™¹?gš™™™™™É?r   é   Tr   g      ð?N)r   Úarrayr   Úranger   )r#   r   r4   r   Úidxs        r    Ú*test_weighted_percentile_plus_one_clip_maxr=   G   s�   € õ  	Œ�1�a�&˜1˜a˜&Ð!Ñ"Ô"€AÝ	Œ�C˜�:  1˜vÐ&Ñ	'Ô	'€BÝ   B¨ÀÐFÑFÔF€EÝ�Q‰xŒxð )ð )ˆØ�SŒz�V C™[œ[Ò(Ð(Ð(Ð(Ð(ð)ð )r"   c                  óÒ   — t          j        dt           j        ¬¦  «        } t          j        dt           j        ¬¦  «        }t	          | |d¦  «        }t          |¦  «        dk    sJ ‚dS )zJCheck `weighted_percentile` with unit weights and all 0 values in `array`.éf   ©Údtyper   r   N)r   ÚzerosÚfloat64Úonesr   r   )r   r4   r   s      r    Útest_weighted_percentile_equalrE   ^   s\   € å
Œ��BœJÐ'Ñ'Ô'€AÝ	Œ��BœJÐ	'Ñ	'Ô	'€BÝ   B¨Ñ+Ô+€EÝ�%‰=Œ=˜AÒÐÐÐÐÐr"   c                  ó¤   — t          j        d¦  «        } t          j        d¦  «        }t          | |d¦  «        }t          j        |¦  «        sJ ‚dS )zICheck `weighted_percentile` with all weights equal to 0 returns `np.nan`.r   r   N)r   r   rB   r   Úisnan)r   r4   Úvalues      r    Ú)test_weighted_percentile_all_zero_weightsrI   f   sF   € å
Œ	�"‰Œ€AÝ	Œ�"‰Œ€BÝ   B¨Ñ+Ô+€EÝŒ8�E‰?Œ?ÐÐˆ?ÐÐr"   zpercentile_rank, expected_value))r   r   )r   r9   )r6   r'   c                 óB  — t          j        g d¢¦  «        }t          j        g d¢¦  «        }t          t          j        ||f¦  «        j        t          j        ||f¦  «        j        || ¬¦  «        }t          d¦  «        D ]}t          ||         ¦  «        |k    sJ ‚ŒdS )a‹  Check leading, trailing and middle 0 weights behave correctly.

    Check that leading zero-weight observations are ignored when `percentile_rank=0`.
    See #20528 for details.
    Check that when `average=True` and the `j+1` ('plus one') index has sample weight
    of 0, it is ignored. Also check that trailing zero weight observations are ignored
    (e.g., when `percentile_rank=100`).
    )r   r8   r   r9   é   r'   é   )r   r   r8   r8   r   r8   r   r   r   N)r   r:   r   ÚvstackÚTr;   r   )r   r#   Úexpected_valuer   r4   rH   r<   s          r    Ú,test_weighted_percentile_ignores_zero_weightrP   n   s°   € õ 	ŒÐ&Ð&Ð&Ñ'Ô'€AÝ	ŒÐ'Ð'Ð'Ñ	(Ô	(€Bå Ý
Œ	�1�a�&ÑÔÔ�RœY¨¨B xÑ0Ô0Ô2°OÈWðñ ô €Eõ �Q‰xŒxð 4ð 4ˆÝ�e˜C”jÑ!Ô! ^Ò3Ð3Ð3Ð3Ð3ð4ð 4r"   c                  óˆ   — t          ddgddgd¬¦  «        } t          g d¢g d¢d¬¦  «        }t          | ¦  «        |k    sJ ‚dS )z=Check zero weights just before `max_index` handled correctly.r8   r9   Tr   )r8   r   r9   )r9   r   r9   N)r   r   )Úscore_without_zerosÚscore_with_zeross     r    Ú4test_weighted_percentile_average_zero_weight_plateaurT   …   s]   € å.°°1¨v¸¸1°vÀtÐLÑLÔLÐÝ+¨I¨I¨I°y°y°yÈ$ÐOÑOÔOÐÝÐ%Ñ&Ô&Ð*:Ò:Ð:Ð:Ð:Ð:Ð:r"   )r$   r%   r   r&   c                 óÊ  — t           j                             | ¦  «        }|                     dd¬¦  «        }|                     dd¬¦  «        }t          j        ||¦  «        }t          ||||¬¦  «        }t          |t          j        |¦  «        ||¬¦  «        }|t          |¦  «        k    sJ ‚|dk    r)|r)|t          t          j	        |¦  «        ¦  «        k    sJ ‚dS dS dS )z?Check integer weights give the same result as repeating values.r$   r   r*   r'   r   r   N)
r   r.   r/   r0   ÚchoiceÚrepeatr   r   r   r   )	r2   r#   r   r3   ÚxÚweightsÚ
x_repeatedÚpercentile_weightsÚpercentile_repeateds	            r    Ú3test_weighted_percentile_frequency_weight_semanticsr]   Œ   s   € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�Š�B˜RˆÑ Ô €AØ�jŠj˜ ˆjÑ$Ô$€Gå”˜1˜gÑ&Ô&€JÝ-Ø	ˆ7�O¨Wðñ ô Ðõ /Ø•B”L Ñ,Ô,¨oÀwðñ ô Ðð ¥Ð(;Ñ!<Ô!<Ò<Ð<Ð<Ð<à˜"ÒÐ ÐØ!¥V­B¬I°jÑ,AÔ,AÑ%BÔ%BÒBÐBÐBÐBð ÐÐÐØBÐBr"   Úconstanté   c                 ó   — t           j                             | ¦  «        }|                     dd¬¦  «        }|                     dd¬¦  «        }||z  }t          ||||¬¦  «        }t          ||||¬¦  «        }	|t          |	¦  «        k    sJ ‚dS )zßCheck multiplying weights by a constant does not change the result.

    Note scale invariance does not always hold when multiplying by a
    float due to cumulative sum numerical error (which grows proportional to n).
    r$   r*   r'   r   N)r   r.   r/   r0   rV   r   r   )
r2   r#   r   r^   r3   rX   rY   Úweights_multipliedr1   Úpercentile_multipliers
             r    Ú,test_weighted_percentile_constant_multiplierrc   £   s¦   € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�Š�B˜RˆÑ Ô €AØ�jŠj˜ ˆjÑ$Ô$€GØ  8Ñ+Ðå% a¨°/È7ÐSÑSÔS€JÝ0Ø	Ð˜¸ðñ ô Ðð �Ð 5Ñ6Ô6Ò6Ð6Ð6Ð6Ð6Ð6r"   )r$   r%   r   c                 ó`  ‡‡‡
‡‡‡— t           j                             | ¦  «        }|                     dd¬¦  «        }|                     dd¬¦  «        Š|                     dd¬¦  «        }t          j        ||f¦  «        j        Št          ‰‰‰‰¬¦  «        }t          ‰t          ¦  «        r�g }‰D ]>Š
| 
                    ˆˆ
ˆˆfd„t          ‰j        d         ¦  «        D ¦   «         ¦  «         Œ?t          j        |d¬	¦  «        }|j        ‰j        d         t          ‰¦  «        fk    sJ ‚nBˆˆˆˆfd
„t          ‰j        d         ¦  «        D ¦   «         }|j        ‰j        d         fk    sJ ‚t          ||¦  «         |                     dd¬¦  «        }	t          j        ‰|	f¦  «        j        Št          ‰‰‰‰¬¦  «        }t          ‰t          ¦  «        r�g }‰D ]>Š
| 
                    ˆˆ
ˆˆfd„t          ‰j        d         ¦  «        D ¦   «         ¦  «         Œ?t          j        |d¬	¦  «        }|j        ‰j        d         t          ‰¦  «        fk    sJ ‚nBˆˆˆˆfd„t          ‰j        d         ¦  «        D ¦   «         }|j        ‰j        d         fk    sJ ‚t          ||¦  «         dS )zECheck `_weighted_percentile` behaviour is correct when `array` is 2D.r   r*   r'   r$   ©r#   r   c                 óJ   •— g | ]}t          ‰d d …|f         ‰‰‰¬¦  «        ‘Œ S ©Nre   r   )Ú.0Úir   ÚprÚw1Úx_2ds     €€€€r    ú
<listcomp>z/test_weighted_percentile_2d.<locals>.<listcomp>Î   sO   ø€ ð ð ð ð õ )Ø˜Q˜Q˜Q ˜Tœ
 B¸ÀGðñ ô ðð ð r"   r8   éÿÿÿÿ)Úaxisc                 óJ   •— g | ]}t          ‰d d …|f         ‰‰‰¬¦  «        ‘Œ S rg   r   )rh   ri   r   r#   rk   rl   s     €€€€r    rm   z/test_weighted_percentile_2d.<locals>.<listcomp>Ù   sO   ø€ ð 
ð 
ð 
ð õ !Ø�Q�Q�Q˜�T”
˜B°Èðñ ô ð
ð 
ð 
r"   c                 ó^   •— g | ])}t          ‰d d …|f         ‰d d …|f         ‰‰¬¦  «        ‘Œ*S rg   r   )rh   ri   r   rj   Úw_2drl   s     €€€€r    rm   z/test_weighted_percentile_2d.<locals>.<listcomp>ï   s[   ø€ ð ð ð ð õ )Ø˜Q˜Q˜Q ˜Tœ
 D¨¨¨¨A¨¤JÀÈGðñ ô ðð ð r"   c                 ó^   •— g | ])}t          ‰d d …|f         ‰d d …|f         ‰‰¬¦  «        ‘Œ*S rg   r   )rh   ri   r   r#   rr   rl   s     €€€€r    rm   z/test_weighted_percentile_2d.<locals>.<listcomp>ú   s\   ø€ ð 
ð 
ð 
ð õ !Ø�Q�Q�Q˜�T”
˜D    A œJ¸ÐQXðñ ô ð
ð 
ð 
r"   N)r   r.   r/   r0   rV   rM   rN   r   Ú
isinstanceÚlistÚappendr;   ÚshapeÚstackÚlenr   )r2   r#   r   r3   Úx1Úx2ÚwpÚp_listÚp_axis_0Úw2rj   rk   rr   rl   s    ``       @@@@r    Útest_weighted_percentile_2dr€   º   sZ  øøøøøø€ õ
 Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ	�Š�R˜bˆÑ	!Ô	!€BØ	�Š�A˜BˆÑ	Ô	€Bà	�Š�R˜bˆÑ	!Ô	!€BÝŒ9�b˜"�XÑÔÔ €Då	Øˆb /¸7ð
ñ 
ô 
€Bõ �/¥4Ñ(Ô(ð ,ØˆØ!ð 	ð 	ˆBØ�MŠMðð ð ð ð ð ð õ # 4¤:¨a¤=Ñ1Ô1ð	ñ ô ñô ð ð õ ”8˜F¨Ð,Ñ,Ô,ˆØŒx˜DœJ qœM­3¨Ñ+?Ô+?Ð@Ò@Ð@Ð@Ð@Ð@ð
ð 
ð 
ð 
ð 
ð 
ð 
õ ˜4œ: aœ=Ñ)Ô)ð	
ñ 
ô 
ˆð Œx˜DœJ qœMÐ+Ò+Ð+Ð+Ð+å�B˜Ñ!Ô!Ð!ð 
�Š�A˜BˆÑ	Ô	€BÝŒ9�b˜"�XÑÔÔ €Då	Øˆd O¸Wð
ñ 
ô 
€Bõ �/¥4Ñ(Ô(ð ,ØˆØ!ð 	ð 	ˆBØ�MŠMðð ð ð ð ð ð õ # 4¤:¨a¤=Ñ1Ô1ð	ñ ô ñô ð ð õ ”8˜F¨Ð,Ñ,Ô,ˆØŒx˜DœJ qœM­3¨Ñ+?Ô+?Ð@Ò@Ð@Ð@Ð@Ð@ð
ð 
ð 
ð 
ð 
ð 
ð 
õ ˜4œ: aœ=Ñ)Ô)ð	
ñ 
ô 
ˆð Œx˜DœJ qœMÐ+Ò+Ð+Ð+Ð+å�B˜Ñ!Ô!Ð!Ð!Ð!r"   z(array_namespace, device_name, dtype_namezdata, weights, percentileé*   r8   c                 ó,   — |                       d¦  «        S ©Nr   ©Úrand©r3   s    r    ú<lambda>r‡     s   € �S—X’X˜b‘\”\€ r"   c                 ó.   — |                       dd¦  «        S )Nr   r9   r„   r†   s    r    r‡   r‡     s   € �S—X’X˜b !‘_”_€ r"   c                 óf   — |                       d¦  «                             t          j        ¦  «        S rƒ   ©r…   Úastyper   Úfloat32r†   s    r    r‡   r‡     s    € °#·(²(¸2±,´,×2EÒ2EÅbÄjÑ2QÔ2Q€ r"   éK   c                 ó.   — |                       dd¦  «        S ©Nr$   r9   r„   r†   s    r    r‡   r‡     s   € ˜Ÿš  Q™œ€ r"   c                 óh   — |                       dd¦  «                             t          j        ¦  «        S r�   rŠ   r†   s    r    r‡   r‡     s"   € ˜Ÿš  Q™œ×.Ò.­r¬zÑ:Ô:€ r"   é   )r   r8   r   r9   rK   r'   )r   r   r8   r8   r8   r   r9   rK   )r   r8   r8   r8   r8   r   r@   c                 ó¤  — t          |||¦  «        \  }}|                     d|¬¦  «        }	|                     d|¬¦  «        }
|dk    rD|                     |                     |	|
¦  «        |	k    ¦  «        rt          j        d|› �¦  «         t          j         	                    | ¦  «        }t          |¦  «        r ||¦  «        n|}t          |¦  «        r ||¦  «        n|}|                     |¦  «        }t          |||¦  «        }|                     ||¬¦  «        }|                     ||¬¦  «        }t          d¬¦  «        5  t          |||¦  «        }t          |¦  «        t          |¦  «        k    sJ ‚t!          |¦  «        d         t!          |¦  «        d         k    sJ ‚t#          |t          d¬¦  «        }d	d	d	¦  «         n# 1 swxY w Y   |j        |j        k    sJ ‚|j        |j        k    sJ ‚t)          ||¦  «         |d
k    r'|j        |j        cxk    rt          j        k    sn J ‚d	S |j        t          j        k    sJ ‚d	S )zECheck `_weighted_percentile` gives consistent results with array API.r8   r   r   zxp.nextafter is broken on T)Úarray_api_dispatchÚcpu)Úxpr   NrŒ   )r   rB   rD   ÚallÚ	nextafterÚpytestÚxfailr   r.   r/   Úcallabler‹   r   Úasarrayr   Úarray_devicer	   r
   rA   rw   r   rŒ   rC   )r2   Úarray_namespaceÚdevice_nameÚ
dtype_nameÚdatarY   r1   r•   r   ÚzeroÚoner3   ÚX_npÚ
weights_npÚ	result_npÚX_xpÚ
weights_xpÚ	result_xpÚresult_xp_nps                      r    Ú.test_weighted_percentile_array_api_consistencyrª     s—  € õR & o°{ÀJÑOÔO�J€Bˆð
 �8Š8�A˜fˆ8Ñ%Ô%€DØ
�'Š'�!˜Fˆ'Ñ
#Ô
#€CØ�Q‚€˜2Ÿ6š6 "§,¢,¨t°SÑ"9Ô"9¸TÒ"AÑBÔB€ÝŒÐ:°&Ð:Ð:Ñ;Ô;Ð;å
Œ)×
Ò
Ð 2Ñ
3Ô
3€CÝ  ™œÐ0ˆ4ˆ4�‰9Œ9ˆ9¨D€DÝ!)¨'Ñ!2Ô!2Ð?��˜‘”�¸€Jà�;Š;�zÑ"Ô"€Då$ T¨:°zÑBÔB€Ià�:Š:�d 6ˆ:Ñ*Ô*€DØ—’˜J¨v�Ñ6Ô6€Jå	¨4Ð	0Ñ	0Ô	0ð ?ð ?Ý(¨¨z¸:ÑFÔFˆ	Ý˜IÑ&Ô&­,°tÑ*<Ô*<Ò<Ð<Ð<Ð<Ý˜YÑ'Ô'¨Ô*­m¸DÑ.AÔ.AÀ!Ô.DÒDÐDÐDÐDÝ˜y­R¸Ð>Ñ>Ô>ˆð	?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð Ô ¤Ò0Ð0Ð0Ð0ØÔ ¤Ò0Ð0Ð0Ð0Ý�I˜|Ñ,Ô,Ð,ð �YÒÐØÔ! Y¤_ÐBÐBÒBÐB½¼
ÒBÐBÐBÐBÐBÐBÐBÐBàÔ!¥R¤ZÒ/Ð/Ð/Ð/Ð/Ð/s   ÅA9GÇGÇGÚsample_weight_ndimr   c                 óR  ‡‡‡‡‡	‡
— t           j                             | ¦  «        }|                     dd¦  «        Št           j        ‰ |j        ‰j        Ž dk     <   t          j        ‰¦  «        Š	|dk    r|                     ddd¬¦  «        Š
n|                     ddd	¬¦  «        Š
t          ‰‰
d
‰¬¦  «        }ˆˆ	fd„t          ‰j        d         ¦  «        D ¦   «         Š‰
j
        dk    rJt          j        ‰
‰j        d         ¦  «                             ‰j        d         ‰j        d         ¦  «        Š
ˆ	ˆ
fd„t          ‰j        d         ¦  «        D ¦   «         Št          j        ˆˆˆfd„t          ‰j        d         ¦  «        D ¦   «         ¦  «        }t          ||¦  «         dS )a>  Test `_weighted_percentile` ignores NaNs.

    Calling `_weighted_percentile` on an array with nan values returns the same
    results as calling `_weighted_percentile` on a filtered version of the data.
    We test both with sample_weight of the same shape as the data and with
    one-dimensional sample_weight.
    r6   r   ç      à?r   r8   rL   )r6   r   r*   )r6   é   r   c                 ó:   •— g | ]}‰‰d d …|f          |f         ‘ŒS ©N© )rh   ÚcolÚarray_with_nansÚnan_masks     €€r    rm   z9test_weighted_percentile_nan_filtered.<locals>.<listcomp>o  sC   ø€ ð ð ð àð 	˜ ! ! ! S &Ô)Ð)¨3Ð.Ô/ðð ð r"   r   c                 ó:   •— g | ]}‰‰d d …|f          |f         ‘ŒS r°   r±   )rh   r²   r´   r   s     €€r    rm   z9test_weighted_percentile_nan_filtered.<locals>.<listcomp>w  s@   ø€ ð ð ð Ø25ˆ�x    3 Ô'Ð'¨Ð,Ô-ðð ð r"   c                 óN   •— g | ]!}t          ‰|         ‰|         d ‰¬¦  «        ‘Œ"S )r®   r   r   )rh   r²   r   Úfiltered_arrayÚfiltered_weightss     €€€r    rm   z9test_weighted_percentile_nan_filtered.<locals>.<listcomp>|  sN   ø€ ð 	
ð 	
ð 	
ð õ !Ø˜sÔ#Ð%5°cÔ%:¸BÈðñ ô ð	
ð 	
ð 	
r"   N)r   r.   r/   r…   Únanrw   rG   r0   r   r;   ÚndimrW   Úreshaper:   r   )r2   r«   r   r3   ÚresultsÚexpected_resultsr³   r·   r¸   r´   r   s     `   @@@@@r    Ú%test_weighted_percentile_nan_filteredr¾   T  së  øøøøøø€ õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ—h’h˜s BÑ'Ô'€OÝ>@¼f€O�H�C”H˜oÔ3Ð4°sÒ:Ñ;ÝŒx˜Ñ(Ô(€Hà˜QÒÐØŸš A q¨y˜Ñ9Ô9ˆˆàŸš A q¨v˜Ñ6Ô6ˆõ # ?°MÀ2ÈwÐWÑWÔW€Gðð ð ð ð å˜Ô.¨qÔ1Ñ2Ô2ðñ ô €Nð Ô˜QÒÐÝœ	 -°Ô1FÀqÔ1IÑJÔJ×RÒRØÔ! !Ô$ oÔ&;¸AÔ&>ñ
ô 
ˆðð ð ð ð Ý9>¸Ô?TÐUVÔ?WÑ9XÔ9Xðñ ô Ðõ ”xð	
ð 	
ð 	
ð 	
ð 	
ð 	
õ ˜_Ô2°1Ô5Ñ6Ô6ð		
ñ 	
ô 	
ñô Ðõ Ð'¨Ñ1Ô1Ð1Ð1Ð1r"   zpercentile_rank, expectedéZ   g       @g      @c           	      ó‚  — t          j        t           j        dgt           j        dgt           j        t           j        gt           j        t           j        gt           j        dgt           j        t           j        gg¦  «        }t          j        |¦  «        }t	          ||| ¦  «        }t          j        ||d¬¦  «        sJ ‚dS )zCCheck that nans are ignored in general, except for all NaN columns.r'   r8   r   T)Ú	equal_nanN)r   r:   r¹   r   r   Úarray_equal)r#   Úexpectedr:   rY   Úvaluess        r    Ú'test_weighted_percentile_all_nan_columnrÅ   ‡  s    € õ ŒHåŒV�QˆKÝŒV�QˆKÝŒV•R”VÐÝŒV•R”VÐÝŒV�QˆKÝŒV•R”VÐð	
ñ	ô 	€Eõ Œl˜5Ñ!Ô!€GÝ! %¨°/ÑBÔB€Fõ
 Œ>˜& (°dÐ;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;r"   z2.0z2np.quantile only accepts weights since version 2.0)Úreasonr1   )éB   r   r   Úuniform_weightc                 ó¾  — |r|st          j        d¦  «         t          j                             |¦  «        }|                     dd¦  «        }|r.t          j        |¦  «        |                     ddd¬¦  «        z  }n|                     ddd¬¦  «        }t          ||| |¬¦  «        }t          j	        || dz  |s|nd	|rd
ndd¬¦  «        }t          ||¦  «         d	S )zICheck `_weighted_percentile` is equivalent to `np.quantile` with weights.zHnp.quantile does not support weights with method='averaged_inverted_cdf'r   r6   r8   rL   r*   ©r   r6   r   Nr+   r,   r   ©rY   r-   ro   )r˜   Úskipr   r.   r/   r…   r   r0   r   Úquantiler   )	r1   r   rÈ   r2   r3   r:   r   Úpercentile_weighted_percentileÚpercentile_numpy_quantiles	            r    Ú,test_weighted_percentile_like_numpy_quantilerÐ   ¤  s  € ð ð 
�~ð 
ÝŒØVñ	
ô 	
ð 	
õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�HŠH�R˜ÑÔ€EØð :Ýœ UÑ+Ô+¨c¯kªk¸!¸QÀQ¨kÑ.GÔ.GÑGˆˆàŸš A q¨y˜Ñ9Ô9ˆå%9Øˆ}˜j°'ð&ñ &ô &Ð"õ !#¤ØØ�SÑØ%3Ð=��¸Ø*1ÐEÐ&Ð&°~Øð!ñ !ô !Ðõ Ð5Ð7PÑQÔQÐQÐQÐQr"   z5np.nanquantile only accepts weights since version 2.0c                 óþ  — |r|st          j        d¦  «         t          j                             |¦  «        }|                     dd¦  «        }t          j        | |j        |j        Ž dk     <   |r.t          j        |¦  «        | 	                    ddd¬¦  «        z  }n| 	                    ddd¬¦  «        }t          ||| |¬	¦  «        }t          j        || dz  |s|nd
|rdndd¬¦  «        }t          ||¦  «         d
S )zICheck `_weighted_percentile` equivalent to `np.nanquantile` with weights.zKnp.nanquantile does not support weights with method='averaged_inverted_cdf'r   r6   r­   r8   rL   r*   rÊ   r   Nr+   r,   r   rË   )r˜   rÌ   r   r.   r/   r…   r¹   rw   r   r0   r   Únanquantiler   )	r1   r   rÈ   r2   r3   r³   r   rÎ   Úpercentile_numpy_nanquantiles	            r    Ú/test_weighted_percentile_like_numpy_nanquantilerÔ   Ê  sC  € ð ð 
�~ð 
ÝŒð-ñ	
ô 	
ð 	
õ
 Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ—h’h˜r 3Ñ'Ô'€OÝ>@¼f€O�H�C”H˜oÔ3Ð4°sÒ:Ñ;Øð :Ýœ _Ñ5Ô5¸¿ºØØØð 9Dñ 9
ô 9
ñ 
ˆˆð Ÿš A q¨y˜Ñ9Ô9ˆå%9Ø˜¨
¸Gð&ñ &ô &Ð"õ $&¤>ØØ�SÑØ%3Ð=��¸Ø*1ÐEÐ&Ð&°~Øð$ñ $ô $Ð õ Ð5Ð7SÑTÔTÐTÐTÐTr"   ).Únumpyr   r˜   Únumpy.testingr   r   r   Úsklearn._configr   Úsklearn.utils._array_apir   rœ   r	   r
   r   Úsklearn.utils.estimator_checksr   Úsklearn.utils.fixesr   r   Úsklearn.utils.statsr   ÚmarkÚparametrizer!   r5   r=   rE   rI   rP   rT   r]   rc   r€   rŒ   Úint32rD   r‹   r:   r¹   rª   r¾   rÅ   ÚskipifrÐ   rÔ   r±   r"   r    ú<module>rà      sV  ðØ Ð Ð Ð Ø €€€Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø Ð Ð Ð Ð Ð à *Ð *Ð *Ð *Ð *Ð *Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;ðð ð ð ð ð ð ð ð ð ð
 @Ð ?Ð ?Ð ?Ð ?Ð ?Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ð „×Ò˜ T¨5 MÑ2Ô2Ø„×Ò˜ " b Ñ*Ô*ð-ð -ñ +Ô*ñ 3Ô2ð-ð( „×Ò˜ T¨5 MÑ2Ô2Ø„×ÒÐ*¨R°°R¸!¸R¸Ð,AÑBÔBØ„×Ò˜ " b Ñ*Ô*ðMð Mñ +Ô*ñ CÔBñ 3Ô2ðMð8 „×ÒÐ*¨R°¨IÑ6Ô6ð)ð )ñ 7Ô6ð)ð,ð ð ðð ð ð „×Ò˜ T¨5 MÑ2Ô2Ø„×ÒÐ:Ð<WÐ<WÐ<WÑXÔXð4ð 4ñ YÔXñ 3Ô2ð4ð*;ð ;ð ;ð „×Ò˜ T¨5 MÑ2Ô2Ø„×ÒÐ*Ð,<Ð,<Ð,<Ñ=Ô=ðCð Cñ >Ô=ñ 3Ô2ðCð* „×Ò˜ a¨ VÑ,Ô,Ø„×Ò˜ T¨5 MÑ2Ô2Ø„×ÒÐ*¨R°°R¸Ð=MÐ=MÐ=MÐ,NÑOÔOð7ð 7ñ PÔOñ 3Ô2ñ -Ô,ð7ð( „×ÒÐ*¨R°°°Ð,>Ñ?Ô?Ø„×Ò˜ T¨5 MÑ2Ô2ðF"ð F"ñ 3Ô2ñ @Ô?ðF"ðR „×ÒØ.Ø-Ð-Ñ/Ô/ñô ð „×ÒØð 
ˆŒ�B‰Œ˜˜œ !™œ bÐ)à	!Ð	! 7 2¤7¨2¡;¤;×#5Ò#5°b´hÑ#?Ô#?ÀÐDà	$Ð	$Ð&QÐ&QÐSUÐVð (Ð'Ø:Ð:Ø�ˆHð	
ð 
ˆŒÐ$Ð$Ð$Ñ	%Ô	% x r¤xÐ0BÐ0BÐ0BÑ'CÔ'CÀQÐGà	ˆŒ�2”6˜2œ6 1 a¨¨AÐ.Ñ	/Ô	/°°´Ð:LÐ:LÐ:LÑ1MÔ1MÈqÐQð ˆBŒHÐ'Ð'Ð'Ñ(Ô(ØˆBŒHÐ'Ð'Ð'¨r¬xÐ8Ñ8Ô8Ø�ˆHð	
ð%ñô ð6-0ð -0ñ7ô ñ	ô ð>-0ð` „×Ò˜ T¨5 MÑ2Ô2Ø„×ÒÐ-°°1¨vÑ6Ô6ð.2ð .2ñ 7Ô6ñ 3Ô2ð.2ðb „×ÒØà	ˆbŒf�aˆ[ÐØ
ˆbˆ�R”V˜RœVÐ$ s¨C jÐ1Ð2ðñô ð<ð <ñô ð<ð, „×ÒØ��˜uÑ%Ô%Ò%Ø?ð ñ ô ð „×Ò˜ | | |Ñ4Ô4Ø„×Ò˜ U¨D MÑ2Ô2Ø„×ÒÐ)¨E°4¨=Ñ9Ô9ðRð Rñ :Ô9ñ 3Ô2ñ 5Ô4ñ	ô ðRð> „×ÒØ��˜uÑ%Ô%Ò%ØBð ñ ô ð „×Ò˜ | | |Ñ4Ô4Ø„×Ò˜ U¨D MÑ2Ô2Ø„×ÒÐ)¨E°4¨=Ñ9Ô9ð"Uð "Uñ :Ô9ñ 3Ô2ñ 5Ô4ñ	ô ð"Uð "Uð "Ur"   