Ë
    ðmxin+  ã                  óÚ  — U 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
 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r(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œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z!	 	 	 	 	 	 	 	 	 	 dd„Z"dd„Z#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z$	 	 	 	 	 	 	 	 	 	 d d„Z%	 	 	 	 	 	 	 	 	 	 	 	 d!d„Z&	 	 	 	 	 	 	 	 	 	 	 	 d"d„Z'	 	 	 	 	 	 	 	 d#d„Z(y)$é    )Úannotations)Úpartial)ÚTYPE_CHECKINGÚAnyÚCallable)Úqualified_type_nameÚ
zip_strict©Úis_narwhals_series)ÚArrayÚBooleanÚCategoricalÚListÚStringÚStruct)Ú
new_series)Úraise_series_assertion_error)Ú	TypeAlias)ÚSeries)ÚIntoSeriesTÚSeriesTNr   ÚCheckFnTFgñhãˆµøä>g:Œ0âŽyE>©Úcheck_dtypesÚcheck_namesÚcheck_orderÚcheck_exactÚrel_tolÚabs_tolÚcategorical_as_strc          	     óê  — d}	t        d„ | |fD «       «      r8dt        t        | «      «      › dt        t        |«      «      › d�}
t        |
«      ‚t	        | |||¬«       |sG| j
                  j                  «       rd}
t        |
«      ‚| j                  «       |j                  «       }} t        | |«      \  }}|s| j
                  j                  «       st        |||||||¬«       y
t        ||||¬	«       y
)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  ó4   K  — | ]  }t        |«       –— Œ y ­w)Nr
   )Ú.0Úobjs     úV/home/htdocs/ttos/venv/lib/python3.12/site-packages/narwhals/testing/asserts/series.pyú	<genexpr>z&assert_series_equal.<locals>.<genexpr>T   s   è ø€ Ò
@¨3Ô! #Ó&Ô&Ñ
@ùs   ‚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)ÚleftÚrightr   r   r   r   r   r   r    Ú__tracebackhide__ÚmsgÚ	left_valsÚ
right_valss                r%   Úassert_series_equalr9      s÷   € ðz Ðä
Ñ
@°4¸°-Ô
@Ô@ðÜ*¬4°«:Ó6Ð7ð 8Ü+¬D°«KÓ8Ð9ð :5ð5ð 	ô ˜‹nÐä�D˜%¨lÈÕTáØ�:‰:×ÑÔ!ØUˆCÜ% cÓ*Ð*Ø—i‘i“k 5§:¡:£<ˆeˆä.¨t°UÓ;Ñ€Iˆzá˜$Ÿ*™*×-Ñ-Ô/ÜØØØ%Ø#ØØØ1ö	
ô 	" )¨ZÀÐRYÖZó    c               ó\  — | j                   |j                   }}||k7  rt        d||«       t        | «      t        |«      }}||k7  rt        d||«       | j                  |j                  }	}|r||	k7  rt        d||	«       | j                  |j                  }}
|r|
|k7  rt        d|
|«       yyy)zECheck metadata information: implementation, length, dtype, and names.zimplementation mismatchzlength mismatchzdtype mismatchzname mismatchN)Úimplementationr   Úlenr+   Úname)r3   r4   r   r   Ú	left_implÚ
right_implÚleft_lenÚ	right_lenÚ
left_dtypeÚright_dtypeÚ	left_nameÚ
right_names               r%   r*   r*   v   sª   € ð !×/Ñ/°×1EÑ1Eˆz€IØ�JÒÜ$Ð%>À	È:ÔVä˜d›)¤S¨£Zˆi€HØ�9ÒÜ$Ð%6¸À)ÔLà"Ÿj™j¨%¯+©+�€JÙ˜
 kÒ1Ü$Ð%5°zÀ;ÔOà ŸI™I u§z¡zˆz€IÙ�y JÒ.Ü$ _°iÀÕLð /€{r:   c                ó  — | j                  «       |j                  «       }}| j                  «       |j                  «       }}||k7  s||k7  j                  «       rt        d||«       | j	                  | «      |j	                  | «      fS )z8Check null value consistency and return non-null values.znull value mismatch)Ú
null_countÚis_nullr'   r   Úfilter)r3   r4   Úleft_null_countÚright_null_countÚleft_null_maskÚright_null_masks         r%   r/   r/   ‹   s~   € à(,¯©Ó(9¸5×;KÑ;KÓ;MÐ%€OØ&*§l¡l£n°e·m±m³o�O€NàÐ*Ò*¨~ÀÑ/P×.UÑ.UÔ.WÜ$Ø! ?Ð4Dô	
ð �;‰;˜�Ó'¨¯©°Ð6FÓ)GÐGÐGr:   c          
     ó  — | j                   }| j                  |j                  }	}|j                  «       r| j                  |ddd¬«       }
�nt	        |t
        t        f«      r[t	        |	t
        t        f«      rE||	k(  r@t        t        |dd||||¬«      }t        | |||	|¬«       t        ddgt        «       |¬«      }
n¬t	        |t        «      rPt	        |	t        «      r@t        t        ddd||||¬«      }t        | |||	|¬«       t        ddgt        «       |¬«      }
nLt	        |t        «      r7t	        |	t        «      r't        | ||¬	«      }t        d|gt        «       |¬«      }
n| |k7  }
|
j!                  «       rt#        d
| |«       yy)z2Check exact value equality for various data types.r   T©r   r   Ú
nans_equalFr   )Úcheck_fnÚ )r+   Úbackend)r    úexact value mismatchN)r<   r+   Ú
is_numericÚis_closeÚ
isinstancer   r   r   r9   Ú_check_list_liker   r   r   Ú_check_structr   Ú_check_categoricalr'   r   )r3   r4   r   r   r   r   r    r?   rC   rD   Úis_not_equal_maskrR   Ú
_not_equals                r%   r1   r1   ˜   s  € ð ×#Ñ#€IØ"Ÿj™j¨%¯+©+�€Jð ×ÑÔð "Ÿ]™]¨5¸!ÀQÐSW˜]ÓXÐXÒä�:¤¤t˜}Ô-´*¸[Ì5ÔRVÈ-Ô2XØ
˜Ò
#ÜÜØ%ØØØ#ØØØ1ô	
ˆô 	˜˜u j°+ÈÕQä& r¨E¨7¼'»)ÈYÔWÑÜ	�J¤Ô	'¬J°{ÄFÔ,KÜÜØØØØ#ØØØ1ô	
ˆô 	�d˜E :¨{ÀXÕNä& r¨E¨7¼'»)ÈYÔWÑÜ	�J¤Ô	,´¸KÌÔ1Uô (Ø�%Ð,>ô
ˆ
ô 'Ø��¤G£I°yô
Ñð ! E™MÐà×ÑÔÜ$Ð%;¸TÀ5ÕIð r:   c               ó¨   — | j                  |||d¬«       }|j                  «       r,t        d| j                  |«      |j                  |«      «       yy)z0Check approximate value equality with tolerance.TrP   zvalues not within toleranceN)rW   r'   r   rJ   )r3   r4   r   r   Úis_not_close_masks        r%   r2   r2   Ù   s^   € ð Ÿ™Ø�w¨¸Dð 'ó ð Ðð ×ÑÔÜ$Ø)Ø�K‰KÐ)Ó*Ø�L‰LÐ*Ó+õ	
ð r:   c           
     óì   — | j                   }	 t        | |«      D ]<  \  }} |t        d||j                  |¬«      t        d||j                  |¬«      «       Œ> y # t        $ r t        d| |«       Y y w xY w)NrS   )Úvaluesr+   rT   znested value mismatch)r<   r	   r   ÚinnerÚAssertionErrorr   )r7   r8   rC   rD   rR   ÚimplÚleft_valÚ	right_vals           r%   rY   rY   é   s‚   € ð ×#Ñ#€DðUÜ#-¨i¸Ó#Dò 	ÑˆH�iÙÜ˜2 h°j×6FÑ6FÐPTÔUÜ˜2 i°{×7HÑ7HÐRVÔWõñ	øô
 ò UÜ$Ð%<¸iÈÖTðUús   ŽAA ÁA3Á2A3c                ó,  — 	 t        |j                  |j                  «      D ]T  \  }} || j                  j                  |j                  «      |j                  j                  |j                  «      «       ŒV y # t
        $ r t        d| |«       Y y w xY w)NrU   )r	   ÚfieldsÚstructÚfieldr>   rc   r   )r7   r8   rC   rD   rR   Ú
left_fieldÚright_fields          r%   rZ   rZ   þ   s‰   € ðTÜ'1°*×2CÑ2CÀ[×EWÑEWÓ'Xò 	Ñ#ˆJ˜ÙØ× Ñ ×&Ñ& z§¡Ó7Ø×!Ñ!×'Ñ'¨×(8Ñ(8Ó9õñ	øô
 ò TÜ$Ð%;¸YÈ
ÖSðTús   ‚A7A: Á:BÂBc               óÐ   — |r2| j                  t        «       «      |j                  t        «       «      }} 	 | |k7  j                  «       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'   Ú	Exceptionrc   )r7   r8   r    Úexcr6   s        r%   r[   r[     sa   € ñ Ø )§¡¬v«xÓ 8¸*¿/¹/Ì&Ë(Ó:S�:ˆ	ð+Ø˜ZÑ'×,Ñ,Ó.Ð.øÜò +ØJˆä˜SÓ! sÐ*ûð+ús   ¶A	 Á		A%ÁA Á A%)r3   úSeries[IntoSeriesT]r4   rq   r   Úboolr   rr   r   rr   r   rr   r   Úfloatr   rs   r    rr   ÚreturnÚNone)
r3   r   r4   r   r   rr   r   rr   rt   ru   )r3   r   r4   r   rt   ztuple[SeriesT, SeriesT])r3   r   r4   r   r   rr   r   rr   r   rs   r   rs   r    rr   rt   ru   )
r3   r   r4   r   r   rs   r   rs   rt   ru   )r7   r   r8   r   rC   úList | ArrayrD   rv   rR   r   rt   ru   )r7   r   r8   r   rC   r   rD   r   rR   r   rt   ru   )r7   r   r8   r   r    rr   rt   rr   ))Ú
__future__r   Ú	functoolsr   Útypingr   r   r   Únarwhals._utilsr   r	   Únarwhals.dependenciesr   Únarwhals.dtypesr   r   r   r   r   r   Únarwhals.functionsr   Únarwhals.testing.asserts.utilsr   Útyping_extensionsr   Únarwhals.seriesr   Únarwhals.typingr   r   r   Ú__annotations__r9   r*   r/   r1   r2   rY   rZ   r[   © r:   r%   ú<module>r„      sQ  ðÞ "å ß /Ñ /ç ;Ý 4ß M× MÝ )Ý GáÝ+å&ß4à! 6¨#¡;°°s±Ð"<¸dÐ"BÑC€GˆYÓCð ØØØØØØ$ñ^[Ø
ð^[àð^[ð ð	^[ð
 ð^[ð ð^[ð ð^[ð ð^[ð ð^[ð ð^[ð 
ó^[ðBMØ
ðMØ!ðMØ48ðMØGKðMà	óMó*
Hð>JØ
ð>Jàð>Jð ð	>Jð
 ð>Jð ð>Jð ð>Jð ð>Jð 
ó>JðB
Ø
ð
Ø!ð
Ø/4ð
Ø?Dð
à	ó
ð UØðUàðUð ðUð ð	Uð
 ðUð 
óUð*TØðTàðTð ðTð ð	Tð
 ðTð 
óTð,+Øð+Ø$+ð+ØDHð+à	ô+r:   