§
    rŠtjý-  ã                   óì   — d dl mZ d dlmZ d dlmZ d dlZd dlm	Z	m
Z
mZmZ d dlmZ dddœd	„Zdd
„Z G d„ de¦  «        Zd„ Z G d„ de¦  «        Zd„ Zd„ Zddœd„Zdd„Z G d„ de¦  «        Zd„ ZdS )é    )ÚCounter)Úsuppress)Ú
NamedTupleN)Ú_isinÚdeviceÚget_namespaceÚxpx©Úis_scalar_nanF©Úreturn_inverseÚreturn_countsc                ój   — | j         t          k    rt          | ||¬¦  «        S t          | ||¬¦  «        S )a�  Helper function to find unique values with support for python objects.

    Uses pure python method for object dtype, and numpy method for
    all other dtypes.

    Parameters
    ----------
    values : ndarray
        Values to check for unknowns.

    return_inverse : bool, default=False
        If True, also return the indices of the unique values.

    return_counts : bool, default=False
        If True, also return the number of times each unique item appears in
        values.

    Returns
    -------
    unique : ndarray
        The sorted unique values.

    unique_inverse : ndarray
        The indices to reconstruct the original array from the unique array.
        Only provided if `return_inverse` is True.

    unique_counts : ndarray
        The number of times each of the unique values comes up in the original
        array. Only provided if `return_counts` is True.
    r   )ÚdtypeÚobjectÚ_unique_pythonÚ
_unique_np)Úvaluesr   r   s      úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/utils/_encode.pyÚ_uniquer      sO   € ð> „|•vÒÐÝØ >Àð
ñ 
ô 
ð 	
õ Ø˜~¸]ðñ ô ð ó    c                 ó`  — t          | ¦  «        \  }}d\  }}|r|r|                     | ¦  «        \  }}}}nK|r|                     | ¦  «        \  }}n0|r|                     | ¦  «        \  }}n|                     | ¦  «        }|j        rwt          |d         ¦  «        rb|                     ||j        ¦  «        }|d|dz   …         }|r	||||k    <   |r-| 	                    ||d…         ¦  «        ||<   |d|dz   …         }|f}	|r|	|fz  }	|r|	|fz  }	t          |	¦  «        dk    r|	d         n|	S )z…Helper function to find unique values for numpy arrays that correctly
    accounts for nans. See `_unique` documentation for details.)NNéÿÿÿÿNé   r   )r   Ú
unique_allÚunique_inverseÚunique_countsÚunique_valuesÚsizer   ÚsearchsortedÚnanÚsumÚlen)
r   r   r   ÚxpÚ_ÚinverseÚcountsÚuniquesÚnan_idxÚrets
             r   r   r   7   s  € õ ˜&Ñ!Ô!�E€Bˆà �O€GˆVàð +˜-ð +Ø&(§m¢m°FÑ&;Ô&;Ñ#ˆ��G˜V˜VØ	ð +Ø×,Ò,¨VÑ4Ô4Ñˆ��Ø	ð +Ø×*Ò*¨6Ñ2Ô2‰ˆ��à×"Ò" 6Ñ*Ô*ˆð „|ð +� g¨b¤kÑ2Ô2ð +Ø—/’/ '¨2¬6Ñ2Ô2ˆØ˜-˜G a™K˜-Ô(ˆØð 	1Ø)0ˆG�G˜gÒ%Ñ&àð 	+Ø Ÿfšf V¨G¨H¨HÔ%5Ñ6Ô6ˆF�7‰OØ˜M˜g¨™k˜MÔ*ˆFàˆ*€Càð Ø�ˆzÑˆàð Ø�ˆyÑˆå˜‘X”X ’]�]ˆ3ˆqŒ6ˆ6¨Ð+r   c                   ó.   — e Zd ZU dZeed<   eed<   d„ ZdS )ÚMissingValuesz'Data class for missing data informationr!   Únonec                 óŽ   — g }| j         r|                     d¦  «         | j        r|                     t          j        ¦  «         |S )z3Convert tuple to a list where None is always first.N)r-   Úappendr!   Únp)ÚselfÚoutputs     r   Úto_listzMissingValues.to_listd   sF   € àˆØŒ9ð 	 Ø�MŠM˜$ÑÔÐØŒ8ð 	"Ø�MŠM�"œ&Ñ!Ô!Ð!Øˆr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚboolÚ__annotations__r3   © r   r   r,   r,   ^   s=   € € € € € € Ø1Ð1à	€I€I�IØ
€J€J�Jðð ð ð ð r   r,   c                 óî   — d„ | D ¦   «         }|s| t          dd¬¦  «        fS d|v r7t          |¦  «        dk    rt          dd¬¦  «        }n#t          dd¬¦  «        }nt          dd¬¦  «        }| |z
  }||fS )a.  Extract missing values from `values`.

    Parameters
    ----------
    values: set
        Set of values to extract missing from.

    Returns
    -------
    output: set
        Set with missing values extracted.

    missing_values: MissingValues
        Object with missing value information.
    c                 ó4   — h | ]}|�t          |¦  «        ¯|’ŒS ©Nr
   )Ú.0Úvalues     r   ú	<setcomp>z#_extract_missing.<locals>.<setcomp>~   s,   € ð ð ð Ø U ]µmÀEÑ6JÔ6J ]ˆ ] ] ]r   F)r!   r-   Nr   T)r,   r#   )r   Úmissing_values_setÚoutput_missing_valuesr2   s       r   Ú_extract_missingrC   n   s½   € ð ð Ø!ðñ ô Ðð ð <Ø•}¨°UÐ;Ñ;Ô;Ð;Ð;àÐ!Ð!Ð!ÝÐ!Ñ"Ô" aÒ'Ð'Ý$1°eÀ$Ð$GÑ$GÔ$GÐ!Ð!õ %2°dÀÐ$FÑ$FÔ$FÐ!Ð!å -°$¸UÐ CÑ CÔ CÐð Ð(Ñ(€FØÐ(Ð(Ð(r   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú_nandictz!Dictionary with support for nans.c                 ó°   •— t          ¦   «                              |¦  «         |                     ¦   «         D ]\  }}t          |¦  «        r
|| _         d S Œd S r=   )ÚsuperÚ__init__Úitemsr   Ú	nan_value)r1   ÚmappingÚkeyr?   Ú	__class__s       €r   rH   z_nandict.__init__—   sc   ø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!Ø!Ÿ-š-™/œ/ð 	ð 	‰JˆC�Ý˜SÑ!Ô!ð Ø!&�”Ø��ðð	ð 	r   c                 ól   — t          | d¦  «        rt          |¦  «        r| j        S t          |¦  «        ‚)NrJ   )Úhasattrr   rJ   ÚKeyError©r1   rL   s     r   Ú__missing__z_nandict.__missing__ž   ó7   € Ý�4˜Ñ%Ô%ð 	"­-¸Ñ*<Ô*<ð 	"Ø”>Ð!Ý�s‰mŒmÐr   )r4   r5   r6   r7   rH   rR   Ú__classcell__©rM   s   @r   rE   rE   ”   sM   ø€ € € € € Ø+Ð+ðð ð ð ð ðð ð ð ð ð ð r   rE   c                 óÖ   ‡— t          | |¦  «        \  }}t          d„ t          |¦  «        D ¦   «         ¦  «        Š|                     ˆfd„| D ¦   «         t	          | ¦  «        ¬¦  «        S )z,Map values based on its position in uniques.c                 ó   — i | ]\  }}||“Œ	S r:   r:   )r>   ÚiÚvals      r   ú
<dictcomp>z#_map_to_integer.<locals>.<dictcomp>§   s   € Ð>Ð>Ð>¡  C�c˜1Ð>Ð>Ð>r   c                 ó    •— g | ]
}‰|         ‘ŒS r:   r:   )r>   ÚvÚtables     €r   ú
<listcomp>z#_map_to_integer.<locals>.<listcomp>¨   s   ø€ Ð0Ð0Ð0 A�u˜Q”xÐ0Ð0Ð0r   )r   )r   rE   Ú	enumerateÚasarrayr   )r   r(   r$   r%   r]   s       @r   Ú_map_to_integerra   ¤   sk   ø€ å˜& 'Ñ*Ô*�E€BˆÝÐ>Ð>­9°WÑ+=Ô+=Ð>Ñ>Ô>Ñ?Ô?€EØ�:Š:Ð0Ð0Ð0Ð0¨Ð0Ñ0Ô0½À¹¼ˆ:ÑHÔHÐHr   c                ó"  — 	 t          | ¦  «        }t          |¦  «        \  }}t          |¦  «        }|                     |                     ¦   «         ¦  «         t          j        || j        ¬¦  «        }nP# t          $ rC t          d„ t          d„ | D ¦   «         ¦  «        D ¦   «         ¦  «        }t          d|› �¦  «        ‚w xY w|f}|r|t          | |¦  «        fz  }|r|t          | |¦  «        fz  }t          |¦  «        dk    r|d         n|S )N©r   c              3   ó$   K  — | ]}|j         V — Œd S r=   )r6   )r>   Úts     r   ú	<genexpr>z!_unique_python.<locals>.<genexpr>µ   s$   è è € ÐLÐL¨!�q”~ÐLÐLÐLÐLÐLÐLr   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r=   )Útype)r>   r\   s     r   rf   z!_unique_python.<locals>.<genexpr>µ   s(   è è € Ð2KÐ2K¸qµ4¸±7´7Ð2KÐ2KÐ2KÐ2KÐ2KÐ2Kr   zPEncoders require their input argument must be uniformly strings or numbers. Got r   r   )ÚsetrC   ÚsortedÚextendr3   r0   Úarrayr   Ú	TypeErrorra   Ú_get_countsr#   )r   r   r   Úuniques_setÚmissing_valuesr(   Útypesr*   s           r   r   r   «   s<  € ð
Ý˜&‘k”kˆÝ&6°{Ñ&CÔ&CÑ#ˆ�^å˜Ñ%Ô%ˆØ�Š�~×-Ò-Ñ/Ô/Ñ0Ô0Ð0Ý”(˜7¨&¬,Ð7Ñ7Ô7ˆˆøÝð 
ð 
ð 
ÝÐLÐL­sÐ2KÐ2KÀFÐ2KÑ2KÔ2KÑ/KÔ/KÐLÑLÔLÑLÔLˆÝð/Ø',ð/ð /ñ
ô 
ð 	
ð
øøøð ˆ*€Càð 3Ø• ¨Ñ0Ô0Ð2Ñ2ˆàð /Ø•˜F GÑ,Ô,Ð.Ñ.ˆå˜‘X”X ’]�]ˆ3ˆqŒ6ˆ6¨Ð+s   ‚A2A5 Á5ACT)Úcheck_unknownc                ó@  — t          | |¦  «        \  }}|                     | j        d¦  «        s5	 t          | |¦  «        S # t          $ r}t          d|› �¦  «        ‚d}~ww xY w|r$t          | |¦  «        }|rt          d|› �¦  «        ‚|                     || ¦  «        S )aØ  Helper function to encode values into [0, n_uniques - 1].

    Uses pure python method for object dtype, and numpy method for
    all other dtypes.
    The numpy method has the limitation that the `uniques` need to
    be sorted. Importantly, this is not checked but assumed to already be
    the case. The calling method needs to ensure this for all non-object
    values.

    Parameters
    ----------
    values : ndarray
        Values to encode.
    uniques : ndarray
        The unique values in `values`. If the dtype is not object, then
        `uniques` needs to be sorted.
    check_unknown : bool, default=True
        If True, check for values in `values` that are not in `unique`
        and raise an error. This is ignored for object dtype, and treated as
        True in this case. This parameter is useful for
        _BaseEncoder._transform() to avoid calling _check_unknown()
        twice.

    Returns
    -------
    encoded : ndarray
        Encoded values
    Únumericz%y contains previously unseen labels: N)r   Úisdtyper   ra   rP   Ú
ValueErrorÚ_check_unknownr    )r   r(   rr   r$   r%   ÚeÚdiffs          r   Ú_encoderz   Å   sÍ   € õ: ˜& 'Ñ*Ô*�E€BˆØ�:Š:�f”l IÑ.Ô.ð 
0ð	JÝ" 6¨7Ñ3Ô3Ð3øÝð 	Jð 	Jð 	JÝÐHÀQÐHÐHÑIÔIÐIøøøøð	Jøøøð ð 	QÝ! &¨'Ñ2Ô2ˆDØð QÝ Ð!OÈÐ!OÐ!OÑPÔPÐPØ�Š˜w¨Ñ/Ô/Ð/s   °A  Á 
A!Á
AÁA!c                 ó‚  ‡‡‡— t          | |¦  «        \  }}d}|                     | j        d¦  «        �st          | ¦  «        }t	          |¦  «        \  }}t          |¦  «        Št	          ‰¦  «        \  ŠŠ|‰z
  }|j        o‰j         }	|j        o‰j         }
ˆˆfd„Š|rQ|s|	s|
r"|                     ˆfd„| D ¦   «         ¦  «        }n)|                     t          | ¦  «        |j
        ¬¦  «        }t          |¦  «        }|
r|                     d¦  «         |	r|                     t          j        ¦  «         nþ|                     | ¦  «        }t          j        ||d|¬¦  «        }|rB|j        rt%          | ||¦  «        }n)|                     t          | ¦  «        |j
        ¬¦  «        }|                     |                     |¦  «        ¦  «        rV|                     |¦  «        }|                     |¦  «        r,|j        r|r|                     | ¦  «        }d||<   ||          }t          |¦  «        }|r||fS |S )	a‰  
    Helper function to check for unknowns in values to be encoded.

    Uses pure python method for object dtype, and numpy method for
    all other dtypes.

    Parameters
    ----------
    values : array
        Values to check for unknowns.
    known_values : array
        Known values. Must be unique.
    return_mask : bool, default=False
        If True, return a mask of the same shape as `values` indicating
        the valid values.

    Returns
    -------
    diff : list
        The unique values present in `values` and not in `know_values`.
    valid_mask : boolean array
        Additionally returned if ``return_mask=True``.

    Nrt   c                 óN   •— | ‰v p ‰j         o| d u p‰j        ot          | ¦  «        S r=   )r-   r!   r   )r?   Úmissing_in_uniquesro   s    €€r   Úis_validz _check_unknown.<locals>.is_valid  s>   ø€ à˜Ð$ð EØ&Ô+Ð=°¸°ðEà&Ô*ÐC­}¸UÑ/CÔ/Cðr   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r:   r:   )r>   r?   r~   s     €r   r^   z"_check_unknown.<locals>.<listcomp>   s!   ø€ Ð&KÐ&KÐ&K¸5 x x°¡¤Ð&KÐ&KÐ&Kr   rc   T)Úassume_uniquer$   r   )r   ru   r   ri   rC   r!   r-   rl   Úonesr#   r8   Úlistr/   r0   r   r	   Ú	setdiff1dr   r   ÚanyÚisnan)r   Úknown_valuesÚreturn_maskr$   r%   Ú
valid_maskÚ
values_setÚmissing_in_valuesry   Únan_in_diffÚnone_in_diffr   Údiff_is_nanÚis_nanr~   r}   ro   s                 @@@r   rw   rw   ð   s‚  øøø€ õ2 ˜& ,Ñ/Ô/�E€BˆØ€Jà�:Š:�f”l IÑ.Ô.ñ 1Ý˜‘[”[ˆ
Ý(8¸Ñ(DÔ(DÑ%ˆ
Ð%å˜,Ñ'Ô'ˆÝ*:¸;Ñ*GÔ*GÑ'ˆÐ'Ø˜KÑ'ˆà'Ô+ÐJÐ4FÔ4JÐ0JˆØ(Ô-ÐMÐ6HÔ6MÐ2Mˆð	ð 	ð 	ð 	ð 	ð 	ð ð 	AØð A�{ð A lð AØŸXšXÐ&KÐ&KÐ&KÐ&KÀFÐ&KÑ&KÔ&KÑLÔL�
�
àŸWšW¥S¨¡[¤[¸¼˜WÑ@Ô@�
å�D‰zŒzˆØð 	Ø�KŠK˜ÑÔÐØð 	 Ø�KŠK�œÑÔÐøà×(Ò(¨Ñ0Ô0ˆÝŒ}˜]¨LÈÐQSÐTÑTÔTˆØð 	AØŒyð AÝ" 6¨<¸Ñ<Ô<�
�
àŸWšW¥S¨¡[¤[¸¼˜WÑ@Ô@�
ð �6Š6�"—(’(˜<Ñ(Ô(Ñ)Ô)ð 		*ØŸ(š( 4™.œ.ˆKØ�vŠv�kÑ"Ô"ð *à”9ð + ð +ØŸXšX fÑ-Ô-�FØ)*�J˜vÑ&ð ˜[˜LÔ)�Ý�D‰zŒzˆàð  Ø�ZÐÐØ€Kr   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú_NaNCounterz$Counter with support for nan values.c                 óp   •— t          ¦   «                              |                      |¦  «        ¦  «         d S r=   )rG   rH   Ú_generate_items)r1   rI   rM   s     €r   rH   z_NaNCounter.__init__G  s/   ø€ Ý‰Œ×Ò˜×-Ò-¨eÑ4Ô4Ñ5Ô5Ð5Ð5Ð5r   c              #   óŠ   K  — |D ]=}t          |¦  «        s|V — Œt          | d¦  «        sd| _        | xj        dz  c_        Œ>dS )z>Generate items without nans. Stores the nan counts separately.Ú	nan_countr   r   N)r   rO   r”   )r1   rI   Úitems      r   r’   z_NaNCounter._generate_itemsJ  sf   è è € àð 	 ð 	 ˆDÝ  Ñ&Ô&ð Ø�
�
�
ØÝ˜4 Ñ-Ô-ð #Ø!"�”ØˆNŒN˜aÑˆNŒNˆNð	 ð 	 r   c                 ól   — t          | d¦  «        rt          |¦  «        r| j        S t          |¦  «        ‚)Nr”   )rO   r   r”   rP   rQ   s     r   rR   z_NaNCounter.__missing__T  rS   r   )r4   r5   r6   r7   rH   r’   rR   rT   rU   s   @r   r�   r�   D  s\   ø€ € € € € Ø.Ð.ð6ð 6ð 6ð 6ð 6ð ð  ð  ðð ð ð ð ð ð r   r�   c                 óŠ  — | j         j        dv rŠt          | ¦  «        }t          j        t          |¦  «        t          j        ¬¦  «        }t          |¦  «        D ]<\  }}t          t          ¦  «        5  ||         ||<   ddd¦  «         n# 1 swxY w Y   Œ=|S t          | d¬¦  «        \  }}t          j        ||d¬¦  «        }t          j        |d         ¦  «        rt          j        |d         ¦  «        rd|d<   t          j        |||         ¦  «        }	t          j        |t          j        ¬¦  «        }||	         ||<   |S )zÌGet the count of each of the `uniques` in `values`.

    The counts will use the order passed in by `uniques`. For non-object dtypes,
    `uniques` is assumed to be sorted and `np.nan` is at the end.
    ÚOUrc   NT)r   )r€   r   )r   Úkindr�   r0   Úzerosr#   Úint64r_   r   rP   r   Úisinr…   r    Ú
zeros_like)
r   r(   Úcounterr2   rX   r•   r   r'   Úuniques_in_valuesÚunique_valid_indicess
             r   rn   rn   Z  sy  € ð „|Ô˜DÐ Ð Ý˜fÑ%Ô%ˆÝ”�#˜g™,œ,­b¬hÐ7Ñ7Ô7ˆÝ  Ñ)Ô)ð 	*ð 	*‰GˆAˆtÝ�(Ñ#Ô#ð *ð *Ø# DœM��q‘	ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *øàˆå& v¸TÐBÑBÔBÑ€M�6õ œ ¨ÀdÐKÑKÔKÐÝ	„x�˜bÔ!Ñ"Ô"ð %¥r¤x°¸´Ñ'<Ô'<ð %Ø $Ð˜"Ñåœ?¨=¸'ÐBSÔ:TÑUÔUÐÝŒ]˜7­"¬(Ð3Ñ3Ô3€FØ &Ð';Ô <€FÐÑØ€Ms   Á3BÂB	ÂB	)FF)F)Úcollectionsr   Ú
contextlibr   Útypingr   Únumpyr0   Úsklearn.utils._array_apir   r   r   r	   Úsklearn.utils._missingr   r   r   r,   rC   ÚdictrE   ra   r   rz   rw   r�   rn   r:   r   r   ú<module>r¨      sµ  ðð  Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð à FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ 0Ð 0Ð 0Ð 0Ð 0Ð 0ð ',¸5ð &ð &ð &ð &ð &ðR$,ð $,ð $,ð $,ðNð ð ð ð �Jñ ô ð ð #)ð #)ð #)ðLð ð ð ð ˆtñ ô ð ð Ið Ið Ið,ð ,ð ,ð4 /3ð (0ð (0ð (0ð (0ð (0ðVQð Qð Qð Qðhð ð ð ð �'ñ ô ð ð,ð ð ð ð r   