Ë
    ÚÍ:j˜+  ã                  óÞ  — 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r.d 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œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 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)Ú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_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     út/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/narwhals/testing/asserts/series.pyú	<genexpr>z&assert_series_equal.<locals>.<genexpr>U   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_equalr8      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)r2   r3   r   r   Ú	left_implÚ
right_implÚleft_lenÚ	right_lenÚ
left_dtypeÚright_dtypeÚ	left_nameÚ
right_names               r$   r)   r)   w   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ð /€{r9   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)r2   r3   Ú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ÐGr9   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   r8   Ú_check_list_liker   r   r   Ú_check_structr   Ú_check_categoricalr&   r   )r2   r3   r   r   r   r   r   r>   rB   rC   Úis_not_equal_maskrQ   Ú
_not_equals                r$   r0   r0   ™   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ð r9   c               ó¨   — | j                  |||d¬«       }|j                  «       r,t        d| j                  |«      |j                  |«      «       yy)z0Check approximate value equality with tolerance.TrO   zvalues not within toleranceN)rV   r&   r   rI   )r2   r3   r   r   Úis_not_close_masks        r$   r1   r1   Ú   s^   € ð Ÿ™Ø�w¨¸Dð 'ó ð Ðð ×ÑÔÜ$Ø)Ø�K‰KÐ)Ó*Ø�L‰LÐ*Ó+õ	
ð r9   c           
     óð   — | j                   }	 t        | |d¬«      D ]<  \  }} |t        d||j                  |¬«      t        d||j                  |¬«      «       Œ> y # t        $ r t        d| |«       Y y w xY w)NT©ÚstrictrR   )Úvaluesr*   rS   znested value mismatch)r;   Úzipr   ÚinnerÚAssertionErrorr   )r6   r7   rB   rC   rQ   ÚimplÚleft_valÚ	right_vals           r$   rX   rX   ê   s„   € ð ×#Ñ#€DðUÜ#& y°*ÀTÔ#Jò 	ÑˆH�iÙÜ˜2 h°j×6FÑ6FÐPTÔUÜ˜2 i°{×7HÑ7HÐRVÔWõñ	øô
 ò UÜ$Ð%<¸iÈÖTðUús   ŽAA ÁA5Á4A5c                ó0  — 	 t        |j                  |j                  d¬«      D ]T  \  }} || j                  j                  |j                  «      |j                  j                  |j                  «      «       ŒV y # t
        $ r t        d| |«       Y y w xY w)NTr`   rT   )rc   ÚfieldsÚstructÚfieldr=   re   r   )r6   r7   rB   rC   rQ   Ú
left_fieldÚright_fields          r$   rY   rY   ÿ   s�   € ð	TÜ'*Ø×Ñ˜{×1Ñ1¸$ô(
ò 	Ñ#ˆJ˜ñ Ø× Ñ ×&Ñ& z§¡Ó7Ø×!Ñ!×'Ñ'¨×(8Ñ(8Ó9õñ	øô ò TÜ$Ð%;¸YÈ
ÖSðTús   ‚A9A< Á<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&   Ú	Exceptionre   )r6   r7   r   Úexcr5   s        r$   rZ   rZ     sa   € ñ Ø )§¡¬v«xÓ 8¸*¿/¹/Ì&Ë(Ó:S�:ˆ	ð+Ø˜ZÑ'×,Ñ,Ó.Ð.øÜò +ØJˆä˜SÓ! sÐ*ûð+ús   ¶A	 Á		A%ÁA Á A%)r2   úSeries[IntoSeriesT]r3   rs   r   Úboolr   rt   r   rt   r   rt   r   Úfloatr   ru   r   rt   ÚreturnÚNone)
r2   r   r3   r   r   rt   r   rt   rv   rw   )r2   r   r3   r   rv   ztuple[SeriesT, SeriesT])r2   r   r3   r   r   rt   r   rt   r   ru   r   ru   r   rt   rv   rw   )
r2   r   r3   r   r   ru   r   ru   rv   rw   )r6   r   r7   r   rB   úList | ArrayrC   rx   rQ   r   rv   rw   )r6   r   r7   r   rB   r   rC   r   rQ   r   rv   rw   )r6   r   r7   r   r   rt   rv   rt   )(Ú
__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__r8   r)   r.   r0   r1   rX   rY   rZ   © r9   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ð0+Øð+Ø$+ð+ØDHð+à	ô+r9   