Ë
    ÚÍ:j)  ã            	      óÎ  — d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZmZ erd dlmZmZmZmZ d d	lmZmZ ej6                  ej8                  ej:                  ej<                  ej>                  ej@                  hZ!d
d
d
ddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z"	 	 	 	 	 	 	 	 dd„Z#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z$	 	 	 	 	 	 	 	 	 	 dd„Z%y)é    )Úannotations)ÚTYPE_CHECKINGÚAny)ÚImplementationÚqualified_type_name)Ú	DataFrameÚ	LazyFrame©Úis_narwhals_dataframeÚis_narwhals_lazyframe)Úassert_series_equal)Úraise_assertion_errorÚraise_frame_assertion_error)ÚArrowÚIntoBackendÚPandasÚPolars)Ú
DataFrameTÚ
LazyFrameTTFgñhãˆµøä>g:Œ0âŽyE>N)Úcheck_row_orderÚcheck_column_orderÚcheck_dtypesÚcheck_exactÚrel_tolÚabs_tolÚcategorical_as_strÚbackendc               ó@  — d}
t        d„ | |fD «       «      r8dt        t        | «      «      › dt        t        |«      «      › d�}t        |«      ‚| j                  |j                  }}||k7  rt        d||«       t        | ||	¬«      \  }}t        ||||||||||¬«
       y	)
uG  Assert that the left and right frames are equal.

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

    Warning:
        1. In the case of backends that do not guarantee the row order, such as DuckDB,
            Ibis, PySpark, and SQLFrame, `check_row_order` argument is ignored and the
            comparands are sorted by all the columns regardless.
        2. In the case of lazy backends a [`collect(...)`](lazyframe.md#narwhals.dataframe.LazyFrame.collect)
            operation is triggered.

    Arguments:
        left: The first DataFrame or LazyFrame to compare.
        right: The second DataFrame or LazyFrame to compare.
        check_row_order: Requires row order to match.

            This flag is ignored for backends that do not guarantee row order such as
            DuckDB, Ibis, PySpark, SQLFrame.
        check_column_order: Requires column order to match.
        check_dtypes: Requires data types to match.
        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. Fraction of 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.
        backend: Allows to specify which eager backend to collect to.
            Check out [`narwhals.LazyFrame.collect`](lazyframe.md#narwhals.dataframe.LazyFrame.collect)
            for more information.

    Examples:
        >>> import polars as pl
        >>> import narwhals as nw
        >>> from narwhals.testing import assert_frame_equal
        >>>
        >>> left_native = pl.LazyFrame({"a": [1, 2, 3]})
        >>> right_native = pl.LazyFrame({"a": [1, 5, 3]})
        >>> left = nw.from_native(left_native)
        >>> right = nw.from_native(right_native)
        >>> assert_frame_equal(left, right)  # doctest: +ELLIPSIS
        Traceback (most recent call last):
            ...
        AssertionError: DataFrames are different (value mismatch for column "a")
        [left]:
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
        | Narwhals Series |
        |-----------------|
        |shape: (3,)      |
        |Series: 'a' [i64]|
        |[                |
        |        1        |
        |        2        |
        |        3        |
        |]                |
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        [right]:
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
        | Narwhals Series |
        |-----------------|
        |shape: (3,)      |
        |Series: 'a' [i64]|
        |[                |
        |        1        |
        |        5        |
        |        3        |
        |]                |
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    Tc              3  óN   K  — | ]  }t        |«      xs t        |«       –— Œ y ­w)Nr
   )Ú.0Úobjs     ús/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/narwhals/testing/asserts/frame.pyú	<genexpr>z%assert_frame_equal.<locals>.<genexpr>r   s+   è ø€ ò àô # 3Ó'ÒEÔ+@ÀÓ+EÔFñùs   ‚#%zOExpected `narwhals.DataFrame` or `narwhals.LazyFrame` instance, found:
[left]: z

[right]: zŽ

Hint: Use `nw.from_native(obj, allow_series=False)` to convert each native object into a `narwhals.DataFrame` or `narwhals.LazyFrame` first.zimplementation mismatch)r   )
ÚleftÚrightÚimplr   r   r   r   r   r   r   N)Úanyr   ÚtypeÚ	TypeErrorÚimplementationr   Ú_check_correct_input_typeÚ_assert_dataframe_equal)r$   r%   r   r   r   r   r   r   r   r   Ú__tracebackhide__ÚmsgÚ	left_implÚ
right_implÚ
left_eagerÚright_eagers                   r"   Úassert_frame_equalr3      sÌ   € ðh Ðä
ñ à˜%�=ôô ð
Ü*¬4°«:Ó6Ð7ð 8Ü+¬D°«KÓ8Ð9ð :PðPð 	ô ˜‹nÐà ×/Ñ/°×1EÑ1Eˆz€IØ�JÒÜ#Ð$=¸yÈ*ÔUä7¸¸eÈWÔUÑ€J�äØØØØ'Ø-Ø!ØØØØ-öó    c                ó:  — t        | t        «      rt        |t        «      r| |fS t        | t        «      r2t        |t        «      r"| j                  |«      |j                  |«      fS t	        ddt        | «      j                  t        |«      j                  ¬«       y )NÚinputszunexpected input types)r$   r%   )Ú
isinstancer   r	   Úcollectr   r(   Ú__name__)r$   r%   r   s      r"   r+   r+   “   sy   € ô �$œ	Ô"¤z°%¼Ô'CØ�Uˆ{Ðä�$œ	Ô"¤z°%¼Ô'CØ�|‰|˜GÓ$ e§m¡m°GÓ&<Ð<Ð<äØØ Ü�$‹Z× Ñ Ü�5‹k×"Ñ"ö	r4   c               óZ  — t        | |||¬«       t        | «      t        |«      }}
|
|k7  rt        d|
|«       |
dk(  ry | j                  }|r|t        vrd|j                  «       D ��cg c]  \  }}|j                  «       rŒ|‘Œ }}}|sd}t        |«      ‚| j                  |«      } |j                  |«      }|j                  «       D ]9  }| j                  |«      }|j                  |«      }	 t        ||ddd||||	¬«	       Œ; y c c}}w # t        $ r t        d||d	|› d
�¬«       Y Œaw xY w)N)r   r   zheight (row count) mismatchr   zJ`check_row_order=False` is not supported (yet) with only nested data type.FT)r   Úcheck_namesÚcheck_orderr   r   r   r   zvalue mismatch for columnz "ú")Údetailr$   r%   Údetail_suffix)Ú_check_schema_equalÚlenr   ÚschemaÚGUARANTEES_ROW_ORDERÚitemsÚ	is_nestedÚNotImplementedErrorÚsortÚnamesÚ
get_columnr   ÚAssertionError)r$   r%   r&   r   r   r   r   r   r   r   Úleft_lenÚ	right_lenÚleft_schemaÚnameÚdtypeÚsort_byr.   Úcol_nameÚ_series_leftÚ_series_rights                       r"   r,   r,   §   sH  € ô  Øˆe ,ÐCUõô ˜d›)¤S¨£Zˆi€HØ�9ÒÜ#Ð$AÀ8ÈYÔWà�1‚}Øà—+‘+€KÙ Ô-AÑ!Að
 ,7×+<Ñ+<Ó+>×X™K˜D %ÀeÇoÁoÕFW’4ÐXˆÑXáà^ˆCÜ% cÓ*Ð*à�y‰y˜Ó!ˆØ—
‘
˜7Ó#ˆà×%Ñ%Ó'ò ˆØ—‘ xÓ0ˆØ×(Ñ(¨Ó2ˆð	ÜØØØ"Ø!Ø Ø'ØØØ#5ö
ñ	ùó Yøô2 ò 	Ü'Ø2Ø!Ø#Ø " 8 *¨AÐ.÷	ð	ús   Á'DÂ DÃ.DÄD*Ä)D*c               ó0  — | j                   |j                   }}||k(  ry|j                  «       |j                  «       }}t        |«      t        |«      }	}t        |j	                  |	«      «      x}
rt        d||	|
› d�¬«       t        |	j	                  |«      «      x}rt        d||	|› d�¬«       |r||k7  rt        d||¬«       |rJ|r|j                  «       n|D �cg c]  }||   ‘Œ	 c}}|j                  «       x}|k7  rt        d||¬«       yyyc c}w )	zÒCompares DataFrame schema based on specified criteria.

    Adapted from https://github.com/pola-rs/polars/blob/afdbf3056d1228cf493901e45f536b0905cec8ea/crates/polars-testing/src/asserts/utils.rs#L667-L698
    Nzin left, but not in rightú )r>   r$   r%   Údetail_prefixzin right, but not in leftz!columns are not in the same order)r>   r$   r%   zdtypes do not match)rB   rH   ÚsetÚsortedÚ
differencer   Údtypes)r$   r%   r   r   ÚlschemaÚrschemaÚlnamesÚrnamesÚlsetÚrsetÚleft_not_in_rightÚright_not_in_leftrQ   ÚrdtypesÚldtypess                  r"   r@   r@   ê   s3  € ð —{‘{ E§L¡LˆW€Gð �'ÒØà—]‘]“_ g§m¡m£oˆF€FÜ�V“œc &›kˆ$€Dä" 4§?¡?°4Ó#8Ó9Ð9ÐÐ9Ü#Ø.ØØØ.Ð/¨qÐ1õ		
ô # 4§?¡?°4Ó#8Ó9Ð9ÐÐ9Ü#Ø.ØØØ.Ð/¨qÐ1õ		
ñ ˜f¨Ò.Ü#Ø6¸VÈ6õ	
ñ ñ "ð �N‰NÔà4:Ö;¨�'˜(Ó#Ò;ð 	ð —~‘~Ó'Ð'ˆG¨GÒ3Ü'Ø,°7À'öð 4ð ùò <s   ÃD)r$   úDataFrameT | LazyFrameTr%   re   r   Úboolr   rf   r   rf   r   rf   r   Úfloatr   rg   r   rf   r   ú+IntoBackend[Polars | Pandas | Arrow] | NoneÚreturnÚNone)r$   re   r%   re   r   rh   ri   z%tuple[DataFrame[Any], DataFrame[Any]])r$   r   r%   r   r&   r   r   rf   r   rf   r   rf   r   rf   r   rg   r   rg   r   rf   ri   rj   )
r$   r   r%   r   r   rf   r   rf   ri   rj   )&Ú
__future__r   Útypingr   r   Únarwhals._utilsr   r   Únarwhals.dataframer   r	   Únarwhals.dependenciesr   r   Únarwhals.testing.asserts.seriesr   Únarwhals.testing.asserts.utilsr   r   Únarwhals._typingr   r   r   r   Únarwhals.typingr   r   ÚPANDASÚMODINÚCUDFÚPYARROWÚPOLARSÚDASKrC   r3   r+   r,   r@   © r4   r"   ú<module>r{      sÒ  ðÝ "ç %ç ?ß 3ß NÝ ?÷ñ
 ßCÓCß6ð ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑðÐ ð !Ø#ØØØØØ$Ø;?ñtØ
!ðtà"ðtð ð	tð
 ðtð ðtð ðtð ðtð ðtð ðtð 9ðtð 
ótðnØ
!ðà"ðð 9ðð +ó	ð(@Ø
ð@àð@ð ð@ð
 ð@ð ð@ð ð@ð ð@ð ð@ð ð@ð ð@ð 
ó@ðF.Ø
ð.Ø'ð.Ø:>ð.ØTXð.à	ô.r4   