o
    �¨Êh  ã                
   @   s*  d dl Zd dlZd dlZd dlmZ ej 	d¡Z
e d¡Zd dlmZ dd„ ejD ƒZedd„ ejD ƒ7 Zeejg d¢d	d
�g7 Zejedd„ eD ƒd�dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejdd„ ƒZdd„ Zej de d ¡e e d!¡e d"¡g¡g¡d#d$„ ƒZ d%d&„ Z!dS )'é    Nz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningÚpyarrow)Úpyarrow_array_to_numpy_and_maskc                 C   ó   g | ]}t jg d ¢|d�‘qS ))é   é   é   N©Údtype©ÚpdÚarray©Ú.0r	   © r   ú^/var/www/html/env/lib/python3.10/site-packages/pandas/tests/arrays/masked/test_arrow_compat.pyÚ
<listcomp>   ó    r   c                 C   r   ))gš™™™™™¹?gš™™™™™É?g333333Ó?Nr   r
   r   r   r   r   r      r   )TFTNÚbooleanr   c                 C   s   g | ]}|j j‘qS r   )r	   Úname)r   Úar   r   r   r      s    )ÚparamsÚidsc                 C   s   | j S )zi
    Fixture returning parametrized array from given dtype, including integer,
    float and boolean
    )Úparam)Úrequestr   r   r   Údata   s   r   c                 C   s>   t  | ¡}t j| jtd d�t  | jj¡d�}| |¡sJ ‚d S )N)Úna_value©Útype)Úpar   Úto_numpyÚobjectÚfrom_numpy_dtyper	   Únumpy_dtypeÚequals)r   ÚarrÚexpectedr   r   r   Útest_arrow_array   s   
þr&   c                 C   s`   t  d| i¡}t |¡}| d¡jt| jjƒksJ ‚| 	¡ }|d j| jks(J ‚t
 ||¡ d S )Nr   )r   Ú	DataFramer   ÚtableÚfieldr   Ústrr	   r"   Ú	to_pandasÚtmÚassert_frame_equal©r   Údfr(   Úresultr   r   r   Útest_arrow_roundtrip&   s   
r1   c            
      C   sÆ   dd„ } t jg d¢t  ¡ d�}t jg d¢t  ¡ d�}t jg d¢t  ¡ d�}t j |||gg d¢¡}|j| d�}tj	g d¢d	d
�}tj	g d¢dd
�}tj	g d¢dd
�}t 
|||dœ¡}	t ||	¡ d S )Nc                 S   s,   t j | ¡r
t ¡ S t j | ¡rt ¡ S d S )N)r   ÚtypesÚ
is_booleanr   ÚBooleanDtypeÚ
is_integerÚ
Int64Dtype)Ú
arrow_typer   r   r   Útypes_mapper1   s
   ÿz<test_dataframe_from_arrow_types_mapper.<locals>.types_mapper)TNFr   )r   Nr   )éÿÿÿÿr   é   )ÚboolsÚintsÚ
small_ints)r8   r   r   ÚInt64)r   r   Úbool_Úint64Úint8ÚRecordBatchÚfrom_arraysr+   r   ÚSeriesr'   r,   r-   )
r8   Úbools_arrayÚ
ints_arrayÚsmall_ints_arrayÚrecord_batchr0   r;   r<   r=   r%   r   r   r   Ú&test_dataframe_from_arrow_types_mapper0   s   ÿrI   c                 C   sŒ   t  d| dd… i¡}t |¡}| d¡jt| jjƒksJ ‚tjtj	g | d¡jd�g|j
d�}| ¡ }|d j| jks>J ‚t ||¡ d S )Nr   r   r   )Úschema)r   r'   r   r(   r)   r   r*   r	   r"   Úchunked_arrayrJ   r+   r,   r-   r.   r   r   r   Ú test_arrow_load_from_zero_chunksE   s   
ÿrL   c                  C   sB   t  ¡ } |  tjg d¢dd�¡}t jg d¢dd�}t ||¡ d S )N)r   r   r   é   Nr@   r   ÚUInt32r   )r   ÚUInt32DtypeÚ__from_arrow__r   r   r,   Úassert_extension_array_equal)r	   r0   r%   r   r   r   Útest_arrow_from_arrow_uintS   s   rR   c                 C   s˜   t  d| i¡}t |¡}| dd ¡ ¡ }|jdd … jdd�}t 	||¡ | 
| d ¡}t |¡}| dd ¡ ¡ }|jdd … jdd�}t 	||¡ d S )Nr   r   T)Údropr   )r   r'   r   r(   Úslicer+   ÚilocÚreset_indexr,   r-   Úfillna)r   r/   r(   r0   r%   Údf2r   r   r   Útest_arrow_sliced^   s   

rY   c                 C   sR   t  | ¡}t |¡}tjg d¢|d�}t jg d¢|d�}t  g d¢¡}||||fS )zt
    Fixture returning actual and expected dtype, pandas and numpy arrays and
    mask from a given numpy dtype
    )r   r   r   Nr   )r   r   r   r   )TTTF)Únpr	   r   r!   r   )Úany_real_numpy_dtypeÚnp_dtypeÚpa_typeÚpa_arrayÚnp_expectedÚmask_expectedr   r   r   Únp_dtype_to_arrayso   s   

ra   c                 C   s¼  | \}}}}t ||ƒ\}}t |dd… |¡ t ||¡ | ¡ d }| ¡ d }| ¡ d  ¡ }	t |	d ¡}
tjj|j	t
|ƒ||
g|jd�}| ¡  t ||ƒ\}}t |dd… |¡ t ||¡ d|j	jd  }t ||	 ¡}t d¡}tjj|j	t
|ƒ||g|jd d�}| ¡  t ||ƒ\}}t |dd… |¡ t ||¡ tjg |d	�}tjg tjd	�}tjj|j	d||g|jd�}| ¡  t ||ƒ\}}t |dd… |¡ t ||¡ dS )
a&  
    Test conversion from pyarrow array to numpy array.

    Modifies the pyarrow buffer to contain padding and offset, which are
    considered valid buffers by pyarrow.

    Also tests empty pyarrow arrays with non empty buffers.
    See https://github.com/pandas-dev/pandas/issues/40896
    Nr   r   r   ó    )r   ÚlengthÚbuffersÚoffseté   ó   r   )r   r,   Úassert_numpy_array_equalrd   Ú
to_pybytesr   Ú	py_bufferÚArrayÚfrom_buffersr   Úlenre   ÚvalidateÚ	bit_widthrZ   r   r?   )ra   r\   r^   r_   r`   r   ÚmaskÚmask_bufferÚdata_bufferÚdata_buffer_bytesÚdata_buffer_trailÚpa_array_trailre   Údata_buffer_offsetÚmask_buffer_offsetÚpa_array_offsetÚnp_expected_emptyÚmask_expected_emptyr   r   r   Ú$test_pyarrow_array_to_numpy_and_mask�   sV   
ü
üür{   r$   é
   rM   é   c                 C   s0   | j  |¡}| ¡  ¡ sJ ‚t|ƒdksJ ‚d S )Nr|   )r	   rP   ÚisnaÚallrm   )r   r$   Úresr   r   r   Útest_from_arrow_nullÀ   s   r�   c                 C   sP   t  | ¡ d¡}tjtd d�� | j |¡ W d   ƒ d S 1 s!w   Y  d S )NÚstring)Úmatch)r   r   ÚcastÚpytestÚraisesÚ	TypeErrorr	   rP   )r   r$   r   r   r   Útest_from_arrow_type_errorÉ   s   "ýrˆ   )"ÚnumpyrZ   r…   Úpandasr   Úpandas._testingÚ_testingr,   ÚmarkÚfilterwarningsÚ
pytestmarkÚimportorskipr   Ú%pandas.core.arrays.arrow._arrow_utilsr   ÚALL_INT_EA_DTYPESÚarraysÚFLOAT_EA_DTYPESr   Úfixturer   r&   r1   rI   rL   rR   rY   ra   r{   ÚparametrizeÚnullsrK   r�   rˆ   r   r   r   r   Ú<module>   s8    ÿ

	

?$ÿ
