
    ic                        d Z ddlZddlZddlZddlZddlmZ ej                  d        Z
ej                  j                  dddgddgd	g d
g dd	g dg ddgg d      d        Zd Zd Zd Zd Zd Zej                  j                  ddgg d      d        Zej                  j                  ddgg d      d        Zd Zd Zy)ze
A verbatim copy (vendored) of the spec tests.
Taken from https://github.com/data-apis/dataframe-api
    Nc                      dd} | S )Nc                 V    t        j                  |       }|r|j                  d      S |S )Ncategory)pd	DataFrameastype)dctis_categoricaldfs      k/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/tests/interchange/test_spec_conformance.pymakerzdf_from_dict.<locals>.maker   s&    \\#(6ryy$>B>    )F )r   s    r   df_from_dictr      s    ? Lr   	test_datafoobarbazquxabg      ?      @      @gffffff"@g      %@g'@)            )AB)str_data
float_dataint_data)idsc                    t        | j                               } ||       }t        j                  d      5  |j	                         }d d d        t        | |d            }|D ]z  }j                  |      j                  }|dk(  sJ t        |t              sJ |j                  |      j                         |k(  sJ |j                  |      j                  dk(  rzJ  y # 1 sw Y   xY w)NInterchangematchr   )listkeystmassert_produces_warning__dataframe__lenget_column_by_name
null_count
isinstanceintsizeoffset)r   r   columnsr   dfXcolumn_sizecolumnr2   s           r   test_only_one_dtyper;      s     9>>#$G	i	 B		#	#-	8 ! ! i
+,K :++F3>>
Q*c***%%f-224CCC%%f-44999:	! !s   C""C+c           	      (    | g dg dg dg dg dg dd      }t        j                  d	      5  |j                         }d d d        d
d
dd
ddd}|j                         D ]}  \  }}j	                  |      }|j
                  d
k(  sJ t        |j
                  t              sJ |j                         dk(  sJ |j                  d
k(  sJ |j                  d
   |k(  r}J  j	                  d      j                  d   dk(  sJ y # 1 sw Y   xY w)Nr   r   r   )r   r       r   )	   
      )TFT)r    c)r   r   rC   defr(   r)   r   r         r   rC   r   @   )r-   r.   r/   itemsr1   r2   r3   r4   r5   r6   dtype)r   r   r8   r7   r:   kindcolXs          r   test_mixed_dtypesrN   0   s   	 $	
	
B 
	#	#-	8 ! !
 AAABR@G %%%f-!###$//3///yy{a{{azz!}$$$% !!#&,,Q/2555!! !s   DDc                 ,    | ddt         j                  dgi      }t        j                  d      5  |j	                         }d d d        j                  d      }|j                  dk(  sJ t        |j                  t              sJ y # 1 sw Y   HxY w)Nr   g      ?g       @r(   r)   r   )	mathnanr-   r.   r/   r1   r2   r3   r4   r   r   r8   rM   s       r   test_na_floatrS   N   s    	sS$((C01	2B		#	#-	8 ! !!!#&D??adoos+++	! !s   B

Bc                 ,    | dg di      }t        j                  d      5  |j                         }d d d        j                  d      }t	        j
                  t        d      5  |j                   d d d        y # 1 sw Y   KxY w# 1 sw Y   y xY w)Nr   r=   r(   r)   z.*categorical.*)r-   r.   r/   r1   pytestraises	TypeErrordescribe_categoricalrR   s       r   test_noncategoricalrY   W   s    	sI&	'B		#	#-	8 ! !!!#&D	y(9	: "!!" "! !" "s   A>(B
>B
Bc                      | dg did      }t        j                  d      5  |j                         j                  d      }d d d        j                  }t        |d   t              sJ t        |d   t              sJ y # 1 sw Y   @xY w)	Nweekday)	MonTuer\   Wedr\   ThuFriSatSunT)r
   r(   r)   
is_orderedis_dictionary)r-   r.   r/   r1   rX   r3   bool)r   r   rM   categoricals       r   test_categoricalrg   `   s    		ST
B
 
	#	#-	8 @!44Y?@++Kk,/666k/2D999	@ @s    BBc                     | g dg dg dd      }t        j                  d      5  |j                         }d d d        j                         dk(  sJ |j	                         dk(  sJ |j                         dk(  sJ t        |j                               g dk(  sJ t        |j                  d	      j                               t        |j                  d
      j                               k(  sJ y # 1 sw Y   xY w)N)TTF)r   r   r   r   )xyzr(   r)   r   r   )r   r   )ri   rk   )
r-   r.   r/   num_columnsnum_rows
num_chunksr+   column_namesselect_columnsselect_columns_by_name)r   r   r8   s      r   test_dataframerr   m   s    	!	8IJ
B 
	#	#-	8 ! ! ??!!!<<>Q>>q     "#666""6*779:d"":.;;=?   ! !s   C55C>r5   n_chunks))r@   r   )   r   )rt   r>   c                 4    |dt        t        |             i      }t        j                  d      5  |j	                         }d d d        t        j                  |            }t        |      |k(  sJ t        d |D              | k(  sJ y # 1 sw Y   KxY w)Nri   r(   r)   c              3   <   K   | ]  }|j                           y wN)rm   .0chunks     r   	<genexpr>z%test_df_get_chunks.<locals>.<genexpr>   s     4Eu~~4   )r+   ranger-   r.   r/   
get_chunksr0   sumr5   rs   r   r   r8   chunkss         r   test_df_get_chunksr   }   s    	sDt-.	/B		#	#-	8 ! !#..*+Fv;("""4V44<<<	! !s   BBc                 R    |dt        t        |             i      }t        j                  d      5  |j	                         }d d d        t        j                  d      j                  |            }t        |      |k(  sJ t        d |D              | k(  sJ y # 1 sw Y   ZxY w)Nri   r(   r)   r   c              3   <   K   | ]  }|j                           y wrw   )r5   rx   s     r   r{   z)test_column_get_chunks.<locals>.<genexpr>   s     0uzz|0r|   )	r+   r}   r-   r.   r/   
get_columnr~   r0   r   r   s         r   test_column_get_chunksr      s    	sDt-.	/B		#	#-	8 ! !#..#..x89Fv;("""000D888	! !s   BB&c                     | ddgddgd      }t        j                  d      5  |j                         }d d d        j                         D ],  }|j	                         dk(  sJ |j                         dk(  r,J  |j                  d      j                  d   dk(  sJ |j                  d      j                  d   dk(  sJ y # 1 sw Y   xY w)	Nr   r   r   r   r   r(   r)   r   )r-   r.   r/   get_columnsr5   rn   r   rK   rR   s       r   test_get_columnsr      s    	QF#s4	5B		#	#-	8 ! !! &yy{a A%%%&
 >>!""1%***>>!""1%***! !s   CCc                    g d} | d|i      }t        j                  d      5  |j                         }d d d        j                  d      }|j	                         }|d   \  }}|j
                  dkD  sJ |j                  dk7  sJ |j                         \  }}	|d   dk(  sJ |dk(  r|d   }
t        j                  t        j                  t        j                  t        j                  d|
   }t        |      D ]C  \  }}|j                  |j                  ||
d	z  z  z         j                  }||k(  r:J d
| d        y y # 1 sw Y   xY w)N)r   r   r   r(   r)   r   datar   )          rI   r   zBuffer at index z	 mismatch)r-   r.   r/   r   get_buffersbufsizeptr__dlpack_device__ctypesc_int8c_int16c_int32c_int64	enumeratefrom_addressvalue)r   arrr   r8   rM   bufXdataBuf	dataDtypedevice_bitwidthctypeidxtruthvals                  r   test_bufferr      sZ   
C	sCj	!B		#	#-	8 ! !>>!DDfGY??Q;;!))+IFA Q<1{Q<}}	

  $C. 	CJC$$W[[3(a-3H%HIOOC%<B#3C5	!BB<	C ! !s   EE)__doc__r   rP   rU   pandasr   pandas._testing_testingr-   fixturer   markparametrizer;   rN   rS   rY   rg   rr   r   r   r   r   r   r   r   <module>r      s  
        enE5>2$56.
 	/  ::6<,"
:  &*-/JK= L= &*-/JK9 L9
+Cr   