§
    cŠtj˜+  ã                  óD  — U d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZ d dlmZ d dlmZ er7d d	lmZ d d
lmZ d dlmZ d dlmZmZ eee         ee         gdf         Zded<   ddddddddœd4d#„Z d5d%„Z!d6d'„Z"d7d(„Z#d8d)„Z$d9d0„Z%d:d2„Z&d;d3„Z'dS )<é    )Úannotations)Úpartial)ÚTYPE_CHECKINGÚAny)Úqualified_type_name©Úis_narwhals_series)ÚArrayÚBooleanÚCategoricalÚListÚStringÚStruct)Ú
new_series)Úraise_series_assertion_error)ÚCallable)Ú	TypeAlias)ÚSeries)ÚIntoSeriesTÚSeriesTNr   ÚCheckFnTFgñhãˆµøä>g:Œ0âŽyE>©Úcheck_dtypesÚcheck_namesÚcheck_orderÚcheck_exactÚrel_tolÚabs_tolÚcategorical_as_strÚleftúSeries[IntoSeriesT]Úrightr   Úboolr   r   r   r   Úfloatr   r   ÚreturnÚNonec          	     óX  — d}	t          d„ | |fD ¦   «         ¦  «        rLdt          t          | ¦  «        ¦  «        › dt          t          |¦  «        ¦  «        › d�}
t          |
¦  «        ‚t	          | |||¬¦  «         |sR| j                             ¦   «         rd}
t          |
¦  «        ‚|                      ¦   «         |                     ¦   «         }} t          | |¦  «        \  }}|s| j         
                    ¦   «         st          |||||||¬¦  «         d
S t          ||||¬	¦  «         d
S )u"  Assert that the left and right Series are equal.

    Raises a detailed `AssertionError` if the Series differ.
    This function is intended for use in unit tests.

    Arguments:
        left: The first Series to compare.
        right: The second Series to compare.
        check_dtypes: Requires data types to match.
        check_names: Requires names to match.
        check_order: Requires elements to appear in the same order.
        check_exact: Requires float values to match exactly. If set to `False`, values are
            considered equal when within tolerance of each other (see `rel_tol` and
            `abs_tol`). Only affects columns with a Float data type.
        rel_tol: Relative tolerance for inexact checking, given as a fraction of the
            values in `right`.
        abs_tol: Absolute tolerance for inexact checking.
        categorical_as_str: Cast categorical columns to string before comparing.
            Enabling this helps compare columns that do not share the same string cache.

    Examples:
        >>> import pandas as pd
        >>> import narwhals as nw
        >>> from narwhals.testing import assert_series_equal
        >>> s1 = nw.from_native(pd.Series([1, 2, 3]), series_only=True)
        >>> s2 = nw.from_native(pd.Series([1, 5, 3]), series_only=True)
        >>> assert_series_equal(s1, s2)  # doctest: +ELLIPSIS
        Traceback (most recent call last):
        ...
        AssertionError: Series are different (exact value mismatch)
        [left]:
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
        |Narwhals Series|
        |---------------|
        | 0    1        |
        | 1    2        |
        | 2    3        |
        | dtype: int64  |
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        [right]:
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
        |Narwhals Series|
        |---------------|
        | 0    1        |
        | 1    5        |
        | 2    3        |
        | dtype: int64  |
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    Tc              3  ó6   K  — | ]}t          |¦  «         V — Œd S )Nr   )Ú.0Úobjs     ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/narwhals/testing/asserts/series.pyú	<genexpr>z&assert_series_equal.<locals>.<genexpr>U   s.   è è € Ð
@Ð
@¨3Õ! #Ñ&Ô&Ð&Ð
@Ð
@Ð
@Ð
@Ð
@Ð
@ó    z4Expected `narwhals.Series` instance, found:
[left]: z

[right]: zp

Hint: Use `nw.from_native(obj, series_only=True) to convert each native object into a `narwhals.Series` first.)r   r   zA`check_order=False` is not supported (yet) with nested data type.)r   r   r   r   r   )r   r   N)Úanyr   ÚtypeÚ	TypeErrorÚ_check_metadataÚdtypeÚ	is_nestedÚNotImplementedErrorÚsortÚ_check_null_valuesÚis_floatÚ_check_exact_valuesÚ_check_approximate_values)r    r"   r   r   r   r   r   r   r   Ú__tracebackhide__ÚmsgÚ	left_valsÚ
right_valss                r+   Úassert_series_equalr>      sk  € ðz Ðå
Ð
@Ð
@°4¸°-Ð
@Ñ
@Ô
@Ñ@Ô@ð ð5Ý*­4°©:¬:Ñ6Ô6ð5ð 5å+­D°©K¬KÑ8Ô8ð5ð 5ð 5ð 	õ ˜‰nŒnÐå�D˜%¨lÈÐTÑTÔTÐTàð 0ØŒ:×ÒÑ!Ô!ð 	+ØUˆCÝ% cÑ*Ô*Ð*Ø—i’i‘k”k 5§:¢:¡<¤<ˆeˆå.¨t°UÑ;Ô;Ñ€Iˆzàð [˜$œ*×-Ò-Ñ/Ô/ð [ÝØØØ%Ø#ØØØ1ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
õ 	" )¨ZÀÐRYÐZÑZÔZÐZÐZÐZr-   r   c               ó^  — | j         |j         }}||k    rt          d||¦  «         t          | ¦  «        t          |¦  «        }}||k    rt          d||¦  «         | j        |j        }	}|r||	k    rt          d||	¦  «         | j        |j        }}
|r|
|k    rt          d|
|¦  «         dS dS dS )zECheck metadata information: implementation, length, dtype, and names.zimplementation mismatchzlength mismatchzdtype mismatchzname mismatchN)Úimplementationr   Úlenr2   Úname)r    r"   r   r   Ú	left_implÚ
right_implÚleft_lenÚ	right_lenÚ
left_dtypeÚright_dtypeÚ	left_nameÚ
right_names               r+   r1   r1   w   sá   € ð !Ô/°Ô1Eˆz€IØ�JÒÐÝ$Ð%>À	È:ÑVÔVÐVå˜d™)œ)¥S¨¡Z¤Zˆi€HØ�9ÒÐÝ$Ð%6¸À)ÑLÔLÐLà"œj¨%¬+�€JØð P˜
 kÒ1Ð1Ý$Ð%5°zÀ;ÑOÔOÐOà œI u¤zˆz€IØð M�y JÒ.Ð.Ý$ _°iÀÑLÔLÐLÐLÐLðMð MÐ.Ð.r-   útuple[SeriesT, SeriesT]c                óX  — |                       ¦   «         |                      ¦   «         }}|                      ¦   «         |                     ¦   «         }}||k    s||k                         ¦   «         rt          d||¦  «         |                      | ¦  «        |                     | ¦  «        fS )z8Check null value consistency and return non-null values.znull value mismatch)Ú
null_countÚis_nullr.   r   Úfilter)r    r"   Úleft_null_countÚright_null_countÚleft_null_maskÚright_null_masks         r+   r6   r6   Œ   s¡   € à(,¯ªÑ(9Ô(9¸5×;KÒ;KÑ;MÔ;MÐ%€OØ&*§l¢l¡n¤n°e·m²m±o´o�O€NàÐ*Ò*Ð*¨~ÀÒ/P×.UÒ.UÑ.WÔ.WÐ*Ý$Ø! ?Ð4Dñ	
ô 	
ð 	
ð �;Š;˜�Ñ'Ô'¨¯ª°Ð6FÑ)GÔ)GÐGÐGr-   c          
     ó¸  — | j         }| j        |j        }	}|                     ¦   «         r|                      |ddd¬¦  «         }
�nmt	          |t
          t          f¦  «        rst	          |	t
          t          f¦  «        rW||	k    rQt          t          |dd||||¬¦  «        }t          | |||	|¬¦  «         t          ddgt          ¦   «         |¬¦  «        }
nÞt	          |t          ¦  «        rft	          |	t          ¦  «        rQt          t          ddd||||¬¦  «        }t          | |||	|¬¦  «         t          ddgt          ¦   «         |¬¦  «        }
nct	          |t          ¦  «        rHt	          |	t          ¦  «        r3t          | ||¬	¦  «        }t          d|gt          ¦   «         |¬¦  «        }
n| |k    }
|
                     ¦   «         rt#          d
| |¦  «         dS dS )z2Check exact value equality for various data types.r   T©r   r   Ú
nans_equalFr   )Úcheck_fnÚ )r2   Úbackend)r   úexact value mismatchN)r@   r2   Ú
is_numericÚis_closeÚ
isinstancer
   r   r   r>   Ú_check_list_liker   r   r   Ú_check_structr   Ú_check_categoricalr.   r   )r    r"   r   r   r   r   r   rC   rG   rH   Úis_not_equal_maskrW   Ú
_not_equals                r+   r8   r8   ™   s+  € ð Ô#€IØ"œj¨%¬+�€Jð ×ÒÑÔð ,*ð "Ÿ]š]¨5¸!ÀQÐSW˜]ÑXÔXÐXÐÑå�:¥¥t˜}Ñ-Ô-ð(*Ý2<¸[Í5ÕRVÈ-Ñ2XÔ2Xð(*à
˜Ò
#Ð
#ÝÝØ%ØØØ#ØØØ1ð	
ñ 	
ô 	
ˆõ 	˜˜u j°+ÈÐQÑQÔQÐQå& r¨E¨7½'¹)¼)ÈYÐWÑWÔWÐÐÝ	�J¥Ñ	'Ô	'ð *­J°{ÅFÑ,KÔ,Kð *ÝÝØØØØ#ØØØ1ð	
ñ 	
ô 	
ˆõ 	�d˜E :¨{ÀXÐNÑNÔNÐNå& r¨E¨7½'¹)¼)ÈYÐWÑWÔWÐÐÝ	�J¥Ñ	,Ô	,ð 
*µ¸KÍÑ1UÔ1Uð 
*õ (Ø�%Ð,>ð
ñ 
ô 
ˆ
õ 'Ø��¥G¡I¤I°yð
ñ 
ô 
ÐÐð ! EšMÐà×ÒÑÔð JÝ$Ð%;¸TÀ5ÑIÔIÐIÐIÐIðJð Jr-   c               óÔ   — |                       |||d¬¦  «         }|                     ¦   «         r9t          d|                      |¦  «        |                     |¦  «        ¦  «         dS dS )z0Check approximate value equality with tolerance.TrU   zvalues not within toleranceN)r\   r.   r   rO   )r    r"   r   r   Úis_not_close_masks        r+   r9   r9   Ú   sŠ   € ð ŸšØ�w¨¸Dð 'ñ ô ð Ðð ×ÒÑÔð 
Ý$Ø)Ø�KŠKÐ)Ñ*Ô*Ø�LŠLÐ*Ñ+Ô+ñ	
ô 	
ð 	
ð 	
ð 	
ð
ð 
r-   r<   r=   rG   úList | ArrayrH   rW   c           
     óú   — | j         }	 t          | |d¬¦  «        D ]=\  }} |t          d||j        |¬¦  «        t          d||j        |¬¦  «        ¦  «         Œ>d S # t          $ r t          d| |¦  «         Y d S w xY w)NT©ÚstrictrX   )Úvaluesr2   rY   znested value mismatch)r@   Úzipr   ÚinnerÚAssertionErrorr   )r<   r=   rG   rH   rW   ÚimplÚleft_valÚ	right_vals           r+   r^   r^   ê   sÅ   € ð Ô#€DðUÝ#& y°*ÀTÐ#JÑ#JÔ#Jð 	ð 	ÑˆH�iØˆHÝ˜2 h°jÔ6FÐPTÐUÑUÔUÝ˜2 i°{Ô7HÐRVÐWÑWÔWñô ð ð ð	ð 	øõ
 ð Uð Uð UÝ$Ð%<¸iÈÑTÔTÐTÐTÐTÐTðUøøøs   ‰AA ÁA:Á9A:r   c                ó  — 	 t          |j        |j        d¬¦  «        D ]K\  }} || j                             |j        ¦  «        |j                             |j        ¦  «        ¦  «         ŒLd S # t
          $ r t          d| |¦  «         Y d S w xY w)NTrg   rZ   )rj   ÚfieldsÚstructÚfieldrB   rl   r   )r<   r=   rG   rH   rW   Ú
left_fieldÚright_fields          r+   r_   r_   ÿ   sÇ   € ð	TÝ'*ØÔ˜{Ô1¸$ð(
ñ (
ô (
ð 	ð 	Ñ#ˆJ˜ð ˆHØÔ ×&Ò& z¤Ñ7Ô7ØÔ!×'Ò'¨Ô(8Ñ9Ô9ñô ð ð ð	ð 	øõ ð Tð Tð TÝ$Ð%;¸YÈ
ÑSÔSÐSÐSÐSÐSðTøøøs   ‚A(A, Á,BÂ
Bc               ó  — |rB|                       t          ¦   «         ¦  «        |                      t          ¦   «         ¦  «        }} 	 | |k                         ¦   «         S # t          $ r}d}t	          |¦  «        |‚d}~ww xY w)z�Try to compare if any element of categorical series' differ.

    Inability to compare means that the encoding is different, and an exception is raised.
    z:Cannot compare categoricals coming from different sources.N)Úcastr   r.   Ú	Exceptionrl   )r<   r=   r   Úexcr;   s        r+   r`   r`     s†   € ð ð TØ )§¢­v©x¬xÑ 8Ô 8¸*¿/º/Í&É(Ì(Ñ:SÔ:S�:ˆ	ð+Ø˜ZÒ'×,Ò,Ñ.Ô.Ð.øÝð +ð +ð +ØJˆå˜SÑ!Ô! sÐ*øøøøð+øøøs   ÁA Á
A?Á(A:Á:A?)r    r!   r"   r!   r   r#   r   r#   r   r#   r   r#   r   r$   r   r$   r   r#   r%   r&   )
r    r   r"   r   r   r#   r   r#   r%   r&   )r    r   r"   r   r%   rK   )r    r   r"   r   r   r#   r   r#   r   r$   r   r$   r   r#   r%   r&   )
r    r   r"   r   r   r$   r   r$   r%   r&   )r<   r   r=   r   rG   re   rH   re   rW   r   r%   r&   )r<   r   r=   r   rG   r   rH   r   rW   r   r%   r&   )r<   r   r=   r   r   r#   r%   r#   )(Ú
__future__r   Ú	functoolsr   Útypingr   r   Únarwhals._utilsr   Únarwhals.dependenciesr	   Únarwhals.dtypesr
   r   r   r   r   r   Únarwhals.functionsr   Únarwhals.testing.asserts.utilsr   Úcollections.abcr   r   Únarwhals.seriesr   Únarwhals.typingr   r   r   Ú__annotations__r>   r1   r6   r8   r9   r^   r_   r`   © r-   r+   ú<module>r‡      s(  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à /Ð /Ð /Ð /Ð /Ð /Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ )Ð )Ð )Ð )Ð )Ð )Ø GÐ GÐ GÐ GÐ GÐ Gàð DØ(Ð(Ð(Ð(Ð(Ð(Ø Ð Ð Ð Ð Ð à&Ð&Ð&Ð&Ð&Ð&Ø4Ð4Ð4Ð4Ð4Ð4Ð4Ð4à! 6¨#¤;°°s´Ð"<¸dÐ"BÔC€GÐCÐCÐCÑCð ØØØØØØ$ð^[ð ^[ð ^[ð ^[ð ^[ð ^[ðBMð Mð Mð Mð*
Hð 
Hð 
Hð 
Hð>Jð >Jð >Jð >JðB
ð 
ð 
ð 
ð Uð Uð Uð Uð*Tð Tð Tð Tð0+ð +ð +ð +ð +ð +r-   